#0018: Creating and utilising QR Codes

#0018: Creating and utilising QR Codes

image of a QR code

What is a QR code?

QR codes are a type of barcode. Barcodes are a visual representation of digital (or binary) information. They are designed to be easily understandable by machines. Barcodes enable machines to do useful operations that involve interacting with the physical objects, that the barcodes are placed on. Such as sorting or counting large volumes of items accurately. For example, with packages at a mail depot, or product inventory at an automated warehouse or factory.

A QR code (or Quick Response Code), is a type of 2 dimensional barcode, otherwise known as a matrix barcode. All this means is that it represents it’s binary information visually across two axis (x and y). It does this by plotting black (1) and white (0) squares on a grid. Matrix barcodes are an evolution on the iconic one dimensional barcodes; which represent their binary information in a single array of black lines and white spaces (i.e. columns), that denote their ones and zeros respectively.

It should be noted that there are numerous different types of barcodes (both 1D and 2D) in use today. Each one is specialised to their specific applications. These specialisations manifest themselves with variations in visual design (e.g. with markers for orienting scanners with different protocols); barcode size, reflecting how much data they need to represent/encode; and data encoding ability; i.e. what type of data the barcode image represents (typically: numbers, or ASCII symbols).

The most obvious difference between one dimensional (array) and two dimensional (matrix) barcodes, is the addition of a Y dimension of information. This addition allows for a greater density of information to be stored, however it also requires more sophisticated tooling to actually read the data from the barcodes themselves. The most notable hardware difference in this regard is that one dimensional barcodes use a simple laser line scanner, whereas matrix barcodes require a camera module. Because of this, you typically can not read any matrix barcodes with hardware designed for 1D barcodes, however in many cases (providing that the software allows for it), you can use a matrix barcode scanner (e.g. smart phone) to read information from 1D barcodes.

Additionally, I make assumption that on a barcode: black denotes a one in binary and white a zero. Whereas in reality, it really doesn’t matter. This is because the interpretation of the barcode is all up to the protocol standard that it is using. For example with the case of a UPC-A type barcode, where it uses a 7 bit array to denote numbers. Different value bit arrays can symbolise the same (base 10) number depending on it’s location on the barcode.

image of a UPC-A barcode
UPC-A barcode image taken from wikipedia.org
table taken from wikipedia.org
Example of a 1D barcode in use as store’s inventory identifier

Consumer uses for QR Codes

I’ll limit this discussion to consumer use cases and applications because industrial applications are rather dry. They use QR codes in the same way they use other barcodes. Which is to orientate machines that operate with and around physical goods. This could include use cases such as at an Amazon sorting depot, barcodes are used to inform the sorting machines of what goods are in what shelves.

Where as within the consumer space; most QR codes in the wild, are simply used as a means of storing website links and affiliate information. These are designed to allow people to simply scan the code out of a magazine, business card, coupon, or what-have-you; in order to very quickly load the website hyperlink and/or fill a virtual document.

For example, a QR code at a public WIFI access point will have all the data necessary (link to login page, SSID, password) to allow the scanning smartphone to access their network. Likewise a QR code on a coupon will link to the retailer’s online store page and pass any promotional offers associated with that coupon automatically to it’s e-shop.

QR codes, at least when dealing within the consumer space, are predominantly a means of convenience. They reduce the friction encountered when user’s operate within virtual spaces. Friction such as inputting long arbitrary names or numbers (such as a WIFI network’s SSID or password); or website domain names, where a typo could expose the user to a potentially malicious imitator website.

The friction is reduced because the process of scanning a code with a modern smartphone is far easier, than inputting the data manually using (most likely) a touch keyboard into that same smartphone. Another benefit is the probability of user error (such as mistyping a password or domain name) is eliminated. This is done by automating the process of data entry and bypassing the user in that work flow. That’s what I believe constitutes the vast majority of useful applications of QR codes in the consumer space, at least this is the case when talking strictly about static QR codes.

Additionally. The Wikipedia article for QR codes list many different (specific) use cases for them in the the consumer space; however in my opinion they all boil down to the two things I mentioned earlier: following links and filling in virtual documents.

Anatomy of QR codes

The smallest unit of information on a QR code is referred to as a module. A module is a single square that is coloured either white or black. For example a version 1 QR code is made up of a 21 by 21 module grid, totalling 441 individual modules. If you were to count all the chequered squares along either axis, it will add up to 21.

Look at the below two examples, both of these QR codes are identical Version 1 QR codes. They both have the same 441 distinct modules on a 21 x 21 grid. The only difference is the actual image size. This should illustrate that (within reason) the actual pixel (or print) size of the modules doesn’t matter with QR codes. As long as the scanning devices’ cameras can fit the entire code structure within frame and focus.

Bash instructions:

qrencode -o qrc_V1_small.png -s 3 'ECC'
qrencode -o qrc_V1_large.png -s 6 'ECC'

A QR codes’ modules are organised into several structures. These include: three position markers, several alignment markers (number varies with version/size), a version information zone, a format information zone, a timing zone, an area for data and error correction keys, and finally a blank quiet zone to denote the border of a QR code.

image taken from wikipedia.org

QR code size specification

QR codes are rather versatile, they have the ability to encode: ASCII symbols (letters and numbers), media (images, sound, and video), as well as even executable programs (compiled binaries). However, although they technically have this capability, it is severely hampered by the size limitations of the QR code standard.

At the time of writing, the largest viable QR code that can be created is the ‘Version 40’ variant. QR code Version 40 can encode up to: 7089 bytes of pure numerics, 4296 bytes of alphanumerics, 2953 bytes of miscellaneous binary (e.g. media), or 1817 bytes of Japanese Kanji characters. This is done using the lowest value (level L) of error correction, thus leaving more space for actual data. So these are the absolute maximum values.

Refer to file “QRcode_version_table” below for a full list of all version specifications.

image taken from wikipedia.org

Test case of numerical barcode capacity

This was an interesting one, because although the version 40 QR code specification states that I could create a numerical QR code with a capacity of 7089 bytes. In actuality the maximum amount of data that I managed to fit into a QR code was 7080 bytes. I honestly don’t know what to make of that. The ECC (level L) was supposed to be factored into the 7089 max value, i.e that is the maximum data storage in addition to the space that the error correction takes up. So it can’t be what’s limiting me from the max value. As to what is happening, I’m not sure. It could be anything, including a limitation of the program I used to create these codes (qrencode), or it could be some unknown setting, text file associated metadata, or even some unnoticed human error in play. Hence I will include the input files I used here so that you can try it out yourself, and see where I messed up.

Bash instructions:

qrencode -r pi_decimals_7081.txt -o qrc_pi_7081.png
Failed to encode the input data: Input data too large

qrencode -r pi_decimals_7080.txt -o qrc_pi_7080.png
Successfully compiled QR code containing 7080 bytes of pure numbers
According to Xed, this file weighs 7080 bytes.

QR code Error Correction Capability

QR codes have a built in Error Correction Capability (ECC). They use the Reed-soloman error correction codes in order to facilitate a certain level of data redundancy. This enables QR codes to be readable even after they have sustained damage. Such as by getting scratched or being partially obscured by grime. This error correction facility comes in four levels: L, M, Q, and H. The error correction of each level is expressed as a percentage of the total data that can be lost whilst maintaining the QR codes readability.

This is as follows:

  • L has up to a 7% ECC
  • M has up to a 15% ECC
  • Q has up to a 25% ECC
  • H has up to a 30% ECC

Generally speaking, the error correction capability of a QR code isn’t free. The higher levels take up more of the QR code’s finite available space, space that could otherwise be used to encode more of the actual substantive data itself. This trade off between useable storage space and data read reliability, means that QR codes with higher ECC tend to be used in environments where code damage is more likely; or in applications where the printed QR code itself is going to in active operation for a longer time period. Such being attached to warehouse racking to identify the specific shelf location and product contents to an automated sorter machine.

image taken from archive.org – qrcode.com page

How to spot the ECC level on a QR code

To work out what type of ECC level set on a QR code, look towards the “format information” zone to the right of the lower left position marker. Immediately after the single column of blank (white) modules of the position marker, at the bottom of the QR code and the module just above it. These two modules display what level of ECC is employed within the QR code.

Bash instructions:

qrencode -l L -o qrc_ECC_L.png 'ECC'
qrencode -l M -o qrc_ECC_M.png 'ECC'
qrencode -l Q -o qrc_ECC_Q.png 'ECC'
qrencode -l H -o qre_ECC_H.png 'ECC'

zbarimg *.png

Using ECC to incorporate logos into QR codes

When I looked into how people actually created the fancier QR codes; the ones’ that incorporate graphics such as text and logos. I was genuinely surprised at the crudity of the methodology. I thought that it may involve something akin to passing arguments to the QR code generator to re-route the data sectors around the graphic. Nope. It’s actually laughably simple. If you wish to incorporate graphics into your QR code, just crank up the ECC to max. Output the QR code. Then slap that graphic on top the QR code using some graphics manipulation software. In this case GIMP. Done. I mean it does the job. I just don’t like the idea of purposefully damaging data integrity.

Look at the below examples. Both of these QR codes hold the same data. This being a link to this website’s homepage. The size disparity between these two is caused by the additional error correction code added to the level H QR code. It caused it to jump up a couple of versions. I’m guessing that since my logo covers more than 7% of each of the QR codes, this is the reason why the level L QR code is no longer functional, whereas the level H QR code continues to function after the addition of the logo due to the logo covering less than the 30% of it’s maximum error correction capacity. This methodology seems rather crude, but it works.

Example of a real QR code that incorporates a logo

Encoding and decoding QR codes

There are numerous ways to generate your own QR codes. I’ll just mention a few to give you an idea of where to start.

Firstly, I should mention that there are paid services that allow customers to get custom QR codes. This includes things like “dynamic” QR codes, that can supposedly keep a tally of the number of times they have been scanned. However if you aren’t using them for professional applications. I generally wouldn’t recommend using paid services like these. This is a tinkerer’s blog after all. That being said, I mention them here just to make you aware of their existence.

All the tools that I mention from this point are free to use and readily available. If you are using a Linux based operating system, or virtual machine, or use bash in Windows. I recommend downloading and using two programs: “qrencode” and “zbar-tools”. Both are available in the Ubuntu main repository. This is actually what I primarily used to create and test all the codes in this article.

The zbar-tools toolkit comes with two relevant programs. zbarimg and zbarcam. zbarimg is used to scan local images of QR codes and can output that data either to standard output (usually the shell), or piped into a file. zbarcam has similar functionality, except it can use the computer’s camera to capture a QR code.

Alternatively, for quick QR code generation you could use an online website. I don’t want to recommend any for liability reasons, as there are lots of random websites that can do this. What I found interesting though is that the search engine duckduckgo.com actually can generate QR codes as well. I came across it rather by accident, as it returned QR codes with the search term data within it.

To use DDG to create a QR code, just type in “qrcode” followed by a space and then whatever textual data you want in it. I find this method rather novel, and probably good for simple quick and dirty codes. However it lacks the precision of functionality that a program like qrencode gives you. Such as the ability to specify the module size, and ECC level of the generated QR code; qrencode does this by passing arguments to the program.

TLDR

Tools to create QR codes

  • Linux: qrencode
  • websites: duckduckgo.com, etcetera
  • paid services for business including dynamic QR codes

Tools to decode/scan QR codes

  • android phone apps
  • (zbar-tools) zbarimg & zbarwebcam

Encoding and decoding binary QR codes

To encode a file (such as an image) into a QR code, you need to pass an additional option to qrencode. Use the -8 argument to specify 8 bit mode. You also need to use the -r option to specify a file input.

qrencode -8 -r input_image.png -o output_qrcode.png

To decode a QR code image of a binary into a file. You have to pass the below options to zbarimg, to allow it to know that it is dealing with a binary file. Additionally you then need to pass the output from zbarimg into a file. Otherwise it’ll just output the data into standard output (i.e. the shell itself).

zbarimg --raw --oneshot -Sbinary qr_code.png > output_file.png

One thing to note. Versions of zbarimg (zbar-tools) older than version zbar-0.23.1 do not have the capability to decode binary files. Additionally, at the time of writing the version of zbar within the Ubuntu repository was zbar-0.23; an older version without the capacity to decode binaries.

Alternatively decoding a binary QR code without specifying the output format, or without piping the contents into a file; instead just letting it output into the shell: will cast the contents as ASCII text. Instead of a file it will output a string of nonsense characters. However the first couple of legible characters should consist of file metadata that can tell you what format the binary data is in. The below example is the same QR code as above but outputted as ASCII rather than as a binary.

QR-Code:‰PNG

