My friend SeoulBrother tweets: Guys, I filed an initiative in WA to suspend sales of firearms and ammo after any mass shooting. Deets http://seoulbrother.​​post/​130304167920/​mandatory-​10-day-suspension​-of-all-firearm-and… From the text of the initiative: Firearm and ammunition sales have consistently seen boosts in sales after high-profile incidents involving gun violence. It’s known as “the Sandy Hook Effect,” a reference to increased sales and NRA memberships after the 2012 Newtown, Connecticut massacre. These “bumps” allow firearm companies and the gun lobby to profit from these tragedies. Show me where to sign.

Posted by on 1 October 2015 | 9:34 pm

So Upset

Peeple may be a hoax or a stunt. See the reporting at Snopes. If it is in fact not real, then I’ll be relieved, but also quite angry at the jerks who put it on. I can’t think of a good reason. But for now I take it at face value. * * * I’ve never in my life written an email to a high-up person at Apple. I was upset enough today to write an email to Tim Cook. I kept it as short and clear as I could. I was tempted to say something like “Hey — long-time happy Mac developer here!” but I kept myself, and everything extraneous to my actual message, out of it. * * * Hi Tim, You may be aware of this not-yet-released app Peeple which is, essentially, Yelp for people — that is, it’s for rating and commenting-on other people. That’s creepy, but the worst part of it is that you can be added — and rated and commented-on — without your consent. Ella Dawson made some great points about how dangerous this is:​2015/10/​01/why-peeple-​is-dangerous-​to-survivors-​and-really-anyone/ Were Apple to make any kind of public statement that explained that it wouldn’t accept apps for rating and commenting-on people where people can be added without their consent, I would appreciate it. I’m sure many people would. Thanks in advance for any consideration you give this. -Brent

Posted by on 1 October 2015 | 9:28 pm

Omni Swift Bikeshed Club Week Three

It was my week to come up with a question.

Posted by on 30 September 2015 | 3:55 pm

Matt Remembers Alex

Matt Mullenweg writes about Alex King: One of my favorite things about Alex was how darn tasteful he was. He would think about every aspect of something he built, every place someone could click, every path they could do down, and gave a thoughtfulness to these paths that I still admire and envy today… It’s classic Alex: something simple and thoughtful that in hindsight is so gobsmackingly obvious you wonder why everything doesn’t work that way, but you never would have imagined it beforehand. And Alex wouldn’t just imagine it and do it for himself, he released his best work as open source, as a gift to the community and the world, over and over and over again.

Posted by on 29 September 2015 | 1:04 pm

Alex King

My friend Alex King died last night. He had been fighting cancer. He was a good man. We should all be so good. I’m thinking of his family. They’ll miss a husband and son and father. If there was any way to take some of that pain away, I would. So many people — everybody who knew Alex — would. I wish it worked that way.

Posted by on 28 September 2015 | 1:32 pm

A Secret Santa Solution

At Omni we have a Swift Bike Shedding Club. Each week we meet to show our answers to the current question, and we get a new question. Last week the question was from Ruby Quiz — our code had to assign secret Santas following a couple simple rules. It sounds easier than it is. It’s not that hard, but it may not be obvious right away, either. If you try it yourself, don’t read the “Quiz Summary” part of the page until after you’ve written your code. (It gives away too much.) Also: don’t actually have your code send email. And: don’t look at my solution until after you’ve done yours.

Posted by on 25 September 2015 | 12:41 pm

Help Needed

Dave DeLong tweeted this morning that long-time Mac developer Rosyna Keller needs help. Rosyna writes: I’m writing this now early Thursday morning from a Red Roof Inn, the safest place I’ve been since September 30th, 2013. I’ve only got a total of $0.06 left to my name and I only have a room here until 11am (Phoenix) on Thursday, September 24th, 2015. I have no idea what to do, I’m broke, and I’m hiding from extremely abusive family. A necessary mark of a good community is that we help people who need help. Rosyna needs help.

Posted by on 24 September 2015 | 11:26 am

Screen Size and Money

Dave DeLong tweeted: Hypothesis: we place a monetary value on apps that strongly correlates to the size of the screen they run on And: I'm thinking based on device class: ⌚️ = $0 📱= single digit $ iPad = low double digit $ 💻 = double digit $ 📺 = double digit $ (guess) My hypothesis is different from Dave’s. There’s a loose corollary between screen size and how people value software, yes. But instead it works like this: the more productivity a device enables, the more people value the software. And, while iOS devices continue to allow for more and more productivity — see the iPad Pro, multi-tasking, and so on — the Mac is still by far the best device for productivity. It’s not just because Mac screen sizes tend to be larger, though there is that. That’s just one of a whole bunch of reasons that Macs still make for better productivity. So I don’t expect Apple TV to be in the double digit range. I expect it to be the same as iPhone apps. (Note that I’m talking about productivity apps solely. In the worlds of games and entertainment and diversions things may be different.) (Also note that I’d love to be wrong about Apple TV.)

