Firefox Miami Style?

Part of run­ning an actu­al serv­er (as opposed to shared web host­ing) is actu­al­ly being con­cerned about secu­ri­ty. I reg­u­lar­ly keep an eye on my access logs and the like, and I don’t usu­al­ly find that much to wor­ry about — I just keep ipt­a­bles, and a few oth­er tools, with­in reach.

But this par­tic­u­lar user-agent string show up in vis­its from time to time (bots, I’m guess­ing)… what the hell is Fire­fox Mia­mi Style?

An exam­ple:

37.9.53.64 - - [26/Dec/2013:13:34:39 -0500] "POST /wp-login.php/wp-login.php HTTP/1.1" 200 10956 "writegeek.com/wp-login.php/wp-login.php" "Mozilla/5.0 (Windows NT 6.1; rv:21.0) Gecko/20100101 Firefox/21.0 USA\\Miami Style"

Try­ing to POST to a nonex­is­tent URL? That’s clas­sic Mia­mi style, if I’ve ever seen it.

Yes, that’s a new laptop. Yes, I know what year it is.

lenovo-thinkpad-x230-frontI know it’s 2013 and as far as “mobile com­put­ing” goes, I’m sup­posed to be pinch-zooming and app-buying and poorly-typing on a tablet like the cool kids. And I do — my  O.G. Nexus 7 (the 2012 mod­el) some­times makes a nice com­pan­ion1 to my Galaxy Nexus Android phone, by being slight­ly faster and hav­ing a slight­ly bet­ter screen. How­ev­er, over the 15 months I’ve owned the Nexus 7, it nev­er quite became the sec­ond mobile device that I want­ed. Use­ful, yes… tran­scen­dent, no.

I knew some­thing was still miss­ing, so I recent­ly went and bought a small lap­top com­put­er, a Leno­vo ThinkPad X230, to car­ry around. It runs Debian Lin­ux. It does the things I want. It’s a won­der­ful thing to have.

I needed this because…

The lap­top that the ThinkPad replaced was from 2007, and while a decent com­put­er from back then would like­ly still be good today, my old lap­top was not a decent com­put­er, even when new. Back then, I didn’t know just how painful­ly slow an ultra-low-voltage, low clock-speed CPU could be… I guess I thought it being dual-core would some­how make up for it. Also, the cool­ing fan was a bit of a whin­er, and would con­stant­ly and very vocal­ly dis­agree with Linux’s style of pow­er man­age­ment. The darned thing would con­stant­ly sound like a mini-jet-engine — too obnox­ious to use around peo­ple I actu­al­ly like.

Low on pow­er, high on noise — not a good com­bo.

But these days…

In the last half-decade or so, main­stream humans seem to have accept­ed the smart­phone, and seem to be doing the same for the idiot cam­era (“tablets”). It’s the “Post-PC era,” or some­thing. Plen­ty of peo­ple seem to be doing okay with­out spend­ing much time on their general-purpose per­son­al com­put­ers, but over time I real­ized that as I tried to go along with this trend, I was miss­ing out. For me, a com­put­ing life cen­tered around mobile “smart” devices was one of unac­cept­able com­pro­mise. Com­pos­ing more than a cou­ple of sen­tences with­out a key­board makes me want to just not both­er to write, devices with­out expand­able stor­age make one depen­dent on rent-seeking “cloud” ser­vices, and the mobile app ecosys­tem has hand­fuls of well-known prob­lems (pri­va­cy, lock-in, and so on).

There’s a place for these devices, even in my life, but they just don’t replace a general-purpose com­put­er. Ever.

So I did this…

I made sure not to make last time’s mis­takes when buy­ing this com­put­er. The i5 CPU is more than ade­quate, and I have a ton of RAM. ThinkPads are known to play nice­ly with Lin­ux, because they’re used by that awe­some kind of geek who fig­ures that shit out (and wouldn’t put up with a jet engine lap­top). It runs Debian Jessie (“test­ing”) with only minor annoy­ances — not per­fect, but noth­ing I can’t han­dle.2

Hard­ware build-quality and dura­bil­i­ty are major plusses for an every­day car­ry machine, and that’s what ThinkPads are known for. And of course, Track­Point is tru­ly the best way to mouse. A lot has been said about the new ThinkPad key­boards, and while this one suf­fers from the bull­shit key lay­out (com­pare it to the awe­some, ugly 1337-geek clas­sic style), the key­board actu­al­ly feel pret­ty nice to type on, even if the bizarrely-placed PrintScreen key occa­sion­al­ly enrages me.

And finally…

In the spir­it of bury­ing the lede, here are some things I intend to enjoy while tot­ing around this rock-solid, large-screen-and-real-keyboard device:

  • Full desk­top OS that does all the things
  • Bet­ter web brows­ing; approx­i­mate­ly 1,000 open tabs
  • Actu­al­ly writ­ing things, blog­ging sil­ly ideas and such
  • Tons of local stor­age (SSD + HDD = yay!)
  • Semi-modern PC games, includ­ing lots of Hum­ble Bun­dle good­ness
  • Codecad­e­my
  • Inter­ac­tive fic­tion, per­haps (now, where did I mis­place my patience?)
  1. My most com­mon tablet uses are as fol­lows: gam­ing, view­ing TV episodes and movies, and web brows­ing. I’m putting this in a foot­note so as not to side­track myself, but it’s an impor­tant point. One of the best things about hav­ing the tablet was that it gave me anoth­er 16 GB of stor­age, on top of the 16 GB avail­able on my phone. A lot of peo­ple seem to think that Google inten­tion­al­ly lim­its the stor­age avail­able in their flag­ship devices to push peo­ple into using their mon­e­ti­z­able “cloud” media offer­ings instead of local stor­age. I wouldn’t be sur­prised if this were true, but hon­est­ly, the #1 rea­son I’d like more local stor­age in my devices is not to car­ry around more media, but more and larg­er apps — some­thing you can’t put in the cloud.
  2. I imag­ine Debian Sta­ble or Ubun­tu would be bet­ter.

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 camera’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 doesn’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.

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 wasn’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 didn’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 camera’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 wasn’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 didn’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 camera’s bat­tery is always check the date.

…but my new camera sucks a little too much

[If you’re just join­ing us, see part one.]

I recent­ly felt like I need­ed a new crap­py cam­era in my life. I found myself in a drug­store yes­ter­day, where I pur­chased one of those minia­ture ones, a Viv­i­tar Clip­shot (née Sakar 11693). At $10, the price was right but it’s a lit­tle too cheap to have a screen built-in, and the “viewfind­er” is a laugh­ably inac­cu­rate hole in the body. Even more excit­ing, I thought! It’ll be like tak­ing pho­tos with film and wait­ing to see what devel­ops!

I couldn’t find ref­er­ence to the cam­era work­ing in Ubun­tu with a quick Web search, but the specs on the pack­age claimed that it works in OS X with­out dri­vers. This seemed to imply that it was a stan­dard USB Mass Stor­age device, the kind you plug in and have just work, as it appears to the com­put­er as a remov­able dri­ve.

So I expect­ed quick and easy access to my pho­tos. I was wrong.

The OS detects the device, but not as a nor­mal cam­era device, nor a Mass Stor­age device. This is what lsusb had to say about it:

Bus 007 Device 008: ID 0979:0371 Jeilin Technology Corp., Ltd

Search­ing for that lead me to a num­ber of blog and forum posts where peo­ple dis­cussed ways to pos­si­bly get the cam­era work­ing, but to no avail. This post received a num­ber of replies, with this reply being the most help­ful: (empha­sis mine)

Pro­fes­sor Theodore Kil­go­re from Alaba­ma has been work­ing on a dri­ver for this cam­era. As of about 6 months ago, the Pro­fes­sor had me down­load his dri­ver for the cam­era, and the dri­ver lets down­load files from the cam­era. But since the pic­tures are stored in an encrypt­ed for­mat on the stor­age media of the cam­era, there is still work to be done to decrypt the pic­ture files into a view­able for­mat (this is the last I heard any­way).

The pho­tos are stored encrypt­ed on the cam­era, so you have to use the includ­ed Win­dows soft­ware to down­load them. Glad to know they’re being pro­tect­ed… from me. This crap­py cam­era is a lit­tle too crap­py for me. I haven’t tried it on a Mac yet, but I can’t imag­ine how this could pos­si­bly work with­out dri­vers.

There will be more crap­py dig­i­tal cam­eras in my life, but one can only hope that the next one sucks in the way it should.

Break­ing news: This piece of garbage does not work in OS X either.

More introduction (this time, the geek side)

