How to transfer photos from a Game Boy Camera to a computer (in Linux)

A few days ago, I found a Flickr group thread that was prac­ti­cal­ly beg­ging for my input. It read some­thing like “Hey Everett, you’re sur­pris­ing­ly enough not the only per­son out there with these two inter­ests (one obscure and the oth­er semi-so). Would you be will­ing to help out quite pos­si­bly the only oth­er per­son in the world who cares about these things?”

Not only was I like, “Heck  yeah!,” but I decid­ed that this was wor­thy of blog­ging, in case a third indi­vid­ual hap­pens to devel­op these inter­ests. (If this is you, wel­come!)

So, in case you find your­self want­i­ng to get crap­py pho­tos—a term I use most affec­tion­ate­ly — like these:

off of one of these:

red Game Boy Camera

and you use Lin­ux:

(I kid!)

…like I do, read on.

The hard­ware I’m using to down­load pho­tos over USB is Smart­Boy USB car­tridge read­er (which is made by these peo­ple). And there just so hap­pens to be a great open-source pro­gram for facil­i­tat­ing this task using this device (or a sim­i­lar car­tridge read­er): gbcflsh.

So what’s the prob­lem? gbcflsh is only dis­trib­uted as source, and the source fails to com­pile under recent releas­es of Ubun­tu. I con­tact­ed the devel­op­ers of gbcflsh, and one gave me some sug­ges­tions for fix­ing the source code. They have yet to pub­lish the fixed source, so I’ll doc­u­ment how I got it to com­pile.

(If you don’t care about this, just grab the bina­ry I made: gbcflsh 32-bit, md5sum: 85b185706c3d5fe45b7787787f8510bd; gbcflsh 64-bit, md5sum: 4326e08fcfb5be39004c290df2a71988)

  1. Down­load and extract the source code.
  2. Install the fol­low­ing pack­ages:
    gcc 4.3.3, qt4-dev-tools, libftdi-dev
  3. Focus on the fol­low­ing files:
    src/Logic.cpp
    src/ReadFlashThread.cpp
    src/ReadRamThread.cpp
    src/WriteFlashThread.cpp
    src/WriteRamThread.cpp
  4. Add the fol­low­ing to the bot­tom of the #include sec­tion of each file:
    #include <cst­dio>
  5. That’s it! Com­pile it like you already know how to do (which I won’t get into here).

gbcflshWhen you run gbcflsh (you’ll need to do so as root, by the way), it’ll look a lit­tle bit like what you see to the right. Select the vis­i­ble options (USB, Auto, Ram: 128 KB) and click “Read RAM.”

If all goes well, you’ll end up with the con­tents of your cam­er­a’s RAM in the form of a .sav file. Great! The hard part is behind us, but we’re not quite done yet.

Next, you’ll need a pro­gram that will extract pho­tos from the save file. I believe there are a few, but they all seem to be for Win­dows. For­tu­nate­ly, the one I use works per­fect­ly under Wine. gbcameradumpIt’s called GBCameraDump.exe, and it can cur­rent­ly be found here. Down­load it, run it via Wine and select the .sav file you got from gbcflsh. You’ll have some­thing that looks like this screen­shot (except hope­ful­ly with bet­ter pho­tos).

I would also advise you to — if this sort of thing mat­ters to you — check the order of the saved images. They’re like­ly to be out of order due to, it seems, the way Nin­ten­do decid­ed to han­dle the sav­ing of images to the car­tridge. (Also, you’re like­ly to find some pho­tos you thought were delet­ed, which may come as a sur­prise.)

So there you have it: how to get pho­tos off of this cam­era of the past, using the oper­at­ing sys­tem of the (sigh) future.

Upgraded to WordPress 3.0

The old adage (which I think I made up) about spend­ing more time geek­ing around with a Word­Press instal­la­tion than actu­al­ly writ­ing in the damned blog holds true, ladies and gen­tle­men.

I just fin­ished upgrad­ing this fine blog to the newly-stable Word­Press 3.0.

In case you were won­der­ing and/or sit­ting on the edge of your seats, I took great care to:

  1. Dis­able all of my plu­g­ins
  2. Dump a copy of my Word­Press MySQL data­base using the aptly-titled mysqldump
  3. tar a copy of my Word­Press direc­to­ry
  4. Do the upgrade!
  5. Re-enable the plu­g­ins one-by-one, mak­ing sure each works (or at least does­n’t break any­thing)

While I know not every­one is so lucky, I’m glad to see that every­thing appears to work here, because I’d be death­ly embar­rassed if, you know, Google or Bing’s webcrawler came by and things weren’t look­ing up to my usu­al stan­dards.

