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.

Tools needed:

crayons or markers or colored pencils or paints of the following colors: black,brown, red,orange,yellow,green,blue,violet(purple)


graph paper

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.

<p>This is an interesting concept except one thing. What happens with color blind folks that would have an issue using this? I do applaud your efforts and thinking. Always great to see people that push things in different directions. I was also interested in seeing what colors you were going to associate with the numbers. Resister color code was the best idea since electronics does use those colors to mark resister values and everybody in basic electronic class learns them by heart. .</p>
<p>Yeah and what about the blind folks who can't see the numbers. See what road were going down?</p>
I think the black and white version with just filled rectangles can work with blind people and sighted and also machines by using a carved relief into a solid object for the coding. This is readable by a blind person using their finger, by a sighted person using shadows or ink, and by a machine using not just cameras but some much simpler capacitive pickup. Ultimately I think where I'm heading is stone and metal for the format for long term storage.
Yeah the color blind thing is a very good point! This is also a problem for resistor color codes as they stand now, and I'm not sure how that works. When I started this project I had no idea how complicated color really is. Then I found a couple giant books at the library on color technology and realized I bit off a bit more than I could chew with the use of color for machines. Even for the not color blind, telling brown and red and purple apart can get very sketchy in a lot of cases I think. Ah well, it's more art than technology perhaps in this case. That's part of why I'm moving to all black and white for the coding. It's way easier for both the human mind and the computer.

About This Instructable



Bio: I'm an applied physicist by training(phd Yale 2006, BA Berkeley 1998, math and physics), and have done physics research in the federal government ... More »
More by lafelabs:Scan Codes Without Printer Guerrilla Triangle Apply One Half Scaling To Wood Tetrahedron  
Add instructable to: