The speed of technology

Hardware

Almost two decades ago now humanity reached the milestone of having more data stored digitally than in analogue form. This is breathtaking not just for the scale of information, but the speed with which the transition occurred. Humans have had records in written and spoken forms for thousands of years, yet the integrated circuit was invented in some of our lifetimes.

While I’d argue this shift has overall been a net positive, we’re still grossly ill-prepared for all the implications. We’re seeing this manifest in politics, journalism, science, media… almost every field of human endeavour the more I think about it. With this technology comes the promise of solving or helping with a lot of the world’s problems, but it introduces additional challenges and twists on existing problems, and has been responsible for creating new ones.

I remember reading that cars are dangerous because our brains lack sufficient bandwidth to process stimuli coming at us any faster than running speed. I’m wondering if there’s an analogue—heh—there about technology. Has:

  • our progress been so rapid, and
  • the machines so quick at disseminating information

…that we’re simply not equipped to handle it?

We need artificially-smooth surfaces, lane markings, traffic lights, consistent speed limits, and training to remove as much uncertainty from operating these wheeled death traps as possible. What do we need to do to make technology like this, without hobbling or removing the power with which we’ve derived so much benefit?


Borders around Burundi and Rwanda

Thoughts

As I’ve written about here before, I loved reading atlasus—atlasii?—as a kid, but my topographic knowledge of central Africa is inexcusibly poor. I decided 2020 would be the year I’d learn more about African geography, particularly the Equatorial region.

I didn’t realise Burundi was so small at 27,834 km², which is much closer to Rwanda’s 26,338 km² than I realised. The image below is from OpenStreetMap:


Sleep patterns and home isolation

Thoughts

I love mornings. Provided I got sufficient sleep the previous night, my body clock prods me 07:00 to shower and go to a coffee shop. Or sit on Clara’s and my little apartment balcony with an Aeropress and a coffee grinder as I do now.

This always interested me, because most people I know have a preference for sleeping in and staying up late. There was a time in my early 20s when I got a ton of stuff done between 22–23:00, but I still had to go to sleep immediately after. My dad’s new partner talks about how she feels she has energy in the evening until suddenly it drops off a cliff and she feels like a zombie; I feel the same way.

There were practical reasons for getting up early in Singapore. You avoided some of the morning MRT commute crush, and on weekends you could go for hikes in Bukit Timah, Fort Canning, or the Botanic Gardens before the humidity set in. For introverts, you feel like you have more of the space to yourself before everyone else swoops in. And in Sydney, provided your country isn’t on fire, you’re greeted with some of the most beautiful morning skies in the world as you sit there with your laptop, a book, or the Saturday Paper.

All of this is predicated on one thing: exercise. I can’t just wake up early and sit at my desk, or I feel groggy. I need fresh air and movement. This means pacing up and down our balcony a few dozen times while we’re in this current situation, but then I can sit down outside and feel fine beyond perhaps a little embarrassment at the people watching me from the apartment building across from us. That’s fine, I’ve seen what they get up to.


This SCO module contains...

Software
# This Module contains Proprietary Information of the Santa Cruz
# Operation, Inc., and should be treated as Confidential.

Whoops.


.dotfile management

Software

One of the defining feautures of *nix is that all your user-specific configuraiton is contained in dotfiles in your home directory. With a bit of care to make them POSIX or portable, one could use the same dotfiles on FreeBSD, macOS, illumos/Solaris, and Linux.

A lot of us keep our dotfiles in repos; partly to version control them, but also because it makes installing them on a new system super easy. I’m sure everyone has a flavour of the following script somewhere:

#!/bin/sh
    
linkneil() {
    if [ -f ~/.$1 ]; then
        echo "$1 already exists."
    else
        ln -s $(pwd)/$1 ~/.$1
        echo "Linked $1, like a boss."
    fi
}
    
linkneil kshrc
linkneil profile
linkneil oksh_completions
linkneil vimrc
linkneil ...
    
case $(uname) in
    Darwin)
        linkneil shuttle.json ;;
    NetBSD)
        linkneil cvsup ;;
esac

The linkneil function creates a symlink to the corresponding file in the repo folder where the script is run. It warns about files that are already there, so I don’t clobber existing files inadvertently. Then the case statement adds OS-specific files.

An adventurous friend of mine back in the day had his git repo set to his home directory, and used .gitignore with a wildcard, then listed the specific dotfiles he was after. He claimed this made things easier by not having symlinks everywhere, but he soon realised it was way more trouble than it’s worth. That friend was me, but I’m referring to myself in the third person so people don’t judge me.


pngcrush’s loco crush option

Software

