Matt Moriarity

June 2018

I spend way too much time picking dog hairs out of the edges of my Kindle’s screen.

I realized today that in my new position, I get to use Vim for basically all of my coding. Bash, Ruby, and Go are all great in Vim!

Now that I'm using Slack at my job, I get to join the chorus of people panicking on Twitter that Slack is down!


I can't believe it took me this long to read Practical Vim. This book is so dense with useful information about getting the most out of Vim, and it taught me something new and useful in the first minute of reading!

I installed the iOS 12 public beta on my primary device! Not a ton feels changed, but a bunch of animations feel smoother.

The grocery store was playing the Macarena yesterday and it’s been stuck in my head ever since.

I have very quickly become a Kindle convert and now you will have to pry it from my cold dead hands.

I should go to more conferences just to be able to acquire more stickers.

My last day of "freedom." Honestly, I'm itching to be working again. I've enjoyed the time off, but knowing that something new is coming, I can't wait!

A person's GitHub profile should not be how you measure their ability to code. But I wonder if it could provide insight for other important things, like how they interact with others in PRs and issues. If that activity is present, I’d expect it to be representative.

Mac Apps and the Menu Bar

At WWDC 2018, Apple announced a slew of new apps that were ported from iOS to macOS: News, Stocks, Home, and Voice Memos. These apps are interesting because Apple also announced that these apps are not using AppKit, the native framework that Apple provides for developing macOS applications. Instead, they use UIKit, the equivalent but more modern framework for iOS. Apple is working extending UIKit to be able to run on macOS and provide some translations from UIKit-style widgets to something that feels more natural on the Mac. In the future, this will available to third-party apps as well.

Various people observed that this provides an interesting alternative to Electron. Many companies build their iOS apps using native UIKit, but rather than invest in an AppKit app for macOS, they'll build one web app and then use Electron to package the web app as a desktop app for the various platforms they need to support. I'm not super fond of this approach for various reasons, and I do think that developers being able to port their iPad apps to macOS will be nicer than using Electron. That said, I want to talk about one particular thing that's always irked me when using Electron apps and that I'm worried will also be an issue when developers start being able to port UIKit apps to macOS.

Native Mac apps care about the menu bar. Non-native apps don't.

What's so great about the menu bar?

The menu bar is an important part of a Mac app for a pretty simple reason: it makes apps easier to use. Apple's Human Interface Guidelines explain this better than I can:

People look in the menu bar when searching for app-specific commands, especially when using an app for the first time. Even when commands are available elsewhere in your app, it’s still a good idea to provide access to them via the menu bar. Doing so makes them easier for people to find, lets you assign keyboard shortcuts to them, and makes them more accessible to people using Full Keyboard Access. It can be appropriate to exclude infrequently used or advanced commands. Just keep in mind that you risk people missing commands that aren’t in the menu bar—even for experienced users.

By having a menu bar that accurately captures the capabilities of your app, you make it easier for users to discover what your app can actually do. The menu bar provides a map of your app in a way that is much more explicit and clear than any other UI you have.

Electron apps totally have a menu bar!

This is technically correct. It's not like they just have the application menu and nothing else, like some old Java apps would do. But every Electron app I've used has had a very minimal menu bar. Here's a few examples from Electron apps I use.

A tour through Slack's menu bar

A tour through's menu bar

There's definitely some customization happening in these apps: their menu bars are not identical, and there are a few menu items specific to each app. They mostly involve navigation between various areas of the app. But compare this to a native Mac app like Calendar.

A tour through Calendar's menu bar

Calendar has similarly few menus, but they contain most of the useful functionality that Calendar provides. The File, Edit, and View menus expose a bunch of functionality would be hard to discover otherwise.

Why does this happen?

Building a comprehensive set of menus for your Mac app is a non-trivial amount of engineering work. Even when you're working with AppKit building a native app, nothing is going to force you to have amazing menus. I think we see better menus on AppKit apps for two reasons:

  • Adding menu bar items is one of the most straightforward ways to add keyboard shortcuts to an AppKit app. While using menu items for keyboard shortcuts is also supported in Electron, most existing web apps probably have other ways to operate via the keyboard so that they work in a browser as well.
  • Web apps expect to run in contexts where the menu bar is nonexistent (the browser) or where its importance is downplayed (Windows, Linux) in comparison to macOS. It's just not as important to you if a large portion of your userbase won't ever see it. AppKit apps have already embraced running on macOS and are therefore more likely to invest in blending in with the platform's conventions.

Both of these reasons are exactly why I'm worried that UIKit apps running on the Mac will also put minimal effort into their menus.

I'm not trying to make a moral argument that developers are wrong or bad if they don't give their apps good menus. It's a tradeoff, and engineering is full of them. I just think that apps embracing the menu bar is part of what makes a Mac nice to use, and it makes me a little sad to imagine less and less apps caring about it going forward. Consider this my plea to developers building Mac apps, regardless of toolkit: please consider the menu bar.

Siri Shortcuts look incredible, having watched the intro session. When iOS 12 is released and apps start adopting custom intents, it's going to change how we use our phones.

This year’s release of Xcode is the only one I will allow people to refer to as “10code.”

I'm enjoying seeing people with their Memojis as their Twitter avatars. Looks like a really fun feature, especially in FaceTime.

I haven't signed up for the Apple Developer Program again yet, and I can't really justify doing so just yet. So I think I'll wait for the public beta (usually developer beta 3) to consider installing iOS 12 and friends on my devices.

Oh no, it looks like I need to buy a new watch in order to get watchOS 5. And I really like what I saw in watchOS 5.

That was a very exciting WWDC keynote! I’m trying to actively resist installing betas, but I think I have an iPhone 6s that could take the iOS 12 beta perhaps. But now I need a nap before the State of the Union!

I’m gonna be so mad when Panic at the Disco is the WWDC Beer Bash band the first year I’m not there.

I'm not thrilled about GitHub being acquired. I would prefer that they were independent. But I'm not practically worried about it. We'll see where this goes.

Just went through and added emoji to most of my calendar event names. Really spruced up the place. This is what I have to do to kill time before the WWDC keynote.

Historically, I've installed iOS betas on my personal phone because I'm a sucker for new features. I'm telling myself right now I won't do it this year. Four years of running nightly builds of macOS and Xcode has worn me down, and now I just want stability.

Does anyone know of a way to write a script of something similar to manipulate my HomeKit scenes/automations? I want an easy way to update a bunch of related ones without lots of tapping on the phone. WWDC: Give me HomeKit for macOS!

Update: Pretty much immediately after posting I realized that the solution for this is probably using Swift Playgrounds. I'm not positive that works, but if Playgrounds allows you to use HomeKit APIs, that would probably be the easiest way to do this.

I just binged the hell out of The Marvelous Mrs. Maisel. That is a damn good show, and I want more.