Always On Browser

As suggested by the category of this post, “Grumpy Old Man,” I am old enough that I was an independent adult when the web was invented. I remember the early behavior of web browsers, notably Netscape Navigator, and how they used local caching of fetched resources to make rendering pages bearably slow over a 14.4 modem connection. And how, when the connection dropped and a page failed to load, I could hit the “back” button and see the previous page because it was in the cache. A lot of things sucked about the late nineties, but that wasn’t one of them.

Today, it is raining where we live. This means that electrical power, and thus the cable modems on the utility poles, are only intermittently available. Because PG&E. But it also means that I get to see what modern web browsers do when the Internet goes away. Friend, it is not good, and it is a timely reminder of why I open everything in a new tab.

Learning to Nope

Over Thanksgiving, a fellow suggested I take a look at writing some bit of software to do with juggling voxels. I explained that there are three general kinds of programming that are specifically not fun for me: compilers, user interface, and drivers. Doing lots of math and spatial geometry in an attempt to squeeze out a little bit more performance feels, to me, kind of like a combination of all the trickiest bits of UI (graphics rendering, most especially) and device drivers (lots and lots of just-barely-above-the-metal instructions to a coder-abusive toolchain, where writing and debugging probably goes smoother if you’re just staring at hex). This is probably unfair, so maybe I will take a look, but that’s where my biases are.

The other day, a friend opined that they didn’t like Advent of Code because it’s a competition and not just coding for the sheer joy of learning. I see that, for sure. In years past, I’ve tackled it to practice various aspects of Swift programming: using different editors, different build methods, getting familiar with various libraries. But I’ve always dropped out after a short while, as at some point the problems just start seeming like obnoxious homework, and I’m not even getting a grade on this stuff. This year, I hit that point midway through day 3 — a new record! The second puzzle for day 3 is, essentially, “build a stack processing state machine.” That smells like a compiler to me.

Some people love doing this kind of problem analysis and then writing implementations of their solutions. Bless ‘em, we wouldn’t have compilers without these folks, and far be it from me to tell someone who’s having fun that they’re doing it wrong. But this year, I don’t need to practice this particular bit of development and it’s not fun for me. So I’ll be doing something else.

Prepare to Take Care

So, you know, things are likely going to get harder for people on the margins of power in the U.S., not just over the next few years, but probably for the next generation, until a bunch of justices retire. At least. Anyway, protests and lawsuits are great and necessary, but they’re things you do after people have already been hurt. I want to take a moment to point out some stuff you can do before.

Right now, there are a few places where it’s illegal for a woman to go out of state to get an abortion, and it’s also illegal for anyone to drive her. Also, it’s a trivial matter for anyone even LARPing as a cop, let alone actual law enforcement personnel, to track such people down. So, while you still can, the compassionate thing might be to get hold of some morning after pills. Maybe even prepare some abortion cards.

Updating a macOS application’s Help Book

Why yes, as a matter of fact that is a really long title. Nevertheless, there’s not a lot of documentation to be found, and certainly not a lot of practical advice that shows up easily. Now that I’m building help books for my applications, I’ve run into the situation where I update the help and then need to tell the Tips app to reload the index for an updated book. There’s no way to do that from the Tips app. Uninstalling the application that has the help book in it doesn’t trigger this, either. The thing to do is to fire up a Terminal window and use sudo, which is totally something I could trust my mother to do. Thanks, Apple.

sudo hiutil -P

That’s all – it just clears out all the cached help index files. They’ll get rebuilt the next time you look for help.

Just Enough Ruby

Last time, I complained about a problem I was having that meant I was going to have to learn enough Ruby to debug someone else’s code effectively. Fortunately for me, it turns out that I was being wildly pessimistic. In the end, I was able to get Middlemac working with Ruby 3.3.5 with only some twiddling of dependencies. I even submitted a PR with my fixes, but since the maintainer hasn’t touched the repo in over three years, I bet it’s abandonware.

Continue reading “Just Enough Ruby”

Okay, I Guess I’m Learning Ruby

Right, so a macOS application has a ‘Help’ menu by default, but unless the developer does some complicated and poorly documented stuff, there isn’t any help. Now, I’ve found a swell tool, Middlemac, that helps make the process much simpler. However, it doesn’t work with Ruby 3, because stuff in the past. Nowadays, middleman does actually work with Ruby 3, so maybe Middlemac could be made to?

Well. I’ve managed to get fast_trie to compile, so that’s part of the process done. I’ve also pulled the source for middlemac and built it locally and that’s cool, but the tests don’t pass. The tests don’t pass because of some error being thrown down in middleman, and I haven’t found anything specific about it:

 middleman-core-4.5.1/lib/middleman-core/step_definitions/middleman_steps.rb:54
      undefined local variable or method `only_processes' for #<Object:0x0000000148f9ff08> (NameError)

So now, even if I were to find (possible, however unlikely) and fix (ha!) this problem in middleman-core, how do I install it so that middlemac uses my locally built version and not the version I installed via `gem install middleman`? I haven’t a clue.

Fortunately, since updating my laptop’s operating system to “Sequoia”, I can at last have a Ruby that works. The last time I looked into Ruby, it was an exercise in frustration just getting a development environment that worked. So, it seems that I get to spend a few months getting smart about Ruby. Well, worse things could be true, I guess.

Hey, quick question: VS Code or RubyMine?

Modern Opera – Just Say Ouch (The Handmaid’s Tale)

We went to see “The Handmaid’s Tale” at SF Opera last night. I read the novel back in … I dunno, 1988? 1989? Somewhere around there. I knew this was going to be a megadowner. Then again, it’s not like “La Bohème” is a laugh riot or anything. But here’s the thing: it’s modern, and the music and libretto were written within my children’s lifetimes. So, I guess the persons responsible had something to prove.

Continue reading “Modern Opera – Just Say Ouch (The Handmaid’s Tale)”

Maybe Don’t Do That?

Right, so I am working on a service that replaces a single part in an existing workflow. The workflow itself has been in existence for, like, 30 years and really, I’m not prepared to go down the path of explaining why the whole thing isn’t being replaced with a shiny new integrated and up-to-date system. Just accept that and move on to today’s interesting point. At the beginning of the part I’m working on, we have to go fetch some structured data from an outside source. This data is available as files, and must be transferred via ftps, with user/password authentication. Once we’ve got this data, we can slurp it into our own database, transform it, and use it for our purposes. Our service is running as a Vapor application so it can provide a nice REST API for the client software and the person using the service doesn’t have to have the database running on their desktop computer, and all the other goodness that comes from a remote service.

Continue reading “Maybe Don’t Do That?”

Webassembly: Do I Want That?

From a first glance at the Webassembly (abbreviated as WASM) site, it’s hard to tell what it’s for. A little bit of digging, though, gives me the idea that it’s a way to write an application that gets delivered to users from a web server and which runs in the browser. This is sort of like Java applets or Angular or Flutter apps. The world, apparently, needs yet another one of these things because…well, obviously, because they all suck in various ways as anyone can tell you. So why does WASM not suck? Apparently, the way that WASM is cool is that you write the code in the programming language that you actually like to use, and then there’s a compiler that will read that and output WASM. So you don’t have to burn out your brain remembering the syntax and idiosyncrasies of lots of stupid programming languages and frameworks, just a couple.

Continue reading “Webassembly: Do I Want That?”

Music Software: Ensemble

Ensemble is billed by its creators as music score software specifically intended to make piping and drum scores for pipe bands. It claims to be able to play the scores so you can hear what the arrangement sounds like. It even claims to be able to import scores from other music software packages. It and all the score data reside in the cloud1 so you can share the scores with your whole band, or with your students, et cetera.

Continue reading “Music Software: Ensemble”