I under­stand that self-identifying as a geek in 2010 makes me nei­ther cool nor spe­cial, now that geeks are con­sid­ered… you know… cool and spe­cial. But hav­ing laid out my blog­ging cred, I’d still like to make the case for the geek side of the equa­tion (equa­tions being some­thing I actu­al­ly know very lit­tle about).

Yep, a dis­taste for math­e­mat­ics cur­tailed dreams of study­ing com­put­er sci­ence, or some­thing along those lines, in col­lege. Back in mid­dle school, how­ev­er, I was hap­pi­ly hack­ing BASIC in my school’s Apple //e lab. I had sort of a knack for it; in com­put­er class, I raced through the pack­et of pro­grams we were required to tran­scribe faster than any­one else, and began spend­ing my time writ­ing my own pro­grams, which would do things like tell my friend that his favorite foot­ball team sucked, repeat­ed­ly, through the mag­ic of 20 GOTO 10.

I didn’t real­ly apply this knowl­edge very well at the time; it would still be a cou­ple of years before I had a com­put­er at home. And even when I final­ly did, a com­plete­ly awe­some Pen­tium 166 MHz IBM Apti­va1 run­ning Win­dows 95, I didn’t quite know how to get start­ed pro­gram­ming on it.2

Anoth­er device appeared in my life a few years after the com­put­er; I received a TI-83 graph­ing cal­cu­la­tor for use in Alge­bra II. I ini­tial­ly found that it made a great mobile Tetris machine, but it wasn’t until read­ing Bill Gates’ The Road Ahead, in which he recount­ed his ear­ly days pro­gram­ming prim­i­tive com­put­ers, that I found myself inspired to do more with it.3

The cal­cu­la­tor seemed like a good place to start pro­gram­ming, espe­cial­ly because the user man­u­al con­tained an entire chap­ter devot­ed to teach­ing the TI-BASIC lan­guage! I picked this up pret­ty quick­ly, since I still remem­bered a lot of con­cepts from Apple BASIC. In my junior year of high school, I was soon writ­ing pro­grams to help me take short­cuts to solv­ing math and sci­ence prob­lems. But most impor­tant­ly, I want­ed to make games.

So I made a game. How I did so could be its own entry, and very well may be in the future.

This inspired me to sign up for the Com­put­er Pro­gram­ming I elec­tive in my senior year. They taught us Visu­al Basic, and the class was nei­ther inter­est­ing nor fun. This, paired with the real­iza­tion that study­ing com­put­er sci­ence in col­lege meant tak­ing lots of math (some­thing I’d always heard, but col­lege course cat­a­logs assured), made it clear that I should focus on the oth­er thing I liked doing: writ­ing.

I majored in com­mu­ni­ca­tions, and the rest is his­to­ry. Except for a fruit­less for­ay into Python a cou­ple of years ago, I haven’t pro­grammed much late­ly.

But I still embody, I think, the hack­er ethos. For me, 2005 could also have been called the myth­i­cal Year of Lin­ux on the Desk­top, thanks to the then-nascent, but still quite amaz­ing, Ubun­tu dis­tri­b­u­tion. While it was alien to me, and didn’t quite ‘just work’ on my lap­top, I per­se­vered (smug Windows-using friends would say I “suf­fered”) and use it to this day. I love Ubun­tu, and it still… almost just works.

Along the same geek lines, doing more with the devices I own seems to be a recur­ring theme in my life. These days. I car­ry in my pock­et a root­ed Android phone (run­ning Cyanogen­Mod), and at home have a homebrew-enabled Nin­ten­do Wii and DS, a Canon Pow­er­Shot sport­ing CHDK, and Linksys routers run­ning the dd-wrt and Toma­to firmwares. My (lack of) skill-set means that you won’t find me help­ing the cause of hack­ing open a new device, but I’m glad to file the occa­sion­al bug. In short, I like to get as much as pos­si­ble out of my devices, includ­ing, quite lit­er­al­ly, my data. Back­up is a top­ic I’ll be com­ing back to, for sure.

I think that about sums up my geek side (and unin­ten­tion­al­ly makes a pret­ty good case for my navel-gazing side).

  1. Mine looked exact­ly like the tow­er pic­tured there!
  2. Let’s remem­ber this when we talk about the iPad.
  3. My 2010-self is a lit­tle embar­rassed by hav­ing drawn geek­spi­ra­tion from Bill Gates, but you’re read­ing a truth­ful blog.