I have enjoyed having lots of craft beer to support local breweries during the Plague Year, but it is time to replenish the vermouth and garnishes and do some more manhattans and martinis.

Ever so slightly alarming that when I search for “panic nova review” in both Duck Duck Go and Google (in incognito mode) my own review appears to be the first hit. I don’t know if it’s just me, or if it just hasn’t gotten that many other reviews yet.

Ah: I hadn’t realized “Ted Lasso” was co-created by Bill Lawrence, of “Scrubs” fame. Anyway, this Variety column is terrific: variety.com/2020/tv/c… (And yes, I will keep stanning for this show.)

The local Rock Bottom Brewery has re-opened with a LOT of patio seating. It’s sort of odd: they’re a chain and not even my favorite as far as chains go, but their closure felt like a huge hole in this neighborhood somehow.

Well, the new speakers sound terrific if I stuff foam into their rear ports, but is this an acceptable condition for greatness? If Klipsch had the EQ-adjusting app they’ve apparently been promising for months ready, it’d be a different story, but…

It seems like the same Catalyst apps are better on Big Sur than they are on Catalina, like the TV app and the official Twitter client. (I’m hoping against hope Twitterrific or Tweetbot will take a chance on supporting Twitter’s new API, assuming it’s possible, though.)

“Ted Lasso” is, at least three and a half episodes in, not only a needed injection of cheer but almost shockingly well-written for such a brazenly fluffy comedy series. 📺

Now that macOS Big Sur is almost out, I guess it’s okay to update my iMac to Catalina.

I really shouldn’t buy new things as a way to relieve stress, because the way this year is going I’m going to end up with two new cars, nine computers, 28 smartphones and, I don’t know, a microbrewery near Arcata or something.

After a bit of hammering, I have tentatively concluded that in fact I can’t make an Intelephense PHP plugin for Panic Nova, but I’m not sure if the problem is Intelephense, Nova, or me.

Panic's Nova text editor (a review)

Panic, the long-established makers of Mac utility software, seems fully aware that introducing a new, commercial code editor in 2020 is a quixotic proposition. Is there enough of an advantage to a native editor over both old school cross-platform editors like Emacs and explosively popular new editors like Visual Studio Code to persuade people to switch?

I’m an unusual case as far as text editor users go: my primary job is technical writing, and the last three jobs that I’ve worked at have a “docs as code” approach, where we write documentation in Markdown and manage it under version control just like source code. The editor that works best for me in tech writing is the venerable BBEdit. When it comes to editing code, though, BBEdit lags behind. My suspicion is that BBEdit’s lack of an integrated package manager has hurt it here. Also, BBEdit’s language modules don’t support extending one another, making it effectively impossible to do full highlighting for a templating language like JSX or Jinja.

When I was a web programmer, I was one of many who moved to TextMate, and used it for everything for a while. When the Godot-like wait for TextMate 2.0 became unbearable, I wandered the text editing wilderness, eventually splitting my loyalties between BBEdit, Sublime Text, and more recently VS Code. At this point, I suspect nothing will pull me away from BBEdit for technical writing, but for programming I’m open to persuasion.

So: meet Nova.

A screenshot of Nova's main window, showing its sidebar and a Ruby file.

I’ve been using Nova off and on in beta for months. I’ve reported some bugs, although I may mention a couple here that I didn’t catch until after 1.0’s release. And, I’m going to compare it to the GUI editors that I’ve been using recently: BBEdit, Sublime Text, and VS Code.

Nova is a pretty editor, as far as such things go, and with files of relatively reasonable size it’s fast. With stupid huge files its performance drops noticeably, though. This isn’t just the ridiculous 109MB, nearly 450,000-line SQL file I threw at it once, it’s also with a merely 2MB, 50,000-line SQL file, and Nova’s offer to turn off syntax highlighting in both files didn’t help it much. This may sound like a silly test, but in my day job I’m occasionally stuck editing an 80,000-line JSON file by hand (don’t ask). This is something BBEdit and VS Code can do without complaint. Panic wrote their own text editing engine for Nova, which is brave, but it needs more tuning for pathological cases like these. They may not come up often, but almost every programmer has one stupid huge file to deal with.

Nova has an integrated terminal and an integrated SSH client, and even an integrated file transfer system based on Panic’s Transmit. In fact, if you have Transmit and use Panic Sync, it knows all of those servers out of the box. Nova has a task workflow system for automating building and running. You can associated servers, tasks, and more with individual projects; Nova’s project settings are considerably more comprehensive than I’ve seen in other editors. You can even set up remote tasks. Nova has a serviceable Git client built in, too. Like VS Code, Nova uses JavaScript for its extension API, and it has built-in Language Server Protocol support—it’s a superbly solid foundation.

