Archive for the 'Uncategorized' Category

Mobile Roundup

As a compulsive gadget hound, I have now owned and used mobile phones (and one tablet) running Android, WebOS, and iPhone OS/iOS. This is my brief and totally unscientific take on the strengths and weaknesses of each platform:

Android has an excellent mix of app availability, features, and flexibility. It also demolishes any other platform in terms of variety of available hardware; sadly, most of that hardware is crap that is hardly worth the “subsidized” carrier price.

I used an HTC G1 (for which I paid the full, no-contract price) as my primary phone for more than a year before finally getting tired of waiting for upgrades to make their way down the value chain to us early-adopters, and left the platform in a huff about six months ago.

I’ve been playing with the Nexus One handset I got at OSCON last week for a few days now, though, and have since discovered t that Android can deliver a quality user experience on sufficiently high-end hardware.

Prior to receiving the N1, I had switched to a Palm Pre Plus on Verizon’s CDMA network. I was lured over by the promise of a more reasonable UX than was available on Android, along with the quality of Verizon’s 3G coverable. (I was also swayed in large part by the offer of free WiFi tethering, which has proven useful and reliable, if a bit of a battery hog.)

Since then, I’ve been alternately thrilled and disappointed by the Pre. The overall design of the core OS and apps are excellent, and the hardware is a very satisfying size and shape, despite feeling somewhat plastic-y. Unfortunately, the few 3rd-party apps available tend to be buggy (I’m looking at you, Foursquare!) and the seemingly-contradictory pairing of horrid battery life and s-l-o-o-w performance have left me lukewarm-to-negative, about the whole experience.

Which leaves, of course, the 800 lb. gorilla that is the iOS ecosystem. I resisted ownership of any such device for many years, but finally caved when the iPad was released. Since then, I’ve clocked a fair number of hours (and spent quite a bit of cash on apps) to put the iPad through its paces. I rather like the hardware, love the handful of core apps (Instapaper, Reeder, Twitteriffic) that typify good mobile UI design, and still can’t help feeling dirty for being involved at all.

Even after developing an app or two, I can’t shake the sense that I’ve given up something truly precious in exchange for some shiny trinkets. That being said, Apple absolutely owns the market for mobile customers who will actually, y’know, pay for content and add-ons. Android has a ways to come in that respect, and neither HP/Palm, Microsoft, or RIM appear to be anywhere near a realistic app/media store solution.

In the near-term, I expect to shift over to the Nexus One as my default mobile handset, if only because it’s the newest and fastest hardware available to me. I also still believe strongly in the potential of WebOS, but only if HP gets off their respective asses and delivers some hardware that can deliver on the system’s potential.

It seems safe to predict that the iOS platform will be an important piece of the software ecosystem, especially for shops like mine, but I can’t say that I’m particularly excited about helping Apple continue to steamroll over the protests of developers. Dealing with their byzantine and controlling approach to software development and distribution in a professional capacity has made me seriously wistful about the good ol’ days of writing Ruby and administering Debian boxen.*

* – this should not be construed as dissatisfaction with my current job, or a criticism of our choice to publish on Apple’s platform. To the contrary, I lobbied for the latter out of my desire for the former to continue in a mutually-fruitful way for a long time to come. I don’t have to like Apple to do business with or through them.

Brewing

I’m not going to apologize for not blogging in such a long time. Between Twitter, face-to-face conversations, and actually doing stuff, I just haven’t had as much to talk about here. That being said, there have also been opportunities lost for sharing ideas and recipes (of both the delicious and software kind), so I’m going to try to get back into the habit of posting medium-length reports on stuff I’ve made.

As a teaser, here’s a picture of yours truly midway through construction of a wort chiller, which I have since put to use on a couple of batches of beer:

DSC_0040

I’ll write up some more substantial observations about brewing beer later; for now, suffice to say that I consider it among the essential skills for modern man, right up there with bacon curing and being able to throw a baseball.