\00\00\00
IHDR\00\00\00Œ\00\00\00Œ\00\00\00!¢Öi\00\00IDATxÚíݱmƒ@†á8rÏ\00´i#s¤af`7™Ã‹¸e\006Hé”|`r<oé\ù^}÷c[>õ}ÿ‚}ójHBÎNJ¢Xã?5M“ÙÞµm»øwÿt•‘$u‡´uZîýíclõõö9»f–ªª2ÛÄ»v;¦÷$IÝa¥Óݑ©ëzvÍårIؐ1½'Iêê.§“áDïI’ºƒº;HïI’ºI$$DHI$$’@H"	$$’@H"	$oéúE’7ãK’ºCuÞe>—ϵÍmïùLª$©;ü—ÓÝfI‡$‘’HI ‰$’HIG%Ù+³^¼ÈžTw8%IÝauZ®ë:»yGY–IzO’ÔH"	$aûa6œd I$!ïº3Ì®w	$u’HI0ÌJH‚aÖ0uGHINw†YIIêÎ0k˜I$$’`˜…$‘ìaV’ÔH"	$Á0+I 	†YÃ,ÔH"	$‘’@I 	$‘„58ö™OßýÞ/[¿ÁeI’¤gh:Ã5cëcþš$Iâ®aO“4ñåb©¾cëh,ÛRIzô¶AÂ\“³ Éé.[¾¯.ñw¦×ÿüéJӒ$IÒîó”j½;’4Ž‰59˶T’Á‘‚Sß÷wEa_žÈЈ$©;¬Tw$”#_{G}¨õ—´\00\00\00\00IEND®B`‚

Closing thoughts

QR codes are basically ubiquitous today. They are present everywhere. And applicable in many use cases ranging from anything; from storing simple web links, to gaming uses such as markers for augmented reality. I recently found a tiny one that was printed into the underside of my kettle. Why is it there? Just because. The point is that they are everywhere.

Additionally, the technology is exceptionally accessible. Having a surprisingly small learning curve. This coupled with the fact that quality creation tools (like qrencode) are freely available, means that if you for whatever reason would like to use a QR code within your work; there is little reason not to do so.

If I am perfectly honest however. I personally don’t see much actual utility for me other than inserting a QR code linking to my website, or email within a business card. Perhaps, even in printed articles – as a means of linking in additional online resources. It’ll certainly have a lower level of friction, than printed hyperlinks have.

If I’m honest. The main real appeal of this technology to me is the novelty of storing binary information within a printable medium. The fact that you can encode an actual binary (so long as it is smaller than 2.9kb) into a paper medium, is wondrous. Check the links below for a Youtube video of a person who encoded an entire executable game into a static QR code. Not a web link to game. The game itself. Imagine storing actual games, into a book. Tiny games, but still. Cool.

Anyway, happy QR coding. Thank you for reading.

Some fun

Links, references, and further reading

https://www.youtube.com/watch?v=ExwqNreocpg

Scan Barcode QR Code From Webcam & Image File in Linux

The purpose of QR Codes

QR Codes basics

https://en.wikipedia.org/wiki/QR_code#storage

https://en.wikipedia.org/wiki/Binary_number

http://qrcode.meetheed.com/question14.php?s=s

https://www.linux-magazine.com/Online/Features/Generating-QR-Codes-in-Linux

https://www.binaryhexconverter.com/ascii-text-to-binary-converter

https://en.wikipedia.org/wiki/EAN-8

https://en.wikipedia.org/wiki/Universal_Product_Code#Check_digit_calculation

https://en.wikipedia.org/wiki/Barcode#Symbologies

https://en.wikipedia.org/wiki/Binary_number

How To Convert Images Into ASCII Format In Linux

http://www.qrcode.com/

https://web.archive.org/web/20130127052927/

http://www.qrcode.com/en/qrgene2.html

https://www.thonky.com/qr-code-tutorial/error-correction-table

https://scanova.io/blog/blog/2018/07/26/qr-code-error-correction/

https://www.qrcode-tiger.com/qr-code-error-correctionhttps://en.wikipedia.org/wiki/Reed%E2%80%93Solomon_error_correction

https://medium.com/@r00__/decoding-a-broken-qr-code-39fc3473a034

#0017: Creating a Toy Drag Racer Car

#0017: Creating a Toy Drag Racer Car

Prelude

This will be the first in a series of articles on making crap from garbage. I intend to build on this initial car, by adding more functionality and complexity down the line later. The purpose of this series of articles is to illustrate how accessible our hobby actually is. All you really need is access to information, basic tools, and most importantly: a little motivation and imagination.

Basic drag racer toy car.

As you can probably tell from the pictures; this toy car once had additional components that I removed for this write up. These included: 4 LED “””head-lights””” (2 white, 2 red); a jumper cable and switch, to allow the motor to be run using only one of the batteries at a time (for a slower speed); and additional wiring to allow the motor to run in reverse. Essentially whatever bollocks I felt like lazily sticking into the thing.

This should however illustrate that you can keep adding complexity to the basic frame work … Yeah, that’s why I reused the same haggard little tupperware container with the two unused switches: to make a point. It wasn’t abject laziness at all. Nah.

One could even keep adding complexity and replacing components until a simple drag racer can turn into a self steering robot. This could be done by using ultrasonic sensors, microcontrollers, and servo motors just as an example. However the basic framework is a good starting point.

Toy demonstration

Making the thing.

Tools and materials.

So what do you need to make this masterpiece? A soldering iron will help but twisted wire connections and electrical tape will do. Work with whatever you have on hand. I’ll just list out what I used.

Tooling:

  • soldering iron
  • heat gun
  • DC power supply
  • multimeter
  • precision knife

Consumables:

  • electrical tape
  • heat shrink
  • hot glue

Materials:

  • wires
  • tupperware box
  • gears and wheels kit
  • switches
  • AA battery holder
  • AA batteries
  • rubber-band (elastic band)
  • 3 volts DC motor

Build process.

Its largely self explanatory from looking at the pictures but I’ll give ya a quick write up if you insist on reading. Nerd. Anyway, get either a cheap wheels and gears kit (yes I am a hippo-crit) from an online store, or salvage wheels from broken toys if you have any, or use bottle caps even. You can even make decent wheels from either cardboard or by working random stiff plastic with a saw and a file.

Next, cut appropriate holes into the plastic box, sardine can, old butter tub, or whatever you’re calling a chassis. Then affix the motor into the chassis using hot-glue or tape. I wanted to use a belt driven system for no other reason than I wanted to use a belt driven system. So I used a couple of belt pulleys from the gear kit and a near dead elastic band as a drive belt. I know what you are thinking, and yes it is very unreliable.

If I were to redesign this for simplicity and reliably; I would just insert the motor directly into one of the rear wheels and power it that way. Better yet you can use two motors, one for each rear wheel. Anyway, next, throw in a switch, a useless fuse just for fun, and an occupied battery pack. Done. Enjoy.

The project is so simple it seems silly didactically going through every step of slapping it together. Just look at the pictures: yours should be like that but good. The point is to make it using the materials on hand. Improvise as a matter of course.

One thing that might be good to improvise on is by using a salvaged battery holder if you can not find one. I know not everyone has access to broken Poundland fairy lights. For example the motor here came from a cheap hand held fan. I could easily use it’s chassis moulded battery holder instead and just butcher it to fit. No worries.

To source the material I recommend a discount store like the aforementioned Poundland or the 99P shop. You could probably get all the materials for less than a fiver. And if you’re really on a budget, then I recommend the dumpster behind Poundland. Don’t ask me how I know.

Belt demonstration

Schematic

It’s not really necessary given the simplicity of the circuit. But I’ve included one never the less for the sake of completeness.

made with digikey.com/schemeit/

Circuit power use.

To satisfy some curiosity I decided to measure the power usage of the motor, and power delivery that the batteries can supply. I did it to give me an idea of how much power the batteries are able to provide, and how much of that available power the single motor uses. That way I’d know what’s limiting performance, should that become a concern. And it will once I decide to start adding components, such as additional motors.

Results:

Tested with a 6 Ampere max bench power supply against mismatched old batteries. Guess which performed better?

(BPS = Bench Power Supply)
BPS powered Motor (spinning freely): 3V @ 0.25A (0.75 W)
BPS powered Motor (jammed): 3V @ 2.71 (8.13 W)
Battery powered Motor (spinning freely) #1: 3V @ 0.18A (0.54 W)
Battery powered Motor (jammed) #1: 3V @ 2.02A (6.06 W)
Battery powered Motor (spinning freely) #2: 3V @ 0.29A (0.87 W)
Battery powered Motor (jammed) #2: 3V @ 0.70A (2.10 W)

My conclusion on the circuits power usage is that the junk batteries that I used for this application are not able to provide the maximum amount of current that the motor can use when spinning freely in the first test. And in the second test although the batteries performed nominally when free spinning, when the motor was jammed causing it to draw more current; the batteries failed to provide the needed current. So the batteries are the limiting factor here. Probably because they’re dying. From this slapdash test, I can tentatively conclude that if I wanted to add an additional motor, I’d also need to scale the power supply relatively … or use new batteries.

Really I should’ve tested it with two fresh 1.5 volt alkaline batteries as a control. Then I could’ve tested the motor, by adding an additional two fresh 1.5 volt batteries (in 3 volt series) parallel with the base two, to allow for a higher circuit current output without increasing voltage. That would’ve been a better test. But I took all the photos for this maybe two months prior to doing this write up on it; and I don’t feel like going back to it for something this minor. However, I will for the next article that uses this drag racer. This test was bad.

Closing thoughts.

Why make this thingy? (technical term)

I wanted to make a very basic bare-bones motorised toy car. The reason for this is that I think its a really good project to get a complete beginners feet wet in electronics, and more broadly in getting to actually making things in general. The scope of the project is small and its largely practical. There is very little in the way of actual measurements and maths. In addition, the tooling needed and materials used are basic and readily available, as they are salvaged cheap electronics and household sundries.

I think something like this is ideal for children especially since once they’re done, they end up with a toy they made themselves. Every time they play with it, they might get that little endorphin kick saying ‘I made that’ and before you know it — they’ve been bitten by the bug.

Another reason why a project like this is good is because unlike how many get a start in the general electronics hobby today – i.e. by purchasing kits and completing them. Creating something useful or of-value from junk promotes and develops a better skill-set then just putting together pre-made puzzles. Sure kits can develop people’s technical skills in doing so (like soldering), a familiarity for the various components involved, and even some trouble shooting and diagnostic abilities in order to get the thing that they put together actually working.

Usually though, in my experience once the kit is complete; be it an electronic dice, an AM radio, or what have you. It is done. At which point it is put down and forgotten. This is unless the person gets interested in one of the higher concepts the kit introduced them to; like in the case of how putting together a DIY radio kit can become a gateway to repairing radios or the ham radio hobby as a whole.

This is of course a good thing. However in general, purchasing kits has in my opinion limited returns (such as mentioned above), and can get overly consumeristic in nature. Buy the kit, make the kit, buy the next kit, make the next kit; and so forth. So what do you do when you don’t have the funds for the next kit, or have a child that becomes bored and thinks that’ll all this hobby has to offer.

Well that’s where one has to become inventive. Create your own kit. And from what? Whatever is around. Putting together machines of your own creation from junk develops imagination and creativity in people. It teaches them to see more than what an item is, instead it promotes seeing the parts it is made up of, and what it could become.

That old microwave the neighbour left out. Is actually not just worthless e-waste. It is actually a magneto, various high power resistors you can use as a resistive load in your experiments, and even a high voltage transformer that’s likely to get you killed. Obviously I am joking about the microwave, I am not advocating for inexperienced or immature people start with mains power electronics. Learn, but learn safely. I.e. Low voltage direct current devices.

Working with salvage also gives people very localised and consequently practical (read valuable) experience. This is because they’ll be working and tinkering with the local devices available to them. The same ones in their everyday environments, and in doing so they will gain insights into their workings. Insights that may lead them to modifying and repairing some of the same items for future fun and profit.

Note: I read over this, and even I can tell it’s pretty bloody preachy. I am not saying kits are bad, they are just another avenue for this hobby. Sometimes it’s nice to play with something that isn’t already broken. However I do think that (certainly basic) kits are transitionary. You make kits then you move on to fucking about with whatever takes your personal interest. And like I stated, kits are often a gateway drug to your chosen field.

Make no mistake what you are reading is the toned down version. The first draft was hard for even me to read without rolling my eyes in my skull. No need to thank me for sparing you that, but you are most welcome.

Thanks for reading.

#0016: Software recommendation: Firefox Monitor and haveibeenpwned?

#0016: Software recommendation: Firefox Monitor and haveibeenpwned?

https://monitor.firefox.com/

https://haveibeenpwned.com/

Preamble

In a bid to make more immediately useful content, I’d like to start recommending some of the various tools that I use. In this case it is an online service. Namely Mozilla’s Firefox Monitor; or more to the point, it is actually the website: haveibeenpwned.com (HIBP), which Firefox Monitor uses to enable it’s service.