Every PNG image on this blog goes through ImageMagick to create srcset versions, then pngcrush to losslessly optimise them. The savings are routinely upwards of 40% for the same visuals, or 40pc if I go by some bizarre modern style guides.

I was reviewing my dotfile aliases, like a gentleman, and noticed pngcrush had an option I hadn’t noticed before:

-loco ("loco crush" truecolor PNGs)

From the help file:

Make the file more compressible by performing a lossless, reversible, color transformation. The resulting file is a MNG, not a PNG, and should be given the “.mng” file extension. The “loco” option has no effect on grayscale or indexed-color PNG files.

I thought it may have been a neural network trained on locomotives. Trained on locomotives? That was some top-shelf humour.

Portable Network Graphics Now!


Booting FreeBSD off the HPE MicroServer Gen8 ODD SATA port

Hardware

My small homelab post generated a ton of questions and comments, most of them specific to running FreeBSD on the HP MicroServer. I’ll try and answer these over the coming week.

Josh Paxton emailed to ask how I got FreeBSD booting on it, given the unconventional booting limitations of the hardware. I thought I wrote about it a few years ago, but maybe it’s on my proverbial draft heap. If you’re impatient, the script is in my lunchbox.

For some background, the Gen8 MicroServer has a SATA backplane for four LFF drives, and another SATA port intended for a slim optical drive as you can see in the image. Most of us use it for an SSD instead, so we can keep the primary drive bays for storage. The problem is, that extra SATA port isn’t bootable when using the server in ACPI mode if there are any other SATA drives in the system. It’s the only thing about these otherwise-capable boxes that drives me crazy.

The first approach is to enable the onboard RAID controller, create a logical drive group consisting of just the SSD, and set it bootable. This worked with Windows Server during a brief experiment, but it kernel panics every BSD within seconds of clearing their boot loaders. I’d also prefer not hainvg the RAID controller between me and drives if I don’t need it.

The alternative is to install FreeBSD on the extra SSD, then install a bootloader on a USB key that you can leave attached to the internal USB port, or an external one.

After installing FreeBSD but before restarting, drop to a shell when offered to. Assuming your new boot key is da1, clear whatever partitions you have first, then format it:

# gpart destroy -F da1
# gpart create -s GPT da1

Install the bootloader:

# gpart bootcode -b /boot/boot0 da1

Then assuming all four LFF drive bays are populated, configure the bootloader with the fifth (SSD) drive, and set as the default boot selection:

# boot0cfg -Bv -o setdrv -d 0x84 -s 5 da1

0x84 refers to the fifth BIOS drive. Use these if you have others:

  • 0x80 – for just the SSD (though I suppose that’s redundant)
  • 0x81 – one other drive installed
  • 0x82 – two other drives installed
  • 0x83 – three other drives isntalled
  • 0x84 – all four other drives installed

The flags are:

-B         install FreeBSD's boot0 manager
-v         like my blog, be verbose
-o setdrv  refer to the disk by BIOS drive number
-d         BIOS drive number
-s 5       boot from second disk; in this case the SSD 

There are a few different ways you could do this, but this has worked for me for years now.

The main limitation here is if you add more internal drives later, you’ll need to update your boot loader with a revised address. If you forget to, you can always boot the FreeBSD installer and drop to a shell to update again. Chances are though you already have all the drives populated; it’s most of the point of having these little boxes.

If your MicroServer still refuses to boot, as one of mine did, attach the bootable USB key to one of the external USB 2.0 ports instead. I might just have a flaky internal port on one of mine, but it worked fine in my other one here, and in the unit I keep up at my dad’s place which I just realised I forgot to add to my homelab post.

Thanks to rickvanderzwet on the FreeBSD Forums for pointing this out back in 2016, I hadn’t even considered this at the time.


The web we lost: a retrospective

Internet

Anil Dash wrote a list of things we lost on the web back in 2012. Every one of his points have only accelerated during this time.

I badly miss Technorati, I was so excited when I got a profile on it for my sites back in 2005. Anil writes:

… Technorati let you search most of the social web in real-time (though the search tended to be awful slow in presenting results), with tags that worked as hashtags do on Twitter today. You could find the sites that had linked to your content with a simple search, and find out who was talking about a topic regardless of what tools or platforms they were using to publish their thoughts.

But point six is what I miss the most, emphasis added:

In the early days of the social web, there was a broad expectation that regular people might own their own identities by having their own websites, instead of being dependent on a few big sites to host their online identity. In this vision, you would own your own domain name and have complete control over its contents, rather than having a handle tacked on to the end of a huge company’s site. This was a sensible reaction to the realization that big sites rise and fall in popularity, but that regular people need an identity that persists longer than those sites do.

I write a lot about this. I’m thinking I should start doing something about it.


