Thursday, Nov 8. 2012  –  Category: Musings

i have been so desperately remiss in posting to my blog. it’ll be two years in a few days since my last post (on Gesture Lock of all things)… i’m honestly tempted to just take the whole site down or make it go to my page or something, it’s that embarrassing.

so yeah, one sentence recap of the last two years: had a baby boy (Wesley!), left Rdio, joined Google[x], built Project Glass, moved homes (but still living in Oakland)… i think that’s about it.

maybe i’ll update this more frequently. maybe not.

Gesture Lock

Saturday, Nov 13. 2010  –  Category: Musings

(Just want a link to the app in the market? Scan the QR code to the right or click here)

While I was on vacation last week eating my way through Taiwan I kept whipping out my phone to take photos.  Trouble is, I’d keep unlocking my phone, swiping my home screens or switching to the apps launcher to launch one of the many camera apps I have installed (RetroCamera, FX Camera, or the built in Camera).  Or I’d grab my phone to check into Foursquare, or tweet, or write notes… or pretty much anything.  The one thing in common with all these tasks?

I knew exactly what I wanted to do everytime I took my phone out.

Yet each time I was unlocking, and then swiping around to find the app and then launching it.  In the case of a camera app that means losing precious seconds of the moment I’m trying to capture.  Soooo it occurred to to see if I could find a lock screen that would enable me to just use gestures to unlock and automatically launch apps.  The closest I found was some lock screen that came on some old Samsung devices (though seemingly not on the Galaxy S I had).. and even that was limited to hard-coded “letter” gestures.

What to do, what to do?  I’m an Android nut/nerd, so figured I’d write my own… and after a couple days of hacking, I finished it up today.  So without further ado, I present Gesture Lock, now available in the Android Market for 99 cents.  I might make a limited free version available later, but was too lazy to do it now.  Here’s a couple of screenshots:

This is the main launcher app.  This is where you can define custom gestures for unlocking the screen, and mapping to any available app you have installed.  It also has a preferences screen for a few basic prefs: enabling/disabling Gesture Lock (of course), toggling the clock between 24/12 hour clock, and enabling/disabling the notification bar.  I leave mine enabled so I can see things like email, text messages, tweets, battery status, etc. – but the caveat of this is that the notification bar is then draggable.  Convenient, but less secure.  Disabling it is more secure, but less convenient.  Trade-off.  Meh.

This is what the lock screen looks like with a sample gesture drawn.  Super convenient, unlock, and launch your app without delay.

If you install the app and find any issues or have some comments/suggestions, I’d appreciate any feedback here…

ConnectIn 1.1.1 & HTC Sense UI

Tuesday, Sep 28. 2010  –  Category: Musings