Fine wine games

There is a cer­tain class of video game whose exis­tence I’ve been slow­ly dis­cov­er­ing over the last few years. Let’s call these fine wine games.

My idea of a fine wine game1 is one that is best expe­ri­enced a bit at a time. You know, enjoyed in mod­er­a­tion. The kind you only pick up and play every once in a while… because it’s just that good.

Does that sound counter-intuitive? Why would you want to take it so slow­ly with some­thing so great? Well, here’s oth­er side of the coin: this sort of game also has an ele­ment of rar­i­ty, or scarci­ty to it. It’s not the sort of game that prints mon­ey, sell­ing mil­lions of copies, so the chances of a sequel being made aren’t very good.

So enjoy the game itself. Savor it as you go. Don’t cry because there won’t be a sequel; think of how lucky you are to play it in the first place! Wring every drop of enjoy­ment from the expe­ri­ence that you can.

Here are a few games you’ll find in my cask:

Zack & Wiki (Nin­ten­do Wii) The orig­i­nal fine wine game in my book. Crit­i­cal­ly acclaimed; sold quite poor­ly. Chance of sequel? Slim-to-none. Thus, I decid­ed that I’d only play Zack & Wiki spar­ing­ly.

With save dates as my basis, I’d esti­mate that I would pick it up every cou­ple of months, play for a day or two (enough time to strug­gle through my cur­rent lev­el feel­ing like the world’s biggest moron until final­ly feel­ing like the world’s great­est genius, which is what this game does to you). And then, back on the shelf it would go, to wait for the next time I’m in the mood for savory gam­ing great­ness.

Thus, despite hav­ing bought this game in 2008, I only com­plet­ed it this past week­end. $40 so very, very well spent.

Soul Bub­bles (Nin­ten­do DS) While I bought my copy from an Ama­zon Mar­ket­place sell­er, this game was released in the U.S. as a Toys R Us-exclusive title. If this arti­fi­cial­ly lim­it­ed its audi­ence, that’s sim­ply unfor­tu­nate, because this is a beau­ti­ful game… one that I tend to for­get all about for months on end before redis­cov­er­ing it anew every time.

I’ve been tak­ing my time with Soul Bub­bles, and have more than half of it (read: years of enjoy­ment) left to go!

Mother/EarthBound series (Nin­ten­do NES/SNES/GBA) Enough has been writ­ten about this series of quirky, rather un-RPG-like RPGs, which have attract­ed a cult-like fol­low­ing. Thus, I’ll offer only this quick assess­ment: the fact that English-speaking gamers have the oppor­tu­ni­ty to play any of the three games should be enough to make a fan thank their lucky stars.

While it could be said that three games released over the course of fif­teen years effec­tive­ly nul­li­fies any sup­posed rar­i­ty… hey, you know what? Fuck you. Nin­ten­do trans­lat­ed Moth­er and then prompt­ly shelved the Eng­lish ver­sion, Moth­er 2 (Earth­Bound) received one stinker of a U.S. mar­ket­ing cam­paign, and the Eng­lish trans­la­tion of Moth­er 3 had to be under­tak­en by a team of incred­i­bly devot­ed fans.

Moth­er games in Eng­lish are some mighty fine wine.

Cave Sto­ry (Win­dows, Wii­Ware, et al.) Cave Sto­ry is the work of one ded­i­cat­ed ama­teur over the course of five years… work that was sim­ply giv­en away for free as a Win­dows game, and lat­er port­ed to a hand­ful of pop­u­lar plat­forms by fans.

I start­ed Cave Sto­ry a few times over the years, but the lack­lus­ter Lin­ux port kept putting me off of it; I knew I should wait for a good port to be avail­able for a plat­form I use. The Wii­Ware ver­sion was released a few months back, and the rest is his­to­ry. After years of antic­i­pa­tion, I swilled this one down in a decid­ed­ly non-fine-wine man­ner.

Whoops.

Whether games or oth­er media, what do you con­sid­er to be your fine wine?

https://writegeek.com/wp-content/uploads/2010/06/prints_money.gifpr
  1. Ini­tial­ly, the idea I had was that a game of this sort (it was Zack & Wiki that brought this to mind) would be enjoy­able to play quite lit­er­al­ly with a glass of wine, as this is the sort of game that would be best enjoyed at a relax­ing pace, in a chill atmos­phere. But last week­end, I instead start­ed think­ing of these games metaphor­i­cal­ly; the game itself is the wine. I liked that thought, and knew I had to write this post.