What do they do?

In essence Firefox Monitor and HIBP are used to check whether or not an email address is associated with a recorded data-breach. Keyword: “recorded”. It does this by using a database of known breaches provided by haveibeenpwned.com.

The purpose of this service is to allow people to ascertain whether or not, an online account (and the user information there in) associated with the email address: has been compromised in a known data breach; and thus in need of immediate remedy. Things like: changing passwords, recovery phrases, and generally being aware that any potentially sensitive information associated with that account, such as: full name, mother’s maiden name, GPS location, education, birth date, telephone, city, school, or business information has now circulated within the hacker community.

Additionally, it helps to know which company is to blame for the spike in volume of spam and phishing emails, that will most certainly accompany said breach. I don’t know about yourself, but that’s something I’d certainly like to know.

Why is this service important?

It is my belief that every solution begins with awareness, the awareness of the problem. Only then can we move to better the situation. This tool gives you exactly that.

In my opinion, the main reason why I think this tool is important is because the companies involved in the data breaches themselves are loath to make their customers aware of them. Even though it is in their user’s best interests; it is not in the businesses best interests to advertise any breaches beyond the legally mandated/enforced minimum. Furthermore, who knows what that actually even is when dealing with global or multinational companies that operate over many legal jurisdictions. This is especially true when dealing with larger companies with entire legal teams at their disposal.

This service is important because (still just my opinion): companies in general tend to quietly patch any security vulnerabilities as they find them, and move on hoping no-one has noticed. This is especially true when there is no internally confirmed security breach.

Whenever a confirmed breach does happen, the first thing that the company responsible does is downplay the scope and severity of it. This may (and probably does) include: not even publicly reporting the breach until it is already made public elsewhere, often at a much later time. In many cases there is even resistance to acknowledge fault after the breach is made public. This is most likely a bid to exonerate themselves of any potential legal liabilities involved.

At the very least acknowledgement of fault could be seen as weakness. Weakness that will shake public confidence in the company and/or service. Therefore it is in their best interest to maintain the general illusion of control and/or competence. It’s corporate PR 101. It’s just a shame that the company and it’s users’ interests don’t align within this circumstance.

Why should people use these tools?

Both Mozilla Firefox Monitor and HIBP are free to use publicly available tools. Both tools come from reasonably trusted sources. Firefox Monitor is the product of an open-source community driven effort, giving it a certain level of transparency. And HIBP was developed by Troy Hunt, an authority on the topic of digital security. Even if you don’t know who Mr Hunt is (and I didn’t prior to this post), the fact that the Mozilla team decided to use his HIBP database for Firefox Monitor means that they are vouching for it.

More importantly, the tools themselves can assist an individual with regards to protecting their personal information online. They do this by allowing the individual that exact thing that I mentioned earlier: awareness. Awareness of whether or not that person’s email associated account information has been circulated, and which company is at fault for it.

For example: if you used the tool and because of it now know that, an account associated with your email with company X has been breached; and along with that breach your “security questions” were revealed. Then now you know to both remove, and not to use those particular security questions, with any future account … ever. As they are basically permanently compromised. Forewarned is forearmed.

taken from https://github.com/mozilla/blurts-server

Difference between Firefox Monitor and haveibeenpwned?

Firefox monitor is a very slimlined version of the HIBP tool that gives the lay user just what they need, without overwhelming or putting off said lay user. It is rather idiot proof; merely requiring user’s to input their emails and press enter. That’s it. Firefox monitor also has been bundled in with a few basic articles on good security protocol, that may be helpful to the average user. Common sense stuff a lot of it, but you know what they say about common sense.

Although Firefox is the simpler tool to use, it must be said that HIBP is a far more robust tool. And the one that I recommend. This is because in addition to searching email addresses, it allows searching via: passwords, and domain names. The website also allows users to browse a catalogue of breached websites without running a search. Extracts below.

Ever wondered how many accounts have been breached because they used the password “love”? Wonder no more. According to HIBP, its 356006 times.

I have also perused a nice little selection of companies from HIBP’s catalogue of known breaches that you may find interesting.

Personal experience with a data breach.

Just an aside if anyone is interested. From reading the above “Why is this service important?” section, you might have gotten the idea that I may be ever so slightly cynical about the companies involved in security breaches like these.

Frankly speaking, whenever data breaches do happen, I do not consider the corporations involved to be “victims” of cybercrime, as many others seem to do. It is a nauseating sentiment. One that condones bad behaviour. This is because it is my personal belief that the vase majority of the cases are due to one core thing: a dereliction of duty. Them failing in their duty to protect the data that they collected. Little more.

In addition to consuming the various news articles about data breaches over the years. Ones that had the general themes of corporate incompetence. Like for example: employees carrying around sensitive data on unencrypted thumb-drives, only to lose them on the train. I also have a few examples of companies that leaked my very own personal information. All of this has coloured my opinions thus.

The most memorable is the online virtual tabletop gaming website roll20.net. The thing that rubbed me the wrong way about them is that at no point during the process did they ever take any accountability for allowing it to happen. They did eventually outline what information was taken, but they never offered an apology for their lax in security. Instead they covered it up with boiler plate (legal friendly) corporate speak.

Example: “The investigation identified several possible vectors of attack that have since been remedied. Best practices at Roll20 for communications and credential cycling have been updated, with several code library updates completed and more in development.” Assuming that is indeed true, the same could literally be said by any company involved in a similar data breach – just change the names.

Although from what I understand by reading the article that they linked in their post, technically (purely technically) this appears as though it’s not their fault. But rather it was due to the underlying technology that they used. At least that is the implication presented. I’d argue that they still made the decision to use said tech, and thus vouched for it by doing so. Making them responsible, at least tangentially. At least enough for a simple sorry. The closest their customers got to an apology was a “Frankly, this sucks.” Writing it in an official company blog post that they passed for a conclusive public report; authored by Jeffrey Lamb, the Data Protection Officer.

I remember thinking at the time that whoever was writing this was good at the bland formalities of corporate speak, but otherwise is (and excuse my French): a fucking dickhead. You have to keep in mind reader, that they only knew of their own data breach because of a third party report. One that was published months after the fact. The report was published in February of 2019, and the breach happened (according to Mr Lamb) sometime late 2018. No apology warranted, not even for missing the hack, until a third party told you about it months after the fact. They then go on write their conclusive report in august of 2019. So nearly a year, between data breach and the final public debrief, where they outline exactly what data was exposed. I call that incompetence. “Data Protection Officer” more like resident salary sucker.

The ultimate lack of accountability is what really rubbed me up the wrong way here. And why would they be accountable, there is little in the way of consequence it seems for these messes. There are even examples of customers defending roll20 in the comments, referring to them as “victims” of cybercrime. They aren’t the victims here idiot, you are! I’ll include some choice examples of this for your entertainment. Its customers like that, that make businesses feels like they don’t have to be accountable either for their actions, or in this case general inaction with regards to proactively protecting customer data. Please read through the example comment thread.

You really can’t reason with people like that. They have too much emotional stock in a corporation to admit to themselves that they got screwed by it. There were even people actually praising roll20 for it’s meagre efforts. A sum total of 2 blog posts, some notice tweets/emails, and for patching a hole in their own boat. Thanks roll20, stellar job. Shame about all my cargo sinking to the seafloor for the bottom feeders to enjoy. I mean you only lost my full name, my IP address (so my physical location), my password, oh and some of my credit card data. Don’t worry about that roll20 (not like you would), that’s my problem. Fuck those types of customers. Wankers.

Moving on. Another example of a gormless entity losing my data is ffshrine.org. A final fantasy fan site that I registered with in 2010 I believe; and haven’t used that account since 2010. Ideally, they would have flagged the account as non-active and deleted it after a couple of years. But alas, instead they just kept whatever details I gave them for the five years until their 2015 data breach. Where they lost subscriber passwords and email addresses. No warning email post event, nothing. Radio silent. I had a similar experience with tumblr back in the day. Radio silent. No accountability. Are you sensing a theme here, dear reader?

Closing thoughts.

I have written far more here then I initially wanted to, so I will keep this summary short. Tools like haveibeenpwned and Firefox Monitor are things that you as an individual can use to help protect yourself in cyberspace. They can help you take proactive measures to safeguard your own data. They can also show you evidence that the large corporations really aren’t as professional or as infallible as they like to appear.

And that when, they make mistakes; mistakes such as losing your data. It is often you that has to bare the brunt of the repercussions, with little if any repercussions to them. Maybe they incur a temporary stock dip. But the fact of the matter is, they’ll recover from it. However whatever data you provided them for safe keeping, well that’s now permanently out there. Enjoy.

For example. To this day I still get phishing emails that say something like: “hey MY_FULL_NAME, YOUR_BANK has detected multiple login attempts using PASSWORD_FROM_FFSHRINE.ORG to login. We have frozen your account because we suspect fraudulent activity. Follow the obviously dodgy link provided and give us your security questions to fix this.” Although I can recognise a phishing scam when I see one, many technology illiterate users can not.

And make no mistake, the companies that were lax in their security. The one’s that have the attitude that breaches happen; are the exact ones to blame for the perpetuation of the black market information economy. An economy that preys on people; the real victims. The people who trusted these corporations with their data, thinking it in safe hands. Not the corporations themselves whose lack of diligence and general incompetence allowed for the data that they were trusted with to be exposed.

Jeez… that got a bit preachy towards the end. Didn’t it? Sorry about that. It’s just seeing companies fobbing off their responsibilities, and then seeing customers with Stockholm syndrome defending these same companies against criticism – really ruffles my feathers.

Anyway, thanks for reading.

References, links, further reading.

https://github.com/mozilla/blurts-server

https://monitor.firefox.com/

https://monitor.firefox.com/breaches

https://monitor.firefox.com/security-tips

https://haveibeenpwned.com/

https://haveibeenpwned.com/About

https://feeds.feedburner.com/HaveIBeenPwnedLatestBreaches

https://blog.roll20.net/post/182811484420/roll20-security-breach

https://blog.roll20.net/post/186963124325/conclusion-of-2018-data-breach-investigation

Hacker who stole 620 million records strikes again, stealing 127 million more

#0015: Device analysis of an unbranded LED dynamo torch

#0015: Device analysis of an unbranded LED dynamo torch

Preamble

It’s rather hard to provide a useful review of an unbranded product such as this. Since it has no brand, and no model to specify; we can only identify this particular device by it’s general appearance. Unfortunately this can be an issue when it comes to stating anything definitive about the product. This is due to the unregulated variations and derivatives on the market. In other words, just because two of these unbranded devices are outwardly identical, doesn’t necessarily mean that the components (or configuration there of) are also going to be the same. Heck, we don’t even know if any two different units were made by the same OEM (Original Equipment Manufacturer). Consequently, your mileage may (and probably will) vary if you pick up one of these dynamo torches. I can only show you what I have in front of me; and I have a sample size of two.

Device Demonstration

Device internals

Schematics

Torch A

made using https://www.digikey.com/schemeit/


Torch B

Key:

L1: 5 mmØ through-hole LED (white)
L2: 5 mmØ through-hole LED (white)
L3: 5 mmØ through-hole LED (white)
R1: 5.1 ohm resistor
S1: two-state toggle slide switch
V1: dynamo (AC source)
B1: [x3] AG10 / LR1130 button cell battery

Possible modification

  • rectifier and capacitor on the dynamo circuit

Key:

DB1: Diode Bridge
C1: capacitor

I think that perhaps some kind of rectifier followed by a capacitor on the dynamo circuit will provide the parallel LEDs with a more constant voltage. Allowing it to stay on with a constant light intensity for a little longer, at the cost of a few initial revs without any light output as the capacitor charges. Is it worth the effort? Not especially. It might just help prevent the sudden light dropout. I’ll need to test it out myself before I say anything definitive here.

As for the rectifier, I would recommend a full-bridge rectifier using four diodes for maximum efficiency. That is if there’s space for it. This is because this configuration inverts the AC negative voltage into positive, before passing it onto the smoothing capacitor. Alternatively, a single inline diode will simply cut the AC in half by passing only the positive voltage. It’ll do the job, but at the loss of the negative voltage of the AC. Although, this is lost anyway at the LEDs, since they’re diodes. With this use-case, I think we need all the efficiency we can get, and a full bridge rectifier may even make the device function a little better. Like I said it needs proper testing, that’s why I stated this as a “possible modification”, rather than my usual “recommended modification”.

EDIT (2021-02-04): On further thought, any benefits of rectifying the dynamo AC will probably be negligible. I believe this is the case due to the low voltage provided from the dynamo (approximately 2V AC) coupled with the forward voltage drop that will occur within the diodes themselves.

The example diodes I have (namely 1N5818) have a really small forward voltage drop of 0.45 volts at 1 ampere. Even this miniscule drop will have a notable effect on any resultant DC.

web link: https://www.bitsbox.co.uk/data/diodes/1N5818.pdf

Still I still think the idea of rectifying a dynamo’s AC to DC would be worth while if for no other reason then to make a generally more useful form of power. Unfortunately, for a dynamo of this output, it’s just not worth it.

Dynamo AC generation demonstration

Gear array and dynamo

A1: Spur rack: 24 mm w/ 11 teeth
B1: Spur gear: 8.5 mmØ w/ 10 teeth
B2: Spur gear: 41 mmØ w/ 81 teeth
C1: Spur gear: 7 mmØ w/ 12 teeth
C2: Latching spur gear: 2 pivoting teeth
D1: Internal spur gear: 26 mmØ (inner diameter) 32 mmØ (outer diameter)

(Please note: when two gears have the same gear letters, it means that the gears are connected.)

Dynamo:
24 mmØ toroidal (doughnut) magnet (with 4 Norths and 4 Souths)
coil consists of:

  • dynamo core (magnetic conductors)
  • a 920 cm length of 0.1 mmØ gauge copper wire
    (wrapped into a coil of ~276 revolutions)

Please forgive any inaccuracies in naming convention for the gears, this is the first time I have actually paid any attention to the subject of gears in general, and it appears to be a deeper subject than initially expected with quite the learning curve involved. The “latching spur gear” and “internal spur gear” are the ones where I hazard a guess as to what they might be called, this is because at the time of writing I was unable to find a named example of what I was looking at. It can be difficult to find something when one doesn’t know the keywords to search.

Gear system in action

Pushing force on the handle moves the spur rack against spur gear B1. B1 then rotates clockwise. This in turn rotates the conjoined spur gear B2 clockwise. B2 interfaces with spur gear C1, and rotates spur gear C1 counter-clockwise. Which in turn rotates it’s conjoined latching spur gear (counter-clockwise).

The swivel teeth within the latching spur gear are designed to lock into the teeth of the internal spur gear D1. Although this happens only when they rotate counter-clockwise within D1. In doing so they rotate D1 and it’s toroidal magnet. This rotation causes a flux in the local magnetic field. This is picked up by the magnetic metal of the “dynamo core” and transported via this core to the copper coil winding. Where it induces an alternating current that powers the LED lights.

Once the handle is fully pressed in, with the spur rack (A1) at the end of it’s track. The operator’s pressing force is removed. At which point the spring in the handle pushes the handle back out; and forces the spur rack to move back to it’s start position. In doing so it rotates spur gear B1 counter-clockwise this time, this rotation is passed on to spur gear B2. Which rotates spur gear C1 clockwise. This rotation is passed to the 2 tooth latching spur gear C2. Which in turn spins clockwise freely and allows the gear system to reset position. Then the process repeats as the operator pushes on the handle. And so on.

The device as a consumer product

Build quality

This is probably the cheapest dynamo torch on the market. If not in price, then certainly in build quality. The main body of the torch is made up of two separate mouldings that sandwich together. This configuration clips into the grey plastic ovoid that houses the LEDs, batteries, and the light guide/reflector. Add to this one or two (depending on version) small self tapping phillips screws to keep the device together.

The phillips screws for the housing are set into thin moulded standoffs that seem prone to either splitting at the screw thread or cracking at their base. The cracks on the base of these standoffs I believe are caused by the general mechanical stress incurred by the gear and spring system. Both in action: when the dynamo mechanism is being used, with the spring loaded handle being vigorously pumped back and forth; and at rest, because the spring that pushes the handle back out puts a constant stress on the gears that are set into these flimsy standoffs.

I have had these two torches in safe storage for a few years, I was surprised to find out that one of the two had broken it’s standoffs, well off. Considering my storage solution (think sealed plastic tub in a garage), this may have been caused if not exacerbated by temperature variations, in addition to the stress of having a coiled spring pushing against them. But basically, I put the thing away fixed, and found it broken. Considering that one of the use-cases the online retailers advertise this thing for is camping, I don’t think that the temperature swings of the mild british weather should have caused this.

Something positive. The internal components I generally have little problem with; from the LEDs, to the Dynamo, and nylon gears. They are all very inexpensive components, but there is nothing especially wrong with them. They are all basically fit for purpose. Even the dynamo, although unfortunately, it’s delicate hair thin wires extend out the dynamo coil and into the device proper: towards the switch and LEDs. This makes the device far more likely to suffer a breakdown, as these wires are far too thin and delicate to be used for general device circuitry. Especially when in the presence of an unshielded gear-system. Look at the pictures to compare the dynamo wire (~0.1 mmØ) to the LED (~0.4 mmØ) or switch (~0.5 mmØ) terminals to understand just how thin the dynamo coil wire is. Please note: inaccuracies in recorded measurements are due to the pictured calipers used … and me.

False advertisement claims

I have seen this torch (and it derivatives) in multiple online stores. I have also seen a lot of false advertising around this product across multiple vendors. Including Ebay, AliExpress and especially Amazon. This is predominantly due to the seller’s lifting the product descriptions from each other, in some cases they’re literal copy-pastes.

There are many claims on these store pages that made me chortle. These included: “High tech ultra bright LEDS” when referring to the 3 bottom market 5mmØ through-hole LEDs; or the sentence “perfect for outdoor use” when describing an electronic product that is about as watertight as the average kitchen sponge.

Since these claims made are subjective, you can’t say that they are technically wrong, because that’s just like your opinion man. These are (in my opinion man): just examples of product puffing or marketing wankery. Something that I honestly have come to expect at this point in my life. Whenever I go to buy something, I will inevitably have some to sit through at least some marketing bullshit, because apparently every single product ever made, is as great a sliced bread, and should get you as excited as the second coming of our lord and saviour. Or else there is clearly something wrong with you.

Moving on. Something else that I have come to expect, and let’s be honest here – enjoy: is Chinglish. And there are some great examples of this within these product descriptions. My favourite is “Works on a new technology of pressing handle with your hand.” Hey, it made me smile. Here’s another doozy for you: “LED torch adopt advanced technology of LEDs emitting level of 3 fluorescence tube”. What the actual fuck are they trying to say?! If internet scholars ever decrypt this product claim, you can probably safely bet that is it some form of bullshit.

Which nicely brings me to the real issue that I have with these product ads. It is the genuine examples of outright falsehoods. The main two claims that I have issue with, are: 1) That the dynamo action charges the batteries, and 2) That the product doesn’t include batteries in the first place.

For the first example I have an ebay advert that uses the keyword “charge” in it’s description and makes mention of the 3 disposable AG10 coin batteries that come in the unit. Although it doesn’t mention that they are single charge disposable units. Hence the assumption that the average consumer is likely to make is that the dynamo charges these batteries. Another amazon ads states the claims “No batteries required, Eco and rechargeable”, to make the customer think that it comes with some kind of componentry that either enables the device to charge without batteries (e.g. capacitors), or that the device comes with built-in rechargeable batteries.

Unfortunately neither are true. A cursory look at the above schematic for either unit A or B will show you that at no point does the dynamo charge the batteries. They are on two separate loops. Also, where is all the charging circuitry? The bridge rectifier, voltage regulator, and smoothing capacitors involved in converting the alternating current that the dynamo would produce into a fixed voltage direct current for the batteries. Additionally, even ignoring those facts: let’s say after reading this paragraph someone still isn’t convinced of my claim that the dynamo does in fact not charge the batteries; then why does this torch ship with disposable (non-rechargeable) alkaline AG10 coin batteries then? It’s because this claim is provably false.

Now onto the next false claim. This was the one that I took notice of initially, and actually inspired this rant. The claim of these torches not having a battery to begin with. The disproving evidence of this claim in some cases is in the bloody product description itself. I have even seen adverts that claim that it doesn’t have batteries, to then make the contradictory claim of a 15 minute running time at full charge.

Closing thoughts

I honestly never intended to talk this much about this budget torch. However the more I looked into the item the more I found to say. To sum it up for you: everything from the build quality, to the false claims: make this thing is absolute dreck.

I think the main reason as to why these types of products can make outlandish claims and still sell is because of their price. They are so inexpensive, that returning them may cost more in unreimbursed postage costs, than the refunded price of the product. For example: a torch costing approximately £2.50, will cost £3.10 (at time of writing) to return via a Royal Mail UK only “small parcel”. This is of course assuming that the customer bought the product from a UK distributor.

If it was bought from China, then a return is basically not financially viable. The international postage is only cheap one way; and that’s due to bulk export shipping from China. Consequently, I have had experiences with seller’s who have contacted me offering a full refund with no return if I removed a (well deserved) negative review I have given for the product. That’s likely the main reason why they have such high reviews (4/5 star average on amazon); because they buy off the negative ones; like mine.

As for my final word on the torches themselves: I think that they are basically designed to be factory fresh e-waste. They will go from the factory, to the seller, to the customer, and to the bin faster than should be acceptable. This due to their own shoddy nature and little else. They are a good testament to the saying: “you get what you pay for”. One could also use the saying “buy cheap, buy twice”, that is if a person actually intended to use these torches for their advertised use-cases. Good luck camping with this piece of hot shit in your back pocket.

Thank you for reading.

#0014: Tip for reinserting self-tapping screws into plastic housings

#0014: Tip for reinserting self-tapping screws into plastic housings

What is a “self-tapping” screw?

Whenever one removes screws from a device – especially a mass produced consumer grade device with a plastic housing; then chances are that the screws that were removed were “self-tapping” screws. As the name suggests, these are screws that are designed to cut their thread into the inner diameter of the plastic hole of the device housing that they are inserted into at the factory.

All self tapping screws have a few distinct qualities in common. These include: a relatively deep thread in order to cut into and grip the plastic, and a wide pitch between these threads in order to more effectively slide into the material. Additionally most self tapping screws tend to come to a sharpened point in order to to aid in aligning the screw as it is inserted into the hole.

So what’s the actual tip?

Well, when reinserting a self-tapping screw into it’s plastic receptacle. It is good practice to initially rotate the screw counter-clockwise (loosen) until you feel it pop or click into place. This process aligns the screw with the pre-existing thread, and in doing so means that when the screw is screwed in, it will slide into the already established thread and not cut a new thread over or across the old one. When aligned correctly, the screw should screw into the hole with very little resistance.

Why use this method?

The reason why this is important, is because repeated re-boring of the plastic hole will eventually strip it out of any threading. This is because each time a new thread is cut into the plastics it removes material; which in turn incrementally widens the diameter of the hole in the process. This can continue to the point that it can no longer effectively hold the original screw within it. Avoiding re-tapping the thread every time you reinsert the screw will minimise your damage footprint when repairing/working on the same devices repeatedly. Which is always good.

Video demonstration

Please note: although it may look like I am using force to reinsert the screw, I am not. It’s just the awkward angle and set up that may make it appear that way.

What to do with an already stripped or overlarge hole?

There are a few remedies to take if this advice is coming to late. The quick and dirty solution is to use a larger size self tapping screw that then can cut a new thread into the widened hole. After which one has to then absolutely makes sure to always realign the new larger screw with it’s thread before reinserting it. This is because any further damage to the plastic hole may make it entirely unusable. E.g. a plastic stand-off splitting entirely due to it’s enlarged hole.

The more intensive repair requires filling the hole with something that the original sized screw can then bite into. The most likely materials used here are either hot glue for a “temporary” fix; or melted plastic of the same type as used by the device for a more permanent solution. If you use the melted plastic route: I recommend filling the hole entirely, then drilling a new hole of the correct diameter. Followed by finally using the original self tapping screw to cut a new thread into this virgin material.

#0012: A personal perspective on the end of the Adobe Flash era

#0012: A personal perspective on the end of the Adobe Flash era

What is Flash?

Adobe Flash is a multimedia software platform. However the term “Flash” is used as a catch all term for any software that utilizes this platform to output media. The Flash technology allowed webpages to host media on them in the form of embedded files; encoded into either the Flash Video (.FLV) or Shockwave Flash (.SWF) format. In order to run these media files, one required the use of a web browser plugin called the “Adobe Flash Player”.

Flash first became prevalent in the late 90’s, early 2000’s as an evolution on the static webpages of the time. Where it was basically used for every animated media webpage element (barring animated .gif images). Including (but not limited to) delivering: video, music, and animated advertisements (e.g. banner ads with audio). It also allowed for interactive media, namely internet browser games. It did this by allowing the browser media access to user’s system inputs (e.g. keyboard and mouse).

In essence if you browsed the internet during this time and interacted with web media. Be it watching a video, playing a game, listening to music, or watching text scroll on a fancy ad. Chances are good that it was delivered to you using the Adobe Flash web player. It can not be understated, that Flash was ubiquitous in it’s time.

The decline of Adobe Flash