* for those who don’t grok brewer jargon, a wort chiller is a heat exchanger used to cool the “wort”, which is the hot-tea-like mixture of sweet grains and bittering hops that gets fermented into beer.

2009 Roll-up

Since Jan. 1 2009, I have:

  • Changed jobs – and not just jobs, but entire industry sectors, switching from services for software developers to publishing and good-old-fashioned e-commerce.
  • Bought a house (my first!) with my lovely girlfriend Hannah
  • Bought a car (not my first, but the first in ~5 years) and driven to Montana, Idaho, and Washington for bike rides and other general fun
  • Joined the Citizen Campaign Commission, in order to help oversee Portland’s publicly-funded elections

It’s not an earth-shattering list, but there’s at least some sign of positive movement there, and I’m optimistic about what 2010 should have in store.

Open Source Bridge presentation

In case anyone stumbles here looking for the notes and examples from my Open Source Bridge talk, here they are:

osbridge_2009.zip

Note: this is a ~30MB download, since it contains (amongst other things) a full copy of JRuby 1.3.1 and the ActiveMQ runtime. The actual presentation and example code are very light.

You can also just view the talk slides, though they aren’t terribly informative without the code.

Update: video is available on blip.tv now. My apologies for the long delay while everyone downloaded the demo archive in minutes 3:00-8:15 or so.

Two steps forward, one step back

Once upon a time, there was RCS, and then CVS. They tracked normal edits to a set of text files reasonbly well, and coupled with telnet or ssh, even made it relatively straightforward for a trusted group of collaborators to share their changes with each other. Some people used other proprietary tools (Perforce, Visual Source Safe, etc.) but they tended to be either a) expensive b) really, really lousy or c) both. Among the open source crowd, at least, CVS dominated the version control space for many years.

Then came Subversion. It improved on many of the failings of CVS — notably, Windows support was dramatically better, repositories could be shared over HTTP, and many operations that just didn’t work in CVS (renames, binary diffs, etc.) performed reasonably well out of the box. To this day, Subversion is a reasonable choice for many projects, especially given the advanced level of support for it in IDEs, graphical repository browsers, and the like.

Much of the reason for that diversity of useful tooling built atop Subversion, of course, is that it was written in C, and built with an eye towards allowing high-level languages to use bindings into the same runtime libraries upon which the ’svn’ command itself relied. In fact, Python, Perl, Java, and Ruby are all supported by the core Subversion maintainers, and additional bindings using those same underlying libraries are available for a number of other languages.

Enter the distributed version control systems: Git, Mercurial, Bazaar, Darcs, and their ilk. The basic workflow they offer is in some ways more like RCS than it is Subversion: each developer works locally against their own copy of a repository, and they share their work via patch files and periodic synchronization. (This is of course a gross over-simplifaction, as all of them offer much more sophisicated change-tracking under the hood than RCS did, but the user-visible behavior is still reminiscent.) However, their ability to maintain change history across many developers and systems without forcing everyone to eventually squash their work down into a single source tree makes a number of new modes of project management possible, or at least much easier than before.

All of the above DVCS systems potentially offer a huge gain of productivity for many developers, since you can easily experiment with changes locally, selectively share only those modifications which you wish to, and continue working without being connected to the central repository. (This is especially significant for those whose employers maintain draconian firewall rules and disallow off-site access to their source control.)

Unfortunately, none of the popular DVCS systems have anything resembling the level of cross-language API support that Subversion does. Mercurial and Bazaar are both implemented in Python, making access from other Python code quite fast, and that from any other language painfully slow. Git is implemented in C, but without a supported and documented core library of functions designed to be used to facilitate access from other languages. Darcs is written in Haskell, which means only crazy mathematicians and CS majors have any ability or interest in using it. (I’m kidding here, but the point remains that Haskell isn’t exactly the most useful substrate for scripting language bindings.)