Posted by on 22 September 2015 | 12:10 pm

Why We Love Indies

What’s great about indies is that they can, and do, make human decisions that may upset people. Large corporations may (and frequently do) upset people — but it’s rare that they do so out of a sense of ethics or morality. Quite the opposite. So Marco says that keeping Peace on the App Store just doesn’t feel good. You may be upset by this. But here’s the thing: we don’t love indies because they can do and say things that upset other people — we love indies because they can do and say things that upset anybody. Even you, even me. You can see plain as day that there’s a human being there. I have to admit, though, that I’m not upset, even though I was a Peace user. I stand up and applaud Marco’s courage and his decision. * * * Cabel Sasser said it better: Agree or not, this is why small developers and individual voices are important. Big companies don't—can't—do this.

Posted by on 18 September 2015 | 1:42 pm

CocoaConf San Jose Early Bird Thing

My pal Solomon — Solly, Sol-meister, ol’ SK — just emailed me to remind you that the early bird sale for CocoaConf in San Jose ends Sept. 19th at midnight. Check out the schedule. Laura Savino and Jaimee Newberry are both speaking, which is more than enough right there to get you to go. And there’s a whole mess of Daniel Steinberg on Swift, which you know you need. The unstoppable Marcus Zarra (I’ve tried to stop him; can’t be done) will be talking about Core Data. And there’s plenty more. PS Actually, no, I haven’t tried to stop Marcus Zarra. Who would do that? It’s way more fun to encourage him. PPS I’m speaking too, at the very end.

Posted by on 11 September 2015 | 12:19 pm

On Today’s Apple Event

I’ve been at home and injured — with lower-back spasms, which are excruciating but getting better today — which explains my string of snarky tweets during the Apple event today. (Also the pain medication might have something to do with it.) But there was one tweet I wanted to explain: Apple events always give me the near-overwhelming urge to go outside and roll around in the dirt. That’s the lyrical version of “I find Apple events to be more precious than I’d like.” By precious I mean, as an old version of Webster’s has it: “Particular; fastidious; overnice; overrefined.” Think of precious as high-end, high-emotion kitsch. Apple events are sugar pills with a sugar coating. Me, I prefer a sugar pill with a bitter coating (as in the British version of The Office), or a bitter pill with a sugar coating (any Kurt Vonnegut novel). (Note: I stole this metaphor from Vonnegut.) Which is to say: I’m as cheap and sentimental as the next person, but I think my sweets taste better with some peppers. However — and this is important — the way Apple does these events is utterly appropriate. For me to criticize it from a personal taste perspective is ridiculous, given that my personal tastes would work against Apple’s success. So I was just being a jerk, in other words. My back hurts. * * * Apple announced some great things today. Of particular interest to me is the iPad Pro. I’m a Mac developer — I’ve done my time with iOS, and don’t have any wish to return to it. Except… except that the iPad Pro is sneaking up on being a Mac. Or on being the thing that replaces Macs in the long term. (Or on being the thing Macs turn into, or something.) I love writing productivity apps. Not games, not diversions, but apps where you get work done. And the iPad Pro looks like the first iOS device designed for productivity apps. I keep thinking, though, that if I could plug in my old Apple Extended Keyboard II, my Magic Mouse, and a 27" display, then I could get real work done on it. Well, if I could run Terminal and BBEdit and Xcode. And if there was something like AppleScript. All right, so it’s not a Mac, and isn’t supposed to be — but it’s some steps closer. And that’s intriguing. I don’t expect to go back to writing iOS apps again (unless, of course, at Omni I’m asked to) — but, gosh, it would be fun to write for iPad Pro. I wonder if it’s possible to write apps that run only on iPad Pro. That might tempt me more. Obviously, in that case, I wouldn’t be writing for money but for love. * * * I don’t have plans or interest in writing for Apple Watch or Apple TV. It’s nice, for once, to enjoy platforms where I’m just a user. I like my TV and my watch, and it’s fun to use them without knowing anything about their respective SDKs. Like a regular person. (That said, it’s always possible that at Omni I could end up working on anything, which is fine, but so far I’ve been on Mac apps and I’m happiest that way.) * * * This event shows, again, that the Mac is at the back of the bus. But I like that — we can horse around a bit back there. P.S. Looks like the El Capitan ship date is September 30. I’ve been happily using the betas.

Posted by on 9 September 2015 | 4:05 pm

The Real Question

In an article about NetNewsWire 4, Dan Moren writes: Of course, the real question is whether an RSS reader is still software that people get worked up about. With the demise of longtime RSS staple Google Reader and the incursion of social networks and alternative news reading apps like Flipboard, Nuzzel, and soon Apple News, an RSS reader seems decidedly last decade. Is that the real question? I think it’s not. I think that, for some reason, many people think that that’s the real question when it comes to RSS readers. There are plenty of software categories that are hot when they’re new, and then they settle down. RSS as a format remains huge (ask your local podcaster) — and RSS readers have become a type of productivity software that some people like and some people don’t. Simple as that. I don’t mean to pick on Dan. Plenty of other writers write the same thing, which is why I bring this up. By now, though, it should be clear that RSS readers are another one of those software categories that has quite a nice life after its hot period.

Posted by on 3 September 2015 | 2:20 pm

NetNewsWire 4

NetNewsWire 4 for Mac and iOS is shipping! Syncing is free. It’s been a poorly-kept secret on my part that I was disappointed in how long this took — but shipping means everything is forgiven. :)

Posted by on 3 September 2015 | 12:12 pm

OmniFocus for Mac 2.2.5

It just came out on the Omni site, and will be on the Mac App Store once approved. It fixes a couple crashes — including one that I called The Last of the Big Crashes. When I started working on OmniFocus last year, there was a set of the most common crashes and a set of crashes that were hit pretty rarely. So we fixed a bunch of crashing bugs — the most-common crashes and others — until we’re down to the rare crashes. (If you read the release notes going back to 2.1, you’ll see crash bug fixes in almost every release. Sometimes a bunch of them.) I’ve often wondered if fixing crashing bugs leads to a more-successful app. It’s the right thing to do, regardless, so we do it. (In fact, I have to stop myself from being too obsessed with fixing crashes.) But does that translate to more sales? Intuition tells me it does, since people using a trial version are less likely to hit a crash, and they’ll be more likely to buy the app. And people who have bought the app are less likely to hit a crash, and they’ll be happier with the app, and therefore more likely to tell friends, co-workers, and family about the app. I would love to be able to tell developers unequivocally that fixing crashing bugs is good for the bottom line. But I can’t. I can only say it maybe helps — and then just appeal to our sense of professionalism. Fixing crashing bugs is the right thing to do. Period. But, yeah, nobody tweets about how stable your app was today. * * * The specific Last of the Big Crashes in 2.2.5 was this: an NSOutlineView had unsafe references to deallocated objects, and then calling itemAtRow: crashed. The solution was to make sure those objects would get deallocated afterward, not before, calling itemAtRow:. (That sounds simple, but going from the crash logs to understanding the problem to figuring out the best way to fix it was anything but simple. There was even a period of an hour or two of staring at assembly code.) (Of course we couldn’t reproduce it — not until we got some anonymized databases that people were kind enough to send in. We get great help from OmniFocus users.)

Posted by on 1 September 2015 | 1:09 pm

Swift Book Club Book?

My co-worker Curt Clifton writes: I’d like to start a “bike shedding” club. One problem a week, everybody implements a solution in Swift. Get together and compare approaches. Anybody have a good source of sample problems? Project Euler is probably too mathy. Maybe a data structures book? This would be for programmers at Omni, so think of the kinds of problems that people writing large Mac and iOS productivity apps need to solve. (And reply to Curt on Twitter if you have a good idea. Thanks!)

Posted by on 1 September 2015 | 12:30 pm

Swift Diary #13: The Addiction

I’m at the point with Swift where I get on a roll sometimes. That’s when it gets fun. * * * I know the saying that programming isn’t typing — it’s thinking, and with autocompletion these days it really doesn’t matter how much typing a language requires. Except that that’s not entirely true. Programming is also typing. Or, put another way: a whole bunch of programming is housekeeping. And, for the most part, Objective-C requires a lot more housekeeping than Swift does. You end up with longer lines, twice the amount of files to maintain, imports to manage, types to type, and so on. With Swift you get more logic per page with less effort. * * * I’m doing my best to understand exactly what sculptures come from this new type of rock. I design like an Objective-C programmer, but I’m learning how to design like a Swift programmer. I do still wish for things — especially, 1) the ability to treat objects that conform to the same protocol as the same type, and 2) something like KVC. * * * But here’s what happens now. Sometimes I go to write some Objective-C code and I sigh at the effort — because I know the Swift version is half as long. I sigh at jumping to the top of the file and adding an import, and I sigh at switching to the .h file and adding a method. Part of me still wishes that Swift had been something like a cross between Objective-C and Ruby. I wanted a concise, expressive, and dynamic scripting language where I could be massively productive. Instead I got a concise and expressive programming language that’s less dynamic than I’d like — but where I could still be substantially more productive (once I learn it) than in Objective-C. And that’s where I am now — starting to feel that boost in productivity with Swift, and getting a little bit addicted to it.