Ever since Adobe’s 2017 announcement of the official retirement of their Flash technology platform, for the close of the year 2020; the internet has been abuzz with people both decrying and celebrating the end of the Flash era. Even within the years leading up to Adobe’s 2017 announcement, I have seen Flash’s relevance steadily drop off as the emergence of alternatives such as HTML5, ate up Flash’s market-share.

There are number of reasons as to why people migrated from using Adobe’s Flash player to HTML5 for delivering webpage media. Predominantly, this is because of the public’s perception of the Flash web player having numerous security issues. Whether this is true or not, or simply exaggerated; I can not much comment. What I do know as a former Flash game dev is that you can make whatever network calls you want, as well as access the user’s local system; in order to get at anything from keystrokes to cookies. Then wrap up that code into a fairly innocuous looking .swf file, and embed it into a webpage. Hmmm… I guess it did have security issues. But having said that I am not going to pretend to be in the know, when it come to network security of the 2010’s and Flash. I only used it to make browser games. The network calls to allow online game saves, the cookies for local game saves, and keystrokes for user input.

Flash’s security issues in my opinion were compounded by it’s proprietary and closed source nature. There wasn’t an easy way to check what that embedded .swf file was going to do until it did it. Consequently it made malicious code very difficult to find. HTML5 on the other hand doesn’t suffer from this issue, since it is largely open source. Although most developers these days use APIs (Application Programming Interfaces) or frameworks, such as AngularJS or JQuery to make sites, or Phaser to make games. I.e. they don’t code them from scratch; the code for these tools however is there and public facing if you are inclined to look.

The openness of using HTML5 (Javascript, CSS) based technology means that it is inherently safer than Flash. Since the browser acts as an interpreter for the source code, rather than just a medium for embedded compiled binaries (.swf files) where code can hide. I don’t generally like speaking in absolutes, because there are undoubtedly exceptions to this. However in a general sense this is the case when it comes to Flash and HTML5.

Additionally Flash had another issue and that was it’s lack of support for mobile devices; as it was designed for the prevalent desktop platform at the time (~2008). This was in my opinion the death knell for Flash, as the explosion in popularity that internet capable mobile devices had between then and now (2020); just meant that Flash’s market-share essentially shrank proportionally to this.

Steve Jobs (CEO) of Apple published in 2010 an open letter called “thoughts on Flash”, where he cites a number of reasons as to why his company does not use the Flash technology in their products. Namely their iPhones and iPads of the time. His reasons included: Flash’s security issues, it’s closed source nature, it’s lack of optimisation for touch interfaces, it’s negative affect on battery life, and more. Link below for the full article.

hyperlink: #0011: Copy-paste of “Thoughts on Flash” by Steve Jobs (2010)

Considering what the Apple CEO thought of Flash, it was no surprise that Apple was the first company that outright disallowed Flash from their platform (iOS). This meant that at the time, Flash was only supported on Android devices; and even that dropped off in the later years since the issues that Jobs cited weren’t addressed to a satisfactory degree. In hindsight, it appears as Apple’s dismissal of Flash was a canary in a coal mine. A prelude to it’s collapse in general.

I should mention that I am not really here to talk about Flash’s history. I am not a Flash scholar, nor am I interested enough in it to become one. So take what I have said with a pinch of salt. If that is what you are looking for, there are better sources for that content. I suggest starting with Adobe’s official blog, then the wikipedia.org articles, then follow their sources and read those — as well as random blog posts by internet weirdos like this one — they are always fun. What I am here to do is to talk about Flash as it relates to my experience as a game developer. The games that got me interested in it, and the games that got me out.

About me

A bit of background about me. I attended school up until the mid 2010’s, and grew up (when compared to my working class peers) relatively poor. I.e. no home internet and I had to play outside alot. Gasp! I’ll keep it vague because this is isn’t really about me, however the information is relevant. My first experience with the internet in general was in the mid 2000’s. Where it was largely a utilitarian space as far as I was concerned. This is because I never had the time to explore it at my leisure. My access was always in a public place. Ergo monitored, censored, and timed. Either at school in ICT (Information Computer Technology) class using the “Yahooligans” search engine (remember that?), or at the local library with that creepy moustachioed librarian woman breathing down my neck. Occasionally I could even be found at an internet cafe paying £1 for an hour of uncensored access whilst some indian dude watched what I did from his master console. Hi Mr Singh!

Consequently, my use of the internet was always objective or mission based. I went in not to explore and learn, but with an objective. Especially when I was paying for the privilege (and it is a privilege). I remember being at the internet cafe and booting up my collection of anime sites that allowed downloads (RIP cyber12.net) to get the latest 360p Horrible Subs copy of the Bleach or Naruto episodes, that just aired the previous week in Japan. I recall cramming as many of those ~50MB episodes (.RMVB video format), as well as Final Fantasy wallpapers, low quality D12 or Linkin park MP3s, and “kawaii ecchi” jpegs into a 256MB thumb-drive that I got second-hand from me mum. I would then take this bullshit home to my HP Pavilion A320N in order to fill it’s massive 50GB 3.5′ IDE hard drive, for my repeated media enjoyment. Life was simple back then.

So, what was I doing while the media files downloaded at a blazing 120KiB per second download speed? Well, I was playing Flash games of course! Keep up. I remember each episode download taking roughly half an hour, although I don’t know if the speed and file size numbers that I gave match up… probably not. The fact that I still (mostly) remember these numbers a decade later should tell you how much of an impression the experience left on my young supple mind.

Anyway, While the files downloaded, I’d hit up game sites. Websites, like: Newgrounds, Miniclip, Armourgames, and of course Kongregate. The usual suspects. What games did I play? Games like “Rebuild”, “Epic Battle Fantasy”, “Bubble Tank”, “Sonny”, “Armed with Wings”, or puzzle games like the “Escape the room” series; as well as the clones upon clones of GBA (GameBoy Advanced) tactical games like: “Final Fantasy tactics” and “Advance Wars”. Additionally I played excellent point-and-click titles such as the “Reincarnation” series, or Clickshake’s “Ballad of Reemus” series, or Zeebarf’s “A small Favour” series. These same quirky point-and-click puzzle-adventure games inspired me to create my own.

Why? Well because up until then I had only played MS-DOS point-and-click games. Like Sierra’s various “-Quest” series games. Think: “Police Quest”, “Space Quest”, “King’s Quest”, etcetera-quest. Additionally I played “Simon the Sorcerer” 1 and 2, “Sam & Max: Hit the Road”, and of course “Leisure suit Larry”. As an aside, I never played the famous Lucas Arts games like “Monkey Island” and “Day of the tentacle” until I was an adult. I am a victim ;_;.

Although the MS-DOS games sparked the love of the point-and-click adventure genre, their Flash counterparts brought the realisation home that I actually could do it too. They were fun, they had the heart of the older DOS games, but the technology was much more accessible, and they were significantly shorter. As far as I knew MS-DOS games were made using ritual possession via offerings to the Omnissiah. It was hard enough to install them and get them working properly, let alone make the bloody things. The learning curve involved was just far too sheer for my young self to effectively engage.

Whereas Flash used ActionScript3, and an IDE: named Adobe CS3. Heh, even rhymed. Sort of. ActionScript3 was as friendly as abstract programming languages come, and there were a plethora of online tutorials, both in the form of textual articles as well as youtube and dailymotion videos. This abundance of guides and media motivated me to “‘ave-arr-go!” as they say.

Developing Flash games

Developer resources for Flash media were abundant at the time. My favourite of which, is the open-source IDE (Integrated Development Environment) Flashdevelop! This was my IDE of choice because: 1) I couldn’t afford an official copy of Adobe Flash Professional (or Adobe Animate as they call it now), and 2) I didn’t trust the “unofficial” versions that I found. So FlashDevelop became my de facto IDE of choice and the open-source Flex SDK (Software Development Kit) as my .swf complier of choice. I should mention that this was also my first practical interaction with community driven open software, and it really opened my eyes to the liberation that it offered.

That is, not being tied to any particular company for one’s productivity tools. No cloud subscriptions, no periodic reminders to renew the lease, no “””anonymous””” telemetry phoning home… It’s actually a rather dangerous thing to get accustomed to, because it spoils a person when you realise how shit a lot of proprietary applications become with this bloat. I mean I understand why a lot of it is there, it’s just a shame that it punishes (inconveniences) the paying customer and not the pirate. Who’s most likely running a cracked version (in a virtual machine) without the bloatware. It’s all academic though, because I couldn’t afford it anyway. So it didn’t really matter what I thought about it at the time (or even now really).

The main disadvantage I recall Flashdevelop having when compared to Adobe Flash CS(-whatever), is that Adobe Flash had an animation timeline that it centrally used. This timeline was designed to have various Class objects attached to it at various points or frames. In AS3 an object class is used to encapsulate an entire source file in general. With regards to games: the online tutorials would attach a LoadingScreen.as3 Class to frame 0, then the MainMenu.as3 Class to frame 1, and so on. It does this without necessitating verbose instructions to the program as to how to handle them, as this was done automatically using the timeline. The idea is that when one frame terminated, an automatic call would be made to move to the next frame, and then run the attached classes and the methods contained within.

FlashDevelop on the other hand had far less visually accessible components (like the various art tools or timeline) when compared to the Adobe Flash IDE; and consequently it was less user friendly. At least initially. However once the learning curve was surmounted, it proved to be a very robust IDE. One thing that didn’t help young me, is the fact that the vast majority of the online tutorials were create specifically using the Adobe IDE; and unwittingly used features only present within that IDE — such as the aforementioned timeline.

For example: it took me quite a while to learn the correct techniques to create a functioning loading screen in FlashDevelop because of this. There was a lot of chopping up of other people’s code, then trail and error to get it working. And once it worked, to then to try to understand why in order to reliably replicate the method in future projects.

I remember managing source files in the FlashDevelop IDE being similar to the C++ IDEs I used at the time. (CodeBlocks, Eclipse, Bloodshed Dev-C++.) For example, having to first manually import other code files in order to make calls to their functions or add their objects to the stage. This is in contrast to the Adobe IDE which glossed over much of this type of stuff by using the timeline and a drag-and-drop interface. Where Users would drag an image onto the stage and then click on it to open a box where they’d add in any additional code. The Adobe IDE seemed like an interface designed for animators first and for most. That’s because it was. Whereas FlashDevelop was more of a programmers IDE. Where a lot of the animation tools of the Flash IDE were absent.

I realise that this is more a criticism of me rather than FlashDevelop, however Speaking of FlashDevelop and inconveniences. I do not miss the tedium of manually embedding large volumes of images with this IDE. Then casting them as “bitmaps”, to then place them into individual “movieclip” containers. All with mandatory unique names, by the way. This, in order to allow manipulation of the asset when it was finally added to the stage. At which point I had to manually assign their dimensions (width, height), alpha (transparency), and initial stage (x,y) location. To then use an external tweening library (forgot it’s name) for actually animating these images. Think sliding alpha gradients for flickering lasers, and gradual increase/decrease of an X position variable to make sliding doors open/close. Doing this for every image in a game got laborious quickly, and if I had to do it again I actually would have created helper functions to do it for me. Young me laboriously hard coded it all, and consequently learned good lessons.

Lessons on the difference between working hard and working smart. In this case, on making the time to create utilitarian recyclable functions. Ones that can take the various image’s stats as arguments and return what I wish. The strength of them is their recycle-ability, which leads to cleaner code and the avoidance of long lines of repeated hard-code. It would be instead just one line for each new image: citing the function call and the specific image’s stats as arguments for that function. But I guess a lesson learned the hard way is a lesson learned forever.

Developer migration

It seems like around 2011-2013 was the time when the Flash exodus really begun. Known creators begun to either drop off or change to other things. Around here in my opinion is also when the golden age of Newgrounds effectively ended. You can see from the example of popular Flash animators of the time (Zone and Tiarawhy), how their content either dropped off and/or changed significantly in a bid to reinvent themselves.

example of a creator’s flash media submission fall off

I remember when it came time to move on from the Adobe Flash player and browser games in general. I tried out Adobe Air because like many developers who started out with Flash games, I wished to pivot to creating games for other platforms. For me it was the desktop. I wanted to make “proper” point-and-click games, and hopefully earn a buck or two doing it.

Even back then the public perception of Flash games, was as a means of getting a developer’s feet wet in making games and little more. Sooner or later if the person is serious about making games — and serious about making a living, making games; then they have to move on to another platform. Many migrated to making mobile games for iOS and Android. Even in cases where the developer’s still wanted to make browser games, there were better (more lucrative and future-proof) technologies/paths to that.

