Inert Detritus The Internet's dust bunnies

19 February 2009 @ 5pm

Comments Off on Hitmen and Smash Hits

Hitmen and Smash Hits

My Tum­blr post ear­li­er today remind­ed me of some­thing John Gru­ber dis­cussed a cou­ple of years ago:

The iPod Mini was a smash hit product.

And when Apple debuted the Nano, they killed it.

There was no hes­i­ta­tion, no reluc­tance. The Nano came out, and the Mini was dead. The man­u­fac­tur­ing lines were stopped, it was pulled from the shelves, and it was purged from the website.

Apple stood up and said, “Yes, the Mini was won­der­ful. But now, it’s not even worth dis­cussing its exis­tence: here is some­thing bet­ter. Trust us, you’ll like it.”

11 February 2009 @ 1pm

Comments Off on Google Gears and Webkit Nightlies

Google Gears and Webkit Nightlies

I’ve been using Google Gears with Safari the past few weeks, pri­mar­i­ly for Word­Press 2.7’s “Tur­bo Mode” (use­ful on low-band­width or high-laten­cy links), and sec­on­dar­i­ly for Gmail’s offline mode.

The cur­rent­ly released build ( of Google Gears isn’t com­pat­i­ble with the lat­est Webkit nightlies, how­ev­er. Good news, though: it’s a piece of cake to build it yourself.

Check out the source, and build it local­ly on your machine. I had no hic­cups with OS X 10.5.6 and Xcode 3.1.2, every­thing Just Worked The First Time.

10 February 2009 @ 9pm

Comments Off on G1 vs. iPhone: All in the Design

G1 vs. iPhone: All in the Design

I’ve post­ed a cou­ple of times to Tum­blr about the G1.

I used a friend’s G1 for about a half hour a few weeks back: it was my first non-iPhone cell phone use since I got my 3G in June. Over Christ­mas, I also used my broth­er’s LG Dare, and I sud­den­ly real­ized how spoiled the iPhone inter­face has made me:

The iPhone is all touch, all the time. If you’re in an appli­ca­tion, any appli­ca­tion, you will only use the touch screen. Every sin­gle action you’ll per­form involves the screen: taps, drags, pinch­es, swipes. You’ll go to a hard­ware but­ton if you want to quit the app, or if you want to change the vol­ume. That’s it. Not for text entry, not for answering or mak­ing a call, not for any­thing else.

This changed the way I use my phone. I’m now lost on new phones, because I sud­den­ly remem­ber I have to input things via soft­ware (touch) and hardware.

There’s a fun­da­men­tal mis­match with Android on the G1:

The prob­lem with gen­er­al­iz­ing the soft­ware to such an extent is that while it works with many devices, it doesn’t work per­fect­ly with any device.

This quick­ly leads down the path men­tioned above. To sup­port all the user inter­ac­tion meth­ods that Android sets forth, some Android units will have to intro­duce ded­i­cat­ed hard­ware inputs to han­dle them.

Aside: how does no one get angry at HTC for these hard­ware shortcomings:

  1. No charging/sync and music or calls at the same time. What? That’s insane.
  2. No A2DP. I think Apple has been exco­ri­at­ed on every mes­sage board and review of the iPhone ever for this. This is the first review of the G1 that I’ve seen men­tion it.

3 February 2009 @ 5pm

Comments Off on Cheep Cheep!

Cheep Cheep!

Chyrp: a light­weight blog­ging engine..

Chyrp: my per­son­al blog.

I’ll be leav­ing the longer, more thought out, well-writ­ten con­tent for this Word­Press-backed blog. Per­son­al writ­ing of pub­lic inter­est will appear on chyrp. Update your feeds, book­mark the page, your new TV Guide will appear in next Sun­day’s paper, etc…

10 January 2009 @ 11am


Hacking iScrobbler for multiple iPods

I’ve been on since 2004. I love music, and I love sta­tis­tics and data analy­sis, so when the site launched and I saw what they had planned, I imme­di­ate­ly set up an account.

I’ve long used iScrob­bler for a Mac client to sub­mit plays to it’s light­weight, sup­ports run­ning in a menu bar-only mode, and has giv­en me zero grief over the years. iScrob­bler watch­es iTunes to detect and scrob­ble1 songs played as they hap­pen. This obvi­ous­ly isn’t pos­si­ble with iPod plays, so iScrob­bler asks you to use a Recent­ly Played playlist that it watch­es: after you sync an iPod, iTunes updates that playlist with all the tracks played while you were out, and iScrob­bler diffs the playlists to know what to submit.

Until this sum­mer, I used both my 2nd gen nano and my iPod pho­to to play music: the pho­to fit near­ly every­thing I had, while the nano was great for the gym. I now use the nano, my iPhone 3G, and an iPod clas­sic for play­ing music on the go, so my #First­World­Prob­lem of mak­ing sure all iPod2 song plays get scrob­bled to hit a bit of a speed bump. I start­ed inter­leav­ing plays on the devices: I’d lis­ten to my iPhone on the bus ride in, use the nano at the gym, then lis­ten some more on the iPhone before sync­ing them back to iTunes.

To sup­port the iPod, iScrob­bler takes snap­shots of the iTunes Library, and com­pares the Last Played and Play Counts in a playlist you con­fig­ure3 to fig­ure out what songs you lis­tened to.

After an iPod update, iScrob­bler will take the last played time of the last played song, sets this as the new “iTunes Last Played Time”, and scrob­ble every­thing played since the pre­vi­ous iTunes Last Played Time.4 With inter­leaved plays, this quick­ly becomes a prob­lem: when you sync iPod A, iScrob­bler bumps the iTunes LPT; any plays on iPod B that hap­pened before that time are now “lost”, since that iPod has­n’t been synced, and they fall before that time­stamp. Those plays are very dif­fi­cult to get back lat­er, so this is a prob­lem worth avoid­ing5

Playlist snap­shots let iScrob­bler work around an iTunes/ prob­lem: iTunes only stores the Last Played time, but wants a time­stamp for every song play. If iScrob­bler sees a song which incre­ment­ed Play Count by more than 1, it has to “syn­the­size” the play. The song must have a time­stamp for sub­mis­sion, so iScrob­bler finds gaps in the play times where no songs were play­ing, and invents rea­son­able time­stamps for any songs need­ing a time.

So, for the past few months, I’ve been clos­ing iScrob­bler before sync­ing my iPods. This let me sync both iPods with iTunes, which updat­ed all the songs’ meta­da­ta, then launch iScrob­bler and tell it to man­u­al­ly update from the iPod playlist.

A few weeks ago, instead of just clos­ing iScrob­bler before an iPod sync, I start­ed run­ning iTunes with iScrob­bler com­plete­ly closed. All my plays on the desk­top go into the same playlist6 as any tracks my iPods play, so they would get picked up like the rest of my iPod plays.

iPods don’t cross-fade play­back, so the Start Time of one song7 per­fect­ly adjoins the Last Played time of the track before it. is very par­tic­u­lar about track lengths and time­stamps, and won’t let you sub­mit plays that over­lap, so if that hap­pens, iScrob­bler drops the sec­ond track to avoid API issues.

The writ­ing on the wall is clear: if you have cross-fade play­back enabled in iTunes and play songs with iScrob­bler closed, 50% of your desk­top plays will be dropped by iScrob­bler as over­lap­ping. I haven’t filed a bug against the API on this yet8. You can work around it by turn­ing off cross-fade play­back in iTunes; that makes iTunes behave iden­ti­cal­ly to iPods with play­back, and you can keep iScrob­bler closed for days at a time with no adverse effects.

Post­script: the iPhone 2.0 bug where Play Counts and Last Played times weren’t updat­ed just about killed me. I had to exhib­it extra­or­di­nary self-con­trol to only play music on the nano, since it was the only device that prop­er­ly updat­ed the song metadata.

Yes, I think a play count will fall through the cracks if you play it once on both devices; iTunes will crush of the device’s play count with the oth­er’s. I haven’t test­ed this to con­firm or deny it, however.

  1. Sub­mit, in iScrobber/AudioScrobbler/ speak []
  2. For the sake of brevi­ty, “iPod” includes iPhones. []
  3. This is best set to a “Recent­ly Played” smart playlist []
  4. It does this so takes less time and work to avoid dupli­cat­ing sub­mis­sions. Dupli­cate sub­mis­sions are bounced by the API with great prej­u­dice. []
  5. I typ­i­cal­ly resort to leav­ing a playlist run­ning overnight to fake them. []
  6. “Recent­ly Played” cap­tures any­thing played in the last few weeks []
  7. iScrob­bler always has it, so iTunes must be book­keep­ing it some­where. As far as I can tell, this is stored behind-the-scenes and not exposed in the iTunes UI []
  8. There needs to be a few sec­ond “grace peri­od” for device clock skew and cross-fad­ing play­back []

26 December 2008 @ 6pm

Comments Off on Property Rights

Property Rights

As I read The Econ­o­mist’s arti­cles on devel­op­ing nations, whether it be in Asia, Africa, or Europe, a com­mon thread jumps out at me:

Prop­er­ty rights are the key to eco­nom­ic devel­op­ment. Peo­ple want to own their prop­er­ty, and not have to wor­ry about how to keep it or who’s going to take it.

Prop­er­ty rights, in the form of land own­er­ship, bank­ing, and lack of cor­rup­tion, all lead to domes­tic and for­eign invest­ment in the coun­try: peo­ple know that their prop­er­ty is secure and not sub­ject to ran­dom and unjust repos­ses­sion by offi­cials or armed forces.

22 December 2008 @ 9pm

Comments Off on Addendum: Logitech Control Center software

Addendum: Logitech Control Center software

So, I tried the Log­itech soft­ware. I real­ly gave it a shot, I swear. It did well for the most part: it did­n’t brick my machine at boot, or break any apps that I could tell in the few hours it was installed.

But there were some glar­ing bugs.

First, what’s the most typ­i­cal thing to do to a mouse with two scroll wheels and five but­tons? You cus­tomize the but­tons and scrolling to do cer­tain things by default, across the sys­tem. You’re allowed to do that, but as soon as you make some cus­tom set­ting set for, say, Fire­fox (using that side, snap-back wheel for switch­ing tabs is amaz­ing), you have to re-do your oth­er but­ton settings.

Steer­Mouse gets this one right. You set your sys­tem defaults, and then on a per-app basis, it has an extra option for each but­ton: “Same as Default”, or what­ev­er action you want. Bra­vo, I say.

Sec­ond, scrolling speed was bust­ed in Fire­fox. There was some weird con­flict between the soft­ware, the OS X default scrolling speed, and Fire­fox’s idea of scrolling. When I slid the scrolling speed slid­er toward “Slow”, it moved more lines per sin­gle click of the wheel. Yet, coun­ter­in­tu­itive­ly, when you spun the wheel fast, you got less move­ment than a sin­gle click. Bust­ed like a cheap piña­ta, I say.

Third, and maybe this was just me, I could­n’t get the track­ing speed and accel­er­a­tion to behave. It just felt “off”, even after mul­ti­ple minor tweaks.

So, after an unin­stall of LCC and a reboot, I installed Steer­Mouse (after anoth­er reboot, jeez). I love it. It does a fan­tas­tic job of cus­tomiz­ing the but­tons, nailed the track­ing speed (dif­fer­ent accel­er­a­tion curve, per­haps?) and even lets me con­trol the free-wheel vs. click-wheel engage­ment speed of the main scroll wheel (albeit, after run­ning a defaults write com­mand, fol­lowed by a logout). I’m going to give it one more day of test­ing to make sure there’s no deal-break­ing bugs, and I’ll be hap­pi­ly pay­ing for a copy of the app.

21 December 2008 @ 7pm


Attack of the Mice!

I just went out and bought a Microsoft Blue­tooth some­thing some­thing 5000, and a Log­itech MX Rev­o­lu­tion. I’ve grown tired of this old Log­itech two but­tons plus scroll wheel, cord­ed opti­cal mouse, and want­ed to retire it.

The first reac­tion when I talk about mice, espe­cial­ly with Mac own­ers, is “Why not Mighty Mouse?” There’s two big rea­sons I hate it:

  1. The ergonom­ics. The mouse is too flat for my hand to be com­fort­able when I pick it up to move it. I eyed the Tar­gus mouse @lapcat tweet­ed about a few days ago, but it seemed too flat to be usable, and the store’s return pol­i­cy did­n’t let me open it and return it if I did­n’t like it.

  2. The right-click. On nor­mal mice with two but­tons, you can leave your hand as-is, and depress the right mouse but­ton to get a right click. Not so with the Mighty Mouse: if you leave your fin­ger on the left side of the mouse, the hard­ware decides that you meant to left click. This means you have to LIFT your left but­ton fin­ger up, and click with your right but­ton fin­ger, to get a right click. What a ridicu­lous way to oper­ate a mouse.

I’m black­balling the Microsoft Blue­tooth mouse. While Blue­tooth is nice, the mouse is much too small (see #1 above), so it’s out.

I’m lov­ing the MX: it’s got more but­tons than most key­boards, the scroll wheels (there’s two, and the main one even does side-to-side scrolling!) are fan­tas­tic, and it fits my hand like a glove. It runs on an inter­nal recharge­able bat­tery, and comes with a desk­top charg­er, so I don’t have to screw around with a AA or AAA bat­tery charger.

I’m about to install the Log­itech soft­ware (which I’ve heard very mixed reviews about), since I’m real­ly look­ing to pro­gram the oth­er scroll wheel and the for­ward and back but­tons (USB Over­drive just does­n’t cut it for me). I’ll update this lat­er with some infor­ma­tion on how the install goes.

Edit: here’s the post on the Log­itech soft­ware. It did­n’t go well.

13 November 2008 @ 1pm

Comments Off on Tumblr


An aside: some of my writ­ing is going into Tum­blr instead of here: things that are too long for Twit­ter, but don’t seem to war­rant a full blog post. The Tum­blr feed includes my blog feed, so sub­scribe to that instead if you want to read both.

13 November 2008 @ 11am


iPhone Apps: TwitterFon

At Tues­day’s NSCoder SF (an icon for which I have a good, but clichéd, idea for), I met @thekarladam, who showed me a few new Twit­ter iPhone appli­ca­tions. I’ll focus on Twit­ter­Fon, since I down­loaded it last night and played with it a bit.

Bear in mind, I’ve been a Twit­ter­rif­ic user since The Ear­ly Days of Twit­ter, back in ear­ly 2007. It was a no-brain­er to down­load and pay for Twit­ter­rif­ic for the iPhone. I have a few nig­gling com­plaints, but over­all, it’s been good to me.

Twit­ter­Fon does a few things well. First, scrolling per­for­mance is, in the words of the Mac­in­toshi­an Acha­ia forum on Ars Tech­ni­ca, “teh snap­pay”. It’s a joy to scroll through the list, which is good, because you’ll be scrolling through it a lot. Twit­ter­Fon has, as both Karl and Anne men­tioned on Tues­day, no sense of your “place” in your time­line. Twit­ter­rif­ic lets you tap on a tweet to select it, an idea brought over from the desk­top appli­ca­tion, and when you load new tweets, it remem­bers where you last were. Twit­ter­Fon attempts to rem­e­dy this with a very, very light blue back­ground behind new tweets, but I’ve yet to con­vince it that I’ve read those, and it can stop mark­ing them for me. It also does­n’t auto­scroll to this loca­tion, which is a pain when more than a cou­ple of screen­fuls of new tweets have loaded.

Twit­ter­Fon side­steps the text for­mat­ting sup­port cur­rent­ly in the API by pars­ing out @usernames and links in tweets. When you tap a tweet con­tain­ing either of those, it lets you jump down a chain of replies, or browse to the link in a built-in Safari-style view.

So, well done, Twit­ter­Fon: you accom­plish great scrolling per­for­mance that I get to enjoy far more than I would like, and you adopt a nov­el approach to some poor iPhone APIs. Now, the bad part.

I tried favorit­ing a tweet for read­ing the link lat­er on my desk­top, and I’m still not sure if I favor­it­ed it or not. I tapped it, noth­ing hap­pened, so I tapped again. Still noth­ing, so I tapped a third and fourth time. On the fourth tap, it turned yellow…and then back to clear. Not sure if it was wait­ing for an asyn­chro­nous API call to return, but in either case, poor­ly done.

I tweet­ed last night about the lack of API pag­ing in Twit­ter­Fon: with the num­ber of peo­ple I fol­low, it lets me load a few times dur­ing the day and still catch every­thing that’s been said since the last refresh. When I refreshed last night just after putting in my Twit­ter cre­den­tials, it only loaded 20 tweets. I tried clos­ing and relaunch­ing the app…and noth­ing changed. Ok, I thought, it does­n’t do paging.

On my walk to the shut­tle stop this morn­ing, I opened it back up, hav­ing just caught up with my time­line before leav­ing, so only load­ing the 20 lat­est would­n’t cost me any missed tweets. The app pro­ceed­ed to load more than a hun­dred: pag­ing, plus some @replies to me, I assume. Appar­ent­ly, Twit­ter­Fon sup­ports API pag­ing, but did­n’t feel like show­ing that off when I first used the app last night.

The embed­ded Safari view, which I saw for the first time in Twit­ter­rif­ic, is a great fea­ture for Twit­ter, and a real neces­si­ty for a Twit­ter iPhone client in my mind. Twit­ter­Fon gives you for­ward and back but­tons, and a URL-look­ing bar that shows you the cur­rent URL. There’s no option to stop or reload the page, some­thing often nec­es­sary when my phone quick­ly flips between cell and WiFi on cam­pus: annoy­ing, but not life-threat­en­ing. I tapped on the URL dis­played at the bot­tom, in an attempt to per­haps reload the URL or edit it in some way; Twit­ter­Fon exit­ed, and loaded the URL in Safari. This is great to have, espe­cial­ly if it’s a longer arti­cle or some­thing I want to book­mark, but this was not what I expect­ed from the UI. Twit­ter­rif­ic and Net­NewsWire both do some­thing more expect­ed: they either use a Safari-style icon, or a but­ton labeled “Open in Safari” to tell you what’s going to go down when you tap.

I think I would switch to Twit­ter­Fon full-time if it fixed the “remem­ber where I was in the time­line pri­or to a refresh” issue. The oth­er things I men­tioned are annoy­ing, and will cost them users (many peo­ple will assume it just does­n’t sup­port open­ing links in Safari, for exam­ple), but I can live with them.

Adden­dum: just found Twit­ter­Fon’s web­page. To all appli­ca­tion devel­op­ers: I should­n’t have to read your web­page to learn all the things your app does. UI Design: You’re Doing It Wrong.

 ← Before  After →