How I Built an LED Confession Board
Earlier this year, a co-worker pitched to me the McLeod Residence, an off-beat project in which he was an investor. "The Residence" is a bar/gallery/social club with an emphasis on creating a sort of synthetic family. I became a lifetime member quickly thereafter.
Something that appealed to me about the Residence is the emphasis on technology to enhance socialization. The McLeod Residence started its socialization efforts with its touch-screen photo booth: touch a monitor, strike a pose, and seconds later a picture is taken and immediately uploaded to Flickr for the world to see. In less than a year since this feature launched, thousands of photos have been uploaded. After seeing a list of ideas for more social applications, I decided to throw my hacking skills at one: an anonymous confession board.
The idea is simple: McLeods both near and far submit brief, anonymous confessions, which are broadcast to an audience both inside and outside the Residence. I'd seen the idea done with Group Hug, a site where confessions range from the whimsical to the bizarre, but I wanted my idea to enable participation on a more personal level. People could submit confessions by cell phone, via the web, by e-mail, or any other means.
I went on eBay and found a burgeoning trade in used BetaBrite LED signs for a hundred dollars or less. I specifically looked for BetaBrite after reading about a Ruby module specifically to talk to BetaBrite signs. A complete BetaBrite sign with all the needed accessories cost about $120 shipped. The sign connects to a PC via a serial port, and you control it using simple commands that the aforementioned Ruby module abstracts away.
At first I used my $300 Dell, running Ubuntu Linux, to control the sign. I still had some money left in my budget, though, and a dark bar is no place to put a cheap mid-tower computer case. Enter the MicroClient Jr., a computer made by a Thai company called Norhtec. The MicroClient Jr is a tiny x86 PC that offers two serial ports, three USB ports, VGA output, Ethernet, and even a wireless card. I bought the $200 model with a 1 GB CompactFlash card on which Damn Small Linux (DSL) was preloaded.
The MicroClient Jr. is amazingly tiny -- it has a footprint smaller than a CD case -- and it makes no noise at all when turned on. I'm told it consumes just 8 Watts of power, and it emits so little heat that you can mount it on the wall without any problems. I found DSL a little too hard to work with due to its LiveCD-like behavior. I discovered a great article by a man named Nicolas who loaded Debian 4.0 "Etch" onto his own MicroClient Jr.
There's something surreal about installing an operating system from a USB flash drive onto a CompactFlash drive, especially when said flash drive is half as long as the computer itself! After an agonizingly long install time I was ready to boot into a minimal system to start loading modules.
My MicroClient Jr now runs several useful services in its 120 MB of memory. (Of the built-in 128 MB, 8 MB are shared as video memory.) I set it up with
crond to periodically run my Ruby scripts, MySQL to store confessions, and OpenSSH to let me manage the PC from throughout the McLeod Residence. I didn't set up a swap file so I occasionally ran into memory problems when setting up multiple things at once. Patience is a virtue when you have a low-power 200 MHz chip to work with.
There are two Ruby scripts that manage the confession board. Every 2 minutes,
mail-to-db.rb runs. This script accesses the special POP account that I use for confessions, pulls in all messages, obfuscates the senders' addresses, and inserts records into the onboard MySQL database. Signatures and everything after the first 160 characters are eliminated. Every 5 minutes, a separate script called
db-to-sign.rb runs. This script pulls a sampling of confessions from the database, giving priority to those which haven't been shown yet. It then pushes an update to the sign.
This being just the first version of my sign, there are already many things I'd like to add or improve. Right now I'm writing updates to the sign using BetaBrite's TextFiles, which require that the sign go blank during an update. There is supposedly a way to write updates using StringFiles so that they take effect instantly, but so far I haven't been able to get this method to work.
Also, confessions are only visible if you happen to be sitting in the McLeod Residence. I'd like to enable communications using Twitter, everyone's favorite oh-God-not-another-messaging-service, so that we can easily push updates to the web.
Like any 1.0 product, some folks have noticed occasional bugs or made suggestions to me. Of note: Yahoo! Mail encodes all messages in a way that my scripts can't read, and its ad-laden signatures often show up verbatim on the sign. Also, confessions never expire; I've been asked to favor more recent confessions more heavily.
Like with any new product, I'll be keeping a close eye on the LED confession board. This is a really cool new project and I'm proud to have worked on it. Drop by someday during happy hour and check it out!