Obligatory warning: If you are fandom-averse, you might want to skip right to the photographs.
Some months ago, a good friend of mine dragged me kicking and screaming into the Homestuck fandom by way of a novel length fanfic she and a friend are writing.
I won't tell you about Homestuck. That's not what this post is about. I will, however, tell you about the latest project to come off of my workbench, which was building as functional a replica of Jade's lunchtop computer as possible.
Cutting to the chase, after being infected with the Homestuck meme and searching for something to do for the Mini-Maker Faire (because HacDC was gifted with a table) I got it in my head to build something to show off. It didn't take very long to settle on Jade's lunchtop computer. I did some calculations on the back of a napkin and came up with the following requirements:
- Lightweight. A child must be able to carry it around easily.
- As self contained as possible.
- Functional. A child has to be able to use it to carry out 'real' tasks. An adult has to be able to use it to carry out 'real' tasks as well.
- It has to have a display built in.
- It has to have more processing power than a toy.
- It has to be portable.
- It has to resemble the lunchtop computer in Homestuck as much as possible.
I had some experience with Sitwon's miniature display that he uses with his RasPi, which is a very crisp and clear display, is very lightweight, and fit neatly into the lid of the lunchbox I'd purchased from Amazon some weeks earlier. A little digging around produced a battery pack with the right kind of plug and an on/off switch that could produce enough power to run the display for extended periods of time. It required a little work to lengthen the wire but that was the work of a few minutes with a soldering iron. That the lunchtop would run ByzPi (the RaspberryPi port of Byzantium Linux) was a no-brainer. Storage was easy to come by because I already had a 4GB microSD card and SD card adapter for the RasPi and I picked up a 32GB flash drive at Micro Center to hold goodies to give away at the Faire (and by 'give away' I mean 'are free and legal to download if you jump on the Byzantium mesh we set up at the Faire').
In the end, the most difficult part of assembling the lunchtop was playing component Tetris to figure out where everything was going to go. I used pads of industrial Velcro (which uses cyanoacrylate adhesive instead of a less powerful glue) to attach functional modules to the inside of the lunchbox (and each other, where necessary). The two power packs were attached close to the sides of the lunchbox to distribute the weight as evenly as possible. The casing of the RaspberryPi was attached to the top of its power cell, and the connector slots held the board in position. The display was attached to the lid of the lunchtop with more Velcro, and the HDMI and power cables run to modules in the bottom of the lunchbox. I made liberal use of small (4 inch long) zip ties to bundle the wiring harnesses into more compact masses. Cable tie mounts were a lucky discovery I made at Home Depot that allowed me to use a few additional cable ties to hold the wiring harnesses to the inside of the lunchbox so they wouldn't spring up or work themselves loose.
Once I had everything wired up, plugged in, and stuck down, I installed a standard copy of Raspbian and then converted it into ByzPi with the usual process. I also discovered a couple of bugs that I fixed along the way and a couple of drawbacks that I can't fix, unfortunately. Most notably, the Debian package build scripts for node.js (the platform which Etherpad-Lite is built on top of) results in unusable packages due to Debian's package dependency idiosyncracies. I cheated a bit by using this much simpler process to construct brand-new packages which worked on the first try. I'm sorry to report that Etherpad-Lite requires more horsepower than the RaspberryPi has under its hood, and I had to disable it so there would be a workable system. Our Groundstation package seems to work just fine, though. I added a desktop background that would be immediately recognizable to stucks and printed out the best version of the lunchbox graphic I could find by Eri-Tchi (which lead to the discovery that the ink tanks in my printer are almost dry).
During the build process I had to rethink a few of my design decisions to make things work. The HDMI cable took up an unexpected amount of space because it required a fair amount of wrestling, and it was springy enough that it had to be fastened down securely so it wouldn't pop loose and possibly wreck havoc. I had to scrap the idea of an externally accessible Ethernet jack because it's next to the RaspberryPi's onboard USB jacks (which I was making use of). Given the prevalence of wireless networking these days, I think that not having access to a hardline is acceptible. I had to scratch the external USB jacks for the same reason. The devices plugged into the USB hub (and the position of the USB uplink jack on the side of said hub) meant that it wasn't feasible to expose the unused USB ports through holes in the side of the lunchbox, either (which I'm a little sad about, but them's the breaks). The extensions I spliced into the power line for the display use single stranded wire, which is all I had on hand at the time, and after some amount of opening and closing of the lid the those extensions will probably fail from metal fatigue. Multi-stranded wire would undoubtedly be more resilient (and I have some now) but I don't have time to replace the extensions.
I also discovered that the power pack I built for the display doesn't work for long periods of time. The batteries seem to last just fine, don't get me wrong. It was the odd bubbling and sizzling sounds plainly heard after a few minutes which resulted in a creative bout of cursing on IRC and frenzied pulling of power leads that were problematic. I took apart both the power pack and the display itself and saw no signs of component damage, scorching, melting, or rupture of individual batteries. I'm not sure what's going on there but for the Mini-Maker Faire I chose to use mains power to drive the display (though I got nearly five hours of runtime out of the USB power brick). I get the distinct impression that I need to integrate a power regulator into the power leads for the display but haven't had time to troubleshoot this problem fully.
I'm also very disappointed in the general state of wireless keyboards these days, in particular the miniature ones. It seems like just about every such keypad I found at Micro Center doesn't work well with the RaspberryPi, so I had to settle for a less crappy miniature USB keyboard. They keys are too small for me to touch-type on (but were perfect for kids, incidentally) and the touchpad is too twitchy to be helpful. The one I bought worked well enough for the Mini-Maker Faire but that's about it. Admittedly, I haven't tried any Bluetooth keyboards or mice yet, so in the spirit of fairness I should suspend judgement on them as a whole.
At the 'Faire I was shocked to see a sizable number of children (some no older than five years of age) make beelines for the lunchtop (and the two other RaspberryPis we had set up on our table), recognized them for what they were and immediately began hacking around with them. Some kids immediately started the copies of Scratch and IDLE that come with Raspbian and began hacking away. Others were fascinated by the 3D printed objects we had on display, or Spaceblimp 2 and 4, or Mirage's biosignal amplifier kit. It was refreshing and reassuring that there are kids out there who are just as gonzo about coding as I was as a youngling, and it gives me hope that there are kids out there who will probably program more than they will be programmed.
Here are the pictures I took during the build process, from start to finish.