QR Averages Based on Pixel Dimensions

So the averages I’ve been producing have been normalized to one specific size, in this case, 2400 x 2400 pixels for the generated, clean QRs. However, the actual encoded pixel width of the QR depends on how much data one wishes to encode. If you look at any of the composites I’ve done, you see that the anchoring squares come in various sizes, creating a blurry perspective effect in the saved composite.

To generate “clean” averages, then, I would need to sort the QRs by size and produce averages off those subsets. Which is what I did. Here’s a quick histogram of the QR sizes I have, using today’s set of 180 total QRs:

This is something of a “long tail” graph, with a big bulge in the smaller sizes and very few in the larger sizes. In fact, the three largest sizes only have one member each, which means no composite is possible. Those I will not include. The rest, however, I did composite, and the results are here:

216 pixels:

248 pixels:

280 pixels:

312 pixels:

344 pixels:

376 pixels:

408 pixels:

Notice how crisp the anchoring areas of the QR graphic are now, as opposed to the data areas, which vary with each QR. Alas, none of these “clean” composites actually goes anywhere, at least not with the QR reader on my phone.

Sixth Round of QRs in the Wild

Another set of QR codes discovered lurking in the Real World. Fun fact: one of the codes used I used myself at Somerville Open Studios as a way for people to sign in to my email list. Unfortunately, only three people actually used it: one was an abject failure, one didn’t enter his email address, so only one person actually used Web 2.0 personal digital content in the way it was intended. Here’s the QR:

And here are the as-shot and generated QRs, numbers 151 through 180:

And the composites from the entire set of 180:

Two Alphabet Samplers: Traditional and Articulated

I’ve been doing some letterpress runs for the upcoming Somerville Open Studios on the 5th and 6th, mostly of simple things that people might like to have as display pieces. One of these was an alphabet sampler, printed in 877 Gold here:

After doing this, I thought of a post I’d done long, long ago about extending the English alphabet and coming up with some new letterforms. Nothing much came of it, but I’d thought of doing a New Alphabet sampler then, so I thought, why not try something like that now? Instead of coming up with new letters, though, just rearrange the letters in a new way and try to shoehorn the extraneous ones in somehow. So, here’s the Articulation Alphabet Sampler:

This particular sampler arranges the letters in order of place of articulation, ranging from P and B using the lips all the way back to H and X using the back of the throat–in this case, “X” standing for the Germanic sound you get in “Bach”. The other oddball letters are C, standing in for the “ch” in “church”, and Q, which is supposed to be sounded with a forward “rk” sound in words like “Iraq”.

You can even sing it:

♩Pee bee em ef vee eye tee ♫
♪ Dee ee ess zee en ell sea ♩
♫ Jay are ey ♩
♩Why cue kay ♬
♫ Jee you double-you oh aitch ex. ♫
♩Now I know my P-B-Ms ♬
♪ Tell me what you think of them. ♫

Another Way to Get More ETG Pixels

Continuing on the idea of stuffing the Twitter pipeline with pixels, maybe I should just not worry so much about compression and figure out a way to divide images up and let the coding enable people to reconstitute them. Thus, I have prepared a tiled Twitter graphic, expanding from a simple 9 x 12 pixel CGA graphic to a 27 x 36 pixel graphic in 9 tiles.

For this end, though, I’ll need to modify the header definitions. Consider this ETG V0.2, with a small tweak on how to deal with images that are supposed to be displayed together.

The ATG frames code includes a 4-letter ID squib and 2 hex digits for animation frame numbering. I reserved the first block of 128 for a non-looping animation set, which is actually kinda silly because most Web animations are looped anyway. So let’s use that block to indicate the location of each tile in the set. This gives us a latitude of 7 tiles across and 15 tiles down, or tile coordinates 7E.

If you have a tileset of 7 tiles by 10 tiles, then the tiling number 45 means “fourth tile from the left, fifth tile down”. The tiling number 12 means “first tile from the left, second down”. And, using hex, number 7A means “seventh tile from left, ten down”, or the last tile in this set.

For this image, I tiled an image into a 3×3 grid, or 9 tiles. For our first tile, the header will look like this:

`CGA which gives the color space

`09×12 which gives the size of the tile

