One of the things I find so repugnant about the modern digital computer is how rigid the separation is between user, programmer, microprocessor, hardware, and software. The modern computer is partly a product of a religious belief that "data" or "information" have some sort of otherworldly existence outside of their physical manifestation. We're brainwashed in school in our math classes to believe that circles are not ways to arrange ink or chalk, but are in fact some sort of higher Truth with a capital "T". Likewise, we are indoctrinated from the tech world that all that matters are ones and zeros, and the physical medium for those ones and zeros doesn't matter, is in fact disposable. Who has more power, Apple who just controls the information, Foxcon who actually assembles the iPhone, or the laborers who mine the material used to make it? When you buy a several hundred dollar brick from Apple, 100% of the mass comes from mining, where the laborer gets almost nothing and even the bosses just get table scraps in the global economy. The physical structure, and all the way the metals and ceramics get ordered about to make the thing exist come from laborers in Asia, who are much better off than most of the miners, but still living on table scraps from the real bosses in California, who create 0% of the mass and 0% of the structure, but control 100% of how information is arranged.
If I am to launch an intellectual attack against the evils of the modern digital computer, one place to start is with how data are stored. I show here three images of different kinds of data physically stored in the solder mask of the Raspberry Pi computer board.
One, the QR code, is totally incomprehensible to a human. I could in theory figure out how to turn that thing into a url, but it would probably take hours, way longer than would be required to just find someone with a phone and scan it in of course. And if I wanted to make a new QR code from scratch that would also be a nightmare not just for me, but possibly it would stretch the limits of the scanner software to deal with the imperfections of my human made patterns. So the QR code is mostly outside of what I can interact with in any useful way, either for input or output, without the centrally controlled digital computer to help. At the other end of the spectrum is the logo for Raspberry Pi, a drawing of an actual berry. This drawing will make no sense to a machine, and while I'm sure some jokers at Google will claim their machines can understand this and why it is what it is, but I don't buy that that is true in any useful sense. This simple picture of a physical thing is very hard for a computer to make any sense of in a useful way, and producing it is something a digital computer can mostly only do by brute force: have such tight control over every pixel of potential silk screen ink that an *arbitrary* shape can be made. In the middle, we have text. Easy for humans to read, hard but doable for machines to read, and you can write by hand easily enough but then the machines start to get very bad very fast.
A missing element here is a type of data that a human can physically create using only their mind and body and basic art tools, can also read using the same, and that a computer can both read using *very* simple code and write using simple hardware, such as a set of markers on springs with coils and magnets to drive them, which could easily be made from trash and found items.
This Instructable is to show one way to do this. In this example I just encode a URL, because those can make sense to both humans and digital computers.
crayons or markers or colored pencils or paints of the following colors: black,brown, red,orange,yellow,green,blue,violet(purple)
Step 1: Create Octal Table for Some Useful ASCII Values and Make Number Scale
Here I write out the octal values of the ASCII codes for all uppercase letters, all numerals, space and period. This is the bare minimum to make a URL, since they're not case sensitive. I like using the upper case letters, since they're lower numbers and start with 101 octal, so it's easy to remember to count up from there, with 101 as A, 102 as B, etc. No need to look it up! Just remember 101 is A and you can encode the whole alphabet. The numerals are also easy, if you remember that they start at octal 060. So 0 is 060, 1 is 061, 2 is 062, etc. Simple! Then I go find one of the millions of ASCII tables online to look up "." and [space]. Finally I write in a separate part of the page the numbers: 01234567 for the 8 types of digit we need for octal.
Step 2: Create Color Scale
I'm using part of the resistor color code here, which has
0 = black
1 = brown
2 = red
3 = orange
4 = yellow
5 = green
6 = blue
7 = violet
If you already know the rainbow colors from ROYGBIV, this is just that with I and V lumped into "purple", and black and brown added for zero and one respectively. Getting these numbers engrained in your head is useful for bench top electronics anyway, but this gives you a whole new use for those color/numbers.
Step 3: Color in the ASCII Table
Match digits to colors, one color to one box, color them all in.
Step 4: Write Out Your Message
arrange it on the graph paper so that it will be easy to program a computer to read it, on a nice simple grid that you can cover easily with a pair of for loops.
Step 5: Use Color ASCII Table to Encode URL
Again, just use the table to color in all the letters. That's the message! After some practice you can learn to read these letters by recognizing them, assuming your memory links to colors reasonably well.
Step 6: Document and Deploy
This should be a physical object that can self replicate by pointing back to where it was generated, in this case my Pinterest page. It should also be readable by humans, re-writeable by humans, and writeable and readable by a machine. I have not provided code here to do that. I have been experimenting a bit with this in Processing, and have some random bits of code on my github page here: https://github.com/lafelabs/ but I should warn you that:
1. I only ever took one computer science class and it was a 1 unit self paced intro to C that I took pass/not pass
2. I got a not pass
So probably you don't actually want to read anything I write, that's not the point. The point is for this to be so incredibly simple that you can write code to solve the problem using whatever your favorite software tools are and instead of reading some horrible technical document, just scrolling through a Pinterest pin board should be enough to tell a good programmer how to do the thing.
Also, this is scalable. If you used a mechanical device of some kind with pick and place precision of a micron, which should be pretty easy with piezos and trash manipulators, you can encode data at a high density that lasts forever(using plastic trash, welded into place), which absent any working software could be interpreted by some future human who just looks at the thing with a ball lens magnifier and camera. That's a big deal. CD's and DVD 's and a dozen other soon-to-be-obsolete data storage media are highly non obvious. A future user will have to pour through volumes of documentation and build a ton of really specialized equipment based directly on copies of our current equipment, wasting lots of their time. If digital data were coded with blobs of colored plastic trash using this public domain system, a future user would have to write a little code, but would not actually need to read any documentation. The instructions on how to build hardware and write software could also be encoded into the information stream, so the hypothetical future user only has to get from the ball lens and camera and computer system to ASCII, then read the ASCII, possibly run some code out of that ASCII, and the rest writes itself using physical assembly which I'll document on here shortly.