How Windows ate my EXIF data (and how I mostly fixed it)

The background

As we’ve already estab­lished, I love to take pho­tos, and I have a strong bias toward dig­i­tal. While I received my first dig­i­tal cam­era (the afore­men­tioned Game Boy Cam­era) on my birth­day in 2000, it was­n’t until the fol­low­ing sum­mer that I got my first “real” digi­cam, a Nikon Coolpix 775.

From there, the flood of dig­i­tal pho­tos began. Ini­tial­ly, I just dumped every pho­to into a sin­gle fold­er on my shiny, new, gonna-help-me-do-well-in-college-this-fall lap­top, and let their sequen­tial file­names (DSCN0001.JPG, 0002, etc.) do the “sort­ing.”

This worked for a while, until it became clear that hav­ing all of my pho­tos in one fold­er was poor for both orga­ni­za­tion and per­for­mance, so I start­ed orga­niz­ing my pho­tos using dat­ed sub­fold­ers (e.g. photos/2001/2001 – 08-12/). This was all the orga­ni­za­tion I did for my pho­tos, and was also how  I viewed them, up until I began using pho­to man­ag­ing soft­ware (first Picasa on Win­dows, lat­er F‑Spot under Ubun­tu).

The problem

While these apps excel at tak­ing pho­tos and turn­ing them into a well-organized stream based on date tak­en, I noticed that a small hand­ful of pho­tos were out-of-place in the time­line.1

After spend­ing some time puz­zled by this, it occurred to me that:

  1. none of these pho­tos had EXIF data
  2. all of these were tak­en in 2001
  3. all of these had been tak­en in “por­trait” mode (when you turn the cam­era side­ways), as opposed to “land­scape”

In an exam­ple of clear­ly mis­guid­ed, youth­ful indis­cre­tion, I had man­u­al­ly rotat­ed these pho­tos — remem­ber, cam­eras did­n’t have ori­en­ta­tion sen­sors back then — using Win­dows Pic­ture & Fax View­er (Win­dows ME/XP’s default), and it ate my pho­tos’ EXIF data! From then on, I start­ed using the cam­er­a’s built-in rotate func­tion­al­i­ty.

But, ugh, I still had a bunch of old, messed up pho­tos. For­tu­nate­ly, I was­n’t total­ly in the dark about these pho­tos’ chronol­o­gy, as I knew the cor­rect dates that these pho­tos were tak­en, thanks to the sur­round­ing sequen­tial pho­tos still hav­ing their EXIF data.

The solution

For the last few years, I let these few pho­tos just be, annoyed that they would always show up in the wrong places. So today, I final­ly did some­thing about this: I gave them new EXIF data using the best infor­ma­tion I had at my dis­pos­al.

While I did­n’t know the pre­cise time tak­en, I did have dates for these pho­tos, so I fig­ured giv­ing them EXIF with the right date and wrong time was bet­ter than no date at all. I accom­plished this using a pair of Lin­ux pro­grams: jhead and touch. Here’s how:

First, I cre­at­ed an EXIF tag for a giv­en pho­to using jhead:

$ jhead -mkexif DSCN1282.JPG

Then, I touched the file (in Unix‑y par­lance, change the file’s “mod­i­fied” time­stamp) to mid­night (00:00:00) on the appro­pri­ate date (e.g. August 12, 2001):

$ touch -t 200108120000.00 DSCN1228.JPG

Final­ly, I used jhead to change the file’s EXIF time­stamp to the newly-fixed mod­i­fied date:

$ jhead -dsft DSCN1282.JPG

Hav­ing re-added the prob­lem images to my F‑Spot library, the pho­tos now appear more-or-less in the place they should. They’re now good enough that I’ll nev­er again have to see those pho­tos mixed in with the wrong year!

  1. I know what you’re think­ing: that there were times when I for­got to set the date on my cam­era. Nope. No way. I nev­er for­get to set the date on my cam­era, because mak­ing sure my pho­tos have the cor­rect date and time is some­thing that I’m a bit obses­sive about, and the first thing I do after charg­ing my cam­er­a’s bat­tery is always check the date.

Warmth, fuzz at 60 MPH

Last Fri­day evening I was alone, dri­ving south on one of South Flori­da’s fine express­ways, when I had the strangest moment of, for lack of a bet­ter term, empa­thy.

(This is notable because the word with which I would expect myself to have end­ed that sen­tence is “con­tempt.”)