The fallout from all of this is that we’re left using wrapper libraries which fork out to the command-line tools for each DVCS. Such wrappers have a number of problems: the performance sucks, the internal APIs are usually only as robust as the set of regular expressions you write to parse the output of the commands, and almost no work is shared between the various wrapper implementations.

Don’t get me wrong: as a simple version control tool, I’ve found Git in particular (and distributed version control in general) to be a big step up from the old centralized-repository model. However, the very eighties-esque fork-and-regexp-scrape model for IPC — coupled with the lack of an obvious “best of breed” leader in the DVCS space — means that I (along with anyone else trying to support DVCS in a general-purpose way) end up doing a lot of low-level grunt work when we could be building real value for users.

Even something as simple as a standard dump format for a common subset of the information available from the popular DVCS types would be a start. I do know that, for the time being, I’m stuck supporting a bunch of very brittle code which relies on the various idiosyncratic console output formats of each version-control system.

Playing prognosticator, I would even go so far as to suggest that the first DVCS system to provide supported, documented interfaces in a number of popular programming languages could climb to the top of the dogpile that exists currently and emerge as a clear standard.

Inauguration playlist

We had a little family dance party in the street (no, seriously, we did — pictures forthcoming) after re-watching all the coverage of the inauguration tonight.

Our playlist:

  1. The Payback — James Brown
  2. Song 2 — Blur
  3. Gone Daddy Gone — Gnarls Barkley
  4. The Yeah Yeah Yeah Song — The Flaming Lips
  5. The Golden Path (Ewan Pearson Extended Vocal) — The Chemical Brothers Featuring The Flaming Lips
  6. Paper Planes — M.I.A.
  7. All My Friends — LCD Soundsystem
  8. My People — The Presets
  9. Fear Not Of Man — Mos Def
  10. Work On You — MSTRKRFT
  11. Rawnald Gregory Erickson the Second — Starfucker
  12. My Favorite Things — Outkast

The theme is obvious, but we all enjoyed the hell out of it.

Testing

Is this thing on?

Looks like mobile blogging is a go.

Quick status update

It’s been two weeks since I posted, which is a bit embarassing. I’ve been pretty busy with the new job, though, and generally sticking to Twitter to get the word out about how I’m doing.

The quick version is: the Project Kenai team is turning out to be just about as good a group to work with as I could hope for. We’ve got enough to do to keep things from getting boring, but it’s the good kind of work: interesting + challenging, but nothing that feels like a death march. Plus, every time I fire up an editor to look at a new piece of code and see the GPL license in the header comments, I feel a little better about the company as a whole. Being somewhere that open source is the default (rather than a special case for which you have to lobby) is a pretty cool feeling for a OSS nerd like me.

Otherwise, things are pretty normal. As my family and friends all give in to the gravitational pull of SE Portland, I also find that my social life is less and less about going out, and more about staying in for social meals + conversation, which suits me just fine, especially in the winter.

That’s it for now. Expect more on the technical side of the work I’m doing after Christmas, when I have some time to write up my impressions of doing JRuby on Rails, and working in a heterogenous Solaris/Linux/OS X environment.

The Me Meme

  1. Take a picture of yourself right now.
  2. Don’t change your clothes, don’t fix your hair…just take a picture. (should be super-easy with Photobooth)
  3. Post that picture with NO editing.
  4. Post these instructions with your picture.

(via Fredrick Jean)

And now, for something completely different…

Things have been far too serious around here lately. Politics, smartphones, and programming are all well and good, but there’s been a notable lack of food pr0n in my posts since Twitter took over my impulse-blogging.

Well, no more. Look upon the awesome power of the “Heart Attack” sandwich, as proudly served during the Sunday brunch at the family BBQ restaurant:

"heart attack" sandwich

You can click through to the Flickr page to see notes breaking down all the constituent parts, but suffice to say, everything on that sandwich, right down to the bun itself, is fried.

It was so good. I think I’ll probably only be able to eat one about once a year, but I will cherish that day.