The Bag Situation

[EDIT] The bags have all been claimed. Thanks for shopping Urbanape.

When Can I Cut the Cord on iOS App Development?

At Çingleton, Craig Hockenberry spoke about where he saw the future of mobile computing. One gaping void in his talk was a topic of incredible interest to those present: development. iOS is still utterly dependent[1] on a Mac OS X counterpart for full lifecycle app development. I was reminded of both the Newton and the early Macintosh systems.

The early Macintosh couldn’t self-host a development environment. You developed Macintosh applications on a Lisa and installed them via a serial cable. It wasn’t until late 1984 or early 1985 that proper developer tools were made available for Macintosh computers.

The Newton, with the exception of NewtonScript (made spectacularly manifest with NewtDevEnv), was never fully untethered in terms of development.

Now, with apps like Keynote, Pages, Numbers, and Garage Band[2] pushing the limits of what the iPad and iPhone can do locally, coupled with a (mostly) transparent networked storage layer and binary diff delivery, I think I can see a future where self-hosted iOS development is possible:

Taking a cue from Xcode 4, we’d have a singularly focused interaction model with the emphasis on building the UI elements from palettes and inspectors. A robust and richly appointed code editor handles all the tedious typey-typey, while all of the project’s files are hosted on and fetched from an Apple-branded site on top of iCloud, backed, naturally, by the distributed version control system du jour. Compilation, presumably the gating factor on an iOS device, is done remotely in Apple’s data centers, and incremental binary diffs are sent back down to the device, removing unnecessary network overhead. Codesigning and team testing deployment are handled in a model not unlike TestFlight or HockeyApp, tied into iTunes Connect and the Provisioning Portal.

Some people are finding interesting ways[3] of using an iPad for their sole machine. I’d like to share in that future with iOS development.

  1. Although projects like Codify and Fusion look incredibly promising for some programming tasks. Thanks to Matt Johnston for pointing out Fusion.

  2. And numerous others. For a growing list, see Fraser Speirs’ Ambitious Apps project.

  3. Thanks to Mike Shields for bringing this to my attention earlier today. It prompted me to write this.

[steve release];

I don’t have any personal stories about Steve Jobs. The closest I ever came to seeing him was at AppleExpo Paris many years back. I didn’t even get to see his keynote live; I was shuffled off to the overflow room. Still, I’m a big admirer of all that he helped to guide and build. In anticipation of the new iPhone 4S, I ordered a Smallworks Brickcase, and with our now burgeoning collection of LEGO bricks, I got sidetracked putting together a small tribute to the man who drove the machine in my pocket to market.

In Memoriam

I took a crop of the iconic photo of him, scaled it to 7x12 (the largest expanse on the back of the Brickcase), and posterized it to 2-bit greyscale, all in Acorn. If you stand back and squint really hard, you can just make him out. Up close, it’s abstract enough in arrangement and texture to go completely unnoticed.

Steve Jobs Brickcase


It’s that time again! Put down your plowshares and put on your very best simple clothes.

Hard work deserves good food and good beer.

Oysters, beer, BBQ, live music, and good friends. Join us!


It’s that time again! Put down your plowshares and put on your very best simple clothes.

Hard work deserves good food and good beer.

Oysters, beer, BBQ, live music, and good friends. Join us!

(Source: Flickr / urbanape, via amishoysterroast)

Sign on the Dotted Line

I use Emacs for all my Django/YUI server work, and all that work is stored in Bazaar repositories. Emacs has a great, modular mode for interacting with a variety of version control systems, called VC.

VC can handle pretty much the full range of dealing with files and directories under version control: finding out which files have changed (bzr st), what changed in those files (bzr diff), and committing those changes to the repository (bzr ci). However, for some of our projects, we sign our commit messages with GnuPG. To date, this required running from the command line for these particular projects. I wanted to remain in the flow inside Emacs, but it seemed unable to accommodate this added step.

So, I did some investigating. At first, I thought all I’d need would be gnupg-agent.

    $ sudo apt-get install gnupg-agent

In my ~/.gnupg/gpg.conf, I added (well, uncommented):


In my ~/.gnupg/gpg-agent.conf, I added:

    pinentry-program /usr/bin/pinentry-gtk-2
    default-cache-ttl 86400
    max-cache-ttl 86400

And I start up gpg-agent with every login by adding this line to my ~/.xsession file:

    eval $(gpg-agent --daemon)

