Springboard #7
I had a fun time recording Springboard with Ash Furrow recently. We talked about completion blocks, getting started in iOS development and writing a niche app.
I had a fun time recording Springboard with Ash Furrow recently. We talked about completion blocks, getting started in iOS development and writing a niche app.
If you use Shaun Inman’s Fever for RSS, the app Sunstroke just got a big update which, among other things, adds iPad support. One of the other features I’m a pretty big fan of is support for using Pinbook to send links to Pinboard. To enable it, go to Settings, find Sunstroke, and switch it on. Because the app takes advantage of Pinbook’s x-callback support, it’s really seamless and you’re sent right back to Sunstroke after you finish.
Late last week — due to nothing wrong with Google’s services — I turned off my Google Apps for Business account and switched my work e-mail over to FastMail. The reasons for switching weren’t that Gmail had done anything wrong, but that I valued the better OS integration of Apple Mail more than the features of Gmail, and that Apple Mail really sucks as a Gmail client.
Why do I think it sucks? Well, the fact that labels in Gmail aren’t really directly comparable to mailboxes in Mail is annoying, but not show-stopping if you stay away from the web interface. The biggest reason was that archiving works differently on Mail for iOS and Mac with a Gmail account, and does so in an incompatible way. On iOS archiving means always sending messages to “All Mail” — even if the label is hidden — and on Mac it means always sending it to a mailbox named “Archive”.
And so — after doing some research and finding out what other people were using — I switched to FastMail. If sending calendar invites with a Google account worked on iOS, I’d probably miss Google calendar, but I’d already been using an iCloud calendar because of that anyway. Archiving also still doesn’t work right between the two platforms: for some reason Mail on iOS can only send messages to an “Archive” mailbox if you’re using an iCloud account — which is insane — but there’s nothing I can do except hope it’s fixed in iOS 7.
One thing that FastMail makes a lot easier is automatic forwarding to another address. So, for example, I use Tender for my support, which has a feature that lets me forward support mail send to a specific address to Tender in order to create support tickets. In Google, I either had to route it through an account, or set up a Group that forwarded to it, either of which was a pain. In FastMail I tell it “support@mydomain = address@tenderapp.com,” and it works. In general I feel like a lot of these most common tasks are easier with FastMail, because it doesn’t seem so focused on the idea that I’m managing a really large business, rather than a small one with a few e-mail accounts.
If you’re happy with Google, stick with it. If you’re not, FastMail is working out really well for me so far.
On May 1st, I’ll be giving a presentation on Core Data at Microsoft’s Portland offices, and Josh Twist (of the Windows Azure team at Microsoft) will be giving a presentation on Windows Azure Mobile Services.
I saw Josh give this presentation in Seattle a few weeks back, and it’s great. They’ve really made something that can make a lot of developers lives easier without needing to be an expert on writing server software.
Also, there’s going to be free pizza.
It’s right downtown, so I’m sure some of us will go out for drinks after. It’s free — but space is limited — so register on EventBrite if you’d like to come.
Brett Terpstra was kind enough to have me as a guest on his show Systematic, and the episode is out now. We discuss indie app development, coffee and wearing watches.
I’m not sure what triggered it, but all of a sudden it seems as though the nerd world has gotten into — or back into — Evernote. Merlin Mann talked about it on his recent visit to Mac Power Users, Brett Terpstra said nice things about it on on Systematic recently, Gabe Weatherhead has been posting about it on MacDrifter and I’ve been obsessed with it the past several days as well. It’s also possible that it’s been that way all along, and I just never noticed. Like I bought a blue Volvo station wagon, and now I’m seeing them everywhere.
There are two reasons that I’ve sort of always shied away from getting too into Evernote in the past:
Evernote makes it pretty easy to get my actual files out as attachments (PDFs, images, etc). It’s also got full AppleScript support, so I don’t think getting my text out would be all that difficult either. I’d probably lose any RTF formatting going to something else, but I don’t use a lot of formatting, so I don’t think that’d be a problem for me.
The last time I tried Evernote — about a year ago — my experience was basically like this:
Fast forward to now, and the apps are between good and great in terms of stability and user interface. It seems like version 5 was a big update that fixed a lot. Some of how you get around in the Mac version is a little confusing, but not terrible, and nothing I can’t get used to. As just a way to quickly enter and find text based notes, it can’t really compete with nvALT, but you get a lot for what you give up.
Fiddling is fun, but I’d like to avoid the temptation to switch every time someone comes out with a new app update. There’s a few things Evernote offers that no one else really can.
Besides Finder, Evernote is the only app I know of that you can really just throw anything at — PDFs, images, text notes — everything. And it’s not just that you can put everything into it, it’s that it treats most of those things the same way (through OCR), so that doing a text search is going to bring up results from all of the above.
I’ve put this to a lot of use already. For example, every time I buy a new bag of coffee now I take a picture of the label and put into a notebook called “Coffee Beans.” So I can now search for “Guatemala” and have all the bags of Guatemalan coffee I’ve bought show up. Or search “Stumptown” and have every bag of Stumptown beans I’ve bought come up.
Another use might be looking for a new apartment. Create a new notebook called “Apartment Hunting” and share it with your significant other/roommate. You can now both add pictures of “for rent” signs you saw out and about, or web clippings from Craigslist. All of the pictures you took are now automatically tagged with the location, and if you want you can manually add location data to the web clips as well.
I noticed when Evernote bought Penultimate and Skitch, but since I wasn’t using either of those apps a lot at the time, I didn’t put much thought into it. Now that I’m looking at them again, the ability of both apps to sync with Evernote has made them both really attractive. Penultimate plus a Cosmonaut stylus is combination I could see actually using for sketching app ideas besides paper. Since Skitch is now available on iPhone, iPad and Mac, it means that if someone sends me an app to test, I can take a screenshot on whatever device I’m on, mark it up with design notes, and send it back to them.
The other add-on apps I’ve been using are Evernote Food and Hello. Food let’s me search recipes from within the app, but also sync against any existing recipes you’ve already got in Evernote. It also lets you make a note of whenever you’ve had a meal somewhere, or search for any restaurant and save a note on it. And of course it saves the location, and often even has the menu for the place you were at. I’ve been using it to back fill places I liked in San Francisco, Montreal, Denver and New York so that the next time I’m in any of those places I don’t have to try and remember where it was I had a great vegan panini.
I’ve played with Hello less — because I haven’t been to any conferences or meet ups this week — but I tried it out at home. What it seems to do is let you take a picture of someones business card when you meet them, it can then pull their data off using OCR, sync it with your address book, and keep a running log of when you’ve met this person. I’m kind of excited about actually trying this out.
The biggest thing I’ve learned is that — like butterflies — notebooks are free. It’s usually easier for me to create a new notebook on a topic than to try and fit it into an existing one, so I’ve just been creating as many as I need, as I need them. I add one for every project or area of my life, and then if any seem very closely related, I drag them together to create a “stack” (Evernote’s concept of a folder). I’m doing more or less the same thing with tags, although I’m trying to stick with using tags for items that could potentially be spread across multiple areas, and notebooks for items which probably aren’t. Sometimes there may be overlap, but I’m not too worried about it. The best plan seems to be adding whatever contextual information you think would help in terms of title, tags and notebook, and then using search to find it later.
Another lesson is that Evernote really works best if you put as much as possible into it. For things which are strictly bookmarks, I’m not going to stop using Pinboard, but I’m giving it an earnest shot for text notes. The way I differentiate between things that go in Pinboard vs Evernote vs Instapaper is actually pretty simple. Pinboard is for something where I want to actually visit the site later (knowing it might change), I might make a web clip in Evernote of something if I want to capture it exactly how it is right now (like a recipe), and Instapaper is for things I want to read later.
Because I’m putting as much as possible into it, I now have one place I can look on any device for almost anything via a text search. How cool.
Every iOS developer who’s ever complained to an Apple engineer or evangelist is familiar with hearing “file a Radar.” Unfortunately, Radar’s web interface is pretty clumsy. QuickRadar is a free menu bar app you can install that lets you easily file new bug reports to Apple via a global key command.
I‘m not entirely sure where this first started, but a pattern that you seen a lot in third party Objective-C libraries is using separate success/failure blocks for callback on asynchronous API. It’s surprising that is has caught on for a couple of reasons. The first is that most good Objective-C developers seem to want to do things the “the Apple way,” and Apple doesn’t use this pattern anywhere. The other reason is that the problem with it isn’t an edge case, but something you’ll come up against whenever you use the pattern.
As an example, here‘s a piece of code that uses separate success/failure blocks:
[object doSomethingWithSuccess:^(NSData *data) {
[self.activityIndicator stopAnimating];
// Do something with the data
} failure:^(NSError *error) {
[self.activityIndicator stopAnimating];
// Do something with the error
}];
And here’s how I’d write it:
[object doSomethingWithCompletion:^(NSData *data, NSError *error) {
[self.activityIndicator stopAnimating];
if (data != nil) {
// Do something with the data
} else {
// Do something with the error
}
}];
If you go and look at any Apple API that uses a completion handler, you’ll see they follow the second pattern. Using separate success/failure blocks forces you to repeat code, because cleanup code is usually independent of success or failure. Don’t do that.
[Update 4:28 PM: As Tim pointed out in the comments, the success flag I had on my callback block was superfluous, so I removed it from the example.]
NSHipster talking about iCloud: > The Lisa. The Twentieth Anniversary Macintosh. The iPod Hi-Fi. The MacBook Wheel. > > Each of these products exemplifies Apple’s obsessive pursuit of quality as much as its unrivaled ability to anticipate the direction of things to come and execute flawlessly.
It only keeps getting better from this point on.
Looking at Tumblr the other day I ran into this photo. It was tagged “Julian Koster,” and although I’m not familiar with Julian, I immediately recognized the showman behind him. He was the sidekick of someone I was lucky enough to briefly know named Logan Whitehurst in his band — Logan Whitehurst and the Jr. Science Club.
I grew up in a town about forty-five minutes north of San Francisco in wine country called Petaluma. During the second half of highschool, my life primarily centered around a place called The Phoenix Theater: a former opera house turned movie theater, turned music venue that sits downtown. I was lucky enough to see lots of great bands, get to the know the manager Tom Gaffey, help work the soundboard once or twice, and perform there with my own band several times.
One of the things that made The Phoenix awesome was that it was the right size (about 700 capacity) to have up and coming national acts perform. Of the groups I saw, the one I became most obsessed with and looked up to was The Velvet Teen (who are still together). At the time their lineup consisted of three folks: Judah, Josh, and Logan. For me at sixteen or seventeen, they seemed impossibly cool. For me at twenty-eight, they still seem like they were impossibly cool.
I’d be surprised if my best friend/drummer Justin and I missed any shows that The Velvet Teen played at The Phoenix over the next two years.
I can’t remember the exact circumstances that lead up to me talking with Logan, but I have a pretty good idea. If there was one part of being in a band I was good then, it was ingratiating myself to people I wanted to meet and (hopefully) open for. I think something about being a chubby, nerdy and excitable teenager probably helped with this a lot. Combined with the fact that Logan was — and I say this with no exagerration — one of the nicest people I’ve ever met, it’s easy for me to imagine how we ended up talking.
I emailed him once or twice asking about recording, music, anything else. I remember that he always signed his emails “Your Friend, Logan.” I thought it was cool that I could tell people we were “friends.” Of course, it was probably his default signature. Eventually I asked him if he’d like to help us produce an album, and he said yes. Whenever Justin and I were together for the next few weeks, one of us would usually stop mid-sentence and “Dude. Logan from The Velvet Teen is going to produce our album.”
Logan introduced us to his friend Dan — who was in the construction phase of building a recording space in Rohnert Park — and together they helped us put together a ten track CD over four long days that we called “QWERTY” (primarily funded by Justin’s highschool graduation money). Logan even drew some pretty awesome cover art for us.
Justin and I continued to play music together for about another year and a half. We performed around Sonoma County, The Phoenix, the Bay Area and made a couple of trips out of state. A couple of times Logan and Vanilla joined us.
After that summer I exchanged email or talked to Logan over I.M. a few times, but not much. Around this time — the end of 2003 — he’d gotten really sick, for reasons no one knew. I remember getting an email from him at the beginning of 2004 saying that he’d “just been sick for a really long time.” In May of 2004 Logan found out that he had brain cancer.
Eventually my band broke up, and I moved to Sacramento to live with a girl that I’d been seeing. I can’t remember if it was just before, or just after I moved, but at some point I came back to play a show at The Phoenix by myself. Outside I ran into Logan on the street with his girlfriend. He was always extremely vibrant and gregarious — and he still was — but he was walking with a cane, and his hair was thin. It was weird to see him that way. He looked like someone who was recovering from cancer treatment. I forget what I was running around doing, maybe getting ready for or promoting my show, so I only stopped briefly when I saw him. As I walked away he said “I hope you find whatever you’re looking for,” probably because I was acting a bit spastic and in a rush. This was the last time I talked to Logan.
In 2006, Logan’s cancer was in remission, and recorded and designed the artwork for another Jr. Science Club album. By now I was working at the Guitar Center in Sacramento, and focusing on new things in my life, so I didn’t talk to Logan at all for a while. I did find out that his cancer had come back though, and in December of 2006 he died.
It’s weird that in the scope of people in my life, I didn’t really know Logan very well, but he had a permanent impact on me, and I think about him a lot. It’s funny how something like a picture of a plastic snowman can trigger it to all come back at once.
Last week when Google announced that it was shutting down Google Reader, it seemed as though the impetus had been created for developers to create a million new RSS aggregation/syncing services. My feeling is that it’s probably a bit harder than it looks to make something like this work well and scale, most of these projects will fail early, and a couple will gain a following.
Fortunately we don’t have to wait to find out which of these makes it, because there’s already a great paid service out there called NewsBlur. I’ve been using it full time for a few days now, and I dig it. Its social features are actually cool (they work like a running comments list for sites without comments), it’s already got a serviceable iOS app, and everything works reliably.
I’d like to see the service improve, and I think the best way to show support was to get a paid account for $24 a year. I recommend giving it a shot.
As I write this I’m currently aboard a bus headed from Portland Oregon to Seattle Washington. In the past I’ve always taken Amtrak for this trip, and have been generally pleased, but on a recommendation from a couple of different people have decided to try out Bolt Bus as an alternative. And so here I am.
There were a few advantages I was told Bolt Bus had over Amtrak. Some of them are holding up, and some not so much.
The first one is price, and and it holds up immediately. The same trip from Portland to Seattle on Amtrak would cost me $50 (add $18 for business class), and Bolt Bus was $20. They’re pricing scheme works something along the lines of it being cheaper when the bus is less full, so it could be a bit less or a bit more than what I paid, depending on when you book your trip.
One thing Wi-Fi was more reliable than on Amtrak. This probably has to do with there being more cell towers closer to the freeway, but it doesn’t matter because Wi-Fi was out on this bus today. I don’t know how common this is, since I’ve only ridden once before. Since I have a tethering data plan on my iPhone I wasn’t too disappointed.
If you want to use technology, they do at least have enough plugs for everyone — one per seat — which Amtrak does not always have. Getting off fully charged removes just a little bit of the stress of going to a city I don’t live in. I do think if you upgrade to business on Amtrak a plug is guaranteed, but at more than 3x the cost of Bolt Bus.
The seats are a bit smaller — I’d describe them as marginally larger than an economy seat on an airplane. It’s okay, but not great. Speaking of leg room, not being able to walk around kind of sucks. I’m fidgety though, so maybe that wouldn’t bother someone else as much.
No-matter what time I book these trips for, I always seem to be in a rush to get out the door and forget to eat or make coffee. Needless to say, when my blood sugar tanks and I contract a wicked caffeine headache halfway on this trip, I’m going to miss the dining car (even if the coffee is the worst I’ve ever had anywhere).
If you have either available, Bolt Bus is a decent alternative when cost is a concern and you can remember to eat beforehand. If the $40 doesn’t matter to, I’d take Amtrak and pay for business seating.
Since February 2010, I was waiting for Apple to release an update to the iMac, and on January 31 of this year my brand new 27” iMac arrived — with a broken screen. Thankfully AppleCare got me squared away within a day or so, sent me a free USB SuperDrive for my trouble, and I was in possession of a working one within a few days.
While I was on the phone with AppleCare trying to get everything worked out, I had a few thoughts. First was that even the best phone support kind of sucks. It took more than a couple of hours on the phone and a couple of callbacks to get a DOA machine replaced, a lot of it on hold. To their credit, everyone there was genuinely helpful and understanding of my situation.
The other thought was that there was no reason to be upset about anything since it wouldn’t make it go any faster, and really I had no choice. If they sent me five machines, each more defective than the last, I really have no vector of recourse beyond being a jerk to a customer service representative. I mean, realistically, what am I going to do, start learning C# and order a HP?
These are the sort of thoughts listening to hold music while staring at a broken iMac can apparently spur in me.
It’s wonderful. I upgraded to a 3.4GHz quad-core i7, 16GB of ram, and a 3TB Fusion Drive. It’s really, really, fast. The last non-portable computer I owned was a dual 1.6 Power Mac G5 I bought used that I’m pretty sure had faulty ram. Since then I’ve owned a white plastic MacBook, the first unibody MacBook Pro, and a 2011 MacBook Air.
I’m excited to have a machine that can run Aperture respectably, and also has a drive large enough to keep my library on. Dropbox and iCloud make keeping everything else in sync easy (mostly Dropbox).
Fusion Drive has been completely invisible to me, and since nothing has been slower than on my Air with the SSD, I figure it’s doing what it’s supposed to. I don’t know when we’ll eventually have large, cheap SSD’s, but this feels like a great solution so far. Also, the kind of solution only Apple could easily provide, with their integrated hardware and software.
The screen is noticeably nicer to look at than the 27” LCD Cinema Display I’d been using. Laminating the glass to the LCD improves it just as much as it did with the iPhone. I can’t even remember what I was giving up by them doing this, only that it sounded stupid when I heard it, and that this screen looks awesome.
Something that I think is cool, but that doesn’t really affect me that much is the thinness. When I mentioned ordering it, a couple of non-Mac using people I know had said they it was silly that Apple would bother with making a desktop machine thin (remind me to try and take a dump all over the next thing you drop thousands of dollars on and are excited about).
My response is that they didn’t make the machine crappier in other ways that I can tell, I don’t seem to be paying more for it being thin, and it looks cool when you catch it from the side. Technology surrounds me everyday, and I see no reason why it should be any less designed or beautiful than the chair I sit in, the guitar I strum or the coffee maker on my counter.
Although as a paid app Closeby didn’t have a ton of users, I wanted to do my best when taking it free with iAds to not show the ads to those to people who had paid for it. Luckily, I have a file I that I write out, so I can detect if the app has been run on the current device by checking if that file exists or not and saving something in NSUserDefaults
. The problem is that if the user bought a new device, or is installing it on a second device that hadn’t run the app before, they’d be out of luck.
What I wanted was a way to not show ads if the user had ever run the app on any of their devices, and to never show them ads later if they bought a new device. I think the solution I came up with is pretty clever, really easy, and solves the problem the way I wanted to. What I do is when I check if that file exists, I don’t just note it in user defaults, I save it using the iCloud key/value store. I can then check that whenever the app launches.
As long as the user has run the previous version of the app, upgraded, and ran the Closeby again on any of their devices, ads will be hidden on all of their devices forever.
A little less than a year ago, I put out a small app called “Closeby” for $2.99. What it does is really simple: it goes through everyone in your address book, geocodes their addresses and tells you how far away they are from your current location. The people I’ve talked to who bought it liked it, but the most common response I get is something like “That’s a cool idea. I have no idea why I’d want that, but it’s a cool idea.” And so it hasn’t sold very well. In the entire amount of time it’s been out, it’s sold about 170 copies, and lowering the price to 99¢ last summer sometime didn’t make much of a difference.
I hated seeing something I worked on languish, so I decided to take the app free and include iAds. My realization recently was that Closeby is probably a better free than paid app, and if someone really likes it, I’ve included a 99¢ in app purchase. I also took extra special care to make sure that I avoid showing ads to people who previously purchased the app, and included a workaround incase it doesn’t work every time. The reason I say it’s probably a better free app is that, I think people will download a free app just because it sounds kind of cool, but won’t pay money for something they’re not sure they’ll ever use. I’m interested to see if I’m right about any of that.
The new version of Closeby is available now for free on The App Store.
According to Shiny Developments “Average App Store Review Times” page, average review time for Mac apps is down to under eight days, and is still doing down. It peaked at twenty-seven days in October — which was completely unacceptable — and has gone down really quickly ever since. Good job Apple for fixing the problem.
The Candler Blog has a good post comparing different variations of Courier (and also Pitch), with an illustrative animated GIF included. I’d probably use Pitch pitch if I could justify the cost — since I like things that have some whimsy — and Courier Prime is the second best of the bunch.
I’m giving Courier Prime a shot as my new font for non-programming writing, replacing Anonymous Pro. My favorite feature is that — at least on my MacBook — it’s extremely not-fuzzy. Most monospaced fonts usually get disqualified when one or more critical characters get anti-aliased in an unfortunate way. Courier Prime seems really good in that way, and I’m loving it.
I don’t know why I never thought of this before today, but it’s really easy to set up a search template in LaunchBar (or Alfred) to search your own Pinboard bookmarks. If you’re using LaunchBar, just go to show index, go to the search templates item at the bottom of the window and add this for full text search:
http://pinboard.in/search/?query=*&mine=Search+Mine&fulltext=on
Or, if you don’t pay the $25/year for an upgraded account:
“The absolute bare minimum every programmer should know about regular expressions” is an older article there’s a good chance you’ve seen before, but if you haven’t, should read.
Federico Vittici at MacStories has an article up about a new feature of Mr. Reader (RSS reader for iPad) that lets users add custom sharing services. One of the examples he created is a sharing service that sends a bookmark and description from Mr. Reader to Pinbook.
Justin Clark has made a bookmarklet for Pinbook that takes the URL and title of a page and sends them to directly Pinbook for easy adding.
If you’re on a Mac, you can drag the below link to your bookmarks bar and let it sync over iCloud to iOS:
If you’re using Safari on iOS, add the bookmarklet by following these steps and using the code below.
javascript:(function()%20%7Bwindow.location=‘pinbook:///add?url=‘+encodeURIComponent(location.href)+’&title=‘+encodeURIComponent(document.title)%7D)%20();
I keep my Fisher Space Pen in my pocket everywhere I go, and use it all the time for taking notes. The Smithsonian’s Design Decoded blog has an article that talks about the genesis of the pen, its creator, and dispels a couple of myths about it.
(Via Put This On.)
That we have a hard time thinking of lower level languages we'd use instead of C isn't because C is low level. It's because C is so damn successful as an abstraction over the underlying machine and making that high level, it's made most low level languages irrelevant. C is that good at what it does.
It seems obvious once I read it, but the point that gets made very well in this article is that C isn’t really a low level language. It’s just that C is so effective at what it does that there isn’t much reason to think of using a lower level language anymore, and so our perception of what a low level language is has changed.
Brent Simmons responded on his blog today to something said on the Debug podcast (recommended) about his coding style being crazy. I wondered if I’d missed something when I heard it, since I’ve seen Brent’s code in examples, and thought it was pretty normal looking at the time.
The example he gave was of creating a new view controller:
- (id)initWithAccount:(GBAccount *)account {
<pre><code>self = [self initWithNibName:@"Settings_iPhone" bundle:nil];
if (self == nil)
return nil;
_account = account;
return self;
</code></pre>
}
And noted:
My formatting style is pretty much K&R style, plucked straight from the C Programming Book — with one modification: opening braces for methods and functions appear at the end of the line rather than on the next line.
My style is similar to Brent’s, but with a couple of differences. I put the braces for methods and functions on the next line, I always using braces for loops and conditionals, and I only ever have one return. My version of the same method would look like this:
- (id)initWithAccount:(GBAccount *)account
{
self = [self initWithNibName:@“Settings_iPhone” bundle:nil];
if (self != nil) {
_account = account;
}
return self;
}
The biggest reason I chose this style is that it requires the least reformatting of Xcode’s template code. Where I used to work we used a very specific and very non-standard way of formatting, and after a while I got really tired of always having to reformat every piece of template or autocomplete code before I could actually do anything, so I tried to pick the style that would eliminate that as much as possible.