Nick Bradbury on laughter, middle age settling, and farts:
Hope, unfortunately, can be hard to hold onto the more you learn about the world. That seems to have been a problem for some of the dark humorists I’ve enjoyed.
First, a reminder — WinterFest 2014, the festival of artisanal software, is still on. You can get 25% off some great indie apps for thinkers and writers.
WinterFest 2014 is the sponsor for this blog this week, and it’s also the last sponsorship this blog will run, and it’s a great note to end on. (I love indie software and so do you.) After this there won’t be any more sponsors.
No Inessential readers have complained about the sponsorships, which made me glad. Booking was pretty easy. But dealing with all this is more work than you might think — and, more importantly, it doesn’t fit with how I think of my blog, which is my labor of love. So I’m stopping.
I’ll continue to run ads from The Deck, though. It’s different because it’s different.
But anyway — that’s the scoop. No more sponsors. (Unless somebody offers me a crazy amount of money, that is. Because doi.)
To all the folks who sponsored this blog this year: thank you so much. It was very appreciated.
This post of mine, almost two years old — How Much, or How Little, I Use Interface Builder These Days — was referenced on Twitter recently.
It’s worthwhile to revisit these old posts when things change. And my use of Interface Builder has changed quite a bit since writing that post.
Here’s what’s changed:
Auto layout has become more and more a required thing. Recently I was doing layout the old-fashioned way on OS X — using
resizeSubviewsWithOldSize: — and, in the specific context where I was using it, it didn’t work correctly. (The layout wasn’t actually updated without resizing the window or similar trickery.) This tells me that to stick with the old-fashioned method is to commit to frustration.
This would be terrible news, but Interface Builder’s auto layout support is much improved since that old post. It no longer creates unasked-for constraints as I’m working. That’s huge.
Some other good things have happened. We have storyboards on Macs now, which make it easier to manage things like preferences windows and login/create-account flows.
And we now have IB_DESIGNABLE and IBInspectable, which makes Interface Builder more useful for designers, which is great if you’re like me and want your designers to have as much direct manipulation as possible.
So. A few good things, taken together, tipped me over, and these days I use Interface Builder a ton.
On the Omni blog, several Omni employees write about their favorite apps of 2014. Waterlogue, MarsEdit (that’s mine), Overcast, 80 Days, Prompt 2, BBEdit 11, Aeropress Timer, Editorial, and Pinswift.
Omni design idol William Van Hecke’s talk from CocoaLove — Your App Is Good and You Should Feel Good — is up on Vimeo.
Your writing doesn’t come from a factory. Neither does artisanal software.
A bunch of small, independent software visionaries have teamed together once again this season to bring you fresh, opinionated, and exciting tools for thinking and writing.
- Tinderbox: the tool for notes
- DEVONthink Pro: your Mac paperless office
- Scrivener: your complete writing studio
- Nisus Writer Pro: the powerful word processor for OS X
- Aeon Timeline: timeline tool for creative thinking
- TextExpander: type more with less effort
- Take Control Books: the answers that you need now
No bundles or games or gimmicks; just great software at a great price, right at the vineyard gate.
(PS Brent speaking. This is the last sponsorship I plan to run on my blog. And it’s a great one. My entire career has been about tools for reading and writing — and so the developers behind these apps are my spiritual kin. Also worth noting: it’s not a bundle. Buy exactly the apps you want, for 25% off.)
Bryan Irace suggests UIKit needs a Safari view controller:
It’d be wonderful if Apple provided a “Safari view controller” that developers could present directly from within their applications. This controller would run out of process and work almost exactly like MFMailComposeViewController and MFMessageComposeViewController already do for composing emails and text messages respectively. The app would provide the controller with a URL (and optionally, a tint color), but otherwise what the user does in it would remain secure and isolated from any third-party code, yet fully integrated with Safari.app and Safari controllers presented by other applications.
That’s officer thinking.
Local hero (and my co-worker at Omni) Tim Ekl writes about designated initializers and NS_DESIGNATED_INITIALIZER.
Managing teams is hard. Imagine it’s Monday morning and your team doesn’t know what they’re working on for the week. Plans change and schedules change with them. Spreadsheets weren’t built for this.
Harvest Forecast is a tool designed to plan your team’s time. Visualize schedules in Forecast and easily adjust them as needed. Forecast keeps your team’s expectations on the same page and helps you move projects forward.
As new projects come in, you’ll know who's available, and when to hire. Leave behind bloated spreadsheets and begin scheduling in Harvest Forecast with a free 30-day trial.
Through absolutely no effort on my part, OmniFocus for iPad and for Mac are both on the list. (My work on OmniFocus for Mac isn’t shipping yet.) I’m so proud of the team.
Mark Alldritt — one of my heroes, one of the people whose example got me into and excited about the industry — writes about Script Debugger’s 20th anniversary.
Note that it was originally developed “on a Mac SE/30 with 4MB RAM using Think C.” Imagine.
Ars Technica reports on an integer overflow at YouTube.
We had a similar problem with NewsGator RSS syncing years ago — the unique ID for articles went past 2,147,483,647, and some of our client apps weren’t prepared for it. (The server was fine.)
NetNewsWire was okay, because I was paranoid and treated all the IDs as strings. But that was actually too much paranoia — I really should have saved the space and used integers. But if I had, it’s likely I would have had the same problem. I’m not sure I would have thought to use 64-bit integers.
Now, of course, in any similar circumstance, I use 64-bit integers. (Or at least 53-bit integers.) Lesson learned.
David Sparks created a two-and-a-half hour screencast on OmniFocus. Which is what I work on. (On the Mac version.)
I’ve been so lucky in my career to get to work on apps that people love.
Speaking of love: check out Mac Power Users, the podcast Katie Floyd and David Sparks do.
Rands in Repose: The QA Mindset:
Yes, I often had to gather conflicting parties together and explain that, “You are both doing your job. No, engineers are not deliberately creating bugs. No, QA is not hating on the product. Yes, we actually have the same goal: rigorously confirming whether or not the product is great.”
For years I worked without QA or testers. There were outside beta testers (and they were awesome), but it’s not the same as people with access to the bug tracker whose job it is to know the software and find ways to make it break.
What a difference it makes. I can’t go back. I’m so spoiled.
I like to joke that Nick and the Omni testers hate me and wish only that I will die soon in a conflagration caused by one of my bugs. By which I mean they’re fantastic at what they do, and my appreciation is extreme.
PS Omni’s Liz Marley will be speaking about testing at CocoaConf in Portland this May.
If you care enough about a topic — the Apple ecosystem, for example — then you’ve paid attention all year and you know about really big iPhones, the Apple Watch, and Yosemite.
You don’t need a year-end retrospective to remind you about any of these things. Those things just happened.
I’m not spending the month of December reviewing all the code I wrote this year. I’m writing new code.
I’ve given up trying to remember NSLog number formatters. I was cool with it until Macs got 64-bit processors — and then I just lost it when I stopped being able to use
%d most of the time.
And now I’ve given up even looking up the number formatters. With the new literals syntax it’s just so easy — as in this line of code I just wrote:
NSLog(@"t: %@", @([d2 timeIntervalSinceDate:d]));
What did I want?
%f? I don’t need to know or care.
I continue to be freaked-out about how bad is web performance. HTTP Archive says that the average transfer is 1907K, which is down just a little from last month, but still outrageous.
For comparison, my iPhone app Vesper is 5.0MB, which is less than three web pages. And you don’t have to re-download it every time you use it.
One of the strengths of the browser-based web is — or ought to be — that it’s lightweight. Going to any given site should not require an amount of data transfer that’s a significant fraction of downloading a native app.
The situation right now is crazy.
Scott Jehl writes in A List Apart, Planning for Performance:
We’re not doing a good job.
Here’s how you share data between iOS apps and app extensions.
Sure, the Tumult folks are pals. But check out the video for Tumult Hype Professional.