Image Scroll of Wisdom

Ditching Windows for Linux

I’ve ditched Windows 11 for Linux, specifically Ubuntu, and it’s been a relief. I dual-booted for years, but the benefits of having an always-on Linux machine outweigh the hassles of managing and using Windows. Linux on the desktop is in a great spot. The ecosystem is vibrant and it will only continue to blossom. If you’re into computers, I’d argue it’s the most fun option.

I don’t log into this machine directly very often since I still prefer MacOS for day-to-day use. But when I do, I don’t begrudge it like I did with Windows. I’m quite happy with Ubuntu and GNOME. Maybe that’s boring, but it does everything I need and is extremely stable.

Screenshot of Claude Code in Prompt 3 app on an iPhone
Claude Code over SSH in Prompt on an iPhone.

Gaming still works well. Steam with Proton is excellent. Valve and the folks behind Wine/Proton have done incredible work. Steam Link makes it easy possible to stream games to other devices in the house, particularly Apple TVs. It’s actually worked better on Linux than it did on Windows. Even streaming non-Steam games has been smooth. I tested running Battle.net via Proton with Diablo IV and it worked like a charm, with zero fiddling or configuration as I recall.

For development work I still prefer MacOS and the Nova text editor. Nova has good SSH/SFTP support, so I can connect to my Linux box and work on projects remotely, and I often do. Agent forwarding with 1Password SSH Agent means I can still use my GitHub key from the Mac. It’s a nice setup.

On iPhone and iPad I use Prompt for SSH. It’s a bit pricey and has a few bugs, but it’s otherwise a great app. Additionally, I can connect to my home network via VPN/WireGuard when I’m away. I’ve been experimenting with Claude Code this way, and it’s equal parts impressive and unnerving.

20 Years of Gmail

I don’t recall when I joined Gmail but my guess is summer 2004, shortly after it launched. I remember having to be relentless to get an invite. Looking back, I’m not sure why I felt such a strong need for one. I was a teenager and had no good use for email yet. I’m not even sure what I used for email before Gmail—probably AOL or Yahoo—but it didn’t matter, they were all garbage compared to Gmail.

Sometime around 2016 I started turning bearish towards Google. I stopped using Google Search and a number of other Google products. I also came pretty close to switching to FastMail. I never brought myself to do it, and I’m glad I didn’t switch. I like Gmail, and it’s always been a great service. I know there’s plenty of reasons why I shouldn’t use it, but to hell with those. Here’s to 20 more years.

Thoughts on Desktop Operating Systems in 2024

In the mid-to-late 90s I had my first encounters with computers. I remember playing Oregon Trail on an Apple II in elementary school, typing random letters and numbers on a friends MS-DOS machine to print out on a dot-matrix printer, and disassembling old broken PCs and HDDs for fun and a peek at the internals.

These memories feel more like a prologue to the real story of my computing journey though. First with Windows 95/98, then Mac OS 8/9. These GUI-based operating systems painted my worldview of computing. I wouldn’t learn much about Unix/Linux until years later. In college I distro-hopped between various Linux flavors but settled on Ubuntu for my personal machine(s). So that’s my perspective, 10+ years with Linux and 20+ years using Mac and Windows.

I think about Windows, MacOS, and Linux a lot and I’d like to document my thinking now, in 2024. I’m not trying to conclude which is best. They’re all strong in their own ways, and I like each of them for different reasons. Plus, things change. While MacOS has traditionally been my favorite, there were long stretches where I didn’t own a Mac and only used a Windows PC or a ThinkPad with Linux.

Windows

Shortly after Windows 11 was released I performed a clean install on a 12-Core Ryzen 5900x machine. The install process is fine but reminds you how much information Microsoft would like to collect. You can toggle a bunch of switches off but I doubt it does much. Once installed, you’ll be greeted by the offensive included apps. Half of them have ads, the other half are junk. Windows is a paid software, so having this default experience is disrespectful and puts a bad taste in my mouth.

Windows has one major thing going for it: it’s best-in-class for gaming. It might even be the greatest gaming platform of all time. Linux and even Mac are gaining ground, but they’ve got a little ways to go. I hope for something to dethrone Windows because the idea of a “Gaming PC” as nothing more than a console/appliance is depressing.