Beyond that, some smaller features have become table stakes for modern GUI editors, and Nova handles them with aplomb. “Open Quickly” can jump to any file in the open project, as well as search by symbols or just symbols in currently open files; it has a command palette; you can comprehensively edit keybindings. It has multiple cursor support for those of us who like that, and a “mini map” view for those of you who like that, although know that you are wrong. Nova’s selection features include “Select all in scope” and “Select all between brackets,” a command I often use in BBEdit and miss dearly in Code. (Both Nova and BBEdit select between brackets and braces, although BBEdit also selects between parentheses.) This effectively becomes “Select between tags” in HTML, a nice touch. There are a few other commands like “Select all in function” and “Select all in scope” that I didn’t have any luck in making work at all; a little more documentation would be nice.

That’s worth an aside. Panic has created a “library” of tech note-style articles about Nova sorted by publication date rather than an actual manual, and it’s not always easy to find the information you want in it. I know this is just what a technical writer would say, but I’d dearly like to see a human-organized table of contents starting with the editor basics and moving to advanced topics like version control, server publishing and extension authoring.

The Zen of Language Servers

A lot of Visual Studio Code’s smarts depend on the implementation of a “language server” behind the scenes: language servers offer almost spookily intelligent completion. For instance, take this PHP snippet:

if ($allowed) {
    $response = new Response(405);

If you have the Intelephense PHP language server plugin, Code understands that $response is an instance of Response and, after you type the > above, offers completions of method names from the Response class.

Right now, Nova’s mostly limited to the language servers completion systems Panic provides, and they’re… not always so smart. In that snippet above, Nova starts by offering completions of, apparently, everything in the open project, starting with the variables. If I type “s,” it narrows things down to methods that begin with “s,” but it’s all methods that start with “s” rather than just the methods from Response. The “Jump to Definition” command shows a similar lack of context; if I highlight a method name that’s defined in multiple places, Nova shows me a popup menu and prompts me to choose which one to jump to, rather than introspecting the code to make that decision itself. (Edit: Panic said on Twitter that they’re not using LSP in any of their built-in languages yet!)

But, this is a solvable problem: there’s (I think) no reason someone couldn’t write an Inteliphense plugin for Nova. If Nova’s ecosystem takes off, it could be pretty formidable pretty quickly.

Walk like a Mac

Even so, LSP support isn’t Panic’s biggest selling point. Unlike Sublime Text or VS Code, Nova isn’t cross-platform: it’s a Mac-only program written to core platform APIs. Is that still a huge draw in 2020? (Is it instead a drawback?)

You can definitely see a difference between Nova and BBEdit on one side and Sublime and Code on the other in terms of resource usage. With the two Ruby files shown in the screenshot above loaded, I get:

  • VS Code: 355 MB, 6 processes
  • Sublime Text: 338 MB, 2 processes
  • Nova: 101 MB, 2 processes
  • BBEdit: 97 MB, 1 process

Code is an Electron-based program, although Microsoft famously puts a lot of effort into making it not feel like the black hole a lot of Electron-based apps are. Sublime uses its own proprietary cross-platform framework. In fairness, while us nerds like to harp on research usage a lot, if your computer’s got 16G or more of RAM in it, this probably isn’t a big deal.

You notice Nova’s essential Mac-ness in other ways. Its preference pane is, like BBEdit’s, an actual preference pane, instead of opening in another tab like Code or just opening a JSON file in a new tab (!) like Sublime. And while all editors better have first-class keyboard support—and Nova does—a good Mac editor should have first-class mouse support, too, and it does. You notice that in the drag-and-drop support for creating new tabs and splits. Nova’s sidebar is also highly customizable, possibly more so than any editor I’ve regularly used. (Yes, Emacs fans, I know you can write all of Nova in Lisp if you want. When one of you does that, please get back to me.)

Unlike BBEdit, though, Nova doesn’t have a Mac-like title bar, or a Mac-like outline view of the project files, or Mac-like tabs. (Well, BBEdit doesn’t have tabs at all, which turns out to be a great UI decision once you have a dozen or more files open, but never mind.) This isn’t necessarily bad; people often say BBEdit “looks old,” and it’s hard not to suspect that what people mean by that—whether or not they know it—is that it looks like the long-established Mac program it is. Nova is relying less on “we have a Mac UI and the other guys don’t” than on “we have Panic’s designers and the other guys don’t.” Make no mistake, having Panic’s designers counts for a lot.

What may be more disappointing to old school Mac nerds is AppleScript support: none whatsoever. It doesn’t even have a vestigial script dictionary. Again, this may not be something most people care much about; personally, I hate having to write AppleScript. But I love being able to write AppleScript. BBEdit’s extensive scriptability is one of its hidden strengths. Nova’s Node-based JavaScript engine is probably more powerful for its own extensions and certainly more accessible to anyone under the age of 50, but it may be hard to call it from external programs.

So is it worth it?

That probably depends on where you’re coming from.

If you loved—or still use—Panic’s older editor, Coda, this is a no-brainer upgrade. If you used Espresso, a Coda-ish editor that always seemed to be on the verge of greatness without ever reaching it, Nova may also be a no-brainer for you.

If you’re a fan of Sublime Text, BBEdit, TextMate, or another editor that doesn’t have native Language Server Protocol support, you should definitely try Nova. Sublime and TextMate have more plugins (especially Sublime), but many extensions seem to be languishing (especially TextMate). BBEdit never had a great extension ecosystem to start with. All of these editors have strengths Nova doesn’t, but the reverse is also true, and Nova may catch up.

If you’re an Emacs or Vim power user, we both know you’re just reading this out of academic interest and you’re not going to switch. C’mon.

If you use Visual Studio Code, though, it’s way tougher to make the case for Nova. Code has a vastly larger extension library. It has the best support for LSP of any editor out there (LSP was developed for Code). Despite being Electron-based, it’s pretty high-performance. Code doesn’t have an integrated SSH or FTP client, but it does have an integrated terminal and task runner and Git client. If you don’t object to using an editor that isn’t a “perfect fit” with the Mac UI, Code is very, very good… and it’s free.

I don’t object to Nova’s pricing model—$99 up front including a year of updates, $49 for future years of updates—but I can’t help but wonder if Panic should have gone with super aggressive introductory pricing. Also, I saw more than a few suggestions on Hacker News about how there should be a Code-to-Nova extension translator; I’m not sure automatic conversion would be practical, but a guide on manual conversion seems like an excellent idea.

For my day job of technical writing, I’m going to stick to BBEdit. (One day I’ll write up an article about why I think it’s the best “documentation as code” editor on the market.) For programming and web editing, when I was working on both a Ruby and a PHP project—the former a Rails learning exercise, the latter an obstinate “I am going to write a modern PHP app without using a framework” exercise—I kept trying Nova’s betas and then switching back to Code for Inteliphense and, I swear to God, MacVim for Tim Pope’s amazing rails.vim plugin. I suspect Nova could duplicate both of those, but I’m not sure I want to be the one to do it. (Also, while Panic has decent reference documentation for writing extensions, I’d like to see a few simple end-to-end walkthroughs for those of us who look at a huge list of reference topics and don’t know where to start.)

But Nova isn’t just pretty, it’s powerful, and has a lot of promise. The editors I’ve been comparing it to have been around since 2015 for VS Code, 2008 for Sublime Text, and 1992 (!) for BBEdit; it’s not reasonable to expect Nova to blow past them in every respect right out of the starting gate. Even so, they are Nova’s competition. Catching up fast is an essential requirement.

So: yes, I’ve bought Nova, and I’m rooting for Panic here. I’ll come back in a year and report if I’m willing to stay on the update train.

The air is clear for the first time in nearly two weeks and I am going to Shake Shack, dammit.

I feel like writing up a review of Panic’s Nova code editor, but I have to decide if I’m really that motivated.

Switched back to my old desktop speakers to see whether the new ones really sound better to me. And they do, but the old ones (Audyssey’s sadly short-lived “media speakers”) still actually pack a heck of a punch. I should really see if I can find a good home for them.

Well, it’s sure nice that the high temperatures today came in about ten degrees lower than predicted thanks to [checks notes] smoke from the wildfires thick enough to block out the sun.

I keep toying with the idea of buying a Linux laptop, then remind myself that the chance of me actually using it, let alone moving to it as a daily driver, is still very small.

Blue Apron has been good for kicking me in the butt a bit for cooking again, after many years, but it’s nice to be doing dishes they’d never do—like pork slow roasted in apple cider for eight hours.

The new desk is here, and—I’m conflicted. It’s pretty but clearly not well-built, and right now I kind of wish I’d stuck with the old desk and just gotten speaker stands. I’ll see if it grows on me, I guess.

‪I like the Art of Noise and Tom Jones cover of “Kiss” better than Prince’s original. Sorry, everyone‬.

My “day job” work setup is setting a laptop up on a stand on the desk in front of my iMac and reconnecting the external keyboard and mouse to it. And until the new desk arrives, using the iMac as an AirPlay speaker with Rogue Amoeba’s Airfoil and SoundSource doing EQ.

Update: the new speakers came in earlier than expected. Also as expected, they do not fit on the old desk, so they stay in the box a few days. #FirstWorldProblems

Now that I’ve cleared everything off my desk but the iMac in preparation for a new desk later this week, the old desk looks way more spacious!

I’m always irrationally amused by putting in an address of a company I’ve just done business with into Google or Apple Maps and discovering the address is actually a “Mailboxes Plus” or similar store.

I’ve finally ordered a slightly bigger desk and, with some trepidation, new powered speakers that seem to be largely audio-nerd-approved. Not cheap, but less than good desktop-sized passive speakers and an integrated amp—and a 30-day return policy, just in case.

For years I’ve expected to move back to Florida to take care of my mom. Despite a push this year—as much from her as me—to consider Sacramento or the far reaches of the SF Bay Area, I’m increasingly suspecting Florida’s going to make way more sense financially/logistically.