My humble homelab, with awful ASCII diagrams

Hardware

The Homelab session is the I’m most looking forward to! So many of our careers began as a passionate hobby at home, so I think encouraging more of this sort of thing can only help the BSD community. You can join the live stream free; details are on the BSDCan website. These are the times:

  • 10:15, 05 June Ottawa
  • 14:15, 05 June UTC
  • 22:15, 05 June Singapore
  • 00:15, 06 June Sydney

I thought it’d be a fun evening exercise to make a terrible ASCII-art diagram showing Clara’s and my own homelab. I had to unfortunately shed and consolidate a lot of stuff when we moved into our current studio apartment, but fortunately Clara’s just as much a nerd as me and is fine having the shelf behind our TV full of wires and loud cooling fans!

   ╔═════════════════════════╗    ~ Cloud ~
   ║             sasara.moe  ║
   ║  OrionVM High CPU 2 GB  ║   ╔═════════════════════════╗
   ║         FreeBSD 11.4-R  ║   ║           rubenerd.com  ║
   ╟┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╢   ║  OrionVM Standard 4 GB  ║          
┌──╢  tun0      10.5.5.x/24  ║   ║         FreeBSD 12.1-R  ║
│  ╟┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╢   ╟┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╢
│  ║  xn0         Public IP  ║   ║  xn0      (unused ATM)  ║
│  ╟┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╢   ╟┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╢
│  ║  xn1       10.4.4.x/24  ╟───╢  xn1       10.4.4.x/24  ║
│  ╚═════════════════════════╝   ╚═════════════════════════╝
│ 
│ 
│ 
│← OPENVPN TUNNEL
│← Probably superfluous for what I use it for, but hey
│ 
│ 
│ 
│    ╔════════════════════════╗
│    ║               mio.lan  ║     ~ Apartment living area ~  
│    ║  HPE MicroServer Gen8  ║
│    ║        FreeBSD 12.1-S  ║     ╔════════════════════════╗
│    ║   FBSD, Debian guests  ║     ║              aino.lan  ║
│    ╟┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╢     ║  HPE MicroServer Gen8  ║
└────╢  tun0     10.5.5.x/24  ║     ║            NetBSD 9.0  ║
     ╟┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╢     ╟┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╢
     ║  ib1     (unused ATM)  ╟─────╢  ib1     (unused ATM)  ║
     ╟┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╢     ╟┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╢
     ║  ib0     (unused ATM)  ╟─────╢  ib0     (unused ATM)  ║
     ╟┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╢     ╟┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╢
     ║  bge1     10.7.7.x/30  ╟─────╢  bge1     10.7.7.x/30  ║
     ╟┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╢     ╟┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╢
  ┌──╢  bge0     10.8.8.x/24  ║  ┌──╢  bge0     10.8.8.x/24  ║
  │  ╟┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╢  │  ╚════════════════════════╝
  │  ║  bridge0  10.6.6.x/24  ║  │
  │  ╚════════════════════════╝  │  ╔═════════════════════╗
  │                              │  ║         himeko.lan  ║
  │  ╔══════════════════════╗    │  ║      Apple TV Gen3  ║
  └──╢   Unmanaged Netgear  ╟────┘  ╟┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╢