Software development, particularly web development, on Windows is pretty good now. Windows Subsystem for Linux (WSL/2), Windows Terminal, and VS Code make for a strong and complete environment. On a recent project it was easy to clone a repo in Terminal, run it in a docker container, and use VS Code’s Remote Development extension to edit directly in WSL or Docker Containers.

The visual design of Windows 11 is decent, and I like the direction it’s headed. It may be Microsoft finally appreciates UI Design and is developing some institutional taste. However, the worst apps i’ve ever used have all been on Windows. Every third-party app is a snowflake of UI Design. I’m not sure what Microsoft could have done differently, but it would be great to see native Windows apps held to a higher standard. Also, don’t dive too deep into controls or menus or you’ll end up in the 90s.

Screenshot of the Microsoft Windows 11

Other Thoughts

MacOS

I’m writing this post on MacOS Sonoma, in the Nova text editor. Nova is one of the best pieces of software I’ve ever used. It’s refined and polished and there’s no equivalent on Linux and Windows. It has it’s own personality, but also feels like an extension of the operating system. Which is a hallmark of a great Mac app. Folks in the community call them Mac-assed Mac apps. These apps are what make MacOS really great. The best apps I have used are all Mac apps.

MacOS itself has best-in-class UI Design. There are some rough edges, News and System Settings come to mind, but overall it’s the most elegant and cohesive system. My favorite example of this is when you send an email with Mail.app. Pressing send plays a whoosh sound effect and it’s in stereo! Discovering these details over the years has been a delight, and it’s made me want to learn all the little spells the OS provides. As well, there are so many instances where I think I ought to be able to do something, and lo and behold, it works as expected.

Apple has historically been apathetic towards gaming, for whatever reason. This wasn’t always the case. In the late 90s and early 00s I had a ton of fun gaming on Mac. Most (all?) Blizzard titles, the Marathon series, and tons of great shareware and indie games. I’m still bitter Halo was rug-pulled from Mac. Apple seems to be more interested in gaming lately with their efforts in Game Porting Toolkit. I’m a bit jaded on Mac gaming though, and I think Apple did a fair amount of damage to the game dev industry with the App Store. That’s for another post though.

The Apple ecosystem and cross-product integration is amazing. Universal Control, Universal Clipboard, Continuity and so on feel like magic. I appreciate and use many of the integrations today but they create strong lock-in which doesn’t feel particularly good.

Screenshot of MacOS Sierra

Other Thoughts

Linux

Years ago, I enjoyed trying out different Linux distros, window managers, and extensions. It was fun spending hours making it look like you could hack the Gibson. Nowadays, I’m less enthusiastic about tinkering and configuring systems. Fortunately, I’ve found that Ubuntu with GNOME offers a satisfying out-of-the-box experience. In fact, GNOME and its app ecosystem reminds me of MacOS quite a bit. Two thumbs up to the GNOME dev team.

I maintained a Ubuntu instance for close to 10 years on my HP N40L MicroServer. I loved that little machine and all the tinkering it afforded. Running anything but Linux on it would have felt weird.

Linux is top-notch for software development, and quickly becoming a compelling choice for gaming thanks to Valve’s Proton and the SteamDeck. I keep telling myself I’m going to switch my PC from Windows to Linux but it hasn’t happened yet (I’m not counting dual-booting).

It’s slowly gaining adoption which is great to see. The Windows hegemony may never be toppled but I’m rooting for Linux.

Linux Ubuntu on a Thinkpad T460s

Other Thoughts

There ya have it, my thoughts on modern desktop operating systems. Stay tuned for my thoughts on desktop operating systems in 2034.

Firefox Tabs Design

Over two years ago Firefox launched a new design with a change to how tabs look:

Inspired tab design: Floating tabs neatly contain information and offer cues only when you need them, like visual indicators for audio controls. The rounded design of the active tab signals the ability to easily grab and move tabs as needed.

I’m not sure what any of that means, or why traditional tabs can’t achieve those qualities. Either way I didn’t like the change then and I haven’t gotten over it since. They’re awful. They add nothing and make the browser UI look disjointed. Firefox is a great browser but damn those tabs.

AT&T Archives: The UNIX Operating System

From the video AT&T Archives: The UNIX Operating System (1982):