Posted by on 27 August 2015 | 1:07 pm

On Scripting

Graham Lee writes of The death of scripting and The paradox of scripting. But how can scripting be dead? There’s bash, and powershell, and ruby, and…even Perl is still popular among sysadmins. There’s never been a better time to be a programmer or other IT professional trying to automate a task. True, but there’s never been a worse time for someone who doesn’t care about computers to use a computer to automate a task. Apps are in-your-face “experiences” to be “used”, and for the most part can’t be glued together. There are counter-examples, of course — the apps I work on (Mac versions of OmniFocus and OmniOutliner) are highly scriptable. But the trend toward silos, sandboxing, and highly-controlled experiences is clear. (First thing I did was look to see if Slack has a scripting dictionary. Of course not. Neither does HipChat. Apps these days.) If you’re thinking about adding AppleScript support to your app, read these articles from last year: Making Your Mac App’s Data Scriptable Scripting from a Sandbox In the first of these, I write: When adding AppleScript support — which is also JavaScript support, as of OS X 10.10 — it’s best to start with your app’s data. Scripting isn’t a matter of automating button clicks; it’s about exposing the model layer to people who could use your app in their workflows. While that’s usually a small minority of users, they’re power users — the kind of people who recommend apps to friends and family. They blog and tweet about apps, and people listen to them. They can be your app’s biggest evangelists. Overall, the best reason to add scripting support is that it’s a matter of professionalism. But it doesn’t hurt that the effort is worth the reward.

Posted by on 25 August 2015 | 1:08 pm

OmniDev Blog

At Omni we started a new blog. (With an RSS feed.) I wrote an article: Making Tab-Switching and Scrolling Faster in OmniFocus for Mac. And Tim Ekl has written the first two parts of a series on building push-triggered sync: Building Push-Triggered Sync, Part One: Choosing a Language Building Push-Triggered Sync, Part Two: First Steps Whistle-whetter: we’re using Go. Read all about it. PS I’ve been on my yearly beach vacation. Back now.

Posted by on 25 August 2015 | 12:50 pm

Swift Diary #12: The P Word

Guy English writes a Swift Protocol Proposal. It’s worth reading the Twitter discussion. Wooji Juice disagrees, and writes about the genius of Swift protocols. Daniel Jalkut writes about The Seven Stages of Swift. I think I’m inhabiting several of them at once. * * * I’ll try to re-state my issue with protocols again in a simple way. I’m writing a Finder replacement, let’s say. The UI has folders and files. There’s a Folder class and a File class. They’re quite different things, so there’s no class inheritance. I want to represent the file system internally as a tree of Folders and Files — let’s say I want to use Sets. A Folder has a children property, which is a Set that contains both Folders and Files. I want Folder and File both to have a writable name property so the UI can edit their names. Something like this ought to come naturally and easily to a language, or else that language is not helping me write apps. This isn’t some weird, made-up situation. It’s super-common. Look at Mail’s sidebar, for instance — there are a bunch of different things. (Or look at Xcode’s sidebar.) Yes. There are ways to deal with this in Swift, including using @objc protocols and collections. Or proxy objects or base classes (ugh) or whatever. But the most natural way is protocols. If my point was just to get my work done and ship a great app as soon as possible, I wouldn’t be using Swift. I’d be using what I know: Objective-C. But I’m also taking the opportunity to learn Swift, and the best way to really understand it is to use, as much as possible, pure Swift, rather than Swift-with-objc. And if, along the way, I run into questions or things that don’t help me write high-quality apps more quickly, then I’ll ask questions and even criticize when warranted. My hope (and belief) is that the language designers take the feedback in the spirit intended. I want to help make Swift a great language for writing apps. The designers may not give me what I want — it’s possible that I’m just asking for a faster horse, and they’re delivering a Model T, after all — but feedback from experienced app-writers ought to warrant attention. (Which I think it gets, which makes me glad.)

Posted by on 14 August 2015 | 12:13 pm

Swift Diary Page

I collected my recent articles on working with Swift on a single page. It’s linked-to at the bottom of every page on the site, so you can find it later.

Posted by on 13 August 2015 | 3:58 pm