I have seen many developers move on to using the emergent Unity technology during this transitory period. Unity allowed the creation of multiplatform programs whilst still using the same core codebase; just exporting it into different media formats appropriate to their target platforms. This includes desktops (Windows, Macintosh, and Linux), mobile platforms (Android, iOS), and in this case even web browsers by using the Unity Web Player. At the time I opted to stick with my current tooling, because the idea of being “set-back” by having to learn another system (Unity and C#) would stifle my ability to actually finish games. Its only with time that I have understood that a person never stops being the student. In order to progress optimally in any discipline one should not shy away from learning new things when the opportunity makes itself apparent. If I did keep up with making games, I would have had to retool anyway. Better to eat crow while it’s still young and tender.

Unity Web Player example game: https://www.kongregate.com/games/mythicowl/hexologic
(Notice how it still works post 2020 — assuming Kong is still online.)

I believe my first introductions to the Adobe Air technology was via two games in particular. Edmund McMillen’s original “The Binding of Isaac” and Jasper Byrne’s “Lone Survivor”. Although other devs followed a similar path like Amanita Design and their game “Machinarium”. But the prior two are the one’s I had hands on experience with. Anyway, once I purchased a copy their games, I found the core .swf files in their source folder and a native executable that called them. Along with a bunch of Adobe Air library files. I remember that the .swf files could also be played using a local version of Flash player; bypassing the native executable in the process. Meaning that Adobe Air itself, as I understand it just wraps the .swf file with an .exe.

So in an attempt to ape them, I downloaded the Air SDK and used it. It wasn’t hard to import Air into FlashDevelop and create a desktop app using it. I recall there being minimal code alterations in the process. I should state that I did so initially as an experiment, but I will do so again and host the .zip archives on this site once/if I can find my source files again. For posterity, and as a means of providing anyone interested with a playable copy of my early games.

Closing statements

That’s all I really have to say when it comes to Flash. I loved the games I played as a child. They introduced me to many new genres of games. From Zombie shooters, to puzzle games. Consequently I have a lot of good memories with it. I never really cared or noticed when websites stopped using Flash for banner adverts or for delivering videos (like youtube.com), as it really didn’t matter to me. I did however notice, when Unity web player, Java web player, and HTML5 games slowly started to become more and more prevalent; or when Flash animation died. And for good reason.

Flash is very limited. I remember the frustrating media file size embed limits. Well, you might say that I should’ve just used a loader class to load in external media as needed, but that had it’s own associated issues. Such as the program not finding the files (once online) that you uploaded with it. And some sites at the time would only allow one file upload (the .swf file) with no supporting media files. Where others had a size limit for the actual .swf file itself. I remember having to strip out a lot of embedded music (.mp3) out of my game “Last Life: The Blue Key” because kongregate had a .swf file size limit.

For many reasons like this, Flash got over taken by it’s competitors in it’s space. Then for other reasons (think Steam games sales, Apple iOS games, and plummeting ad revenue), the market for browser games in general fell off. Making it a space largely for new developers to cut their teeth and little else. Now, I don’t think it’s even that.

That makes me wonder; what will happen to all these browser game sites like Newgrounds and Kongregate. Although they host games using various technologies; their decade plus backlog of games is going to be in the Flash format. Their games catalogue is going to get gutted. And I don’t think that many (if any) developers are actually going to back to a game they made (probably as a kid) 10 years ago and remake it for an unprofitable platform. I know I am not. I have moved on from games in general, and even if I got back into it (which I want to), I’d work on a new property. I’d honestly be surprised if these sites still exist in a couple of years because of this.

Still it’s not all doom and gloom. Although Kongregate seems content to let their Flash content die on the vine, Newgrounds created a custom Flash player just for this reason. Although it seems like a bit of a patchwork or stopgap measure. It is much better than nothing.

Anyway, the good Flash games, the one’s people loved from this era. They’ll be preserved. The online copies can be stripped from the web browser (while they are there). Saved, and played locally using a desktop version of Flash player. And for the one’s people didn’t care to preserve. Well, like so much else in life: they get lost to the sands of time.

Thank you for reading.

One more thing…

This made me laff, but mostly because Flash is Ded. RIP.

References, links, further reading

https://web.archive.org/web/20171202123704/https://theblog.adobe.com/adobe-flash-update/
https://www.cnet.com/products/hp-pavilion-a320n-athlon-xp-2800-plus-2-08-ghz-monitor-none-series/
https://www.flashdevelop.org/
https://blog.adobe.com/en/2019/05/30/the-future-of-adobe-air.html#gs.na44sx
https://helpx.adobe.com/security/products/flash-player.html
https://en.wikipedia.org/wiki/Adobe_Flash
https://en.wikipedia.org/wiki/Adobe_AIR
https://en.wikipedia.org/wiki/FlashDevelop
https://en.wikipedia.org/wiki/Apache_Flex
https://en.wikipedia.org/wiki/MS-DOS
https://en.wikipedia.org/wiki/Open-source_software
https://en.wikipedia.org/wiki/RMVB
https://en.wikipedia.org/wiki/Edmund_McMillen
https://en.wikipedia.org/wiki/Comparison_of_HTML5_and_Flash
https://en.wikipedia.org/wiki/HTML5
intro to tweeining:
https://www.peachpit.com/articles/article.aspx?p=20965
example of Adobe IDE specific tutorials:
https://helpx.adobe.com/animate/using/shape-tweening.html
“Thoughts on Flash” by Steve Jobs
Primary Source: https://www.apple.com/hotnews/thoughts-on-flash/
Secondary Source: https://appleinsider.com/articles/10/04/29/apples_steve_jobs_publishes_public_thoughts_on_flash_letter
Secondary Source: https://medium.com/riow/thoughts-on-flash-1d1c8588fe07
https://en.wikipedia.org/wiki/Thoughts_on_Flash
https://en.wikipedia.org/wiki/HTML5#%22Thoughts_on_Flash%22

#0011: Copy-paste of “Thoughts on Flash” by Steve Jobs (2010)

#0011: Copy-paste of “Thoughts on Flash” by Steve Jobs (2010)

Apple logo with Adobe Flash logo on top of it

Preamble

This is a transcription of an open letter written in 2010 on the subject of Adobe Flash by the CEO of Apple of the time: Steve Jobs. I paste it here for referential and posterity purposes.

Rather annoyingly Apple has since removed the original article from their official company website, so this is a copy from a secondary source. An archive website called: web.archive.org (A.K.A wayback machine). This was then verified by comparing it with copies from other website articles published around 2010. Check the links and references section for specifics. I think this is a good illustration of the fragility of information on the internet. When primary (controlled) sources can suddenly disappear; we have to rely on secondary sources and their general trustworthiness.

(START QUOTE)

Thoughts on Flash

Apple has a long relationship with Adobe. In fact, we met Adobe’s founders when they were in their proverbial garage. Apple was their first big customer, adopting their Postscript language for our new Laserwriter printer. Apple invested in Adobe and owned around 20% of the company for many years. The two companies worked closely together to pioneer desktop publishing and there were many good times. Since that golden era, the companies have grown apart. Apple went through its near death experience, and Adobe was drawn to the corporate market with their Acrobat products. Today the two companies still work together to serve their joint creative customers – Mac users buy around half of Adobe’s Creative Suite products – but beyond that there are few joint interests.

I wanted to jot down some of our thoughts on Adobe’s Flash products so that customers and critics may better understand why we do not allow Flash on iPhones, iPods and iPads. Adobe has characterized our decision as being primarily business driven – they say we want to protect our App Store – but in reality it is based on technology issues. Adobe claims that we are a closed system, and that Flash is open, but in fact the opposite is true. Let me explain.

First, there’s “Open”.

Adobe’s Flash products are 100% proprietary. They are only available from Adobe, and Adobe has sole authority as to their future enhancement, pricing, etc. While Adobe’s Flash products are widely available, this does not mean they are open, since they are controlled entirely by Adobe and available only from Adobe. By almost any definition, Flash is a closed system.

Apple has many proprietary products too. Though the operating system for the iPhone, iPod and iPad is proprietary, we strongly believe that all standards pertaining to the web should be open. Rather than use Flash, Apple has adopted HTML5, CSS and JavaScript – all open standards. Apple’s mobile devices all ship with high performance, low power implementations of these open standards. HTML5, the new web standard that has been adopted by Apple, Google and many others, lets web developers create advanced graphics, typography, animations and transitions without relying on third party browser plug-ins (like Flash). HTML5 is completely open and controlled by a standards committee, of which Apple is a member.

Apple even creates open standards for the web. For example, Apple began with a small open source project and created WebKit, a complete open-source HTML5 rendering engine that is the heart of the Safari web browser used in all our products. WebKit has been widely adopted. Google uses it for Android’s browser, Palm uses it, Nokia uses it, and RIM (Blackberry) has announced they will use it too. Almost every smartphone web browser other than Microsoft’s uses WebKit. By making its WebKit technology open, Apple has set the standard for mobile web browsers.

Second, there’s the “full web”.

Adobe has repeatedly said that Apple mobile devices cannot access “the full web” because 75% of video on the web is in Flash. What they don’t say is that almost all this video is also available in a more modern format, H.264, and viewable on iPhones, iPods and iPads. YouTube, with an estimated 40% of the web’s video, shines in an app bundled on all Apple mobile devices, with the iPad offering perhaps the best YouTube discovery and viewing experience ever. Add to this video from Vimeo, Netflix, Facebook, ABC, CBS, CNN, MSNBC, Fox News, ESPN, NPR, Time, The New York Times, The Wall Street Journal, Sports Illustrated, People, National Geographic, and many, many others. iPhone, iPod and iPad users aren’t missing much video.

Another Adobe claim is that Apple devices cannot play Flash games. This is true. Fortunately, there are over 50,000 games and entertainment titles on the App Store, and many of them are free. There are more games and entertainment titles available for iPhone, iPod and iPad than for any other platform in the world.

Third, there’s reliability, security and performance.

Symantec recently highlighted Flash for having one of the worst security records in 2009. We also know first hand that Flash is the number one reason Macs crash. We have been working with Adobe to fix these problems, but they have persisted for several years now. We don’t want to reduce the reliability and security of our iPhones, iPods and iPads by adding Flash.

In addition, Flash has not performed well on mobile devices. We have routinely asked Adobe to show us Flash performing well on a mobile device, any mobile device, for a few years now. We have never seen it. Adobe publicly said that Flash would ship on a smartphone in early 2009, then the second half of 2009, then the first half of 2010, and now they say the second half of 2010. We think it will eventually ship, but we’re glad we didn’t hold our breath. Who knows how it will perform?

Fourth, there’s battery life.

To achieve long battery life when playing video, mobile devices must decode the video in hardware; decoding it in software uses too much power. Many of the chips used in modern mobile devices contain a decoder called H.264 – an industry standard that is used in every Blu-ray DVD player and has been adopted by Apple, Google (YouTube), Vimeo, Netflix and many other companies.

Although Flash has recently added support for H.264, the video on almost all Flash websites currently requires an older generation decoder that is not implemented in mobile chips and must be run in software. The difference is striking: on an iPhone, for example, H.264 videos play for up to 10 hours, while videos decoded in software play for less than 5 hours before the battery is fully drained.

When websites re-encode their videos using H.264, they can offer them without using Flash at all. They play perfectly in browsers like Apple’s Safari and Google’s Chrome without any plugins whatsoever, and look great on iPhones, iPods and iPads.

Fifth, there’s Touch.

Flash was designed for PCs using mice, not for touch screens using fingers. For example, many Flash websites rely on “rollovers”, which pop up menus or other elements when the mouse arrow hovers over a specific spot. Apple’s revolutionary multi-touch interface doesn’t use a mouse, and there is no concept of a rollover. Most Flash websites will need to be rewritten to support touch-based devices. If developers need to rewrite their Flash websites, why not use modern technologies like HTML5, CSS and JavaScript?

Even if iPhones, iPods and iPads ran Flash, it would not solve the problem that most Flash websites need to be rewritten to support touch-based devices.

Sixth, the most important reason.

Besides the fact that Flash is closed and proprietary, has major technical drawbacks, and doesn’t support touch based devices, there is an even more important reason we do not allow Flash on iPhones, iPods and iPads. We have discussed the downsides of using Flash to play video and interactive content from websites, but Adobe also wants developers to adopt Flash to create apps that run on our mobile devices.

We know from painful experience that letting a third party layer of software come between the platform and the developer ultimately results in sub-standard apps and hinders the enhancement and progress of the platform. If developers grow dependent on third party development libraries and tools, they can only take advantage of platform enhancements if and when the third party chooses to adopt the new features. We cannot be at the mercy of a third party deciding if and when they will make our enhancements available to our developers.

This becomes even worse if the third party is supplying a cross platform development tool. The third party may not adopt enhancements from one platform unless they are available on all of their supported platforms. Hence developers only have access to the lowest common denominator set of features. Again, we cannot accept an outcome where developers are blocked from using our innovations and enhancements because they are not available on our competitor’s platforms.

Flash is a cross platform development tool. It is not Adobe’s goal to help developers write the best iPhone, iPod and iPad apps. It is their goal to help developers write cross platform apps. And Adobe has been painfully slow to adopt enhancements to Apple’s platforms. For example, although Mac OS X has been shipping for almost 10 years now, Adobe just adopted it fully (Cocoa) two weeks ago when they shipped CS5. Adobe was the last major third party developer to fully adopt Mac OS X.

Our motivation is simple – we want to provide the most advanced and innovative platform to our developers, and we want them to stand directly on the shoulders of this platform and create the best apps the world has ever seen. We want to continually enhance the platform so developers can create even more amazing, powerful, fun and useful applications. Everyone wins – we sell more devices because we have the best apps, developers reach a wider and wider audience and customer base, and users are continually delighted by the best and broadest selection of apps on any platform.

Conclusions.

Flash was created during the PC era – for PCs and mice. Flash is a successful business for Adobe, and we can understand why they want to push it beyond PCs. But the mobile era is about low power devices, touch interfaces and open web standards – all areas where Flash falls short.

The avalanche of media outlets offering their content for Apple’s mobile devices demonstrates that Flash is no longer necessary to watch video or consume any kind of web content. And the 200,000 apps on Apple’s App Store proves that Flash isn’t necessary for tens of thousands of developers to create graphically rich applications, including games.

New open standards created in the mobile era, such as HTML5, will win on mobile devices (and PCs too). Perhaps Adobe should focus more on creating great HTML5 tools for the future, and less on criticizing Apple for leaving the past behind.

Steve Jobs
April, 2010

(END QUOTE)

References, links, further reading

Primary Source:

  • [REMOVED] https://www.apple.com/hotnews/thoughts-on-flash/

Secondary Sources:

  • https://appleinsider.com/articles/10/04/29/apples_steve_jobs_publishes_public_thoughts_on_flash_letter
  • https://medium.com/riow/thoughts-on-flash-1d1c8588fe07
  • https://web.archive.org/web/20100703090358/https://www.apple.com/hotnews/thoughts-on-flash/

Steve Jobs at the 2010 D8 Conference video (extract on flash)

hyperlink: https://www.youtube.com/watch?v=YPb9eRNyIrQ

Steve Jobs at the 2010 D8 Conference (full conference)

hyperlink: https://www.youtube.com/watch?v=a0AZLPqjpkg

  • https://en.wikipedia.org/wiki/Thoughts_on_Flash
  • https://en.wikipedia.org/wiki/HTML5#%22Thoughts_on_Flash%22

#0006: Intro to Dwarf Fortress (AWWOT archived article)

#0006: Intro to Dwarf Fortress (AWWOT archived article)

dwarf fortress title

Below is an article I wrote in 2014 for a defunct online magazine that my friend made. It was a general hobbyists/interest e-magazine for people into gaming, films, and tech. It’s name was “A Wonderful Waste of Time”.

This article is about a game called Dwarf Fortress. Describing this game succinctly is rather difficult so I’ll use the developer’s description of their game.

“Dwarf Fortress is a single-player fantasy game. You can control a dwarven outpost or an adventurer in a randomly generated, persistent world.” ~Bay12games.

A very simple summarisation for a very deep game.

image of a randomly generated world map taken from developer's website
image of a randomly generated world map taken from developer’s website

Article:

Starving Dwarfs

Dwarf Fortress, or to give it it’s full title: “Slaves to Armok: God of Blood – Chapter II: Dwarf Fortress”, has three main modes: Dwarf Fortress, Adventurer, and Legends; all of which are affected by the game’s chief mechanic, which is that it can create an entire new randomly generated world on request.

In doing so it doesn’t just create the geography of this new region; the layout of the vast continents, the high reaching mountain ranges, the sprawling deserts, dense jungle, sparse woodland, destitute badlands, and evil tainted realms to name but a few varieties of terrain you can experience; but the game then writes the history of the new region. This can range from the five years after world creation, all the way up to a maximum of 1050 years. This ‘history’ can include the recording of kingdoms which arose then might have fallen, the wanderings of great forgotten beasts, the formations and breakdowns of fraternities; right down to the individual life records of a boot making peasant. It can be as deep as you care to look, and in my opinion, that level of randomly generated lore is quite a feat; more so because the denizens’ histories are consistent and interwoven into each others time lines.

Fortress mode is the main game mode, it usually consists of building a large subterranean dungeon. You don’t have to though, you can stay on the surface if you want; it’s just a good idea to put your dwarfs safely underground, away from the dangers of sunlight. Once/if you have dug out a decent sized place, it’s usually time to turn your mind to industry.

There are numerous things you can do as the player to tailor your experience in fortress mode. Anything from ignoring whole swathes of industry, terrain, resources, to ignoring the pleas of random dwarfs; the last one I did especially in order to maintain sanity. Once my fortress grew to house hundreds of dwarfs (I think around 240 was the most I ever had at any one time), I stopped caring about individuals. Either they’d go insane because I didn’t have the materials for them to craft whatever valuable tat they wanted to, or their spouse or pets die; I didn’t care really. Once they became a problem, it’s time they went into time-out. I created a starvation room to put these troubled individuals into. Then once ready, I unlock the doors and someone hauls their corpses into a stone box coffin, and hey presto problem solved. No one’s unhappy anymore. Just make sure no one important to the bigger picture cares about them. I know it sounds cruel but my forts were built on the principal of efficiency, and inefficiency was paramount to criminality.

I find that I can keep fair relations with most neighbouring races, be it Dwarf, Human, or Elf; as most of them are pretty fair – that said, for goodness sake don’t trade the Elves anything made of wood, it really upsets them. They say killing trees is amoral or something to that effect, then refuse to do business with me. Yet if you look at what they’re selling it’s usually either more cloth than you can shake a tree at, or yes you guess it: a whole plethora of wooden tat. I’m talking eighteen Palm-wood spears here, empty Cidre-wood barrels, or useless musical instruments! Yeah, because that’s what my underground factory society needs, musical instruments.

In Adventurer mode, you play as an adventurer and explore the world. It’s a decent enough RPG experience, but not for me for the most part. I found the experience quite tepid, I mostly just wandered around interacting with little else but animals, which I had to kill. That said, I didn’t probably play enough of it to see what it really had to offer.

Legends mode consists purely for displaying all the worlds history, it’s just a record that you can read if you feel so inclined. What I like about this is it displays how deep the history generation really is, and it can also show you exactly how all of your tampering has affected the world. I found this to be quite interesting because I got to look into the past of all the creatures of note what attacked (and died in my fortress), for example all the forgotten beasts that attack my fort have usually travelled there through other realms and you can see what they did and where. It really is something to know that, that creature that died to my Militia Commander (and current mother of two) by having a palm wood spear (yeah, I bought five!) lodged into its stupid minotaur cranium; had in fact lived a long and good life up until that point; it adds so much character to the game and I enjoy it for one.

For all the positives of this title, it should be noted that this game has a few things that would most likely put a lot of people off of it. The ASCII graphical aesthetic I think would be the most obvious, although there are a fair few graphic mods one can use instead. The real problem I think this game has is it’s user interface. Once you get used to it and learn the hotkeys, it isn’t bad. But the initial plunge, well its a learning curve sharp enough to cut your fingers on.

Dwarf Fortress is a free game, not free-to-play, free. You can pick it up from the developers, “bay12games” website. Although I wouldn’t recommend playing the game as it is, the mods available for this game really do make the game so much more user friendly, especially Dwarf Therapist. The developers manage to fund this game purely via donations. So, if you try it and like me fall in love like with this modern ASCII monstrosity, kicking them a few farthings might not be a bad spend of your hard earned space bucks.

smily face icon used to represent a dwarf in-game

Comments:

Games like DF age like fine wine, they get better with age as either the developer or the community around them continues to add features and refine the experience.

Six years on, I definitely want to write about (and play) this game again. I just hope that I can say more of technical value other than just advertise a game that I enjoyed, like I did above.

Sources / References / Further Reading:

https://www.bay12games.com/dwarves/

#0005: The lost potential of Digimon (AWWOT archived article)

#0005: The lost potential of Digimon (AWWOT archived article)

official logo for the digimon franchise

Below is an article I wrote in 2014 for a defunct online magazine that my friend created; called “A Wonderful Waste of Time”. It was a game and film hobbyist e-mag. The issue I wrote for had a theme of ‘evolution’; so I naturally chose to talk about the Digimon franchise. As you do.

Although my opinions have matured since then, and I do actually want to write about this again. I think its still nice to have this up anyway.

image of the Digimon: Agumon dressed like a teacher. Hakase Agumon.
image of “hakase” Agumon (アグモン博士) taken from digimon.net

Article:

Digi-volution

I wanted to write a little about the Digimon franchise, and why I believed it could have been so much more than what it amounted to. In hindsight, it failed to do anything other than make a lot of money, which as far as failure states go, that’s pretty dang fantastic.

Now, I’m not really complaining about the video games, or the multiple mediocre anime series, the cards, or even that Tamagochi like “Digivice” thing; you know that one got thrown at the back of my head in maths class, yeah that one. I am complaining about the unfulfilled potential, the idea behind Digimon had.

When I first heard of Digimon my initial thoughts were something to the beat of: “Oh great! Another Pokémon clone”, and at a time when Nintendos rinse and repeat MO for hawking their games had just started to exhaust my patience/wallet. I think few people would argue that Digimon wasn’t always in Pokemon’s shadow. The similar visual styles, target audience, and market space made comparisons almost unavoidable.

However, Digimon unlike Pokémon had it’s core principals rooted in reality (technically Pokémon can be a reality one day; but I doubt we’d go to such unethical/expensive means, just to see giraffe-dogs fight). Digimon (the monsters that is) on the other hand are little more than lines of <insert your favourite programming language here> code. That’s why they can evolve then revert to their original forms, as well as trans-mutate with the additions of certain items (expansion packages, I assume).

So, if you can ignore all the fictional elements of the media (anime series mostly); things like the physical manifestations of digital programs, like when the Digiguys moved into the real world from the digital world, or the digitisation of physical matter bollocks, like when the kids popped into the digital world to have a wee look around; then there is little about Digimon that can’t be effectively replicated in real life. The Digiworld for example is not that different from those in an MMO (massively multiplayer online) game; a (semi)centralised unit with multiple access vectors. Imagine how interesting it would have been if instead of hawking a plethora of franchised tat at us until we got sick of the whole thing and lost interest; the string pullers behind Digimon instead decided to use their money to make an MMO, a real Digiworld, a huge sprawling thing of an island, that you can explore as your Digifellow of choice.

Let’s face it though, if an MMO was indeed made it’ll probably suck. Why such a dim view of MMOs you may ask? Well, it’s because they are one of the most expensive games to create, fiscally as well as in time. And quite a bit can go wrong in a long development cycle. Anything from funding being pulled, game engine falling out of date (it happens), to audiences losing interest after playing the game during a long Alpha or Beta release phase and moving on. However usually because MMOs are so expensive to produce, the people producing them, rather understandably, are less inclined to take risks while doing so, this then leads to a reduction of new ideas and innovations. Instead, producers tend to merely reiterate previously proven formulae of success. Ever wonder why there are so many MMOs that are like World of Warcraft? Unfortunately this has lead many people to misunderstand the term MMO, it is more of a definition of a medium than a specific genre of video game.

I suppose the real reason why I am disappointed in Digimon isn’t so much because they didn’t make a game, that in my opinion would’ve been a real-world manifestation of the concept of Digimon; it is more because like most franchises that primarily target children and young teens, it became a fad that came, had it’s rather brief time in the sun and then went; but in doing so it salted the ground for that concept. The idea of creating a digital world, with it’s own denizens, cultures, beliefs, weather, it’s own set of rules that may not necessarily reflect, either directly or in abstraction, our own worlds. A digital world that didn’t pretend to be anything other than what it really was, a world that is digital. In other words, unlike other MMOs that have come out, Ever Quest, Raiderz, Grand Fantasia, to name but a few that I’ve played in the past, as the player you wouldn’t have to suspend your disbelief to enjoy the fantasy of the worlds existence; because it actually exists.

The reason why I think Digimon is ultimately something of a bastion of unfulfilled potential is twofold; one, it had excellent ground work (all them cute monsters and that, as well as the island) for creating an interesting game world where the fantasy was more akin to an extension of our own reality than anything; and two, in being as popular as it was, it has somewhat claimed dominion over the idea of digital beings and worlds to the point that if a new company with considerable resources decided to create something along those lines, i.e. a digital game world, they would undoubtedly be compared to Digimon, likely thought as little more than a reiteration of Digimon and its ideas, thus making the creation of such a world less likely in the foreseeable future.

But you never know, I could be wrong, I really hope I am. Such a thing if done right (and I wouldn’t presume to know what that is), could be a very interesting prospect. Especially, in my opinion: if they created more of an interactive world, than a video game. By that I mean a platform, with tools for the creation of user generated content; in order to build the sort of world where people can genuinely build a home for their avatar, fight for territory, produce resources to sell, steal irreplaceable items, kill characters with real history. The sort of world that can develop it’s own social hierarchy, economy, and justice system; in a fluid and natural way. The sort of digital world that can just as easily be enjoyed by players, as it can be studied for insight into how such societal systems can come to be and develop as they mature.

image of the digimon: ogremon
image of Ogremon (オーガモン) taken from digimon.net

Comments:

As of 2020 it seems largely that the Digimon franchise has entered a time of relative dormancy (at least in the west). As far as I can tell, they still follow their multimedia strategy. Producing: anime, manga, games; and they even still produce and sell their digital pets: the Digivices. This actually surprised me somewhat, since in the western markets they are considerably rarer. Mostly present in the form of over-priced imports. Oddly however, Tamagochi seems to have more relevance (and decent prices) here as far as the market for virtual pets goes.

extract from wikipedia.org/wiki/digimon showing a 2004 version digivice
extract from en.wikipedia.org/wiki/digimon
image outlining the two branches of the digimon LCD digital pet toys. One being the digital monster type and the other being the digivice type

The real interesting part I have noticed while looking through their various iterations of the Digivice (digital pet) product: is that I found more than 20 iterations of the toy over the 23 years (from 1997 to 2020 – basically serialised with yearly releases). Yet, there really doesn’t seem to be any leap in technology between them. It is really interesting when you compare their earliest products to their current line-up. Other than a few features like battling the Digimon with each other, there really doesn’t seem to be much of a development in the products in the last 20 years. At least not at a cursory inspection.

advert from digimon.net for a 2020 version of the digivice product
example advert from digimon.net for a 2020 digivice

I should note that I do not own a digital pet and I never encountered one as a child beyond watching my school mates play with them. So I am aware that they may be (probably is) a lot that doesn’t meet the eye that is going over my head when it comes to this. I’m just looking at 20 years of Bandai selling a little key-chain game with 3 buttons and a mono-colour LCD. Initially I perceived this to be a failure of some sort. But once I thought about it a little more. I actually think this is a success state. Like the crocodile: it seems to have found it’s niche and has encountered little reason to evolve over the years. They still seem to sell enough to warrant making them in 2020.

advert from digimon.net for a 2020 version of the digivice product
example advert from digimon.net for a 2020 digivice

To wrap this up, I will be needing to consume more Digimon media. Especially by playing the games that they have released over the years; this includes purchasing a few digital pets to tinker with as-well, for when I do decide to do a write up on this subject again. I am predominantly interested in what the franchise has done with tech to realise their creators’ ambitions, and consequently – years on because of this I still find the idea behind Digimon compelling. The fact that they are ‘real’. Real in so much as they pretend to be, exactly what they are. Digital creations.

In other words the realisation of a Digimon is a very real prospect. Especially when you consider modern strides with artificial intelligence, learning algorithms, and virtual as well as augmented reality technology as a medium to experience the creations. It doesn’t seem so far fetched to imagine a VR game with an online world, populated with other players and basic AI Digimon to that will remember your interactions and adjust their behaviours accordingly to you.

It is a worthy topic of another look.

Sources / References / Further Reading:

Official website: https://digimon.net/

What are Digimon: https://digimon.net/about/

LCD toy history: https://digimon.net/history/

Digimon bestiary: https://digimon.net/reference/

https://digimon.fandom.com/wiki/Digimon_Wiki

https://en.wikipedia.org/wiki/Digimon

https://en.wikipedia.org/wiki/Digital_Monster_(virtual_pet)

#0004: Dangerous non-compliant BS1363 plug

#0004: Dangerous non-compliant BS1363 plug

picture of a non-compliant BS1363 plug, with a shrouded earth pin
picture of two BS1363 plugs, one with a shielded earth pin and another without.

Now, I am no electrician. However I’d like to think that I know enough to spot when a consumer device isn’t fit for purpose. In this case its a non-compliant (British Standard) BS1363 plug. Look at the above picture, can you tell which one is potentially dangerous. If you (probably, after looking at the title image) said the one with the shrouded earth terminal, you are correct.

  • picture of a standard UK female BS1363 switched double wall socket faceplate. The left socket is damaged and red tape has been used to close it.

So, what is actually wrong with it?

Well, the earth pin’s base is shrouded; in other words: it is electrically isolated. Why is this a problem? It means that any device that you connect to mains with this cable will not be earthed. Worse yet, an inattentive user (that’s most of us): will very likely think that their device is earthed, and thus conclude that they are safe in the event that the device develops an electrical fault within it. It can’t be serious if it didn’t trip the mains, right?

It is especially nasty in this case, due to the layout of contacts within the female socket for the BS1363 type of plug. You see, unlike the Live and Neutral pins whose female contacts are at the base of the socket; in other words contact and mate with the tips of the plugs pins. The earth pin’s female contact is much closer to the mouth of the socket. Consequently, this means that when the plug is fully inserted, the socket’s contact grips the Earth pin closer to it’s base than it’s tip. Under normal operation, this is to insure that Earth is the first pin to make electrical contact when the plug is inserted, and the last to break electrical contact when the plug is removed from the socket. Its actually really quite a lovely design in my opinion, simple and effective.

Unfortunately, this is exactly what makes this particular plug so egregious. When the plug is fully inserted into the socket, electrical continuity will be broken by the non-compliant plug’s shrouding on the base of it’s Earth pin. But the basic user would think that their device is earthed because the tip of the earth pin is exposed in the same way as the Live and Neutral pins. Its the dangerous subversion of expectations that makes this thing so offensive.

image of a portable oil room heater with a metal chassis
image taken from homedepot.com

Why is earthing devices important?

I’ll answer this with a real world example. Imagine a device, something that demands a lot of current. A high amperage device like a portable room heater with a metal chassis. What if it had been either modified or manufactured to use smaller gauge or lower quality wire (e.g. using aluminium instead of copper), or they skipped adding heat-shield braiding to protect the internal wires from the device’s high residual temperatures. Whatever the case may be.

And due to a combination of carrying a strong current and/or the environmental heat, a wire carrying 250 volts mains melts its plastic sleeving and just touches the metal chassis from the inside of the device. If the device (and consequently the metal chassis) was earthed, then the 250 volts would immediately run down the earth path back to the local RCD (Residual Current Device) switch and trip it. This is because electricity naturally takes the easiest path (or path of least resistance) to earth.

However in the case where the device isn’t earthed; then what’ll happen is that the metal chassis will now be at mains voltage potential. Essentially Live. And odds are that the device in question could still very well function in this state, like normal; making it even harder to notice the fault. If then an unaware user touches the chassis, and in doing so presents a path to earth (usually through their hands, then body, then feet). Well, the electricity is likely to travel through them towards earth, probably killing them in the process. That’s why earthing devices is so important. It provides a very low impedance path for electricity to get to earth, in the case of a fault like the one mentioned above.

close up on a C13/BS4491 and a BS1363 plug showing their power ratings: 10 amp at 250 volt and 13 amps at 250 volts respective
close up on a C13 BS4491 plug showing it's 10 amp at 250 volt rating

Aren’t there any other safety measures in place?

I should note that BS1363 plugs have another safety feature that might save the day in the above example. Namely the replaceable (Live side) fuse within it. In the case of this BS1363 to C13, “kettle” plug. A C13 plug’s maximum rating is for 10 amperes. Logically then, the BS1362 fuse in the BS1363 plug should also be rated at a maximum of 10 amps. That is unless one would prefer that the plug give out before the fuse does, in the case of a surge current exceeding 10 amps (but not 13 amps which is the next category up in the standardised BS1362 fuse ratings).

Notably, the phrase “its not voltage that kills, its current” comes to mind. Although this is strictly not true due to the nature electricity. A high current, low voltage (e.g. a 5 volt 10 amp power-supply) shock is relatively safe, in the same way a low current, high voltage shock (such as static electricity) is relatively safe as well. You need both to be high in order to kill people. To bring it back to the point, we are dealing with 250 volts at or up to 10 amps before the fuse breaks and cuts the power supply. That’s more than enough to seriously electrocute a person. Assuming that it is in fact a 10 amp fuse in that plug. Whose to say that a fuse that came within a non-compliant plug, is itself compliant.

I don’t really want to put too fine a point on it. The inline fuse is just another line in the defence to stop people from accidentally killing themselves. The buildings RCD switches, the plugs fuse, the products internal fuses, and earthing; are all lines in the defence between the person and the power, that have the cumulative effect of making them safe.

Just as a fun thought experiment, imagine if all of these safety features where not present, and you gripped the live chassis, well then in that case: you’d probably be cooking until the power cuts off due to lack of payment of bills. Or rather surge protection outside of the property kicks in, but that’s less fun, and in all likelihood McGrippy would be long dead by then anyway.

picture of a BS1363 to C13 plug (also known as a IEC cord). It's earth pin has been shielded in the same manner as the live and neutral pins.

Where did you even get this thing?

Some background. If I remember correctly, I got the plug along with an unbranded Chinese power-supply from Ebay (or was it Amazon?) a couple of years ago. I took some pictures of it with my dumb-phone (hence the quality images, you’re welcome) due to it’s novelty, but otherwise thought nothing of it. Luckily for one reason or another, I didn’t press it into service.

It was only much later as I progressed in this hobby, did I realise how dangerous it actually was. And after doing some research: I came to the conclusion that one is most most likely to come across these types of sub par electronic equipment from websites like: Amazon, Ebay, Alibaba, Aliexpress, and Banggood. I’m not pointing those particular websites out for any reason, other than their relative dominance of the online market place for consumer grade electronic goods. All ship internationally, and all act more as online market place themselves, then they do actual product vendors. In other words, they aren’t a seller themselves (although some do this too), but have independent sellers operating through their marketplace. Many of these are either drop-ship sellers and straight from factory sellers. Which can sell unbranded and non quality assured dreck; just like this plug.

  • close up on a C17 and a BS1363 plug showing their power ratings: 10 amp at 250 volt and 10 amps at 250 volts respective
  • close up on a C17 plug showing it's 10 amp at 250 volt rating
  • close up on a C17 plug showing it's two ports: Live and Neutral
diagram illustrating the similarities between the C13 and the C17 type plug. The only difference is that C13 has an Earth.
original images taken from wikipedia.org

What should I do if I have one of these plugs?

It largely depends on you, your use-case, the people around you, and your environment. The puritan in me will say cut it and chuck it. It’s not worth the risk of forgetting and accidentally putting it into service in the future. Especially if you store all your extra cables together as I do.

However to avoid turning it into e-waste, you could just chop it up and use it as spares for repairs or projects. Another thing to consider is: if you are hard up for plugs, you could even scrape the shrouding off of the Earth terminal and use it as a normal C14 plug (after testing it of course, I think the earth pin might be too thin to function effectively/reliably/safely after this). Alternatively just use it as a C17 plug, which doesn’t have an earth terminal so the shrouded earth will not matter in the slightest.

One recommendation I would make regardless, it that you clearly mark and label this cable to differentiate it from the others.

image of a non-compliant BS1363 plug, with a shrouded Earth pin and a thin profile that indicates no presence of a BS1352 fuse inside the plug

Oh, while I am talking about dangerous non-compliant plugs, look at this thing. Shrouded earth, and not even a fuse. Any device that comes with this plug, just has to be hot garbage… and I sincerely hope you aren’t trusting your household’s safety to it.

References / Sources / Further Reading:

https://www.hse.gov.uk/electricity/standards.htm#appliance
https://en.wikipedia.org/wiki/List_of_International_Electrotechnical_Commission_standards
https://en.wikipedia.org/wiki/AC_power_plugs_and_sockets:British_and_related_types#BS_1363_three-pin(rectangular)_plugs_and_sockets
https://en.wikipedia.org/wiki/IEC_60320#C19
https://images.homedepot-static.com/catalog/productImages/1000/5a/5ab2c7d6-d116-4e66-b78e-a38049a7771c_1000.jpg
https://en.wikipedia.org/wiki/Residual-current_device
ElectroBOOM – Which is the Killer, Current or Voltage?[https://www.youtube.com/watch?v=XDf2nhfxVzg]
John Ward – Dangerous Multiway Extension Lead ASTRA BT311 (Part 2) [https://www.youtube.com/watch?v=C1h9LLJJvk0]
John Ward – MK Socket Outlet BS1363 Dismantled & Examined [https://www.youtube.com/watch?v=H1gMYu5VHus]
ElectroBOOM – The Outlet that Saves Lives [https://www.youtube.com/watch?v=GlM6PE2kKVY]
ElectroBOOM – 7 MILLION VOLT TASER (stun… thingy)!!! [https://www.youtube.com/watch?v=DOMs7mYm_zs]
https://hackaday.com/2016/05/19/hackadays-fun-with-international-mains-plugs-and-sockets/
https://hackaday.com/2016/05/11/looking-mains-voltage-in-the-eye-and-surviving-part-1/