Welcome to James Brown's blagoblag! This contains various thoughts and opinions, mostly wrong, going back a couple of decades. All of the opinions are my own, and probably not my employer's. Feel free to visit the about page for more useless interesting facts about me.

New Keyboard

I've been using the Happy Hacking Keyboard in various configurations for the last 12 years; it's a great design for a 60% scale keyboard with all the keys that a Unix person needs and nothing they don't; in particular, I credit its lack of arrow keys with finally getting me to use vim motions correctly. Oh, I've dallied with other keyboards; for a while at work I had an Apple Wireless Keyboard, and in 2019 I bought a tenkeyless keyboard from the now-defunct WASD Keyboards1, but I always come back to the HHKB. That being said, the HHKB isn't perfect; in particular, the Topre switches feel a bit mushy2 (and get worse the longer you use them), the bluetooth version is garbage that can't maintain a connection reliably, and the cheaply-printed text on keycaps tends to rub off pretty quickly.

Well, I'm on parental leave now, so I figured I'd do a Project and put together a new keyboard.

Ingredients

This was the first time I'd actually assembled a keyboard (I know, it seems like something that I would be doing regularly); it was pretty easy3. A couple of the switches had bent pins that I couldn't quite straighten out, but I bought plenty of spares. I'm typing on the keyboard right now! I think it's pretty great so far, although obviously I have only been typing with it for a little while. One interesting note is that it's remarkably heavy — around 1500g fully-assembled (about 3x the HHKB). Not that I carry it around much, but I think I'll keep taking the HHKB with me when I go to company offsites.

Now all I need is for Apple to get around to releasing a stand-alone TouchID button...

1

Specifically, the WASD V3 87-key with Cherry MX Blue switches on it.

2

To be clear, I actually prefer a clicky keyboard; I had an IBM Model M back when I was a kid...

3

Perhaps my childhood snapping LEGO pieces together prepared me for this?

Some Good Stuff in 2024

It's January 2025, which means it's time to reflect a little about 2024. Last year, I wrote about some video games I liked in 2023, and I thought that for this year, I might expand and just talk about a few things I liked. After all, the world is currently a burning hellscape looking forward to a fascist overthrow of government and a series of apocalyptic wars on a planet no longer suitable to human life and we don't even have the best president in the last 50 years around to help out any more — seems like a perfect time for some consumerist escapism.

this is fine read more

Firefox userChrome Update

If anyone is using the style from my Firefox post a couple of years ago, you may have noted that the userChrome styling broke in Firefox 132; here's the correct new style for the same visual effect:

/* hide the native tabs */
#TabsToolbar .toolbar-items {
	visibility: collapse;
}

/* fix the titlebar color and padding */
.browser-titlebar {
	background-color: var(--toolbar-bgcolor) !important;
	justify-content: space-between !important;
	padding: 8px 0 !important;
	--inactive-titlebar-opacity: 1.0;
}

/* hide the sidebar header so Tree-Style Tabs looks native */
#sidebar-header {
	visibility: collapse;
}

/* Hide the border under where native tabs would be, to get the "unified toolbar" appearance of modern macOS */
#navigator-toolbox {
	--tabs-border-color: transparent !important;
}

/* the coloration of the titlebar to look like a toolbar */
#titlebar {
	background: var(--toolbar-bgcolor);
}

/* hide a single stray vertical line that creeps in if you have tabs hidden */
#titlebar .titlebar-spacer[type="pre-tabs"] {
	border-inline-end: 0 !important;
}

Cheers!

Oh, the humanity

Today was the keynote for Apple's World-Wide Developer Conference 2024, and, as all the pundits predicted, they announced "Apple Intelligence", a new suite of tools building on the current "Artificial Intelligence" hype bubble1. I started out feeling tentatively optimistic that they would continue to use machine learning systems to provide niceties and augmentation — replacing the two-line summary of new mail in Mail.app with auto-summarization, doing automatic segmentation to recolor app icons, improving suggestions of photos from your library that might be fun to look at, better speech-to-text transcription — all of these seemed like totally reasonable features that can be improved by things like vector embeddings, diffusion models, and deep learning transformers.

Then, of course, we actually got to the Apple Intelligence portion of the presentation. In particular, this scene:

Screenshot from WWDC24 of the new text rewriting engine making an email 'Read like a poem'
Fuck. No.

Everybody knows the Steve Jobs line:

Technology alone is not enough. It’s technology married with the liberal arts, married with the humanities, that yields the results that makes our hearts sing.

Well, someone took all of the liberal arts people out of the room when they built this feature and let the Wall Street AI hype-men steer the ship. This isn't a bicycle for the mind, this is a steamroller for the mind. It's a bulldozer that's ready to roll right over any remaining trust you have in the written word; it's taking the tools of disinformation and putting them front and center in our friendships and our personal lives.

Imagine the scene: You're sitting down and you open your email client2. You have a swath of machine-generated spam emails in your inbox warning you that you haven't yet donated enough money to the Biden campaign, that you need to ACT NOW, that a Brand™ you purchased from before is having a sale; somehow, you filter through them all to get an email from your good friend Sole and it's got a quirky poem in it inviting you to a barbecue at his house where you can hang out with your friends. Feels good right? Isn't it heartwarming to have that little touch of humanity, to know that Sole spent a few minutes wordsmithing a fun little poem for this invite? Later, you're talking to Sole and you compliment him on the poem; sheepishly, he responds with "Actually, AI wrote that".

How do you feel in this moment? Is there any scenario where you don't feel cheated? Maybe even lied to? You thought you were getting a personal note from a friend, and it's just more stochastic computer-generated spam. Would you ever read Sole's emails again? I know I wouldn't.

I'm sure this feature got a product manager somewhere a big promotion. Heck, I'm sure there are people who have become so inured to everything being algorithmically-generated spam that they won't even notice or mind that their friends are now sending them messages like this. But, Apple's ethos3 has always been about building tools to empower users to make art, to create, to be original. I don't know what this is, but it sure as hell isn't human creativity.

Let's not even talk about these hallucinogenic "Image Playground" results and the real artists whose work was surely purloined to generate them...4

Apple Image Playground
Apple Image Playground (shudder...)

Maybe I'm alone. Maybe nobody else feels the deep and primal outrage at the thought of parents outsourcing their kids' bedtime stories to artificial stupidity, and at the thought of our friends messages to us being mediated by fancy autocomplete. But, damn! The resounding "who cares" from the tech industry over the last few months, the openness to never being able to tell if written text is actually someone's true thoughts or is just adjacent to their thoughts in a 1536-dimensional vector space... it feels a bit like a betrayal. If you decide you want to use these tools, feel free to leave me off your barbecue invite lists, because I don't think we have compatible values.

1

If you're lucky enough to be out of the loop, this is currently focused on the use of very large neural networks trained on truly enormous volumes of text which are able to do essentially sophisticated autocomplete -- sophisticated enough that people with a really depressing theory-of-mind sometimes believe it's intelligent, even though all it's doing is picking the most statistically-likely next word given the previous words. It's been a real eye-opened watching a lot of business executives give up on the idea that consciousness exists and embrace the idea that a totally deterministic word-picking automaton can replace their workforces.

2

Assuming you're not one of the many folks who has given up on email entirely and just has a counter of hundreds of thousands of unread missives.

3

At least, the ethos that their careful marketing team tries to portray. But, I do know people who work at Apple and do more than pay lip service to it!

4

Let's also not talk about Apple 2030, Apple's pledge to be zero-net-carbon in a scant 6 years, and how this is going to be affected by sending these queries out to OpenAI et al to burn some megawatts on.

2024 GPG Key Update

My GPG key (24F8AA354990F3F562EC014BC6496DEB3DA8E9B5) was set to expire on Tuesday. Rather than generate a new one, I've decided to just extend the lifetime of this one. I've added new EC25519 subkeys if you'd prefer to use more modern encryption, and bumped the expiration by another two years.

Over the last two years, the only thing this key has been used for is as a root of trust for keyoxide; nobody has sent me any mail. Even Facebook dropped support for PGP. Anyhow, the key is still alive if you need to reach me that way. You can also contact me on Signal if you want something more modern!

read more

One of my favorite Ruby snippets

This is one of my favorite Ruby snippets, which I wrote many years ago and tend to sneak into codebases:

class Object
  def if_apply(cond, &block)
    unless cond.is_a?(TrueClass) || cond.is_a?(FalseClass)
      cond = cond.present?
    end
    if cond
      block.call(self)
    else
      self
    end
  end
end

It's super-helpful for cleaning up long method chains when writing in a "pipelined" style. Imagine the following pseudo-Rails code:

class FooController < ApplicationController
  def index
    items = Item.all.order(id: :asc)
    if params[:only_squares]
      items = items.where(square: true)
    end
    if params[:owner].present?
      items = items.where(owner: params[:owner])
    end
    @items = items.paginate(page: params[:page], per_page: 25)
  end
end

This is really noisy. The word items is repeated everywhere. Can we make this look a little closer-to a point-free style? With the .if_apply helper, you can rewrite this as the following:

class FooController < ApplicationController
  def index
    @items = Item
      .all
      .if_apply(params[:only_squares]) { _1.where(square: true) }
      .if_apply(params[:owner]) { _1.where(owner: params[:owner]) }
      .order(id: :asc)
      .paginate(page: params[:page], per_page: 25)
  end
end

If you prefer to avoid the _1 everwhere, you can replace block.call(self) with instance_exec(&block) to avoid that argument... but then you can't reference class variables from the enclosing scope, and you run the risk of calling private methods in the subject, so I try to avoid instance_exec when possible.

Also, .if_apply is a terrible method name, but there are two hard problems in computer science: naming things, cache invalidation, and off-by-terminated by signal SIGSEGV (Address boundary error)...

Apple Vision Pro Demo Thoughts

I just did my free 30-minute demo of Apple Vision Pro at the Apple Store in Emeryville and figured I'd write down my initial reactions:

  1. This is the worst Apple Store experience I've ever had. Apparently the connection between the supervisory iPad and the demo AVP unit is very flaky, and their solution is just to have a lot of iPads. The salesperson doing my demo went through five iPads before getting one connected.
  2. Apple Vision Pro is surprisingly... not that heavy. I expected to really feel it, but it feels subjectively lighter on my head than the AirPods Max that I wear at work every day, despite the Vision Pro weighing 50% more than the AirPods Max (600g vs 384g).
  3. In general, this product feels heavily inspired by the AirPods Max. Same color1, same Digital Crown and button, etc.
  4. The IPD alignment wasn't perfect and I still had some doubled vision in the bottom-middle. Easy enough to avoid during the demo by moving my head down when looking at that area, but would be awful if I were using this device every day. I'd want to retry the demo a couple of times and see if it recurs before spending any money on this product.
  5. For some reason, a small green checkmark appeared in the center of my vision roughly every 60 seconds. Was this some artifact of the remote-viewing iPad?
  6. The window resize controls disappeared while watching the Avatar: The Way of Water demo and I couldn't get them back until the video fininshed. Not sure if there's some gesture I was missing to bring them up or if this was a bug.
  7. The Alicia Keys demo is deeply uncomfortable2; all of the other "Immersive Experience" demos are amazing.
  8. Text was more-legible than I expected given the relatively-low angular resolution of the displays (34ppd, compared to 98ppd on the Studio Display I use all day every day). Definitely could see some color fringing on black text on a white background from subpixel anti-aliasing, but it was more comfortable to read than macOS is on a non-Retina monitor with similar angular resolution. I caught the foveated rendering happening a few times but it was pretty unobtrusive.
  9. I experienced no nausea at all during the demo, even the high-motion parts. I have always felt a little queasy when trying other headsets.
  10. The sound was remarkably good. I didn't listen to anything serious, but it had surprising nuance for something that's more open than the most open-backed of headphones.

I'm not going to buy one of these things, but ask me again in a couple of years when a second version. I do, however, think that Apple could make a whole boatload of money charging people $100 to rent one for a few hours to watch a movie. If you have an Apple Store near you, you should definitely do the free demo just for the entertainment value. Heck, we used to pay $25/pop to go see the M.O.M. at the Jordan's Furniture in Avon, and nobody tries to sell you a new couch while you're playing with a Vision Pro.

1

Silver aluminium, which seems to be getting phased out by Apple in favor of their warmer "starlight" aluminium

2

Does anyone want to have someone singing at them from 3 feet away? What was this like for Ms. Cook? Singing at max intensity at a featureless white obelisk?