However, this alone wasn’t enough to get VC to recognize that it should defer to a running agent for signing the commits. And I could find no way to specify additional command line arguments for the gpg_signing_command in my ~/.bazaar/bazaar.conf file, like so:

    launchpad_username = urbanape
    email = {my work email}
    gpg_signing_command = /home/zbir/bin/vc-bzr-gpg

So instead, I wrote a script at ~/bin/vc-bzr-gpg that would internalize those additional arguments:


    /usr/bin/gpg --verbose --use-agent --no-tty $@

Made it executable, and voilà! Commits made in VC mode are signed by the agent (and I’m prompted for my passphrase if the agent isn’t running or hasn’t been authorized within the cache-ttl in my gpg-agent.conf).

Now, if there was only a way to push to Launchpad and submit branches for review from within Emacs…

Ubuntu One Music Streaming Has a Posse

I’ve been in Boston hacking on Ubuntu One Music Streaming[1] with two of my Web & Mobile teammates, Chad Miller and Jason Foreman. We only look beat down and forlorn.




  1. You do have an Ubuntu One account, right? And you got the brand-spankin’-new iPhone app?

Two Legos Talk to Each Other


“Hi, who are you?”

“I’m a Mandalorian. Who are you?”

“I’m a Fireman.”

“I have a Jetpack!”

“I have a Helmet!”

Another year, another video of my sweet boy. Lex turned 3, and That’s a Magic Number.


I’m not one to rage about the 1001 things to tell my unborn son, nor am I one to shrill on about how gender is a social construct. I’m no Judith Butler, or even a fan of hers. That said, this thing regarding J Crew recently was pretty damn stupid. 

Doubleyou. Tee. Eff.

Lex just spent the week in blue and red toenail polish. Fox News and their ilk had best just pray that by the time Lex is running the world, the Islamo-Socialist-Atheist robots will have already had them up against the wall.

(Source: manshit)

I Caved, Man

Along with Lex Friedman, I caved, and reinstalled the Flash 10.3 beta and latest ClickToFlash beta.

While I kinda-sorta agree with some of Gruber’s arguments, I found that in this case, honesty only wins out over dishonesty when it’s coupled with convenience. Running (or worse: launching) another browser just to open one window trains you to do one of two things: Ignore Flash content altogether, or re-install Flash and ClickToFlash. I caved, man.

Solarized for Xcode 4

So, my friend Chris Weiss tweeted about a project by Ethan Schoonover called Solarized. The project aims to provide a contrast balanced color scheme for terminals. Based on SCIENCE.

There wasn’t an Xcode 4 color theme, so I made one. Feel free to use it.

I think it looks good in either dark:


Or light:


(Sample code from Apple’s LocateMe project)

To use the hex code color values, I installed Hex Color Picker, which made it a snap.

For folks who have to use Eclipse, for one reason or another, Mike Schrag put together a theme.


I’ve been using John Gruber's tip for opening the current Safari window in Chrome for when you need Flash:

I’ve also added a shortcut for opening the current Safari page in Chrome quickly. First, if you haven’t done so already, enable Safari’s Develop menu. (It’s a checkbox in the “Advanced” panel of Safari’s preferences window.) The Develop menu contains an “Open Page With” sub-menu, which lists all the web browsers you have installed on your system. Using the Keyboard Shortcuts section in System Preferences, I set a custom menu key shortcut for the command to open the current page in Google Chrome. Whenever I’m on a page in Safari with Flash content I wish to view, I hit that shortcut, and boom, Chrome launches and loads that page. (Hint: when you create the custom shortcut, and are asked for the name of the menu item, just use “Google Chrome” or “Google” (whichever appears in your Open Page With sub-menu).)

He later adds in an update that this behavior is broken in Safari 5.0.4, because the menu names now include browser version numbers, and that can easily get out of sync. He points to this article by TJ Luoma at TUAW on using AppleScript instead.

I’ve made one slight modification to the one TJ ends the article with, originally authored by TUAM commenter Rob, which closes the Safari window:

tell application "Safari" to set currentTab to current tab of window 1
tell application "Safari" to set currentURL to URL of currentTab
tell application "Google Chrome"
    if (exists window 1) and (URL of active tab of window 1 is "chrome://newtab/") then
        tell window 1 to set URL of active tab to currentURL
        open location currentURL
    end if
end tell
tell application "Safari" to close currentTab

I made a Services Automator workflow that runs an AppleScript, taking no input. I then used the Keyboard Preference Pane to set a keyboard shortcut to trigger that Service.