The dri­ver in front of me, pilot­ing a Mit­subishi that was either sil­ver or gold (dif­fi­cult to tell which in the half-light of the express­way’s over­heard street­lights), was­n’t dri­ving at a pace that was to my lik­ing, so I decid­ed I would pass them. I engaged my turn sig­nal and began merg­ing over to the next lane. They must have sensed, from the amount of time I had spent behind them, that they were not dri­ving at a pace that was to my lik­ing, so at the exact moment I start­ed mov­ing over, they too start­ed mov­ing over in the same direc­tion I was. (Of course, they did so with­out sig­nal­ing,1 which is the South Flori­da Stan­dard.) Just as simul­ta­ne­ous­ly as we began them, we abort­ed our lane changes, as we each noticed the oth­er’s attempt.

It was at this moment that I felt a warm, fuzzy feel­ing, the likes of which I almost nev­er expe­ri­ence while dri­ving down here. In that moment, I became quite aware that there was a per­son dri­ving that Mit­subishi. It’s easy to for­get that the oth­er cars on the road are dri­ven by peo­ple, espe­cial­ly at night when it’s not so easy to see them through their win­dows. But in that dri­ver’s moment of obvi­ous self-correction, it could not be clear­er.

Also, I will not let it go unsaid: the events that unfold­ed made it clear that the per­son in front of me actu­al­ly looked in their mir­ror before attempt­ing to change lanes! Their care­ful con­sid­er­a­tion only makes me aware that they were at least a bit like me.

Around here, that’s say­ing some­thing.

  1. That’s fine, real­ly. Had they sig­naled and done the oth­er not­ed things, I would not be writ­ing this post, because I would have died that night, from some sort of shock.

It’s fear, mostly.

Inc. Mag­a­zine: Why Is Busi­ness Writ­ing So Awful?

When you write like every­one else and sound like every­one else and act like every­one else, you’re say­ing, “Our prod­ucts are like every­one else’s, too.” Or think of it this way: Would you go to a din­ner par­ty and just repeat what the per­son to the right of you is say­ing all night long? Would that be inter­est­ing to any­body? So why are so many busi­ness­es say­ing the same things at the biggest par­ty on the plan­et —  the mar­ket­place?

Fear, most­ly.

(via Ryan)

Why doesn’t my phone have a thermometer?

It’s get­ting pret­ty warm again (did it ever stop?) in South Flori­da, so today when I had the mis­for­tune of being out­doors, I got to won­der­ing why with all the sen­sors found in most mod­ern smart­phones, they don’t usu­al­ly include a ther­mome­ter.

It’s com­mon to find sen­sors for ori­en­ta­tion, screen contact/pressure, video, sound and even loca­tion. How­ev­er, for some rea­son, the task of telling me about the cli­mate sur­round­ing me gets out­sourced to a third-party that is some­where com­plete­ly dif­fer­ent.

Just think about that for a sec­ond.

What we’re miss­ing is the abil­i­ty to know the actu­al con­di­tions we’re expe­ri­enc­ing. If one hap­pens to be indoors, in the shade, or some­where else entire­ly, all they’ll get from their phone is the typ­i­cal out­door tem­per­a­ture for their gen­er­al area. Even if they hap­pen to be inside of, and get recep­tion in, a walk-in freez­er. (“It’s cer­tain­ly not 90° F in here…”)

On the oth­er hand, I can think of rea­sons why our phones tend not to han­dle their own tem­per­a­ture read­ings. Wire­less car­ri­ers obvi­ous­ly pre­fer that cus­tomers pay for data plans to use as many phone fea­tures as pos­si­ble. There’s also the mat­ter of expec­ta­tions: nobody (but me!) seems to demand the fea­ture, so why include it, even if the hard­ware could­n’t be all that pricey?

But most impor­tant­ly, the sen­sor would like­ly be undu­ly influ­enced by the tem­per­a­ture of our hand, the atmos­pher­ic con­di­tions in our pock­et, the heat gen­er­at­ed by the phone itself, and so on. Heck, I dis­tinct­ly remem­ber how wild­ly inac­cu­rate my circa-mid-90s Casio G‑Shock ther­mome­ter watch (same mod­el pic­tured at right) was.

But gosh, was it ever enter­tain­ing to watch that dial spin! I also used to watch that bar graph scroll through the last few hours of record­ed tem­per­a­tures and pre­tend I was in a boat watch­ing waves go by. Ah, child­hood…

I can’t quite place my fin­ger on what I would do with the abil­i­ty to keep a read­ing of my own sur­round­ings’ tem­per­a­ture over time… but I know I want it.