┌────╢  10-port GbE Switch  ╟───────╢  eth0  10.8.8.x/24  ║
│ ┌──╢         10.8.8.x/24  ╟──┐    ╟┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╢
│ │  ╚══════════════════════╝  │    ║  wlan0    (unused)  ║
│ │                            │    ╚═════════════════════╝
│ │  ╔══════════════════════╗  │
│ │  ║      Linksys Router  ║  │  ╔════════════════════════╗
│ │  ║             OpenWRT  ║  │  ║           azunyan.lan  ║
│ │  ╟┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╢  │  ║       Raspberry Pi A+  ║
│ └──╢  lan    10.8.8.x/24  ║  │  ║        FreeBSD 12.1-R  ║
│    ╟┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╢  │  ╟┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╢  
│    ║  wan      IPoE DHCP  ║  └──╢  ue0      10.8.8.x/24  ║
│    ╟┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╢     ╟┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╢
│    ║  wlan0     (unused)  ║     ║  wlan0  (unsupported)  ║
│    ╟┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╢     ╟┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╢
│ ┌┈┈╢  wlan1  10.9.9.x/24  ║     ║  sio0        (serial)  ╟───┐
│ ┊  ╚══════════════════════╝     ╚════════════════════════╝   │
│ ┊                                                            │
│ ┊  ╔════════════════════════════╗   ╔═════════════════════╗  │
│ ┊  ║                   lum.lan  ║   ║              ritsu  ║  │
│ ┊  ║  Panasonic Let's Note RZ6  ║   ║  Commodore 128 PAL  ║  │
│ ┊  ║            FreeBSD 12.1-R  ║   ╟┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╢  │
│ ┊  ╟┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╢   ║       Serial, WIP!  ╟──┘
│ ┊  ║  en0     (unused at home)  ║   ╚═════════════════════╝
│ ┊  ╟┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╢
│ ├┈┈╢  wlan0        10.9.9.x/24  ║
│ ┊  ╚════════════════════════════╝     
│ ┊
│ └┈┈┈┈ Phones, Kindles, etc...
│
│
│
│← TRANS-APARTMENT PIPELINE OF JOYOUS CONNECTIVITY
│← May be hidden under a carpet, cough
│
│
│
│    ╔════════════════════╗        
│    ║       tsuruya.lan  ║
│    ║      DIY PC tower  ║
│    ║    FreeBSD 13.0-C  ║
│    ╟┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╢        ~ Home office nook ~
│ ┌──╢  en0  10.8.8.x/24  ║
│ │  ╟┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╢      ╔═════════════════════╗
│ │  ║  en1            -  ║      ║    mactheknife.lan  ║
│ │  ╚════════════════════╝      ║   MacBook Pro 14,2  ║
│ │                              ║        macOS 10.14  ║
│ │  ╔═════════════════════╗     ╟┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╢
│ └──╢   Unmanaged D-Link  ╟─────╢  eth0  10.8.8.x/24  ║
└────╢  5-port GbE Switch  ╟──┐  ╟┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╢
 ┌───╢        10.8.8.x/24  ║  │  ║  wlan0           -  ║
 │   ╚═════════════════════╝  │  ╚═════════════════════╝
 │                            │
 │  ╔══════════════════════╗  │  ╔═════════════════════╗
 │  ║             ami.lan  ║  │  ║      clarabook.lan  ║
 │  ║  DIY 200MHz Pentium  ║  │  ║   MacBook Pro 14,3  ║
 │  ║    MS-DOS 6.20, WFW  ║  │  ║        macOS 10.15  ║
 │  ║     Windows 95 OSR2  ║  │  ╟┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╢
 │  ║    FreeBSD 6.3 i386  ║  └──╢  eth0  10.8.8.x/24  ║
 │  ╟┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╢     ╟┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╢
 └──╢  eth0   10.8.8.x/24  ║     ║  wlan0           -  ║
    ╚══════════════════════╝     ╚═════════════════════╝

A couple of notes:

  • We use InfiniBand extensively at work for synchronous disk replication, and I have some older Mellanox QDR cards in both the MicroServers, but I recently switched one of them to NetBSD as an experiment and don’t have experience with IB or running NetworkManager on that OS yet.

  • My SSH to rs232 bridge for either my Commodore 128 or Commodore Plus/4 is only theoretical at this stage, but I’d love to see if it’s possible!

  • At some point I want to upgrade to 2.5/5GBASE-T for machines that can support it, but it will involve new switches and NICs that are still too pricey. Good news is everything was done with Cat6 when we moved into this tiny apartment :)

  • The mio MicroServer was recently switched to being a bhyve host instead of just jails, which I haven’t figured out how to represent with awful(ly delightful) box-drawing characters. My cloud VMs also run jails. Now that aino runs NetBSD, I’d be interested to see if I could make her a Xen host, given that’s our bread and butter at work.

  • I want to replace the aging home router at some stage.


The 2020 iPhone SE

Hardware

This post was written back in April, during a week when I messed up my post-update hooks again. I’ll be slowly posting these vanished posts over the next couple of weeks to reduce spammage.

I haven’t been this keen for an Apple phone announcement in years. The 2020 iPhone SE looks good, in large part for all the thing it doesn’t have:

  • It doesn’t have an OLED screen, which is important to a minority like me for whom they cause eyestrain and headaches.

  • To paraphrase Johnny Ive discussing the lampshade iMacs design affordances, its screen is still allowed to be a screen, with plain corners and no inclusions.

  • It’s not intentionally-hobbled with a cheaper CPU; it uses the same silicon as the latest iPhone 11. In other words, the best mobile CPU in the industry.

  • It still uses TouchID in lieu of FaceID, so you can unlock the phone while pulling it out of your pocket, and wearing a hat that casts a shadow on your face.

  • It didn’t adopt the larger, heavier form factor of the iPhone X line. I would have preferred something closer in size and design to the gold standard iPhone 5, or the original SE, but I’m self-aware enough to understand that ship has long sailed.

  • It doesn’t have an absurd price… by Apple standards.

Those of us who’ve stuck with an iPhone 8 have a clear upgrade path now, if and when we finally decide to move on.