I pushed 1.1.1 to the Market last night which fixes a few things:

  • Only auto-sync once a day (LinkedIn enforces a 5000/day total limit for third-party apps, so I have to knock this down so as not to hit it.  You can still manually refresh as frequently as you like via the Launcher app if you want/need to poke it.
  • Make the new “in” notification that appears during sync optional.
  • Handle API errors (such as the throttling limit) from LinkedIn gracefully, and notify the user when they occur
  • Make a separate Settings screen accessible from the Launcher app for managing sync notification & contact integration
  • Fix crash when trying to view profiles for contacts that had no photo
Additionally, 1.1.0 released the night before added:
  • In-app profile viewer to view location, summary, specialties, and associations.  (Education & positions coming soon)
  • Main app launcher to add/remove account and manually trigger a sync.
  • Auto-sync and refresh profiles phone numbers and headlines when syncs are triggered.
Also, I had a couple of Sense users helpfully point out that you can access the ConnectIn full profile view by going to the People app, and then while in the list view (NOT the detail view), click the user’s photo to pop up the QuickContact style popup.  In there you should see the LinkedIn icon.  Clicking this will start the ConnectIn profile viewer.  (See screenshot to the right)

Proguard, Android, Ant, and 3rd party external JARs

Wednesday, Sep 22. 2010  –  Category: Android, Code, Musings

I’ll keep this short and sweet. Dan Galpin covered in a recent blog post how to drop in Proguard & Ant to easily do Android app builds. One hitch is that it doesn’t work for apps that have third party external jars. The simple fix to get this working is to change the libraryjars line from:

-libraryjars ${libraryjarpath}


-libraryjars ${external.libs.dir}:${libraryjarpath}

p.s. why are all the Android dev blogs posted only by Tim Bray and not the authors directly? p.p.s. why can’t we leave comments on the blog posts?

Android UI… fragmentation?

Tuesday, Aug 3. 2010  –  Category: Android, Code, Musings, Rdio

Perhaps fragmentation isn’t the right word… but this issue certainly confuses me.  It seems trendy to throw about the term ‘platform fragmentation’ as it pertains to Android, so I’ll capitalise on that buzzword and go with that for now.  (To be fair, I’d love to be proven wrong and will happily eat my words if someone can point out a better way I should be addressing this).  While developing the Rdio Android app, I’ve been testing on a bunch of different devices and frankly, with generally stock widgets in use, I’m running into the problem where widgets look different on each device.  This wouldn’t be so much an issue, except often times the differences are visual/stylistic tweaks in things like background images or colours which cause our design assets (icons, text colour, etc.) to look bad on one or more devices.

Case in point: TabWidget.  Using a completely stock TabWidget on our app which has minSdkVersion 4 and targetSdkVersion 6, I get the following:

Android 2.2 on Nexus One

Android 2.2 on Nexus One

Android 2.1 + Sense UI on HTC Droid Incredible

Android 2.1 + Sense UI on HTC Droid Incredible

Android 2.1 + Sense UI on HTC Hero

Android 2.1 + Sense UI on HTC Hero

Android 2.1 + Motoblur on Motorola Droid X

Android 2.1 + Motoblur on Motorola Droid X

In each above screenshot, the leftmost tab is selected (i.e. active/current), the centre tab is focused/pressed (i.e. my finger is currently holding it down but I haven’t released it, while the rightmost tab is unselected.

As you can see from the above images, things like the selected and unselected tab icons look fine on the Motoblur and Hero with Sense UI, but look like crap on the Droid Incredible with Sense UI and stock Android on the Nexus One.  Meanwhile text colour looks fine on Motoblur, looks passable on the stock Android, looks mostly awful on the Droid Incredible with Sense UI, and is completely unusable on the Hero with Sense UI.

One option we have available to us is to hardcode all our own widget styles, which means completely skipping the system look and feel.  This is great for the Rdio brand (i.e. we can use our own highlight colours, etc.).. but this is like going back to the days of the 1337 90s when we were all cool kids in college running Litestep, XFCE, GNOME, etc. and only apps with custom themes and skins.  At some point it gets old, we grow up, and we want apps that match the system styles.  I don’t mind mobile apps having their unique personality, but I don’t want widgets having their own custom look and feel.  I want a ListView in one Android app to look and behave like ListViews in other Android apps.  Ditto that for TabWidgets, Buttons, etc.

But how are we supposed to do that if there isn’t a standard widget style we can rely on?  Am I just missing something painfully obvious about system-wide styles I should be using?  And what about custom widgets?  For example, in the above screenshots, each album art is clickable and relies on a “button” like look and feel to it… but buttons on stock Android use orange focus/select/press states, while on Sense UI they use green, and on Motoblur they use red.  We need to make custom graphics (in this case a 9patch drawable) for this, so are we expected to make one version for every vendor?

What are other Android developers doing to get around these annoying vendor-specific extensions and styles to the Android UI?


Thursday, May 13. 2010  –  Category: Musings, Songbird


I’m leaving Songbird.

It’s been a blast, and I’ve loved working here.  I think Songbird is in a great position now, what with the Philips partnership, and the upcoming partnerships that are in the pipeline waiting to be announced.  It’s hugely gratifying to be able to walk into Target, pick up a Philips MP3 player and see the Songbird logo on the back.  It is partly because of where Songbird is now that I feel comfortable leaving, knowing it’s in the capable hands of all the birders involved.  I’ll continue to follow Songbird’s progress with a fond eye and a tuned ear.

I wish the Songbird and Mozilla communities all the best, and hope that I can still be involved in both.  I think the Mozilla community is amazing, truly one of a kind, and it’s been really awesome to have the chance to work and be involved with it.

So what’s up for me next?  I’m finishing up my work on the servicepane until the end of the month, and then I’m off to go join Rdio… obviously the music bug has bit me.

Rebuilding a Schwinn Varsity

Monday, Aug 24. 2009  –  Category: Musings

Ever since getting a 2009 Schwinn Fastback roadbike for a new recreational hobby, I’ve been wanting to learn more about the mechanics of bikes.. mostly so I can learn how to work on one myself to better do some of my own maintenance.

Working with software for so long made me forget the joy of simple pleasures like turning a wrench and getting your hands dirty.

Anyway, rather than destroy my brand new bike, I decided to destroy and old bike instead… a neighbour of mine had an old 1971 Schwinn Varsity sitting out (who knows for how long) who was kind enough to donate it to the cause.

Originally this came as a Kool Lemon 10 speed. I took a bunch of before photos. All the components on it were stock.. and rusty.

In the weeks since I’ve stripped everything off its frame.. with the goal of rebuilding it into a single-speed commute bike to ride to work on. (Mostly because I don’t want to deal with the complexity of a geared bike as my first rebuild). I bought new wheels, tires, tubes, hub, crankset, bottom bracket, chain, pedals, toeclips, saddle, seatpost, stem, bars, and brakes…in other words, every thing except the frame, fork and headset.

I picked up some random no name black race wheels off of eBay, with tires, tubes, and a flip/flop single-speed/fixed hub and cog set. This past weekend I threw the old one piece crank on (stripped down to just the original inner 39t chainring), with the original chain but with the new wheels to see how it rode as a single speed (albeit with no brakes, which made things…. interesting).

Here’s some photos of how it looks as a single-speed with the new rims.

Finding new parts for this has been an interesting challenge. Many of the sizes/specs used by Schwinn 38 years ago are different now. Also, the bike originally was a 37 pound beast. I’ve been attempting to strip and replace many of the heavier parts.

Finding a quill stem has been the most difficult. The original was a 21.1mm steel monstrosity that’s heavy enough to do some serious damage as a weapon. I ended up finding an equally old (mid-70′s) Schwinn Continental stem which had the exact same diameter, and dive angle – but made of aluminum for some considerable weight savings.

Taking off the kickstand saved 1.1 pounds. !!! Seriously.

The cranks + bottom bracket was also interesting… the bike originally had an old BMX style bottom bracket size with an old school one piece crank. I had a helluva time finding a bottom bracket adapter to convert it to the new Euro style 68mm bottom bracket, but ended up finding one after about a week and a half of searching. It’s awaiting a new Pake 44t + 165m crankset slated to arrive next week.

The rest of the components should be arriving this week or next week, I’m really looking forward to getting it all together and riding it for its first real ride. My test ride yesterday worked well, but stopping with no brakes on a hill involved me running into my empty garbage cans which worked but isn’t really a scalable solution.. :)

Can’t wait to get this puppy all together..

Good guys vs. bad guys

Friday, Apr 10. 2009  –  Category: Musings, Travel

Dubrovnik, CroatiaWendy and I just got back from an awesome vacation to Barcelona, Croatia (Dubrovnik), and Montenegro (Kotor & Budva).  I’ll upload photos soon.. I won’t say much on Barcelona since both Wendy and I had been there before and done the touristy thing.  The weather was cold, dreary, and rainy.  Wendy had her wallet stolen.  .. but the food… wow.  We ate extravagantly, we ate fantastically, and we ate well.

We’d been reading a lot about the Balkans and the history of the region (skimming most of the stuff pre-WW1) trying to understand the tensions and conflicts that have plagued the area.  It was definitely a little chaotic to track all the different parties involved, and we ended up sitting down one night in the hotel bar with some drinks, pads of paper, Wendy’s Kindle & my iPhone with various Wikipedia pages loaded (such geeks, I know).   We mapped out the parties involved, the wars fought, and generally tried to simplify things into “good guys” vs. “bad guys”.

Of course, this dramatically over-simplifies things, but we were really trying to just distill things down as much as possible.  One of the things that jumps out at you when you do this exercise is that things aren’t so clear cut as the “good guys” vs. the “bad guys”.  There is perspective obviously (e.g. how the Albanian Kosovars saw NATO vs. how the Serbs saw NATO), and the vicious cycle of revenge and what everybody calls justice.  I’ve spent my whole life in the West (England and the US), so justice to me is pretty clear and absolute.  But justice in the Balkans takes on shades of grey tinged with the red of revenge for war crimes committed by pretty much every side involved.

Given that my only previous background to the area was more or less the news media coverage we got here in the US in the 90s, my initial naive impression was that NATO (and thus, by extension, everyone NATO was “defending”) were the good guys, and that the Serbs (e.g. anyone led by Milosevic) were the bad guys.  Reading the accounts, going through the quite thorough Wikipedia articles, and actually talking to folks present that lived through the wars has dramatically changed that for me.

Wendy and I had dinner one night at Restaurant Europe in the Budva Old Town.  Since it was still low season we had the entire restaurant to ourselves for the whole night, and we conversed quite a bit with the manager, Dragoslav, (who we ended up inviting to sit down and have a drink with us).  (As a random side note, apparently the owner of the restaurant is Dragan Stojković (a.k.a. Piksi or Pixie), the former Serbian national footballer!)  He is Serbian, from Belgrade, but living in Montenegro to run the restaurant.  Getting his perspective of the war was really interesting.  I was initially timid, but perhaps the bottle of Montenegrin Sauvignon-blanc loosened me up, but eventually I asked him what his opinion of Milosevic was, and gave him the impression we all get in the west of a genocidal war-criminal.

This was the first time I’d ever talked to someone directly face-to-face who, without any hesitation, proclaimed Milosevic a hero and a patriot to the Serbian people for trying to hold on to some sense of Serbian identity and pride (prior to my reading and our trip, I had no idea Kosovo holds a special place in Serbian history as a legendary battleground for them… it’s akin to an American Gettysburg, or Scottish Falkirk).

Having now left, I’m still reading my last book on the region and still fascinated by the tensions that I can see still exist in the general populace there. Across the regions we visited, I saw desire to not be involved in any more conflicts, and to move on with life and build up some semblance of a tourist industry – but at the same time, I didn’t necessarily see a desire to forgive and forget. The people we talked to seem to still have the strong national pride, and the museums we visited (including the memorial in Dubrovnik to the soldiers and civilians killed in the shelling of Dubrovnik from Montenegro) still very much evoked a “look at how we were wronged” attitude.

I really really hope that the region can heal… it’s an immensely beautiful land.  Honestly, it’s one of the most beautiful areas I’ve ever visited.  The bay towns of Dubrovnik, Kotor, and Budva will be huge tourist draws (Dubrovnik already is, Kotor and Budva less so… at least internationally).  They are beautiful medieval-era cities with a ton of history, with friendly people, fantastic food, and just overall are incredible towns to explore.  I’d encourage anyone reading this to travel there soon.  While we were in Kotor we came across two EU Election Observers (there to observe the parliamentary elections to ensure fair elections, a requirement for EU admission), and I can honestly say that was the first time I’d talked to someone in the past 8 years who was genuinely excited to see an American tourist.  :-)


Friday, Mar 6. 2009  –  Category: Linkage, Musings

I’ve been enthusiastically using cliKball a lot lately, and have become a big enough fan, I actually sent out a few invitations to friends to use it too.  I don’t normally do this (honestly, I tend to get annoyed at all the “Join my new Web 2.0 service!” invites I typically get), but cliKball has been so super cool, I succumbed to the invite thing.

Apologies to any friends I sent invites to that won’t use the service… to the few folks I sent invites to: it was only because you guys make prodigious use of bookmarks, or always have interesting stuff to share with me…

cliKball is sort of a + Twitter, all in one… it sits, unobtrusively, in your Firefox browser – and when you add a bookmark, all your followers see it (and your comments), and everyone can follow and have a conversation directly in the browser about it.  There are a bunch of us at Songbird who have started using it, mostly for sharing inane things we find hilarious, but I’m starting to find it useful for more serious things now too.  And in the vein of all things Webby, it’s got ATOM/RSS feeds… which I’m looking to pull into my blog at somepoint soon.

Anyway – go sign up.. I’m stevel on it. :)

lazy sunday

Sunday, Jan 18. 2009  –  Category: Musings, Pets

nothing like being lazy on a sunny sunday afternoon to make you feel like the world is alright

Recent posts