`FedW11 which gives the ID squib and the origin tile (first from left, first down)

and `{ which locates the data payload.

The tiles can be tweeted in any order, because they share their unique ID squib and their ordering is contained within their headers. However, I prepared these in left-right/top-down order, so I’ll paste them here that way:

`CGA`09x12`FedW11`{000600000000000000000400000000400000000004000
0E7E80000000000000000000000000000000000000000000000000000000000

`CGA`09x12`FedW12`{000000008000000067000688087000C7707700077C867
000C7786700087778700067787800008E878066608887086206878600088687

`CGA`09x12`FedW13`{600068808680087808600066888088187780938077778
997067787199077777039187C760091177770001199E7000009993000000399

`CGA`09x12`FedW21`{006008604060666660604006086000040660000000004
0000000040000000000000000000000000008800000088860000870E668807E

`CGA`09x12`FedW22`{E777FFF776776877EF788888667766886877767888677
7777767F777E77777E777E77F776777F77777C67777688777C7788787C7C7F7

`CGA`09x12`FedW23`{677E6CC8867C7777888677E7777066777F67006767777
800087877780000660668804008778888860777788A007778A6630137787710

`CGA`09x12`FedW31`{0608000686000600460400060064008EFFF70000666E6
40006EE6A0000680600646066EE0600460666664008EE7C760646E7766800EE

`CGA`09x12`FedW32`{EE77A997E7F77708E6F7F7E66ECF76866F6F7C666A6A6
77088666A7E76E0000F77E7E8677FEEE6000777770444066E6000666E660000

`CGA`09x12`FedW33`{C76E00000C676400006E76040047670404067E6040040
780004000600000000000000000000000000000000400000000000000000006

Here are those pieces:

Here they are assembled:

And here they are enlarged for more clarity:

Further CGA ETG Compression

I’ve been trying to find a way to compress images even more, so I could expand the size of the color tweets available. Basically, since Twitter uses only the usable characters of ASCII text, and it can be hard to type higher-bit ASCII on some keyboards, I’ve pretty much exhausted the palette of encoding options with my 6-bit “0-9 A-Z a-v” encoding scheme. So… instead of encoding, maybe I could address patterns in the data itself.

One of the easiest things to see in the data are strings of repeating elements. If I could further encode those strings I could save room and not have long lines of 000000 or 33333 for fields of color in the image. Let’s say I simply put the number of pixels in front of the code for the pixel color, and the TwGD will decipher what was meant. So, a string of eight white CGA pixels, FFFFFFFF, would be represented as 8F.

The only problem with this is that the character 8 already encodes for dark grey. Putting numbers in the stream will collide with the numbers already there. So I’ll need to convert the hex numbers into a new coding scheme, so the pixel quantities don’t mess with the pixel codes. Say, pixel 0 (black) equals a, pixel 1 (dark blue) equals b, and so on. In this scheme, the string of white, FFFFFFFF, would become 8p. That’s a savings of 6 characters!

Of course, you won’t get that kind of savings everywhere. Especially 2-pixel doubles, since you’re just replacing 2 identical pixel codes with a “2″ and the new code. There’s still some squishing to be had here. For this special case, I came up with a second series of codes, using punctuation to stand for pixel doubles. Here’s the full set of codes for this scheme, which I’m calling Similar String CGA encoding (“CGS”)

0 = a   00 = !
1 = b   11 = "
2 = c   22 = $
3 = d   33 = %
4 = e   44 = &
5 = f   55 = '
6 = g   66 = (
7 = h   77 = )
8 = i   88 = *
9 = j   99 = +
A = k   AA = ,
B = l   BB = -
C = m   CC = .
D = n   DD = /
E = o   EE = :
F = p   FF = ;

So, using this additional compression scheme, I was able to encode a 12 x 17 pixel CGA image with plenty of room to spare. It doesn’t sound like too much extra, but that’s 150% the area of the 10 x 13 CGA pixel image I tweeted back in December, and includes the ETG header information, too.

Here’s the image, a color version of the self-portrait from yesterday:

And the resulting tweet, using “CGS” as the code for this new compression scheme:

`GCS`12x17`{6ag12ae!ghi9ago11ag8aigag4ah*gpiag3a4h3pigahih3ihphioa3hp
)phigia)ih;hp)!*)p3hpi3ai5hgh3a3ihp4h!*haihp)g!b)i!i)3ajd)i8abj3hi5a

A New ETG (Encoded Twitter Graphic) Self-Portrait

I dusted off the old ETC encoding protocol today for a project I’m doing for a show entry, creating a self-portrait to send through social media. I used the 6-bit compression scheme I used for old Teddy Roosevelt’s 2-bit gray image for an image of myself. Because I did a couple tweaks on the protocol between encoding Roosevelt and nailing down the format, I had to sacrifice a line of pixels for this image. It’s 15×25 pixels, not 15×26, but that’s not too bad. The tweet:

`2bg`15x25`{K5LLX01MH5G41Kle00GR4004P0006M01GQL07glb0R$$r9UQ$lUkckhlh
$!PFl$$zMh$luck$gq6R!hm6Q!gWRMl$Hdql!LNj1O0Nwb0G2lgG51hxH006fGH00004

And the encoded image:

Some Older Images From My Silver Past

I recently entered a call for entries at the Nave Gallery, for a show that was interested in alternative process (non-digital) photography. Back in the day, I burned quite a lot of Tri-X and Plus-X film in my trusty little Minoltas, and also dabbled in HIE, which was Kodak’s 35mm infra-red film. Fortunately for me I was using those Minoltas, because enough infra-red gets through plastic camera bodies to fog the HIE, and both those cameras were made of aluminum back in the 70s.

HIE will record visible light, too, so I used a 780nm filter, which looks just like a piece of black plastic. I taped the filter to the lens so I could flip it up out of the way to compose the shot, then flip it back down to take the picture. I never knew exactly what happened when the shutter clicked until I got the film developed.

Here are the two images that were accepted into the show: “Globe & Window” and “Vent & Yucca”. I may post more images later on.

Fifth Round of Composite QRs

I haven’t been vigilant about this, but occasionally snap a picture or two if I’m on the T or happen to catch a QR while out in the bush. We’re up to 150 individual QRs, so things are blending nicely.

Batch 05 as-shot:

Batch 05 generated from the photos and composited:

Full set of 150 images as-shot:

Full set of 150 re-generated: