FOB 4: A Blog

Bart Massey

The Many Realms Of Zulip

2024-12-17 21:34:55 PST

Bart Massey 2024

Thought I'd do a quick post-mortem (damn near, anyway) on my big adventure of the last few hours. It involved reconfiguring a Zulip server I run, and was supposed to be a quick thing. But Zulip is never quick.

Zulip has an interesting configuration option for allowing multiple Zulip chat servers on a single host server. They call this "realms" for some reason. By default you only get the one default realm on your server, so that's what I got when I very quickly set mine up a couple of years ago.

I now wanted to reconfigure to allow multiple realms: https://site1.zulip.example.com (for example), and https://site2.zulip.example.com instead of just https://zulip.example.com on my cloud server.

Thus the fun began…

DNS

So the first thing was to get the domain names set up. I run the DNS for example.com. I am serving it with bind9 or bind or named — all different names for the same piece of software in use on my home Linux server, depending on context. It turns out that systemctl restart named and systemctl restart bind9 are just aliases of each other. Which is weird.

I've spent a lot of time in /etc/bind configuring this thing, so I wasn't anticipating any big deal. I slapped site1.zulip.example.com as an A record in the zone table and… nope.

A half-hour of flailing later I called a friend who is both generous with his time and a genius. He too was confused. The thing we both thought should work, and the internets thought should work, didn't work.

Skipping a bunch more flailing, the desired result was achieved by adding a new zone for zulip.example.com in the zone file for example.com (as zone master, backed up to my friend as zone, er, alternate). With the NS and CNAME records filled in just right, it all just worked.

Upgrading Zulip

Before I tried to do anything with Zulip, I figured I should upgrade first, because it was time anyway and I'd be working from a stable base. Sadly, Zulip is not packaged for Debian as far as I can tell, so I had to download a big tarball and have some script from the existing Zulip installation run the upgrade.

The Zulip install script refused, because "unsupported Debian version". Much digging around later, it turns out my cloud server provider, who had graciously installed Debian for me, had done something that altered both /etc/debian_version and /etc/os-release to say I was running trixie/sid. Some careful hand-editing of these files got me back to where the Zulip script was willing to admit that I had an OS they supported and install the software.

There was one other quirk: the installer wanted libvips, but Debian had only libvips42. Huh. So I broke down the upgrade tarball, hand-edited the dependency, and then rebuilt the tarball and gave it to the installer again. Success.

Move The Existing Zulip

I then wanted to move the existing Zulip from zulip.example.com to site1.zulip.example.com. I used the Zulip backup script (wouldn't work earlier because of the version thing) to back the existing Zulip up, then just used another Zulip script to move the thing. Just worked, which surprised me.

Deal With Nginx and Certificates

Of course, everything has to be TLS now. So I ran another Zulip script which ran certbot to get a new TLS certificate for site1.zulip.example.com. (Given the amount of Zulip instances I ever expect to run, getting a wildcard cert seemed like excessive effort.)

I then confronted a couple of sad realities: nothing was working, and nginx configuration was the problem. I have been using Apache since it came out, and I am just not that comfortable with nginx. However, it was on this server because reasons and seemed hard to replace, so I buckled down and started to patch up the config.

One issue was another service running on my cloud box, "Punchy". Punchy had its nginx config installed in /etc/nginx/conf.d and really wanted to be in charge of the TLS for everybody. I finally dpkg-diverted it to sites-available where it should have been in the first place.

The key finding of this phase was that every server section needed to have a server_name set. Anything that didn't just kind of took over everything else. Finally sorted that all out.

One Last Zulip Config

At this point, I had my Zulip desktop client talking successfully to site.zulip.example.com. Hooray.

Unfortunately, browser access not so much. The browser took a login, but then just hung spinning, with a message that said "if this doesn't come back in a few seconds try reloading the page". Needless to say, a reload solved nothing.

Much adventures later, I got out the browser developer tools, which reported that Zulip was still trying (and failing) to talk to zulip.example.com. I then discovered /etc/zulip/config.py, which had zulip.example.com set as primary, and no entry in the alternate hostname for site1.zulip.example.com. I added the latter, and then altered the nginx configuration to allow the former.

Conclusions and Future Work

Hooray. I'm back to where I started. Except now I'm running Zulip the way I wanted to, and also now I've fixed the Punchy config and also have figured out how to do a static site for my cloud server using nginx. Way too many hours, but a moderate success.

In digging through Zulip stuff I noticed that it may support Github and Google for auth now. I need to look into this: it's way more convenient.

Now if Zulip would fix alerts on mobile it might become actually usable for people. Hooray.


Dual Boot Notebook

2024-12-08 00:11:24 PST

Bart Massey 2024

Just got a Lenovo X1 Carbon Gen 13 Aura Edition (yes, its real name) running Windows 11. I was setting up to dual-boot Lenovo-endorsed Ubuntu Wayland, and started this notebook to document the process.

The goal of this notebook is several-fold:

  1. Remind future me what I did. ("'Future Me.' I hate that guy. He knows what he did." —Julian Kongslie)

  2. Give others a guide with some pitfalls pointed out and navigated

  3. Give feedback to the Ubuntu folks.

Background

It may be helpful to know where I'm coming from.

I started using 2.9BSD UNIX on a PDP-11 in 1982, and became a paid sysadmin and later consultant and teacher of UNIX stuff. I started with Linux around 1.2.13, using whatever "distros" existed then. Later, I was a paid admin for a network of Red Hat boxes, then switched to Debian at slink. I've been using Debian continuously since then. I have small patches in the Linux kernel. I was one of the founders of Linux Plumber's Conference.

What I'm saying is that I'm old enough and arrogant enough that the ridiculous mess that follows is something I can't imagine a new Linux user wading through on their own. In my opinion it was utterly irresponsible of Lenovo to claim they supported Ubuntu on the Carbon Gen 13 when it worked like this.

This is my first serious messing-about with Ubuntu. So that's on me.

2024-12-04

Prepping For Linux

Previously on this machine, I had installed Debian Sid. Gave it up, as X11 seemed not to be available and I didn't want to figure out Debian Wayland. In the process I had pre-done a few things to prep for Linux:

  • Modified Secure Boot: As shipped, Secure Boot would not allow booting non-Microsoft OSes. Turned on laptop, got into BIOS (repeatedly push F1 during boot) and found the setting for Secure Boot and modified it to allow Third-Party CA Certificates.

    On the next Windows boot, this made me supply my BitLocker key, since the Secure Boot setting had changed. Did so without incident. I had no idea the Windows 11 install had shipped with BitLocker.

  • Disabled Bitlocker: A partition with BitLocker enabled cannot be resized by any means. However, needed to split the main 2TB partition between Windows and Linux. So found instructions for turning off BitLocker on the Windows partition. Should have done this before modifying Secure Boot.

  • Shrank Windows Partition: From the Debian installer, shrank the Windows partition to 500GB (should be plenty since I rarely use Windows for anything). I then let the installer use its default partitioning scheme on the resulting free space. Little did I know that I would reclaim this free space and start over later with Ubuntu.

The total time for this step was probably around an hour. It would be much faster if repeated.

Installing Ubuntu

Now I was ready to start over with Ubuntu. Some of these steps were actually duplicates of Debian install things, but we'll pretend that they were all new.

  • Configured DNS: Set up bartcarbon13.po8.org with IP address 192.168.1.13 using my local DNS infrastructure.

  • Configured DHCP: Set up my local DHCP infrastructure to recognize my machine with dhcp-client-identifier bartcarbon13. This was necessary since the ethernet address would be that of an adapter rather than the machine itself.

  • Built Ubuntu USB bootstick: Grabbed an old 8GB USB flash drive and copied a redundantly-named Ubuntu plucky-mini-iso-amd64.iso onto the base drive device (not a partition). Was extremely careful to check the device with parted right before the copy: easy mistake to copy your boot iso onto one of your actual hard drives, leading directly to backup-recovery-town.

  • Booted from USB: Turned on the laptop and got into the boot menu (repeatedly hit F12 during boot). Selected booting from USB. Was confronted with micro-text menu due to HIDPI display. Got my super-magnifying-glasses on.

  • Tried to start install: Turns out the micro-menu just said "Choose an Ubuntu Distribution To Install". Why is this a menu item?

    Next micro-menu offered me a variety of options, none of which was the "Plucky" the mini-iso said it would install for me. I wouldn't mind an earlier Ubuntu, except I doubt it would support the Intel ARC Graphics on my laptop.

    Folks say installing Ubuntu is easier than installing Debian. Don't think they've tried recently.

  • Tried installing again: Fetched a daily-build plucky-desktop-amd64.iso after a 5-minute download. 5.4GB should fit on my 8GB USB stick, but not with miles to spare for sure. Dumped the ISO onto my USB drive in another 18 minutes — that's a very slow drive and a big image.

    This time was presented with a four-item micro-menu. While trying to figure out which option to select, the bootloader timed out and started the default "Install Ubuntu." Apparently I was going with that.

    After a couple of minutes of staring at a splash screen, I got an Ubuntu desktop screen. A minute later Ubuntu was more-or-less up, apparently running as a Live Image off the really slow USB drive. Not ideal, but I decided I could try working with it.

  • Tried an actual install: Noticed "Install Ubuntu 25.04" in the lower-right corner of the desktop, and decided to click on that once the handy USB drive activity light mostly quit flashing. The only effect seemed to be refreshing the list of volumes in the hotbar.

    After a while I started clicking on things and eventually ended up stuck in an application search screen. I apparently had windows open according to the hotbar, but had no idea how to get to them. A quick Google search of "ubuntu return to desktop from app search screen" gave as its top hit "Super+D or Ctrl+Alt+D: Show desktop". Nope. Found a System 76 tutorial on Ubuntu Basics, which was helpful. Still couldn't get anywhere.

    Finally gave up and rebooted.

  • Tried installing again: This time chose "Ubuntu (safe graphics)" from the boot menu, because I knew what was coming. Figured maybe there were graphics issues with the ARC stuff that weren't yet sorted on the Live CD. Waited again for a couple of minutes for things to come up.

    This time I would be careful not to search for applications.

    Got a window that said "Preparing Ubuntu" this time! Seemed more promising. I suspect graphics were just borked on the previous attempt. Frickin' bespoke hardware.

  • Continued installing: OK! Got the expected installation prompts. Apparently graphics were borked after all.

    Everything was still micro-text, of course. Got out my heavy magnifying glasses again. Then switched to my Optivisor™ because the focal length of the glasses was like two inches and I wanted my face out of the screen.

    But hey, on the second screen of the install I was offered the accessbility option of "Desktop Zoom". Perfect! But it turned out to be pan-and-zoom. Nope. Settled for "Large Text" and continued magnification, with the plan of fixing later.

  • Worked through the Ubuntu installer: Other than nice graphics, the screens and choices seemed to be pretty similar to the standard Debian installer.

    Realized in here somewhere that I probably wanted to set up an Ubuntu mirror at home. Sigh.

  • Changed disk partitions: Oh! The installer offered to keep my old Debian installation and install Ubuntu as a third way for now. Tough choice. I could always delete the Debian partition later if I didn't miss it. But I couldn't imagine why I wouldn't miss it, and it would be easier now.

    I decided to suck it up, take "Manual Installation" and reuse the Debian partition for Ubuntu. The partition editor was pretty Debian-standard, but was not interested in letting me erase the Debian partition. I didn't know what would happen, but decided to plunge on.

  • Continued installation: Having the timezone configuration auto-locate me, presumably by IP, was a nice touch: even Windows didn't do that.

    Huh. The "Review Your Choices" panel pointed out that I had forgotten to go back and mark the swap partition as "swap" instead of "leave as swap". That's gross, but OK. Unfortunately the partition editor then made me reset everything else about the configuration, including stuff it had initially auto-guessed. Ah well. I'm kind of used to using a swap file instead of a swap partition for flexibility, but this was chosen for me by the Debian install and I decided to go along.

  • Installed installation: I pressed the "Install"ifier. Started a copy of files off the USB stick. Wasn't sure this was faster than from the Internet, but hey. Started seeing a series of post-purchase ad screens, including "Great for Gaming", which, well, yeah but also had Windows on the box so…

  • Rebooted from SSD: Ubuntu came up as the first option in the micro-menu, so I took it. Looked like Windows was there also though, as expected. Logged in and there it was: success! Went through a brief post-installation dialog and was looking at a running system.

The total time for this step was about four hours. If repeated, it would probably still be about two: there was a lot of sit-and-wait, and a lot of menus to wade through.

Configuring Linux

The fun doesn't stop when the desktop boots. Oh no.

I needed to configure my machine for my use cases. How hard could it be?

  • Installed a terminal: The startup had pointed out the "App Center" icon in the hotbar. I opened it. Took me a moment to realize that it was locked to "snap packages". Ugh. Switched to "Debian packages". Nothing under "terminal". Huh.

    Found the "Show Apps" start menu thingy. Found a "Terminal" and pinned it to the ~~hotbar~~ "dock". Apparently it's called a dock.

    Ah! The battery-looking bar icon in the upper-left corner took me back to the desktop. So yeah, things were just borked earlier on.

    I hoped "Terminal" was Gnome Terminal, my standard ride and one that would make sense on a Gnome-based distro. When I checked… it was! My old friend. Finally started to feel a bit comfortable with this Ubuntu experience. A shell prompt is the key to the world of fixing stuff.

Things were suspiciously slow on this very modern laptop. I suspected something was wrong, but wasn't sure what yet. Continued anyway.

  • Messed with settings: Pinned the Settings app to the dock. Started to go through the settings, as one does.

    • WiFi: Added my home WiFi.

    • Display: Ah, was able to set the display to 3x scaling. That made things really easy to read without any magnification. They weren't hopeless with large fonts before, but this was way better.

    • Sound: Huh. Hadn't noticed until now that sound wasn't working. Only output was "Dummy Output". Needed looking into: this would be my laptop for my "Computers, Sound and Music" course in the future so sound wasn't optional.

    • Power: Power settings did not appear to be separate for powered vs battery. Not great. Set performance mode to "Performance" for now: perhaps (although unlikely) it would solve the performance problems I'd been seeing.

    • Appearance: Decided I would have to come back to get my generative "clouds" background up. It's a tradition.

    • Ubuntu Desktop: Made a bunch of boring changes, mostly in the interest of simplification and screen real-estate.

    • Mouse and Touchpad: Finally found out how to fix some of the touchpad sensitivity and weird behavior issues. Almost missed it, though: for some reason "Mouse" and "Touchpad" are separate tabs on a single settings window. Huh.

    • Keyboard: Set up the "Windows™ Key" as a Compose key, and moved "Special Character Entry" to right Control, which I never use anyway.

    • Printers: Found my networked printer automatically. Nice.

    • System: Turned on the SSH daemon here. Surprising and convenient. Then ran ip address, found the laptop IP, and tried to SSH in from my desktop. Nope.

      From root terminal, ran apt install openssh-server molly-guard. Then systemctl start ssh. That got it.

      Would a reboot have fixed it? Who knows?

At this point I was noticing huge lag spikes during typing in the terminal. 10 or 15 repeats of a key would get buffered up during a pause, which was really, really annoying. Obvious starting point would be a reboot, but wanted to do a couple more things now that I was SSH-ed in from my desktop where things were more convenient.

It had been another hour. I took a break.

I should take breaks more often during this stuff. I just want to power through it, though. It's frustrating to notice how much needs to be done just to make things work.

--

Came back late in the evening, having slept the laptop (I think?) unplugged for about six hours while I did other things. Battery was down to 85%, which was not a good sign if it really was asleep — needed to check that. Continuing with the adventure, the battery seemed to be dropping really fast. Was curious how the battery would perform in Ubuntu — really needed to be minimum three hours for some of the stuff I do.

Performance was garbage. Decided to reboot. Seems to have fixed it for now. I don't know.

  • Set up Firefox: This involved a surprising number of dialogs and options, and a password. But it seemed to work fine in the end.

  • Enabled SSH: Hadn't said systemctl enable ssh earlier, so needed to enable SSH and start it so it would be available on future reboots.

Plugged the hard Ethernet back in. My current home WiFi setup is kind of a mess.

  • Installed emacs: Specifically emacs-nox and emacs-common-non-dfsg. Needed it, would keep needing it.

  • Set the DHCP client identifier: Added it to /etc/dhcpcd.conf. Didn't appear to have changed anything, though. Decided to figure out later how to ensure that I got the right internal IP from DHCP.

  • Sent over my dotfile kit: I have built up an infrastructure where I can run a package-dotfiles shell script and have all my portable personal dotfiles, scripts, etc to a tarball that can be copied to a remote machine and extracted into my home directory.

    Did this. Then realized I had accidentally done it as root on the laptop and extracted into /root. Sigh. Redid it: worked surprisingly well. Now I had my emacs configuration, among many other things.

At this point, the laptop terminal was very difficult to type in because of lag spikes and key repeating. Something was clearly quite wrong.

Oh, also, since Wayland means no setxkbd I needed to figure out how to set the Caps-Lock key to Control, or I would go mad. Found this blog post which summarized why I had to switch to Wayland, and why I really didn't want to, and maybe what to do about it. Left it to explore later.

Oops. A warning popped up on the laptop: "Suspending soon because of inactivity." Apparently being ssh-ed into the box did not count as activity. Bleah.

  • Came back to DHCP: Discovered that Ubuntu uses "netplan" to manage the network. Found /etc/netplan which contained YAML files (ugh) to control stuff, which explained why dhcpcd.conf was being ignored. Again left it to explore later.

  • Set up SSH key: Used ssh-keygen to make an ED25519 keypair for my host to connect to my laptop. Copied the public key over and set it up in authorized_keys. Worked.

    Used ssh-add on the host to be able to avoid typing passwords for a bit. Figured this would speed things up.

OK, power seemed better than feared. About 10% down in an hour of moderate use.

  • Fixed up laptop sudo config: I have an… idiosyncratic idea of how local sudo should work. A bit of visudo later, and I had it how I wanted it. Gross but necessary for peace.

  • Set a root password: Realized Ubuntu has no root password by default. Admirable, but not OK: wanted it as a backup. Fixed.

Figured I'd try the next one and then go to bed.

  • Installed Rust: Yeah, it's a critical use case.

    apt-install rustup followed by rustup install stable just worked. Zero issues. Nice.

    After some messing around, installed my version of the Programming Rust mandelbrot. Failed to link because rustc was using cc by default? I thought we'd switched to rust-lld. What version was this anyhow? Ah, the default install didn't include llvm-tools — fixable. Installed clang because wanted it anyhow, and rebuilt. Build time was 17 seconds real, vs 15 for my big fast home box. That was fantastic news! Runtime was not so great: laptop 1.9 seconds vs home box 1.1 seconds. However, this is a benchmark that uses a lot of cores: home box is 12-core/24-ht, laptop is 8-core. It's a laptop: it will be fine. The compiles consumed about 1% of power each. Fair enough.

Was bedtime. Power was at 70%. Left the laptop unplugged and suspended overnight to see how it did.

2024-12-05

Got up after seven hours or so. Apparently the laptop hadn't suspended. Power was down to 35%. Plugged it in and left it for later. Wow, charging was fast. About 10% in ten minutes, while running.

Oh, right. Made a list of things marked "deal with later":

  • Display font size final adjustment

  • Fixing keymap

  • Typing issues

  • DHCP client side

  • Sound(!)

  • rust-lld

  • Installed rust-lld: A weird side-effect of using the Debian packaging of rustup is that I never got to set up a "normal" Rust environment. cargo install rust-lld worked, but still didn't have $HOME/.cargo/bin in my necessarily in my path because no $HOME/.cargo/env. After staring at it for a while, just reinstalled rustup using curl, then apt install --reinstall rustup to make sure the one in /usr/bin was current, then deleted the rustup in $HOME/.cargo/bin to avoid confusion. There were still a bunch of corresponding files between /usr/bin and $HOME/.cargo/bin, but didn't seem worth playing with for now.

  • *Set up "reverse" SSH:" Made a new SSH key on the laptop and installed it on my host. Set up .ssh/config on my laptop.

    Except I didn't. I wiped out my SSH config on my host instead, because screwup. Complete disaster. Backup time. Hey, at least learned how to restore files on my new backup system!

    Tried again. Succeeded.

Suddenly, a wild failure appeared! The laptop popped up a problem dialog. Looks like my dhcpcd screwing around earlier left things borked? While dealing with this, my laptop locked hard and needed to be "hard" powered-off and rebooted.

I became doubtful I was going to keep this thing.

  • Restored /etc/dhcpcd.conf: This was harder than it looked: apt really didn't want to install a fresh copy of the file. Finally fixed it by apt remove --purge dhcpcd-base followed by reinstalling it and all the things that had been removed by uninstalling it. Ugh.

  • Fixed the lid switch: Made the lid switch not suspend the laptop when powered. Consensus of the internets was to just edit /etc/systemd/logind.conf. Nice…

Tried disabling "disable touchpad while typing". Didn't seem to fix the keyboard problems. top showed nothing interesting. Laptop latency spikes continued and worsened.

Apparently installing Linux 6.12 will fix sound. Have to go to work. Will return to it later.

2024-12-06

  • Installed the latest kernel: Spent a good hour trying to figure out how to set up https://kernel.ubuntu.com/mainline as an apt source. Finally just gave up and clicked on the four linux-*.deb files I wanted like a chump, then copied them to the laptop and used apt to install Linux 6.13.0-rc1.

    The kernel was not signed, so ultimately had to disable Secure Boot in BIOS; then booted it fine. Made a mental note to fix that in the indefinite future when a working signed kernel became available. Would Windows boot without Secure Boot enabled? Who knows?

    Even with the newer kernel, sound still didn't work. Surprising. Did find a Phoronix article saying this kernel should fix the keyboard and mouse lag spikes and whatnot I had been experiencing. Time would tell.

    Time immediately told. Keyboard and mouse lag spikes continued.

    Thought to look in the kernel log and found where the kernel sound stuff was crashing with a null pointer deref. I love C.

    Tried again with Linux 6.12.3. Something hung hard enough I needed a 60-second hard powerdown. Eventually came back up. Seemed to work without kernel panics, so decided to keep it for now.

    Sound still didn't work.

  • Got sound working: Had found this https://forums.gentoo.org/viewtopic-t-1171193-start-0.html which mentioned getting Lunar Lake audio working. Having gotten a new kernel, seemed like time to explore. Unfortunately, looked like I probably maybe had all the modules I needed.

    Then went with this https://forum.manjaro.org/t/no-sound-dummy-output-on-asus-zenbook-s14-lunar-lake-under-6-12-0-rc2/170460 . Went through the complicated process of installing the latest Intel SOF firmware and… success! As I rebooted I got sound.

    The running Pipewire version is a little stale but functional.

Reviewed my to-do list.

  • Display font size final adjustment

  • Fixing keymap

  • Typing issues (lag spikes)

  • DHCP client side

  • ~~Sound(!)~~

  • ~~rust-lld~~

  • Fixed font sizes: The first item was easy. The display font I chose was a little large even for the hidpi display. Went back from 300% display scaling to 200%. This still left the terminal font too small, so installed Bitstream Vera Sans Mono and set it to a reasonable size for 80×24.

If it weren't for the lag spikes, this thing would be starting to feel like home. Had to believe that a kernel update would catch that.

  • Fixed lag spikes(!), fixed grub boot menu size: Found this https://bbs.archlinux.org/viewtopic.php?id=300155 in my backlog, which suggested a kernel boot argument of intel_idle.max_cstate=1.

    While applying this by editing /etc/default/grub, also updated GRUB's idea of the display resolution to something more sane.

    Both of these things seemed to work! Without the lag spikes, this was probably a viable machine.

To-do list was now

  • ~~Display font size final adjustment~~
  • Fixing keymap
  • ~~Typing issues (lag spikes)~~
  • DHCP client side
  • ~~Sound(!)~~
  • ~~rust-lld~~

This seemed manageable. Break time.

  • Made the console usable: Ran dpkg-reconfigure console-setup and picked the largest VGA font offered. After much messing around, gave up on making it even bigger.

Along the way, checked that Windows still booted. Yep. Yay.

Switched to X11 for a bit! This was as easy as finding the little gear icon while signing in. Didn't work: system experienced some failure almost immediately. But good to know it should be on soon. Rebooted and went back to Wayland for now.

  • Fixed CapsLock: After a bunch of messing around on the internets, tried this

      gsettings set org.gnome.desktop.input-sources \
        xkb-options "['caps:ctrl_modifier']
    

    and it immediately worked.

  • Set up my GitHub SSH key: Was fairly straightforward.

In the process, finally fixed the weird "command-not-found database" error message I'd been having. Maybe.

apt install --reinstall command-not-found

Nope. Idk. Removed the package. That shut it up.

It was bedtime again. I'd made progress. Getting close.

2024-12-07

The laptop had lost 30% power in 8 hours in unpowered sleep. Clearly sleeping was not a viable long-term alternative until someone fixed something.

Boot time through BIOS and Ubuntu seems to be about 25 seconds, with most of that in BIOS. Ugh.

  • Fixed DHCP client id: That was exciting. Like several excruciating hours of exciting. tl;dr…

      nmcli con show
      nmcli con modify f92bba01-5461-3e40-9d31-610788c0350f ipv4.dhcp-client-id bartcarbon13.po8.org
    

    Then go set the dhcpd.conf host entry on the DHCP server box to have

      option dhcp-client-identifier "\000bartcarbon13.po8.org";
    

    The \000 is a "type id", because dhcpd is kind of borked.

    As far as I can tell, the GNOME NetworkManager GUI provides no way to set the dhcp-client-id. (The XFCE Network Manager GUI does provide this on Debian.)

    Learn to love tshark.

      shark -i ent0 -f 'port 67 or port 68' -w /tmp/packets
      tshark -r /tmp/packets -V >/tmp/decode
    

    Now some decoded DHCP packets will be in /tmp/decode.

  • Checked the Camera: Just worked right out of the box. Really nice camera, too. Even has a hard camera cover that also turns off the camera when you close it.

    Great feature!

With that, I was done. I'd accomplished everything I could think of that really mattered. My Dual Boot Notebook dual-booted, and Linux worked well enough to use.

Conclusions

For all intents and purposes, Linux is not yet supported on the Lenovo X1 Carbon Gen 13 Aura Edition. I've put myself through a ridiculous amount of difficult fiddly diagnosis and repair. Even following my instructions, which may not work next week, it would be a big job to get this all up and working.

That said, now that I have the laptop mostly working I am rather fond of it. Assuming that the idle issues can be fixed, the boot time improved a bit and the X server made to work reliably, I think will be a great ride.

("A friend" who knows the insides of the X Server mumbled something about "atomic KMS modesetting" when I told my stories. Apparently there is a reasonable path to making X11 work if someone find the will.)

I found Ubuntu to be nice in a few ways, and annoying in others. The install experience was pretty bad compared to a Debian install, something I really did not expect. Ubuntu doesn't seem to have the package depth of most Debian-derived distros; I tried to install several things that seemed like they should be there but weren't. On the other hand, the polish of the UI and the really nice documentation on the Ubuntu website were great. I'm not sure whether internet searches for relevant information yielded more or less than they would have with stock Debian: seemed about even.

Anyhow, I'm going to pretend I have a working new laptop for now, and start tackling issues lazily as they arise like I usually do.

Thanks for listening.


Who Is "Meteor Man"?

2022-09-14 22:29:02 PDT

My wife and I have been watching The Rings Of Power. So far, we haven't been terribly enthused.

  • There's too many storylines and characters: it's hard to keep track of, and everything gets diluted. I haven't found any plot line or character yet that I am really excited to see more of, just a lot of barely-above-meh.

  • As someone who has read much of Tolkien's literary output including The Silmarillion, I still don't understand a lot of what happens in the show. It feels to me like a lot of barely-disguised move-the-plot-along fridge logic. My wife keeps asking me "why was that?" and I keep saying "I don't know." Not a good sign.

One of the classic ways to try to hold interest in a serial, one that goes way way back, is to have a Mysterious Figure for the audience to worry about. We have not one, but two here: "Meteor Man" and Halbrand. Of the two, Meteor Man is the more interesting to me, which is to say I care a tiny bit.

Sadly, I don't trust The Rings Of Power to have a satisfying identity set up for Meteor Man at this point. My suspicion is that it will be something stupid. Here's some guesses about Meteor Man's "true identity" I've seen from folks I watch on YouTube: I've ranked them in the order of my belief, although I'm not yet enthused about any of them.

  • Gandalf: This is in some ways the obvious choice: a Maiar Fire Mage, a really familiar and beloved character who is known to be friends with the Hobbits.

    This last was my initial reason for adopting this theory — in the Tolkien Cinematic Universe, as in any CU, writers can't seem to resist overexplaining trivial stuff from characters' backstories. "You know why Gandalf likes Hobbits so much, right? In the Second Age, one of them helped him and then he befriended a Hobbit clan."

    The problem with the Gandalf theory, as pointed out by Robert at In Deep Geek (an excellent YouTube channel), is that there's a bunch of hints that Meteor Man is actually evil. There's the corrupted leaf in Lothlorien as the meteor sweeps by. There's the whole "so evil the fire gives no heat" thing (that as far as I know was invented for The Rings Of Power and probably shouldn't have been, as it doesn't fit at all with Tolkien and is stupid). There's the dead fireflies, and Nori's dad breaking his leg when Meteor Man breaks a stick.

    Still, the problem with Meteor Man being evil is that we are clearly expected to trust Hobbit girl Nori's instinct that she should help him. Indeed, the writers set up a second child character, Bronwyn's son Theo, as a kind of bad counterpart of Nori who manages to steal some kind of ultra-evil Morgoth dagger. While Nori ending up doing evil and Theo doing good is exactly the kind of stupid subversion I would expect from bad writers, I hope the writers of The Rings Of Power are better than that.

  • A Balrog: This is Robert's suggestion, and it's a tricky one. It's the kind of thing the writers might do, I guess? See his video for some of the justification for why it could be so.

    However, I think there are some issues with this identification. First, I am not aware that any Balrog took human form anyhwere in Tolkien's stories; they are always described as overt monsters. Second, it appears from Tolkien lore that the Balrogs all came to Middle-Earth in the time of Melkor: there is nothing to support any falling from the sky for no reason at this point. Finally, see the argument against a truly evil being above.

    Still, as Robert repeatedly points out, we are promised a Balrog by the previews of The Ring Of Power. I suppose it could be this one. I just doubt it.

  • Sauron: I mean, why would Sauron come sailing in from the sky and crash with no knowledge of who or where he was? Why? Maybe I give the writers too much or too little credit here. Perhaps there's some truly clever explanation; perhaps the explanation will just be handwaved.

    Anyhow, Sauron is going to have to be charming and deceptive enough at some point to convince the Elves (Celebrimbor, probably) to forge The Rings Of Power. This doesn't seem like a great start. Again, see the argument above about pure evil.

  • A Blue Wizard. The Blue Wizards are really minor characters from Tolkien that we know little about. Only real arguments in favor are that they are known to go to the South, where Nori et al are.

  • Radagast. Nope. Thought about it early on, because of firefly powers. But nothing else would really make sense here that I can think of.

  • The Witch-King of Angband. I found this suggestion here.

  • Saruman. Not much fits here. Fire powers, the exact opposite of beguiling speech, etc etc.

  • "The Man in the Moon Came Down Too Soon". This website suggested this. It is both ingenious and ridiculous. Hopefully not.

  • Tom Bombadil. Makes no sense. Not even worth debunking.

  • Some newly-invented character not mentioned by Tolkien.

    No. Just… please no. If so, the writers better save the reveal for the end, because I'm quitting the minute they start adding major characters of their own invention.

  • Some character only from The Silmarillion. Basically impossible, since Amazon would not have the rights to any such character not also mentioned in The Lord of the Rings or The Hobbit.

One clue that has been much bandied about is the only words spoken by Meteor Man so far: "Mana Ure". Apparently Ure is a Quenya Elvish word for something like "fire", "heat" or "the sun". Mana is more complicated, but may be some sort of interrogative like "where?" or "what?". My theory is that "Mana Ure" is "Where's the fire?", a reference to all the rushing around he's seeing. Or maybe "Ure Mana", "Your Momma".

The one thing I take away from all this is that the writers have written themselves into a can't win situation for me. Absolutely none of the above possibilities would be anything but sad and ugly.

It would have been far better to just leave Hobbits and Meteor Man out of this one. The Hobbits can't become too famous without spoiling The Lord of the Rings anyhow, since we're told they really weren't in the old accounts. If Amazon's writers need a Meteor Man to keep the audience holding on, the series is likely unwatchable. My curiosity has certainly passed.

I'll leave you with my theory: Smaug. Someone once told me that it is never a good to leave a live dragon out of your calculations. Dragons are all about fire, they come from the sky, they are magical, they are evil but not super-evil in the same way as the other stuff in Tolkien.

This is a really stupid theory. But it's better than Tom Bombadil.


The Tedium Of Making A Blogsite

2022-09-06 22:31:50 PDT

I just spent a bunch of time cleaning up the image links in the Markdown on this GitAtom blog. The images are now all properly formatted according to the CommonMark Github-Flavored Markdown (cmark-gfm) specification.

As I feared, it was about an hour of messing about without doing much that was new or constructive or interesting.

  • I belatedly realized that I could probably leverage the site's CSS to format the images in a way "good enough" for my purposes. There wouldn't be much in the way of easy customization, but meh.

    So I went and figured out what CSS wanted me to do here, and modified my CSS accordingly. Big fun. In case you're curious, the new CSS looks like this:

    /* https://www.w3schools.com/css/css_align.asp */ 
    p img {
        display: block;
        margin-left: 3em;
        margin-right: auto;
        max-width: 50%;
        max-height: 20ex;
    }
    

    CSS is nothing if not beautiful.

    I copied that addition into GitAtom's default CSS also. It's something most folks will want, I think.

    I developed the new CSS on my development blogsite. Never a great idea to work directly on the production site. Seemed to work after a bunch of tweaking. Then I copied it here.

  • I really wanted a CSS class tag for img elements to be generated by the Python cmarkgfm package that GitAtom is using for Markdown rendering. cmarkgfm's idea of a "handy" image tag is like this:

    [![A Literal Genie maliciously granting a wish.](/media/0019-literal-genie.png
    "A 19th century etching of a Literal Genie maliciously
    granting a wish.")](/posts/dall-e-credit.html)
    

    That is translated by the Markdown renderer to this HTML:

    <p><a href="/posts/dall-e-credit.html"><img src="/media/0019-literal-genie.png"
    alt="A Literal Genie maliciously granting a wish."
    title="A 19th century etching of a Literal Genie
    maliciously granting a wish." /></a></p>
    

    I wanted HTML something like this:

    <p><a href="/posts/dall-e-credit.html"><img src="/media/0019-literal-genie.png"
    class="cmark_image"
    alt="A Literal Genie maliciously granting a wish."
    title="A 19th century etching of a Literal Genie
    maliciously granting a wish." /></a></p>
    

    See the dramatic difference? No. That's computing for ya. But getting the second thing would allow changing my CSS selector to

    img #cmark_image
    

    to ensure that the CSS didn't accidentally catch stuff on this site that was not part of a blog post: for example the Feed logo.

    So I filed an issue against cmark-gfm. We'll see. I may end up contributing a few lines of C code there.

  • I decided this was a good time to move all the images on the site from the /posts directory where the blog posts live to a separate /media directory. I had been planning to do it anyhow, because reasons; since I was messing with this stuff now was a good time.

    I'm hoping to someday get GitAtom to be cleverer about attached media, in particular in Atom feeds. In any case, I'm not too comfortable with the idea that the images live only in my site directory right now. Fixing it all will be in the far future though — very low priority.

  • I next got to fix all the image links in my previous posts. That's the problem with co-developing GitAtom with FOB4: retroactive changes. I did a couple of posts by hand, and got the hang of it. Then I decided to partially automate the process for the rest of the links by writing a sed script. A few minutes of fiddling around later, I had this beauty:

    s@<p align="center"><a href="\([^"]*\)"><img alt="\([^"]*\)" title="\([^"]*\)" src="/posts/\([^"]*\)" width="[^"]*" */></a></p>@[![\2](/media/\4 "\3")](\1)@
    

    Sorry about the long line: sed has no great way to stick line breaks in stuff.

    But of course, it wasn't that simple. I had to yak-shave by trying to get a sed mode installed for emacs. I didn't find anything good, but I now get in a really primitive sed mode when I open emacs on a .sed file.

    Of course, after all that I realized that my fancy new sed script was only good for auto-fixing exactly two more links. Ugh. Even then, I had to wrap the HTML in the Markdown so that it was all on one line, so that sed could deal with it. Totally not worth it.

    I hand-fixed the rest of the links, which were much simpler.

After all that, I wrote this post.

It's always like that. Things get very incrementally easier after every little thing like this, of course. Still, it definitely feels like pushing a boulder up a hill. Unlike the canonical example, the boulder doesn't roll back down, really. The hill is just endlessly high, and every time I look back it doesn't look like I've come any distance at all.

Enjoy my bespoke post on my bespoke blog. Otherwise I'll just feel silly.


Coding And The Ravages Of Time

2022-09-03 00:45:35 PDT

I'm very much into Rust programming (the language, not the video game) these days. The language seems kind of for real, and has some nice properties.

Back in December 2016 I participated in Advent of Code 2016. This was my second time doing AoC, I think, and I did it in Rust. This was about two years after Rust went 1.0, but it was already a very viable language. I ended up with this repository, which has over the years become one of my highest-starred Github repos.

Today I glanced at the repo for some reason and noticed that Dependabot, Github's security checker, had scattered many, many security advisories over my code. This is easy for Dependabot to do with Rust, since the libraries used all come from one place — crates.io — and security stuff is tracked really well.

security messages in a git repo

Even though a lot of these security warnings were redundant, this was still a bit alarming. I decided to see what I could do to bring my code up to 2022 standards, and eliminate the possible security issues in the process.

The good news is that this was ridiculously easier than in any other language I've worked with. Rust tools just automate the heck out of it. I eventually ended up shell-scripting most of the work. I brought all the code up to 2022 Edition, fixed all the warnings, and replaced a cryptography crate that was stale and vulnerable.

I also tried, as an experiment, just doing the minimum automated upgrades to keep things going. That was even easier, but of course I like the nicer result.

When I contrast this with my experiences with Haskell, Go, C and C++, it's just night and day. Rust is really a nice language.


Blaugust Has Concluded

2022-09-01 01:46:30 PDT

Welp. Blaugust is done.

It's been a great opportunity to get back into the blogging swing. I've gotten my software stood up shakily, I've done 31 posts over 31 days (albeit not consistently). I've met some more nice blogger people.

As I promised earlier, I'm going to scale back a little on output. I'm also going to work more on GitAtom. I've got a lot of projects to keep me busy, so it's the usual time balance thing.

Thanks again to Belghast for running Blaugust, and to Bhagpuss for inspiring me to give it a try.

In the unlikely event that you're reading this, hope you'll keep reading along.


Genre Mindless [Obligatory Games Post]

2022-08-31 01:26:03 PDT

In terms of content, the participants of Blaugust are about games, music and geek media. So far, my blog has utterly failed to fit in. But hey, I can write about these things too. I really can!

Today I was trying to recall the last game I really played hard. It doesn't happen all that often — I'm a pretty fickle gamer. Turns out it was probably Breath of the Wild. So… yeah.

I never did finish BotW. I finally beat the four thingummies and finished most of the non-combat content in the game. I spent countless hours exploring and poking around. I got the DLC, then discovered it wasn't really for me.

The sticking point with BotW is that, while I dearly loved the open-world exploration, I'm not much of a fighter. It isn't that I can't do it, although I am objectively terrible at it. I just don't like it. In terms of traditional gamer classifications, I'm discovery then puzzles then meh.

The sad fact of the matter is that games are more and more stuck on genre content. Worse yet, pretty much every genre is either fighting, puzzling, crafting or some combination of those. It's great to see some open-world exploration games, but the game designers seem unable to get beyond the idea that the purpose of a vast open world is to provide things to fight, puzzles to solve, and industries to start.

Conservative genre-mining kind of makes sense for AA and AAA titles. No taking extra risks with that kind of money. Customers who are going to pay big and in large numbers for a title want predictability and familiarity. This is even more true for the free-to-play titles: they need to be big and sticky to work at all.

Indie game devs don't have so much excuse. The phrase "indie", which after all is only shorthand for "independent", is a little weird here: Activision/Blizzard is "independent". Presumably most small game devs want to be A/B someday, or at least want that kind of money.

What I want is genre-breaking gameplay. In particular, I want to get away from the toxic parts of genre tropes: no murdering and violence, no frustrating IQ tests, no dully addictive game loops. That leaves out a lot, right there.

As a sometimes game designer myself, I've been thinking hard about this. What space have I left myself?

I don't know. It's late and I don't have answers. Let's all think about the question. There has to be something there somewhere.


Lessons Learned Week

2022-08-29 22:24:01 PDT

Apparently this is Lessons Learned Week in Blaugust. Blaugust is almost over: just a few more days.

Oh, right. Lessons learned.

  • I might as well give up on genre blogging. The things I want to write about are all over the map. It's going to be that way. I once got kicked from a blog ring about X Development for being too off-topic about X Development. I guess GitAtom needs tags and topic filters. Atom supports tags, so there's that. I'll add it to the GitAtom enhancements list. Holding your breath for anything on that list would be really dangerous.

  • Co-developing blog software is a mixed blessing. Modern freely-available blog platforms are pretty darn sophisticated. Taking a student project to a usable state while trying to do Blaugust was questionable at best. I'm relieved to be a little on top of GitAtom now, but concerned at how much I still want to do. To be fair, without this blog GitAtom would have ended its life stale and forgotten.

  • I am not a social blogger. That's an OK thing not to be. I think it would be silly to blog if I didn't want people to read my content at all. However, there's no urgency and no pressure for me there. I haven't engaged at all on the Blaugust Discord. I will try to do that here at the end, but it's probably too late. I can live with this.

  • Schedule and size are a thing. I think I'll keep blogging for sure, but probably not on a daily schedule. That turns out to be just a little more than I want to do. My goal after this month is 14+ posts per month. I really am going to start building up a queue, saving out some non-time-sensitive posts even though they're ready to go. At some point soon I'll decide on a regular posting schedule: that's a thing I've never done before.

    I want to quit with the tiny "post-for-the-sake-of-posting" posts. I don't like them. It looks like my most comfortable length so far is around 400-500 words. Not long by blog standards, but substantial. I have a few longer posts covering a topic in more depth. I feel like I can knock out 500 words in 20 minutes or so, usually. That's a fine amount of time to spend a few times a week on this hobby.

I have some other aspirations for this blog as well. That's a good topic for a future post. Another 500 words folks can read or not on a random topic on my GitAtom mess. Riveting, I'm sure.


Why Stable Diffusion Might Be The Future Of Blog Illustration

2022-08-29 18:41:24 PDT

I wrote a couple of days ago about my use of DALL-E for blog illustrations. My conclusions weren't so positive.

Today I discovered Stable Diffusion, an open(ish) source project in the style of DALL-E that you can run on your home computer.

Of course I did. The thing has only been available for a few days, and already there are reasonably easy ways to use it. My NVIDIA 2080 is barely powerful enough to run Stable Diffusion's generator: but it works.

Here's my reaction, in parallel to what I wrote previously.

  • On Business Models and Creativity… Being able to run SD at home means I just don't have to think about whether I want to generate an image. It's about 20 seconds per generated image on my box, which is fine.

  • On The Limitations Of 2022 AI… SD is quite comparable to DALL-E. So far it seems to do better in some ways and worse in others.

    The thing everybody's excited about with SD is the unclamping of limits on what can be generated. I guess that matters: I can now ask for a picture of whatever celebrity and get them. Meh.

    One thing that is cool about the interface to SD that I'm using is that it allows "image to image" transformations with text guidance. So starting with my FOB logo image

    FOB Logo

    I asked for it as a Mondrian

    FOB Logo Mondrian

    and as an Edward Hopper

    FOB Logo Hopper

    These were reasonably successful. Other experiments went pretty badly.

  • On GitAtom's Clunkiness And "Ease-Of-Use"… Because of the way the SD interface I'm using locally generates images, I can probably include them here a little faster and easier. But that is offset by the hassle and time of starting up SD in the first place.

  • On The Competition… No change. It's still just an alternative.

So… yeah. Progress marches on too fast to count.

Dinnertime. Peace, y'all.


THE WISE CUP

2022-08-28 02:21:38 PDT

I am posting late today because I spent a long time being involved with THE WISE CUP. I am spelling it that way because it is a 10-letter backronym too convoluted to repeat: I'll just go with TWC from here on out, though.

TWC is an annual event run by our next-door neighbors, for the benefit of the folks on our street and friends and associates thereof. Because we have that kind of neighborhood.

TWC is a treasure-hunt-style game with geographic clues that lead teams of 2-4 people to various landmarks in our small but riche suburban town. At each stop, participants must solve a puzzle of some sort and make some observations. At the end, there is a quiz over the observations. Scoring is based on successful completion plus the quiz score. There are prize baskets for the top three finishers, plus a literal trophy cup made by my neighbor, who is quite crafty and does mosaicing. It's all a great deal of fun.

This is the third year of TWC. The first year, my wife, my sister-in-law and I won, uh, very handily vs eight other teams. Last year I was recovering from surgery during TWC, so my friend and his son filled in for me. It was, uh, even worse. This year I decided to sit out, because it seemed reasonable to give the other teams a chance. The outcome was quite a close call, but, uh, my wife + sister-in-law + son + son's partner won again.

What can you do?

Looking forward to next year's THE WISE CUP.


Why DALL-E Isn't The Future Of Blog Illustration

2022-08-26 17:07:53 PDT

If you've been following this blog (why? how?) you'll know I've been playing with the DALL-E AI art generation tool for blog illustration purposes.

I feel like I'm getting to the end of that experiment. Here's a few thoughts on why.

  • On Business Models and Creativity… In the world of modern computing an awful lot is premised on literally "pay to play". Whether it's games themselves or creative tools, organizations expect to cover their costs as well as a healthy profit by charging. This seems quite reasonable on the face of it.

    The question of whether a creativity service charge is a workable business model is thus premised on whether the chargee values the service enough to pay adequately. I'm grateful that DALL-E gave me a chance to get an answer for free. The bad news is that I am concluding that I do not value DALL-E that much.

    Pay-per-image, first of all, is deadly for me. I've been really careful with my 50 free images, as a gamer-inclined person will be with most any resource. I have skipped asking for illustrations I didn't really "need", and I've never asked for a re-render of an illustration I was unhappy with. I get to a spot where a picture was mandatory, pick the best of the four results, and call it good — regardless of whether I'm really happy with what went down.

    I'd much prefer an unlimited-use (or huge-cap use — say 5000 images annually) periodic fee model. But I'm really skeptical they could charge small enough to make it work for me on that basis. I guess I'd happily pay $10 per year for effectively-unlimited access to DALL-E. I doubt that would even come close to covering my share of the infrastructure costs.

  • On The Limitations Of 2022 AI… The premise of DALL-E and friends is just insanely aggressive. As an AI Professor, I am more than aware. The fact that this bear dances at all is nothing short of astonishing.

    That said, once the astonishment wears off, the holes become pretty apparent. The biggest problem with Magic Neural Nets is that there is little that can be done with small-scale engineering to uncover obvious systemic limitations.

    For example, since its inception (no pun intended) DALL-E has liked to put "symbols that look more or less like text" in its images. It does this the most when it is confused about what is happening. It's "clever," but it isn't something that's OK in an image that is meant to stand on its own.

    No one knows how to fix this, really. I'm not much exaggerating here. OpenAI could retrain the net heavily to get DALL-E to stop doing that. Mostly. But that big a retrain would likely induce other follow-on problems. You can't just go comment out the "generate texty stuff" code — there isn't any. What you'd really like is to get DALL-E to put real, sensible text in the places where it wants to put text. That would be a whole 'nother grand-challenge-grade AI project.

    I look at this, at the failure to faithfully utilize the art styles I've asked for, the confusion about the subject — all of which are completely understandable given the tech involved — and I think "Will I be ok with very slow incremental progress in these areas?" and I feel like the answer is no.

  • On GitAtom's Clunkiness And "Ease-Of-Use"… The friction right now for getting a DALL-E image set up for my blog is surprisingly high. Much of this is GitAtom's fault. GitAtom doesn't have any real intrinsic support for images beyond what is provided by the cmarkgfm Markdown engine I'm using. It's not great. In particular, ensuring that an image is rendered at a reasonable size pretty much eliminates using Markdown-style image links, since the width parameter of the image tag wants to be specified. It's possible that with some CSS magic I could make this smoother, but it would be a big project.

    Further, I can't just drag-and-drop my generated DALL-E image, for several reasons. I want to preserve the query text I used to get the image as the image title, which again means I'm stuck copy-pasting it into an <img> element somehow. I need to get some alt text for visually-impaired readers, which is different from the title because DALL-E is just not that good. Finally, I want the image wrapped to link to my DALL-E credits page when clicked, which means some nested magic.

    I would guess it takes me about 20 minutes to go from "I want a DALL-E image here" to "OK ready to go." That's too long.

  • On The Competition… But if not DALL-E images, where would my blog pictures come from? Hopefully, this is not too much of a mystery. I could do pretty much without pictures altogether, as I basically am doing anyhow. I could use good ol' photos, both freely-available stock photos and photos I have taken myself. I can't really afford to pay artists, but I can create my own art in my own limited primitive way.

    I ran a blog for years and years without DALL-E. I can easily survive without it going forward. "Free is a very good price." —Tom Peterson

It's been a grand experiment. I'm not saying I will never use another DALL-E image. But I'm branching out. Thanks to OpenAI for DALL-E anyhow. It's been an amazing trial.


Allowing Folks To Fail

2022-08-26 16:39:02 PDT

I got into a mild argument with someone I care about today. I had a plan about how to do a thing. Other Person thought it was a really bad plan, with too many risks. After some argument, OP won, and I did it their way. That went fine.

It reminded me, though, of a rule I've been working on following for some time now. Whenever feasible, allow others to fail.

That sounds like a horrible mistake. Let me clarify.

Let us say that I am a teacher (I am), and one of my students has a bad plan. They've found a terrible way to try to achieve an ill-thought-out goal.

As a teacher, I have an immediate obligation to try to help them. I should absolutely try to work with them to clarify their goal. I should absolutely try to help them see the issues with their plan and suggest a better alternative. Perhaps I will even need to discourage them from proceeding at all, because I cannot see a good plan even with their help. So it goes.

But I may get an argument. Or a bunch of argument. The student may be convinced that I am wrong. They may feel that the goal is clear, and that the plan will work in spite of my objections. Of course, it is now my job to persuade them otherwise… or is it?

Premise: People learn more from their failures than they learn from avoiding failure. Real consequences are more real than hypothetical ones.

Premise: I could be wrong. After all, I may be more expert than a student, but I'm far, far from omniscient. Maybe the terrible thing I've pointed out won't happen. Maybe the student will be really happy in their goal state.

SO I should always state my objections and concerns mildly, as observations and estimates. If my advice is ignored, I should default to letting the advisee go on. One of two good things will result: the advisee will learn, or the advisee will be right. In either case I have won and they have won.

The exception to this default, of course, is about consequences of failure. If I can reliably determine that a particular failure is both actually conceivable and sufficiently devastating, I need to do everything in my power to stop that. For example, dead advisees won't have learned anything; those who have ruined their lives won't appreciate the price of learning.

The good news is that if I have presented as a risk-tolerant advisor — somebody who allows advisees to fail — my occasional strong opposition will be taken much more seriously. Advisees will know it's coming from a place of goodwill and trust, not just an ego trip or argumentativeness on my part.

So I try to practice caution and humility. I won't let people go into failure blind, but I won't close most doors in front of them either.

I guess what I'm saying is that OP should have let me fail. Oh well. I was reminded of this lesson, and everything came out fine. So it goes.


Atomized

2022-08-26 13:24:55 PDT

OK, so after all that talking and caterwauling and whatever, if you look at the upper-right corner of your browser you should see a Feed Icon. If you paste the address there into your Feed Reader as per usual, you should be experiencing the joys of my new Atom feed.

The process of getting this to beta was as involved as getting a major feature to beta gets. I ended up refactoring most of the GitAtom codebase. This will make future improvements easier, but yeesh. In the process of getting the feed going, I closed some other critical issues.

There was also the usual yak-shaving. Notably, I wanted to include the Feed Icon as, well, an icon. This led to the discovery of the previous-decade's initiative for a standard Feed Icon, which I would have thought would have led to a freely-licensed Feed Icon to use. Sadly, I can't figure out the licensing terms for the "standard" icons and whether they license both copyright and trademark: it all seems to be under fairly fancy open source licenses. I gave up, and drew my own CC0 Feed Icons. Hopefully I won't have trademark issues with them — seems unlikely.

There's still likely some pretty bad bugs to be fixed here. Some things are not yet tested, and nothing is well-tested. Still, nice to be able to syndicate my site at all.


Staying Power

2022-08-24 23:58:35 PDT

Sometimes my motivation to blog is as simple as not giving up.

The last couple of days have been weird. I've been made tired and messed up by them.

Still, how hard is it to type a couple of sentences here? I'm reminded of the biting lyric by the late 1980s Christian songwriter Keith Green: "Jesus rose from the grave, and you can't even get out of bed."

So I slog out some typing. I'm still a day behind. But it's better than two days behind.

Talk to you again soon.


Almost At Atom

2022-08-22 22:31:25 PDT

I said I was going to add an Atom Feed to GitAtom yesterday. And by the end of today, I almost have.

I mean, teknicully I akshually have an Atom feed now. It just doesn't do quite what I want so I am refactoring and rewriting part of it, and there are a number of bugs that it has exposed that should still maybe be squashed.

My division of labor so far, as estimated off-the-cuff:

  • 3 hours: acquiring, reading and understanding various technical specifications around Atom, XML, MIME types, etc, to get the implementation standards-conformant(ish).

  • 3 hours: acquiring, reading and understanding a bunch of Python and library stuff needed to get the implementation right.

  • 3 hours: refactoring the existing codebase into some kind of usable shape.

  • 3 hours: writing new actual code for the Atom feed.

  • 2 hours: finding and fixing bugs related to the implementation.

  • 2 hours: building a dev instance of GitAtom and some infrastructure to auto-update it.

  • 2 hours: miscellaneous, including maintaining the GitAtom repo and issues, prototyping stuff as needed, debugging, etc.

So roughly 18 hours in two days, of which about 3 were the actual implementation of the actual feature. I'm not quite done yet, but the proporations should stay about the same.

Am I motivated to program like this because I'm blogging, or motivated to blog about programming? I dunno.

Starting to burn out on this whole fire. Must finish soon.


Oops, I Forgot

2022-08-21 13:05:03 PDT

Yesterday I talked about a really great idea that I needed to share. Today I've forgotten which idea it was.

Great.

It's now "Staying Motivated Week" in Blaugust. It couldn't be more timely. Here's what's keeping me motivated in blogging right now:

  • Getting GitAtom into a truly usable state. I have a million things to do today, but instead I'm going to start by finally adding a feed to the software.

  • Getting back into the swing of blogging. I enjoy blogging quite a bit while actually doing it. I need to remind myself of that by repetition. Humans are not one-trial learners.

  • Getting things written down. There's an old adage in academia, where I live, that a thing isn't real until you write it down. It's a hard adage for me to live by.

    I have a ton of content and content ideas that I want to be up on the web in some semi-persistent form. A blog is kind of a perfect way to do that: low effort, low bar for quality, but still a better result than carrying ideas in my head and telling them to my friends.

I'm going to get the future post ideas queue going again today. It will be full of half-started blog entries. At least it will remind me what my blogging priorities are.

I can't believe I forgot.


Can't Goodpost Tonight

2022-08-20 21:54:48 PDT

I have a great blog post idea. It's a topic I have talked about a lot in the past, and it deserves to be here.

What I don't have is the will to give the post the 20 minutes of careful effort it really deserves. It's an idea that has to be got right and expressed right to be of value.

I'm tired. You get this post instead. I can't promise that you will get the goodpost someday soon: I'll try.

I think this is a common blogging thing, really. The bloggers I've followed express it all the time. With a daily blog, pacing is everything. A recurring theme on my blog is that we are all human, that I am especially human, and that humans need to respect their limitations. I envy the people who make everything they do great. I don't know how they do it. I know that will never be me.

So enjoy this meta-post. It's what I have to give. Hope you'll "tune in" (wow I'm old) going forward and see me at my best. Hope my best is OK. I'll settle for OK.


Counting Is Hard

2022-08-20 21:47:18 PDT

Turns out my last post contains an off-by-one error. I was only three posts behind.

This is one of the most common errors in computing: a fact surprising to non-computingists, I think. Computers are supposed to be really good at counting things. They are. The problem is that we humans need to let the computer do the counting. When we try it ourselves, we inevitably get close but no cigar.

Turns out that the manual blog-post-numbering I was doing as I manually made Markdown files for my post was off by a bit here and there. Fixing it turned into a half-hour mess of renaming files and editing their contents to make GitAtom happy again.

The obvious solution is to fix my GitAtom blog software to do post numbering for me. That's hard, and I'll have to think about (a) what I want to happen, and (b) how to make it happen in the Python codebase. Again, maybe (a) is the surprising part: it turns out that figuring out exactly what we want the computer to do is arguably the hardest part of software development.

The computer is a real-life Literal Genie. The computer will (software bugs notwithstanding) do the most annoying version of exactly what we tell it to do. With great power comes great failure, mostly.

A Literal Genie maliciously granting a wish.

For now, I'll just wade on manually and try to avoid mistakes. Like that ever worked.


I'm A Steamed Ham, But…

2022-08-20 21:16:15 PDT

Steamed Hams

I got my Amateur Radio Technician license about 20 years ago, testing in along with a very good friend. The FCC knows me as KD7SQH, but you probably do not, since I've barely done any ham radio since then. I got the license for a purpose — to communicate in the Black Rock Desert during a rocket launch event, and once it served its purpose I set it aside.

I'm now getting involved in an amateur radio thing, and so I decided to upgrade to my General License. A couple of Sundays ago my friend and I went down and passed that test: my friend went ahead and passed the Amateur Extra test as well. I will be taking that test shortly with every expectation of passing.

With the upgrade, the next logical thing to do is to buy a real radio setup for my home. My hand-held transceiver worked for its purpose, but long-distance stuff requires more than an HT.

The sad truth is that when I think about the cost and time commitment of going there, I've pretty much decided to forego this plan for now. I'm somewhat budget-constrained at the moment: I'm also constrained by the hundred-foot fir trees surrounding my house, which while beautiful and wonderful make for unique setup challenges if I'm to get anywhere.

The fact of the matter is that the last thing I need in my life right now is to add another half-assed hobby to the dozens of those I already have. I may try participating in one of my local Amateur Radio Emergency Service groups in some capacity — that is a fine and noble endeavor. But I wouldn't need equipment for that right away: I can wait and see what I need and what I want to do.

Oh for the funds and time. Maybe someday. Maybe.


I've Fallen Behind, and I Can't Catch Up

2022-08-20 21:16:15 PDT

For the last few days, my life has been consumed by doing final setup and then leading the Rust-Edu Workshop. I'm really happy with how it turned out. Who knew that inviting a bunch of brilliant, creative and really friendly people to work together on a common interest would go so well? As a completely unbiased observer, I'd give the event a 9.8/10: the 0.2 was all me.

That said, it looks like I am now four posts behind this Blaugust. My grand ambition of maintaining a queue failed early: it's now just a struggle to get back to parity again.

Please look forward to three extremely short blog posts, even by my standards, as I try to maintain some semblance of being able to blog "regularly."

I am exhausted and suffering from stress recovery, but I'll be fine in a bit. Thank you for your patience.


The Remarkable Work Of Bill Wurtz

2022-08-17 00:03:26 PDT

Bill Wurtz is a guy on YouTube.

Bill Wurtz is a remarkable creator on YouTube.

Bill Wurtz is most famous for history of the entire world, i guess (mildly NSFW). It is rightly celebrated.

Bill Wurtz makes short music videos like old macdonald.

Bill Wurtz more commonly makes "normal length" music videos like Mount St. Helens is about to Blow Up, which is perhaps my favorite.

Bill Wurtz writes all of his own music, performs all his own instruments, does all his own animation.

Bill Wurtz is an international treasure.

Bill Wurtz is a favorite of Charles Cornell.

Bill Wurtz may not be for you. If not, I don't understand why.

I really like Bill Wurtz.


In Before It Was Cool: Appreciating Webcomic Creators

2022-08-15 22:18:47 PDT

Let's start this with a note I posted on an obscure Discord back in February…

In 2006 I started following this obscure webcomic that finished in 2015. It was a cute romantic comedy: not the kind of thing I usually read, but it was fun. Last week I got an update from them to check out their upcoming movie trailer. I thought it was a joke at first, but nope, it was real.

That was my introduction to the AAA title linked above. I ended up really enjoying the movie and can recommend it. It was a weirdly successful cross between a Hallmark Channel movie and an oddball webcomic.


I've been following webcomics since the web became a thing. Arguably before that: I used to follow Dilbert on Usenet through the Brad Templeton's Clarinet service back before Scott Adams bailed on the fanbase that made him. (I suggested "a clueless intern" to Adams as a character in an email a month or two before Asok entered the strip. Probably just a coincidence…)

I currently follow about 80 webcomics using http://piperka.net, although most of those are not currently active. A couple of my student friends created http://comic-rocket.com/ with a bit of help from me: one of them got me into webcomics on a much bigger scale 20 years ago.

So all this hipster cred-building is my way of saying…

Thank you. Thank you to the creators that made and continue to make webcomics. You folks are amazing. I have been but a happy parasite, for the most part, on your success.

Thank you. Thank you to the webcomic tool and infrastructure creators that have made my webcomic experience so smooth and special. Some of you are my friends. All of you have my respect.


Back when I had a full-time blog before, I'd post my current webcomic list every few years. Probably time to do that again. This is edited both for taste and to show only currently-running strips. It's enough.

I haven't included links, because exporting them is a bit troublesome right now. Again, you can type titles at Piperka or Comic Rocket.

  • The Bouletcorp
  • Dead Winter
  • Dicebox
  • Dinosaur Comics
  • Existential Comics
  • Gunnerkrig Court
  • Guthrum
  • Magefront
  • The Order of the Stick
  • Outsider
  • Skin Deep
  • Spacetrawler
  • Terminal Lance
  • The Wandering Ones
  • Widdershins
  • XKCD


Creative Appreciation Week

2022-08-14 23:26:15 PDT

I sat down tonight to figure out enough Bevy to be able to participate in the upcoming Bevy Game Jam.

I failed. I failed to motivate myself sufficiently. Looks like it would probably take me 10 or 20 hours to get to where I'm comfortable with the framework, and I just don't feel like spending that right now.

It made me think, here in Blaugust Creative Appreciation Week, about the hells of complexity and weirdness that modern digital creators put themselves through to get stuff built. When I was a boy, the bar for creating on a computer was so low, and any creative output was highly regarded. Nothing is easy anymore, and expectations are so high now.

Dozens of great games will be built for the Bevy Game Jam this year. Each one will be many thousands of lines of clever code, with crazy amounts of art, music, modeling and other creative assets.

Thank you, those people! Wish I could be one of you. Maybe someday soon.


Reconstructing My Blogging History

2022-08-14 00:05:15 PDT

For many years I had a primary blog I self-hosted using the Drupal CMS. It was called "Project Resolution" because it started with a New Year's Resolution, and "FOB" for "Friends of Bart" — a name with quite a bit of history.

My blog collapsed not so much because of lack of will on my part as because the underlying blog framework collapsed. I got wedged in the state where I couldn't keep blogging with the existing Drupal because my Drupal version had become too stale (security holes and software rot), couldn't manage to upgrade Drupal to a newer version in spite of extensive efforts, and couldn't manage to extract my content and move it to a new platform in spite of efforts that included writing a bunch of bespoke code for that purpose. All of this provided the impetus for the creation of the GitAtom platform I am using now.

I did manage to dig much of the content out of Drupal as HTML or Markdown, but haven't yet posted it anywhere. I should do this in the next day or two so that I know what's up.

I have had other blogs as well. I had a Ghost instance up to blog EVE Online stuff; I'm not even sure myself what the current status of that content is. I think I blogged there for about a year around 2018? I have had various blogs for Google Summer of Code back when I was participating there, although they were very light on content.

Notably, I have a super-secret blog. As far as I know, only one very close friend knows of it. It doesn't have much content, but it contains things that were on the one hand sensitive enough that I was afraid to have them associated with me (especially pre-tenure), but on the other ok enough that it wouldn't be an absolute disaster if it got out.

Cartoon ghost with nonsense caption.

Things that I decided I didn't want on the Internet at all are squirreled away in that directory I talked about last post. Thoughts that must never, ever be on the Internet are not on any computer anywhere: I'm not silly.

You can also find many years of my comments on Reddit, or even dig my old Usenet days out of the Usenet archives to a certain extent.

So… yeah. I obviously like to write stuff and publish it. I'm not sure why I let blogging go for so long. Good to be back.


Stuff Not Blogged

2022-08-13 00:02:35 PDT

A future blog post here will cover — as thoroughly as I can manage — my old and dormant blogs. I have had a bunch.

I'm too tired to do a post that detailed and careful tonight. Instead, I want to talk about a weird side thing I've been doing.

One thing I learned long ago is to carefully read anything I am about to post on the Interwebs to make sure it actually belongs there. I think think twice and then often cut once. Since 2006, I have saved some 440 files, 109,000 words of text that I wrote and then "threw away". Most anything complex is there.

109,000 words is a lot. I have no idea how it piled up like that.

  • The longest single piece, an Ingress leveling guide written in HTML in 2013, is only about 3800 words, even using an inflated notion of word length.

  • Nearly the same size is the second-place piece: a transcript of a conversation on Hangouts with my friend Sergey in September 2014 while his hometown of Mariupol, Ukraine was being shelled by Russians. Dammit. I hope Sergey is OK in the current conflict. I know he got out of Mariupol years ago, but last I heard his parents were still there. So scary; so sad.

  • The third-place piece is a PDF draft, of all things, in which I rant in 2008 about why I am quitting the GPL. Spoiler alert: I calmed down a bit and didn't actually quite quit using the GPL. That said, I still stand by most of my unpublished writing.

  • At the other end of the spectrum, a lot of these pieces are just little snippets like this from August 2016:

    I know, right? It's been a good seven years since the SLC Police charged a gay couple with public kissing.

    Anyway, that could have happened anywhere in the US in 2009. Right?

    ...Right?

    I have no recollection what prompted me to write that. It was probably in response to some Reddit thing. Anyhow, I clipped it instead of posting it, and there it is.

I keep all of this in a directory called blog. The intent is that I go back and mine it for future blog posts.

Someday I'll do that. For today, just thought I'd point out what might be a bit of a novel approach.


On Blogs, Blog Commenting, and GitAtom

2022-08-12 00:13:20 PDT

The problem of commenting on blogs is bigger than many non-bloggers realize, I think.

I wrote a blog for many years in the now-distant past. My blog collapsed for technical reasons that I will cover in a future post. (I have written many blogs. This was just the big one.)

Perhaps the largest non-technical problem I had was dealing with blog comment spam. I got a high enough pagerank back then that I'd get on the average of a spam comment or two a day. Real comments were pretty rare except on one vaguely viral post.

The spam I was seeing looked like it had been generated by an extremely low-paid human. I had enough captchas and whatnot in place to make it hard-ish for a bot to comment, and the comment content seemed to be vaguely customized.

For me as a casual blogger this constant drip of spam was painful. I eventually shut off comments. Now I'm up again on GitAtom, which lacks any comment facilities. What should I do?

My cousin uses some free version of Disqus for blog comments. I could conceivably set that up. I have no idea how well it would cut the spam down; I have mixed feelings about Disqus itself. There are various open source alternatives around. I could look into those, I guess.

There's various friendzone / pre-approval things I could do. I really do like the world to be able to legit comment though.

I've thought about taking advantage of Gmail's decent spam filtering. I could request that comments be sent by email to some dedicated Gmail account, then either manually or automatically forward them to GitAtom if they missed the filter. A lot of work, but might be worth it.

What do you think? Post your answer below… Nah, just kidding. You can always email me if you like. I'll try to pass on the good stuff here.


A Brief Introduction

2022-08-11 01:19:54 PDT

Apparently this is the week in Blaugust where we are supposed to introduce ourselves. Indeed, this week is perhaps almost over.

I'm dead tired and need to go to sleep. I will introduce myself as briefly as possible: no stories, no extra stuff.

I can do this, I know I can.


I'm Bart Massey. I've lived most of my life in Oregon, except for a couple of years in Tennessee when I was in early grade school. I spent the first part of my life in Portland, and after the Tennessee thing ended up in North Bend. Upon graduating high school I spent a year at Oregon State University, then four years at Reed College, graduating with a physics degree in '87. I spent two years working full-time at Tektronix, doing UNIX admin, open source tools and digital signal processing. Then I went back to grad school at University of Oregon, where I got my thesis MS CS in programming language implementation doing concurrent logic programming, then my PhD CS doing artifical intelligence. Slightly before graduation I got a job at Portland State University, where I've been a CS prof for over 20 years now. If you do the math, you'll find I'm 58.

I have a loving wife who I've been with continuously since high school, and one adult son who works as a software engineer here in Portland.

My hobbies include reading, programming, making music (piano and a little guitar and voice), playing poker, and too many other things to list. I am low A Tier at trivia and worthless at athletics and related pursuits. I am a poor follower of Jesus, but not a participant in any religion; I am not the least bit evangelical.

I like to explore and create. I am more than usually lazy and disorganized, with few time management skills.


That is about as small a wall of text as I can manage for now. I expect I'll be telling you more regularly.


Building A Queue For Blaugust

2022-08-09 22:49:04 PDT

I restarted blogging as part of Blaugust. The soft goal of Blaugust is to blog every day during the month of August. That is an achievable schedule for me; nonetheless, I already fell behind this month, though I have now caught up.

I am also working ahead a bit. The conventional solution to the problem of regularity in the web publishing world is to build a "queue" or "buffer" of upcoming posts. A buffer famously cannot match rates, but is great at smoothing irregularities. Readers like regular posts, while writers like irregular writing.

GitAtom doesn't currently have any explicit support for queueing. Because of the way the platform works, it is straightforward to write posts ahead and put them aside for later. This is the main thing that is needed. However, the process of pulling queue entries and posting them should arguably be automated based on intended posting frequency. If I don't have the time or will to write a post on a given day, I probably also don't have the time or will to interact with my blog at all that day.

Sigh. Added to the issue list.


Blogging Blog Framework Development

2022-08-08 10:35:01 PDT

When I made the decision to blog on GitAtom a week ago, I knew that dogfooding GitAtom would be both a great way to improve GitAtom and a giant pain. Both the improvement and the pain have exceeded my expectations. I've posted a half-dozen new GitAtom issues and closed a bunch of them. I've engaged with some "hard" issues and emerged, if not victorious, at least kind of satisfied.

Hopefully FOB4 has become easier to read as the result of my efforts. It has also become easier to blog with, for what that's worth. I'm afriad that FOB4/GitAtom remains more creator-friendly than reader-friendly.

Adding an Atom feed is the penultimate can't-live-without-it reader improvement on my list. I will try to find time in my currently-insane schedule (more because of my laziness and disorganization than because I have more than a person should be able to do) to get a feed up over the next few days.

(The ultimate must-have feature is allowing some kind of commenting. More about that in a future blog post.)

Sadly, I think the whole GitAtom hairball is due for some fundamental rethinking. I don't want to do that rethinking — I just want to blog. I don't want to document the GitAtom architecture extensively, re-architect it, document that, and re-implement/refactor big pieces.

I would switch blog software in a second if someone told me of the right platform. Unfortunately, I don't know of anything super-close to what GitAtom provides for blogging.

Such are the woes of a geek who blogs, I guess. Thanks for listening.


General License

2022-08-08 00:28:44 PDT

Passed my Amateur Radio General Class examination today. (My friend Keith passed both General and Extra. I'll do extra soon too.)

I didn't do as well as I hoped on the test. Ah well, passing is passing.

Should be doing voice on HF reasonably soon.


Scoring Jeopardy!

2022-08-07 23:29:19 PDT

At RustConf Friday I had dinner with a bunch of really cool people. I especially enjoyed talking to a couple that was seated with me; we chatted for several hours. One was a tech geek like myself (except smarter and harder working, I suspect). The other was a school nurse in a rough major city. You don't get to meet IRL heroes that often. It seemed like we had a lot of common interests and topics…

Ah, yes. I was talking about Jeopardy!, wasn't I? (The bang [!] is part of the name, if you didn't know. Game shows.) Somehow the topic came up, and I mentioned my "scoring system" for playing along at home.

There is a standard scoring system used by those aspiring to become Jeopardy! contestants. Coryat Scoring is a system developed for comparing contestant skill. Reportedly many home players try to get some minimum average Coryat score before trying to get on the show.

I don't have any strong ambition to be a Jeopardy! contestant. It would be pretty cool, but I'm just not willing to put in the work. For me, trivia is supposed to be relaxing fun. For someone aspiring to Jeopardy! greatness, there's not so much fun to be had.

Unfortunately, Jeopardy! recycles a bunch of topics. A lot. See how many episodes you go without seeing one or more of the following:

  • A question that is easy if you have memorized the US Presidents and Vice Presidents, their sequence numbers, and their dates in office.

  • A question that requires you to know the capitols of the 50 US states, or vice-versa.

  • A question that requires you to distinguish between Luxembourg, Lichtenstein, and Monaco.

  • A question about the life and works of Jane Austen and/or the various Brontë sisters.

  • A question involving Robert Frost or Robert Burns.

  • A question asking about a European mountain range.

I could go on (oh could I), but you get the idea. To be solid at Jeopardy, it's not enough to just know actual trivia. You need to first survey this body of knowledge by digging through gobs of old game records and trying to see what the "Clue Crew" (who writes the questions) is up to. You then need to memorize quite a bit of information to cover this gap. Sounds like a lot of work for a lazy person like me.

What I take pride in is my knowledge of actual "trivia trivia". The kind of stuff that you would never be able to predict or prepare for by study; you just have to know. I know what a finial is, what Matthias Rust did, what Hanlon's Razor says and who (probably) coined it. I didn't learn these things by studying, but by learning and remembering.

Sooo… Here's how I score Jeopardy! when playing at home:

  • I may only score on questions that are not correctly answered by the in-game contestants. This includes regular questions not correctly answered by any of the three, and Daily Double questions not correctly answered by the contestant tasked.

  • I give myself one point for each such question that I get correct. I do not subtract for those I get wrong: I allow myself to guess freely.

  • If I answer before a player attempts a question, I may change my answer after they fail.

  • Final Jeopardy is scored separately. I give myself an "Ace" if I get Final Jeopardy and the other players do not.

It is very rare that I score zero in a game. I would say my average is around 3-4. The other night I scored 10 plus an Ace.

Am I proud of that? Of course I am. But I'm also concerned. The quality of contestants had definitely seemed to slip during the last two years, for obvious reasons. But I was expecting it to come back, and with a few notable exceptions, I don't feel like it has. The clues seem like they're getting easier, and yet we still seem to get a lot more games with a lot of unanswered or incorrectly-answered questions than we did a few years ago.

The quality of clue-writing has also seemed to me to be declining lately. It is much more often that a clue seems to be ambiguously or just poorly worded. It is much more often that my wife and I stare at a wall-of-text clue hoping to just understand what the question is. For a while, there was a very strong reliance on things not interestingly related to trivia questions (don't get me started on Celebrity Before and After), although thankfully it seems to be winding down a bit.

Anyhoowww… I was talking with this nice person at the dinner and mentioned my scoring system and she looked at me astonished and said "I though I was the only one who scored like that!"

So that was cool.

A: It's the GOAT of gameshows, but also a course of constant friction and confusion: dangerous people on a dangerous show.

Q: ?


A Token Post: Rust-Edu

2022-08-07 00:19:18 PDT

So I've had my last two days completely consumed by RustConf 2022. In particular, I'm somehow leading something called Rust-Edu which is intended to get the Rust programming language into academia.

tl;dr: I've already missed a Blaugust blog post.

This is a blog post to backfill yesterday's void. Tomorrow I will write one to fill today's void, and another for tomorrow.

So it goes.


Moving Forward With FOB4

2022-08-04 18:39:02 PDT

Still fighting the technical demons here, but while I do that I thought it would be good to say what this blog should be about…

  • Technology: I am a technologist — a computer scientist, software developer, and hobbyist. I sometimes know things, and want to share them.

  • Creativity: I like to make and build interesting things — writing, music, electronics, etc. Sharing that seems fun too.

  • Opinion: As someone voted Most Opinionated in my High School class (seriously), I sometimes want to share my opinions with the world.

  • Miscellaneous: So much miscellaneous.

I hope you will enjoy some of it once I get good and rolling.


On DIY-ing A Blog Site

2022-08-03 19:53:55 PDT

This week my posts are kind of obsessed with process. Sorry: it's a boring way to start Blaugust. But it is what it is: I need to understand how to make my blogging process more permanent, and I'd like to keep a record of successes and failures.

So… much of yesterday was spent fixing GitAtom issues. I closed an issue or two and fixed some minor bugs. This site seems usable now for blogging, if a little fragile and weird.

I'm not yet sure whether choosing GitAtom was the right choice. Something like Ghost that I have used in the past might have been better. It offers many of the advantages of GitAtom, along with a fully-developed and polished experience.

GitAtom offers two things that I don't know how to get otherwise:

  • Low-friction Git-backed Markdown blogging with remote publishing. Lots of systems offer some subset of these features. I know of none that offers the whole package.

  • Absolute zero lock-in. By maintaining blog content in 100% standard open formats, and code as fully open-source extremely simple Python, GitAtom ensures that both repairing the existing codebase and migrating content elsewhere are easily achievable.

    I have built code to extricate my old blog content from the clutches of an ancient version of Drupal when I could no longer maintain or upgrade my site. blog-escape is incomplete and ugly, and does a poor job. I don't want that experience again.

What GitAtom doesn't offer is an Atom feed.

Yes, I know. Being easily able to provide an Atom feed was one of the big selling points of storing all the content in Atom syndication format. The code never got written. The Atom feed files being saved by GitAtom appear not to be RFC compliant, which will need to be fixed before trying to generate a feed from them.

So now I have two projects.

  1. Blog daily for Blaugust.
  2. Fix my blogging tool — in particular by adding an Atom feed.

Will admit to discouragement, but it has to be done. Onward.

P.S. — While trying to find blog-escape above I Googled "bartmassey blog rescue". I got a hit for this book, which confused me mightily for a moment. Needless to say, I am not the Bart Massey who wrote this book with an oddly relevant keyword.

The interwebs are weird.


A History Of FOB

2022-08-02 19:49:47 PDT

A couple of decades ago, I had a bunch of students who had all done substantial research work: I think about eight of them? One or two MS and a bunch of undergrads. The opportunity came up for the students to present at a University-wide student research Poster Contest. I generally don't like Poster Sessions; I think they're kind of a bad cross between a presentation and an article. But I thought it would be fun to flood the thing, so I brought the whole bunch of 'em — each with a lovely poster. (Coincidentally, so did one of our Physics profs. It was kind of hilarious, actually. Between the two of us I think we had about half the presenters.)

Anyway, if you're going to bring a team, you need a team uniform. So I had hats made. I designed a "Friends Of Bart" FOB logo and Keith Packard and I rendered it in SVG using our Nickle programming language.

FOB Logo

We looked ever so stylish.

Cartoon of a man labelled Bill with brown hair and glasses wearing a backwards bill cap.

That day the FOB "brand" was born. I've been using it ever since.


DALL-E Images On This Site

2022-08-02 18:49:47 PDT

I have been using DALL-E to generate some of the images for this site. These images are captioned with the prompt I gave DALL-E to produce them: I then selected the best of the four given choices.

Many thanks to OpenAI for the Beta DALL-E access. Hope this will be fun for everyone.


New Blaugust, New Blog

2022-08-01 18:20:33 PDT

I decided to take a shot at Blaugust 2022 this August. Sadly, I don't have a blogging tool I'm really happy with at this point.

I'm going to try to dogfood GitAtom as my blogging tool. GitAtom was written by my students to make Keith Packard and I happy. Sadly, it wasn't quite completed, and needs quite a lot of work. Nonetheless, I'm going to see if it can work for the month, and fix it as I go.

More tomorrow. Wish me luck!


[ Created with GitAtom ]