October 2011
1 post
Why Indoor Navigation is so Hard
I wrote a piece for Radar about our company’s approach to indoor navigation with mobile apps.
Remember the days before you could pull your smartphone out of your pocket and get instant directions from your current location to anywhere in the world? It’s kind of foggy for me, too.
Read More
September 2011
1 post
Git Is Simpler Than You Think
It was about one year ago that we switched to Git. Previously, we used Subversion, through the Mac app Versions, which (rightly) holds an Apple Design Award.
I made the executive decision to leave our comfy world of Versions because it seemed clear that Git was winning the Internet. There was much grumbling from my teammates, who were busy enough doing actual work thank you very much.
...
August 2011
1 post
An iOS Developer Takes on Android
Recently, we released the Android version of Meridian, our platform for building location-based apps.
We didn’t use one of these “Cross Platform!” tools like Titanium. We wrote it, from scratch, in Java, like you do in Android.
We decided it was important to keep the native stuff native, and to respect each platform’s conventions as much as possible. Some...
March 2011
2 posts
A lightweight HTTP request class for iOS [2/2]
Part 1 | Part 2
Check out SMWebRequest on Github.
In Part 1, we introduced SMWebRequest for making HTTP requests with little code. For instance, here’s how your view controller could download an RSS feed and parse it with SMXMLDocument:
Looks simple, but there’s a catch. See how we’re taking our NSData response from the server and turning it into XML? Well...
A lightweight HTTP request class for iOS [1/2]
Part 1 | Part 2
Check out SMWebRequest on Github.
Let’s say you’re writing an app, either on iOS or the desktop, and you want to download some JSON data from a web service.
With JavaScript and jQuery, this is a one-liner:
Sigh, if only.
Well, technically you could do this in one line:
But if you do that, you’ll block the main thread until it completes,...
January 2011
1 post
A lightweight XML parser for iOS
Check out SMXMLDocument on Github.
If you’ve ever tried to parse XML on the iPhone or iPad using NSXMLParser, you may have wondered if you’re taking crazy pills.
Is this really how people parse XML on iOS? Really?
I mean, yes, it’s true that using NSXMLParser forces you to write extremely efficient stream-based parsing without buffering the entire XML structure in...
December 2010
1 post
Simplify your models with SMModelObject
Check out SMModelObject on Github.
For almost every app we’ve made, I find myself writing “model classes” to store structured data and logic. For instance, when you search for a book in the Barnes & Noble app, we fetch book results from an XML-based API and parse the XML into Cocoa objects that get passed around to our Controllers and Views.
Pretty standard stuff....
November 2010
2 posts
Raaarr: A Growl Style
Update: This style is now included with Growl 1.3! Go download it from the App Store and enjoy.
Download Raaarr Now [Growl pre-1.3].
It all started way back 2 days ago when James McDonald tweeted out a design for a new Growl style:
It was a lovely Photoshop design and I offered to take a stab at coding it up.
I started with a basic HTML and CSS structure cribbed from the very...
A Brief Review of the 11" MacBook Air
OMG OMG OMG OMG OMG OMG OMG OMG OMG OMG
A Less Brief Review of the 11” MacBook Air
It’s been my primary computer for a week or so, and I have zero regrets. I can’t imagine going back to my 13” MacBook Pro. Which, even with an SSD drive upgrade from Apple, felt slower than this machine.
I don’t know how to explain it. I guess CPU clock speed is meaningless now?...
October 2010
1 post
DropDAV = Dropbox + WebDAV
Go use DropDAV now.
When the new iWork update for iPad dropped, I was in the Bay Area for an Important Meeting. While in transport to this meeting, I had created a Keynote presentation on my iPad. Because I want to be hip with the kids!
Now we’re sitting in the rental car in the parking lot of the Big Company, and the presentation starts in 5 minutes, and I need to shuttle the Keynote...
September 2010
3 posts
iPad Does Everything
In 1984, Bang & Olufsen released the Beosystem 5000, a large component-based stereo system. It shipped with the most awesome remote control of all time, the Master Control Panel 5000.
I was seven years old when I saw this thing at my Aunt’s house and it was just about the coolest thing I’d ever seen. That bottom silver panel flips open to reveal even more buttons. It’s...
iOS Icon Template for Perfectionists
Download the modified template
After creating a few icons with the excellent iPhone 4 icon PSD template from Cocoia, we started noticing the dreaded “black corner pixels” effect on iOS and iTunes, which you see all over the place these days.
Why does this happen? It’s because Apple is very liberal about the compositing of your image. Let’s say you make a nice...
Moving my Photos to the Cloud
I went to visit my extended family on Lake Michigan last weekend, and ended up snapping a few fancy-schmancy HDR photos on my iPhone 4.
Like the world needs more photos of beaches.
Later, I captured some germane pictures featuring actual family members. After which I thought, man I sure would like to show these to my grandparents on my big-screened iPad which is sitting right here. Also,...
June 2010
2 posts
iPhone 4: No Italics!
This sounds crazy, but seems to be true: +[UIFont italicSystemFontOfSize:] simply returns a regular non-italic font on iPhone 4 hardware.
The release notes state:
iPhone 4 uses a different system font than earlier devices.
References to the Helvetica font in nib files will be
decoded as the system font on these newer devices.
The “different system font” appears to be...
How to check out new music on Rdio
1) First, search for an artist you’re interested in:
Now scroll down to “Popular Songs.” See that Play button?
2) That’s the one. Press that. Press it.
3) Now you’re listening to some awesome music. How easy was that?!
For extra fun, share it with your friends:
March 2010
2 posts
Improvements to Google Wave Notifier
Download the notifier now
I tried out the Unofficial Google Wave Notifier and liked its functionality, but wasn’t thrilled with the UI:
So I made some changes:
The icon glows blue when you have unread waves, inspired by Tweetie for Mac:
I also added a selector for choosing which browser the Notifier opens Google Wave in when you click things.
Creating...
There, I fixed Xcode—You’re Welcome.
Update: Xcode 4 ships with a brand new completion engine and UI that makes my hackjob plugin look like a toy. Go use that instead!
Download xcode-auto-assistant now
In my last installment, I discussed Xcode’s frustrating implementation of code completion.
I’ve now taken matters into my own hands.
It turns out Xcode has an (undocumented) plugin system. And it also turns out...
February 2010
1 post
Code Completion and XCode
Update: I wrote a plugin to address these issues.
Later Update: Xcode 4 Preview 3 shipped with a brand new completion engine and UI that happens to address all these issues with aplomb. Yays!
The newish mac app Espresso contains a great (and uncommonly beautiful) implementation of code completion.
It goes like this. Say you’re editing a CSS file:
That’s a nice blue...