The usual way to get a large computer application developed involves a big team of people working in close coordination. Most of the time this works surprisingly well but it does have its problems and large projects tend to get done poorly. They take a long time and they consume an astonishing amount of money and in many cases the individual team members are dissatisfied. So everybody in the computing business is constantly searching for ways to do a better job of developing computer applications. There aren’t likely to be any final answers both because the problems are hard and because as we find solutions we try even more ambitious objectives.

What a prescient quote. This still holds true today.

Things a Computer Scientist Rarely Talks About

Occasionally I find myself down rabbit holes exploring the history of computing. Donald Knuth is often a name that comes up as his magnum opus The Art of Computer Programming is well known and revered in computer science and programmer circles. One such exploration led me to his talks on God and Computer Science. I haven’t listened yet, but I plan to as I find it a curious topic. I also enjoyed these lecture titles:

Why I am unqualified to give these lectures.

Why the lectures might be interesting anyway.

Thoughtful App Icons

I love good app icons. Others do too. They often reflect the quality of the software they represent. On MacOS, some of the best icons come from indie software developers. Whereas large companies frequently field uninspiring, flat, and dull icons. For example, compare an early version of the Docker for Mac Icon to the Postgres.app Icon. I dread launching Docker for Mac not least because of it’s low-quality app icon.

One of my favorite icons comes from Nord, a keyboard instrument maker. Their keyboards are a marvel of UI Design, playability, and sound engineering. To manage the sounds on the keyboard they offer a companion app, the “Nord Sound Manager.” The icon is beautiful and perfectly captures the essence of the hardware keyboards that it’s used with. A keyboard maker wouldn’t be my first guess as to where great app icons come from, but if you care about your products, every detail matters. Take a look-

Nord Sound Manager MacOS App Icon:

The Nord Sound Manager MacOS App Icon

Nord Electro 6D Keyboard:

Nord Keyboard

Larry Tesler, UI Pioneer, Dies at 74

New York Times:

Lawrence Tesler, a pioneering computer scientist who helped make it easier for users to interact with computers, whether cutting and pasting text or selecting text by dragging a cursor through it, died on Sunday at his home in Portola Valley, Calif. He was 74.

and

In addition to helping develop the Lisa and Macintosh, Mr. Tesler founded and ran Apple’s Advanced Technology Group, after which he led the design of the Newton hand-held computer, although that proved unsuccessful. The group also created much of the technology that would become the Wi-Fi wireless standard, and Mr. Tesler led an Apple joint venture with two other companies that created Acorn RISC Machine, a partnership intended to provide a microprocessor for the Newton.

Truly an icon in computing history.

Apple Music on the Web

A few months ago Apple opened up beta.music.apple.com on the web as a beta. I spent a few minutes poking around in dev tools and found some neat things about it. Keep in mind it’s still in beta, so it’s subject to change.

I’m looking forward to this launching, and hoping Apple posts more technical details about how they built it.

Update: Apple does have a MusicKit API.

The Bloomberg Keyboard

A neat tour of the design and evolution of the Bloomberg Keyboard.

Dealers of Lightning

Dealers of Lightning: Xerox PARC and the Dawn of the Computer Age is a good read on the significance PARC played in the history of computing. The book is twenty years old now, but it still offers great insight. One bit that stood out to me was this excerpt:

Their first step was to do something PARC had never tried before: They analyzed how non-engineers would actually use a computer.

This survey was conducted back at Ginn, to which Mott returned with an Alto display, keyboard, and mouse. He installed them as a sort of dummy setup (the machine was nonfunctional) and invited editors to seat themselves in from of the equipment, imagine they were editing on-line, and describe what they expected it to do.

“They were a little skeptical,” he recalled. “But —surprise, surprise— what you got was them wanting the machine to mimic what they would do on paper” They even described the processes in terms of the tools they had always used. That is why to this day every conventional word processor’s commands for deleting a block of text and placing it elsewhere in a file are called “cut” and “paste” —because Ginn’s editors, the first non-engineers ever to use such a system, were thinking about the scissors and paste pots they used to rearrange manuscripts on paper.

Skeuomorphism is often misunderstood in design. The recent period of “flatness” in the past 5-10 years was a shallow episode that only harped on being visually defiant to Web 2.0 era designs. If we take the “design is how it works” stance, then skeuomorphism never really went away. We never dropped “cut” or “paste.”

Favorite Programming Language Names

Here are my favorite programming language names. I tried to be unbiased and not factor in my knowledge of the language design, history, or the surrounding community.

Programmers are often notoriously bad at naming things, so it’s no surprise that this list of programming languages is full of boring names. Not that it really matters, but if a new language was released named K++# I likely wouldn’t pay it any attention.

Honorable mentions: C Ruby ColdFusion Simula AWK

Rust

A great name for a programming language, and easily my favorite. The subtle hint that this is intended to be a systems language and “closer to the metal” is just perfect.

Ada

The name Ada stands up on it’s own. Being named after the first computer programmer is just icing on top.

Lua

What does Lua mean? Don’t know, but I like it.

Swift

I haven’t used Swift enough to know if it’s a truly swift programming language, but the name checks out.

Update: Lua means “moon” in Portuguese.

Prototypes and Production

Great post by Jeremy Keith on Prototyping, I particularly like this bit:

Build prototypes to test ideas, designs, interactions, and interfaces …and then throw the code away. The value of a prototype is in answering questions and testing hypotheses. Don’t fall for the sunk cost fallacy when it’s time to switch over into production mode.

I’m a huge proponent of prototyping for all the reasons mentioned, but anytime a prototype morphs into the final product, it causes more headache than if we were to shelve it and start fresh.

Window Systems, Window Managers, Desktop Environments

If you’ve ever been confused when seeing names like “desktop environment” and “window manager,” this exerpt from A History of the GUI is a nice summary on it’s origins:

The initial design goal of the X Window System (which was invented at MIT in 1984) was merely to provide the framework for displaying multiple command shells and a clock on a single large workstation monitor. The philosophy of X was to “separate policy and mechanism” which meant that it would handle basic graphical and windowing requests, but left the overall look of the interface up to the individual program.

To provide a consistent interface, a second layer of code, called a “window manager” was required on top of the X Window server. The window manager handled the creation and manipulation of windows and window widgets, but was not a complete graphical user interface. Another layer was created on top of that, called a “desktop environment” or DE, and varied depending on the Unix vendor, so that Sun’s interface would look different from SGI’s. With the rise of free Unix clones such as Linux and FreeBSD in the early 90s, there came a demand for a free, open-sourced desktop environment. Two of the more prominent projects that satisfied this need were the KDE and GNOME efforts, which were started in 1996 and 1997 respectively.

The Rise and Demise of RSS

Great post on the history of RSS:

There are two stories here. The first is a story about a vision of the web’s future that never quite came to fruition. The second is a story about how a collaborative effort to improve a popular standard devolved into one of the most contentious forks in the history of open-source software development.

I still use RSS everyday. It’s my preferred way of reading news. Feedbin for syncing and managing feeds, Reeder for iOS, and Readkit for MacOS.

Learning From Terminals to Design the Future of User Interfaces

Really enjoyed the post Learning From Terminals to Design the Future of User Interfaces, specifically this point:

Modern applications and interfaces frustrate me. In today’s world every one of us has the awesome power of the greatest computers in human history in our pockets and at our desks. The computational capacity at our finger tips would have been unimaginable even to the most audacious thinkers of thirty years ago.

These powerful devices should be propelling our workflows forward with us gangly humans left barely able to keep up, and yet, almost without exception we wait for our computers instead of the other way around. We’re conditioned ourselves to think that waiting 30+ seconds for an app to load, or interrupting our workflow to watch a half second animations a thousand times a day, are perfectly normal.

He goes on to describe how the web spawned as a new application platform:

Somewhere around the late 90s or early 00s we made the decision to jump ship from desktop apps and start writing the lion’s share of new software for the web. This was largely for pragmatic reasons: the infrastructure to talk to a remote server became possible for the first time, good cross platform UI frameworks had always been elusive beasts [1], and desktop development frameworks were intimidating compared to more approachable languages like Perl and PHP.

The other reason was cosmetic: HTML and CSS gave developers total visual control over what their interfaces looked like, allowing them to brand them and build experiences that were pixel-perfect according to their own ends. This seemed like a big improvement over more limiting desktop development, but it led us to the world we have today where every interface is a different size and shape, and the common display conventions that we used to have to aid with usability have become distant memories of the past.

…and the issues that we’re now still dealing with:

Web technology isn’t conducive to fast and efficient UIs, but that’s not the only problem we’re facing. Somewhere along the way UX designers became addicted to catchy, but superfluous, interface effects.

Think of all the animations that an average user sits through in a day: switching between spaces in Mac OS, 1Password’s unlock, waiting for iOS to show the SpringBoard after hitting the home button, entering full screen from a Mac OS app, or switching between tabs in mobile Safari.

Web technology could have really fast and efficient UIs, but a few things get in the way

I think the web would have been better suited as what it was originally intended for, a linked document browser, rather than an app-delivery platform.

From Interface Builder to Windows

Fascinating look at the early iterations of Microsoft’s Interface Builder, which would later become a big part of Windows Doing Windows, Part 2: From Interface Manager to Windows

I particularly liked these excerpts:

I like the obvious analogy of a restaurant. Let’s say I go to a French restaurant and I don’t speak the language. It’s a strange environment and I’m apprehensive. I’m afraid of making a fool of myself, so I’m kind of tense. Then a very imposing waiter comes over and starts addressing me in French. Suddenly, I’ve got clammy hands. What’s the way out?

The way out is that I get the menu and point at something on the menu. I cannot go wrong. I may not get what I want — I might end up with snails — but at least I won’t be embarrassed.

But imagine if you had a French restaurant without a menu. That would be terrible.

It’s the same thing with computer programs. You’ve got to have a menu. Menus are friendly because people know what their options are, and they can select an option just by pointing. They do not have to look for something that they will not be able to find, and they don’t have to type some command that might be wrong.

Accessibility Through Semantic HTML

Great article by Laura Kalbag on why semantic HTML is better for usability and accessibility:

As developers, we like to use divs and spans as they’re generic elements. They come with no associated default browser styles or behaviour except that div displays as a block, and span displays inline. If we make our page up out of divs and spans, we know we’ll have absolute control over styles and behaviour cross-browser, and we won’t need a CSS reset.

Absolute control may seem like an advantage, but there’s a greater benefit to less generic, more semantic elements. Browsers render semantic elements with their own distinct styles and behaviours. For example, button looks and behaves differently from a. And ul is different from ol. These defaults are shortcuts to a more usable and accessible web. They provide consistent and well-tested components for common interactions.

It’s pretty common to see “div-itis.” Where there’s a semantic HTML element nested many layers deep in a series of divs. I’m certainly guilty of this, but i’m conscious of it and try to look for ways to improve. Developers should really start paying attention to their HTML. It’s seems to be the first thing ignored.

Also:

Good usability is good accessibility

This is my experience as well. In fact, when I previously performed in-person usability testing with blind participants, one individual even stated that often times sites or apps are not usable at all, nevermind accessibility issues.

Vintage Soviet Control Rooms

These Vintage Soviet control rooms are stunning. Pre-GUI interfaces like these control centers should be the study of UI Designers as there is much to learn from the layout, control types, and schematics.

Matthew Green on Encryption

Matthew Green, Cryptographer at Johns Hopkins, writing on encryption in light of recent Kaspersky reports:

At the end of the day we, as a society, have a decision to make. We can adopt the position that your data must always be accessible—first to the company that made your software and secondly to its government. This will in some ways make law enforcement’s job easier, but at a great cost to industry and our own cybersecurity. It will make us more vulnerable to organized hackers and could potentially balkanize the tech industry—exposing every U.S. software firm to the same suspicions that currently dog Kaspersky.

Alternatively, we can accept that to protect user data, companies have let it go—and the single most powerful tool technologists have developed to accomplish this goal is encryption. Software with encryption can secure your data, and in the long run this—properly deployed and verified—can help our software industry spread competitively across the world. This will not be without costs: It will make (some) crimes harder to solve. But the benefits will be real as well.

Software and service providers are not deploying encryption merely to frustrate the U.S. government. Providers know their business far better than the Justice Department does—when they choose to deploy encryption, it’s because their business depends on it. And while it may be frustrate law enforcement, in this case Silicon Valley’s interests and consumers’ interests are aligned.