Skip to content

Hallam Chronicles Posts

London

From Paris to London, our whirlwind of a journey finally brought us back to the motherland. Foreigners as we still were, we felt like grandchildren returning to the old family manor.

Our third floor rooms were smaller than Paris, and yet somehow felt roomier and cozier. I couldn’t resist checking out the first (and only) wardrobe we encountered.

Our first attempt at fish and chips was ok, but nothing worth celebrating and not nearly as good as Brits Fish & Chips back home. We learned later that the downtown core tends to cater to tourists instead of featuring authentic British pub fare.

First & Chips: Attempt #1

Our highlight of this weekend was undoubtedly the theatrical performance of Les Misérables. I admit to having never read the book (despite owning it), but I have often enjoyed Focus on the Family’s Radio Theatre version.

Queueing for the performance

Naturally, no photos of the performance to share, but our view of the stage was unrivalled. My personal favourite was the commanding performance of David Thaxton as Javier, previously the Phantom in the Phantom of the Opera. Charity also appreciated the passion of Jon Robyns as Jean Valjean.

I admit to having previously had my doubts about musicals. Perhaps it was the format of spontaneously transitioning to singing only to return to the regular story telling. The format of Les Mis, by contrast, was almost exclusively singing, with just a handful of hushed words that fit beautifully in moments of necessary silence.

One critique. I appreciated the comedic relief offered by the Thénardiers, themselves secondary antagonists driven by the love of money to swindle everyone who crosses their path. But the sexual overtones of their characters seemed oddly out of place. While the moral undertone of mercy received by Jean Valjean and rejected by Javier remained intact, it seemed sullied by the humorous portrayal of these otherwise depraved characters.

The Sondheim Theatre itself was a work of art reminiscent of the detail we enjoyed at the Louvre barely 24 hours earlier (though with all the same caveats).

Our second and final day in London began with a trip to the British Museum.

Still tired from our seven hours at the Louvre, we agreed not to try to see everything, but just wander for an hour or two. The Egyptian mummies were fascinating, if not slightly disturbing, but my favourite discovery was the Lewis Chessmen, as I knew it would fascinate our children when we shared photos later that evening.

Our next planned stop was Evensong at Westminster Abbey, passing by Trafalgar Square, the Canada House, and the Elizabeth Tower (Big Ben, the bell, within).

In contrast to Notre Dame, there was little to obscure our view of this ancient edifice.

Gazing at the statues outside the entrance, I realized many were from relatively recent history, such as Martin Luther King Jr. and Dietrich Bonhoeffer. I wonder what goes into deciding who graces this entrance: and when “someone” gets removed!

Again no photos within the chapel, and while we hoped for a chance to sing alongside the congregation, the selected songs were unfamiliar and hard to follow on the magnificent pipe organ. To the credit of the Reverend, the sermon on “three transgressions … and for four” from the book of Amos was theologically sound and a practical reminder of God’s extended mercy and justice.

Parliament

Charity more than made up for the lacklustre congregational singing as we passed the Parliament buildings together.

Singing

Our evening came to a close aboard a double decker bus, a living art display, and takeout back at the hotel.

Monday morning marked our early departure from London to visit family in the Manchester region!

Heathrow Express

Leave a Comment

Paris

It’s difficult to summarize the transition from Zürich on Wednesday to Paris on Thursday. Before arriving, we were told we might be disappointed. We were warned about being pick-pocketed. We even knew about the rats — courtesy of Ratatouille. And as we slowed into Paris towards the Gare de Lyon, the sense of a dense metropolis complete with pervasive graffiti did little to dissuade these external impressions:

But after navigating the train station and subway lines towards our hotel, we ascended to encounter this first exposure to the incredible architecture of Paris, the Hôtel de Ville:

As we explored but a slice of the centuries of history interwoven with modern life in this enormous city, we quickly regained a sense of wonder. Though we still clutched our passports and wallets.

The highlight of our arrival day was the panoramic view of Paris from La Basilique du Sacré Cœur. After a tour of the inside — itself a marvel, but in which we honoured the request not to take pictures — we ascended some 270 steps to the dome of the building:

Perhaps because of the climb and the modest entrance fee, there were far fewer people seeking out this view than those at the base of the building. Encouraging signs along the way counted down the remaining distance. We definitely needed that encouragement — I think my Apple Watch recorded 37 flights of stairs that day!

But the climb was worth the exhausted calf muscles, not least because it gave us a glimpse of the Eiffel Tower: a destination we did not plan to see this trip.

Our second and only full day in Paris began with a traditional French breakfast of coffee, freshly squeezed orange juice, freshly baked bread, and of course a croissant and a pain du chocolat:

It has been explained to me that the wonder of Parisian croissants isn’t that they are miraculously better than croissants elsewhere — Receiver Coffee back home is almost as tasty, if not quite as lucious — it’s that croissants are incredible everywhere. Not once did we have mediocre bread of any kind, regardless of the restaurant we chose. There was also something about the ingredients or baking process that left us feeling “good” instead of “heavy” after each meal.

We expected the temperature to be warmer than back home — even accounting for the deep freeze briefly blanketing the east coast this weekend — but we were not prepared to see flowering plants and fruit trees simply sitting outside. A Parisian winter of slower growth contrast with the white bedsheets that shut down almost everything for months at a time in Canada.

The highlight of our second day was the Louvre museum. Newbies as we were, we expected to see the famous glass pyramid, but we had no idea that the surrounding building was the museum itself. None of our pictures can capture the scale of this ancient artifice, itself so often passed over to view the contents within.

Within, perhaps my favourite discovery were these twin paintings of David battling Goliath, mounted back to back and giving the appropriate perspective from that angle:

Charity and the children, as part of our homeschooling efforts, have been studying a variety of artists and their works. So it was with great joy that she found herself “reacquainted with old friends” as together we encountered familiar works from Delacroix, Gainsborough, Monet, Giotto, Constable, and Da Vinci.

Delacroix, Women of Algiers

Though we had read about the size of these paintings, once again we found ourself unprepared for the sheer size of many of these works of art.

Despite spending nearly seven hours at the museum, we really only explored the top floor, and that without spending more than a few minutes per room. After passing by the lineup to see the Mona Lisa and wandering deeper into that top floor, we once again found the crowds replaced by just a few brave souls willing to keep walking for so long. It was here we discovered the works of Jean Jouvenet and his masterful depiction of so many familiar Biblical scenes.

His works were also some of the widest paintings we had found!

A word to wise parents. While there is much to enjoy at the Louvre, it is impossible to avoid certain types of artwork or sculptures that many might find inappropriate. I fully recognize the significance of these artists’ works, but simultaneously remain aware of the inherent sinfulness of mankind. There is a reason Adam and Eve sought to cover themselves immediately after disobeying God.

After a last push through the Richelieu, we exited the Louvre to discover this curious mirrored construction, labeled on Google Maps as the Place du Palais Royal. What boggled my mind was the perfectly angled glass reflections designed to create the illusion that the building was transparent! My Google-fu has failed me in finding an explanation for this building — if anyone knows, please let me know!

Our final, half-day in Paris began peacefully with breakfast at another corner cafe and a walk around the Notre-Dame, currently under heavy renovation due to the fire in 2019. As we walked, Charity recounted the story of the Hunchback of Notre-Dame, a tale by Victor Hugo and author of the story behind a play we will see tonight in London.

Mindful of the time, we checked out and made our way to Gare du Nord to catch a train to London for the next leg of our journey. Our hope was to arrive relaxed, with plenty of time to board the train.

Unfortunately, this is when the flaws of the Paris transit system began to cause us grief. No doubt it works well for the millions of people accustomed to using it daily, but as new users, the onboarding flow deserves some serious scrutiny.

Our woes actually began back on day 1, when we purchased the Paris Visite travel pass. In Zürich, the equivalent pass was valid for 24 hours from the time of first usage, perfectly fitting our expected timeframe there. I purchased the 2-day pass, believing it would cover us until departing 48 hours later on Saturday. After paying, the ticket attendant asked me if I wanted it to start today, and then wrote the dates for Thursday and Friday on the little scrap of paper. I asked if it was good until Saturday, at which point she explained that it was only valid for “two days”, despite most of Thursday having already passed. Le sigh.

We then immediately had trouble using the little pieces of paper. Unlike the unrestricted access in Zürich, there were gates everywhere. After putting the tiny strip of paper into all the orifices we could find on top of the gate — presumably looking like the tourists we were! — we finally found the hole on the front into which the ticket was scanned and reappeared out the hole in the top. No arrows or explanation anywhere: you’re just supposed to know! Le sigh.

The next hurdle was navigating one’s way within the subway station. To their credit, the signs clearly identified the metro line and direction of travel, but we frequently found forks in the subsequent hallways with no additional signage, forcing us to backtrack after we inevitably went the wrong way.

We figured out enough to survive our stay thereafter, buying a second single ticket on Saturday to make our way to the train station. Unfortunately, this required us to change metro lines, and we once again took the wrong hallway, “exited” the station (all while staying underground), and found our tickets didn’t allow us to re-enter the adjoining metro. The staff were kind enough to issue us a replacement ticket, explaining that it was the “other hallway.” Le sigh.

Finally, upon our arrival at Gare du Nord, we were shocked to discover that one had to have a ticket simply to exit the facility. That’s right, there was no way out unless you had held onto that strip of paper. To their credit, there were signs… right on the exit gates themselves. We had kept the tickets, praise the LORD, but at this point I began panicking slightly as I worried about the time.

Two more exit gates, and we were finally out. Our train didn’t appear on the timetable, but I was expecting not to see it given how many other trains were supposed to leave first. Charity and I began to hunt for a coffee shop, when my Googling suggested I take a peek upstairs for boarding this particular train. To my surprise, I found we still had a full fledged customs process to get through — presumably courtesy of Brexit. Le sigh. Clearly I’ve been spoiled by the Eurozone transition from Switzerland to France.

We made our way through security with minimal fuss — thankfully, no need to dispose of fluids like boarding an airplane — and with 17 minutes to spare finally decided to get that coffee and a meal for the ride. As the final coffee was being poured, I hear over the loudspeaker, “The train to London St. Pancras is departing… momentarily.” PANIC!

Charity and I rushed to the platform, looking for carriage 7, and as we passed carriages 9 and 8 the doors there began to close. I flailed wildly at the staff outside, thinking we had literally just missed our only chance to get to London and the play that night, misinterpreting their raised hand as “stop, you’re too late.” Charity, to her credit, kept her calm, realizing far more quickly that they had simply closed the doors to the dining car and that the staff were encouraging me to slow down as I didn’t have to rush.

My face must have betrayed my panic, as the staff laughed as I hurried on, rushing into the right car, finding our seats and hoping we were actually even on the right train. It took a good 20 minutes before I de-stressed and realized we hadn’t missed anything, and actually would have been fine for another 10 minutes or so. Le sigh.

I hope you can understand why I captured very few photos in this dastardly attempt to make our way to the next leg of our journey. Excited to finally be heading to the motherland!

Leave a Comment

Zürich

On Tuesday, January 31st, Charity and I began our first significant trip together since our honeymoon some 13+ years ago.

Originally planned as an extension to a work trip, we flew overnight to Zürich, Switzerland, landing bleary eyed at what our bodies believed to be 4AM but the clocks and sun clearly at 10AM:

At the advice of my colleague and travelling companions to Zurich, we avoided sleeping upon arrival and instead made our way to the local Zoo. I can’t remember ever going to a zoo without being a child or having one in tow, but we made good use of the time to keep walking, stay awake, and overcome jet lag.

Public transportation in Canada cannot compare to the speed and quality of what we experienced in just 24 hours. The 24-hour Zürich Card we purchased at the airport gave us unlimited access to the train and tram network. But to my surprise, not once did I have to present my stamped ticket. Boarding a tram was as simple as stepping inside any doorway, with no length delay to scan your ticket or fumble with change.

Trams came quickly and often, giving us both the courage to travel throughout the downtown core:

After checking in at our hotel and a much needed shower and power nap, we endeavoured to buy Swiss chocolate as gifts for our friends at home watching the children and homestead:

A little wandering through back alleys on our way to dinner with our travelling companions yielded some incredible architecture:

Going to sleep at 9PM that night and getting up at 5:30 AM felt almost normal, though our eyes continued to betray some sleepiness. Nothing a fancy Swiss coffee couldn’t fix on our way to the train station!

While Swiss German seems to be the primary language, everyone we interacted with also spoke English well enough to help us find our way or order food. And while the city was remarkably clean and free of graffiti, we even found some sentiments expressed in English at a tram stop:

The Zürich Hauptbahnhof — the major train station in the capital — is what I wish every airport could be. A thriving metropolis of small shops, friendly patrons, minimal security, and the ability to simply step aboard your train within two minutes of its departure.

A long train ride ahead for the next leg of our journey, but oh so much more legroom!

2 Comments

A new MacBook (Day 1)

A week ago Monday, just 30 minutes after Apple concluded their Unleashed event, I had filed the requisite paperwork for a replacement work computer. My office manager approved the request nearly immediately, forwarding me the Apple tracking information that I’ve been refreshing daily since.

When I joined Mattermost almost four years ago, I explicitly asked for a 2015 MacBook Pro, wary of the keyboard troubles and general issues from the newer laptops available at that time. Despite being eligible for a replacement for some time now, I’ve been holding off, hoping Apple would get their act together and ship a laptop inspired by the success of that 2015 model instead of the madness of the past half decade.

Today, that laptop arrived: a 16″, 2021 MacBook Pro, with an M1 Pro chip, 32 GB of RAM, and 1TB SSD.

But it’s been so long since I’ve owned a new computer, that I’ve nearly forgotten how I arrived at my custom configuration. This blog post, aimed at the more technical reader, is a summary of just that. Perhaps it will also serve as a useful reference for my future self.

Startup

All new Apple computers have a predictable startup routine, prompting for a language, WiFi password, and how to configure various knobs and permissions No, I don’t want to enable “Hey Siri” on this work laptop. Yes, I’ll allow Apple to glean anonymous information about my computer and share crash reports with other developers. Yes, it’s ok to enable location support. And since I often rely on handoff between my other Apple devices, I opt to configure this computer with my personal Apple ID.

I double check my username conventions on my old work laptop — just the first name — and configure my user account accordingly. I’ll setup a profile picture later.

Crucially, I enable FileVault. This feature transparently encrypts the contents of the hard drive using a key derived from my system password. While unlikely to be stolen, encryption gives me peace of mind knowing that the files therein would remain inaccessible to any would-be-thief.

Homebrew

Before installing anything else — not even my beloved iTerm2 — I begrudgingly launch Terminal and install Homebrew. I rely on this open source package manager for most of the system-wide applications I install on my Mac, including that better terminal experience.

Installing Homebrew automatically install the requisite XCode developer tools, and I smile remembering just how much faster this step is on the impressive M1 Pro chip. Paired with my 1Gbps fibre-to-the-home connection, I think my biggest bottleneck is actually my Ubiquiti equipment. Time to think about a Dream Machine and upgraded WiFi 6 access points.

System Configuration

While in the terminal, I realize my system name is a descriptive but boring BMP16inch2021. I navigate to System Preferences > Sharingand attempt to reuse the same macbook-mattermost name from the old laptop next to me. The two computers realize the conflict, and force me to pick a non-conflicting name for my network. I eventually rename the old computer, knowing it will be erased and kept as a personal device thanks to Mattermost’s generous Hardware Buy Back Policy.

I pause to think about all the other settings I want to configure here — keyboard repetition, trackpad options, sounds — but decide to avoid doing this by hand and see if I can finally codify these settings in a more programmatic fashion.

Thinking the system name requires a reboot to take effect, I restart the computer for the first time — about 15 seconds from start to finish — and realize I haven’t even bothered to plug it in yet. Despite all the background activity from syncing iCloud Photos and Documents, I’m sitting at a comfortable 82%, down from 91% when I first opened it.

Hmm, the system name isn’t changed. After a rabbit-hole of Google searching yielding conflicting advice, I decide to run:

> scutil –-set HostName macbook-mattermost

Voila, no system restart required. Funny how much I’m tripping over the really basic stuff!

Dotfiles

To avoid an excess of manual configuration, I version control a myriad of scripts and config files to share between my devices. I need to get these configuration files onto this machine, but first I need to remember how I configured the custom encryption module I’m using with Git. I think it was gcrypt? Checking the old computer:

> git remote -v
digitalocean	gcrypt::rsync://root@digitalocean:gcrypt/dotfiles (fetch)
digitalocean	gcrypt::rsync://root@digitalocean:gcrypt/dotfiles (push)
origin	keybase://private/lieutdata/dotfiles (fetch)
origin	keybase://private/lieutdata/dotfiles (push)

Aha, yes. There’s the old Keybase configuration using their free, encrypted Git support, but also my custom gcrypt configuration I setup after Zoom bought Keybase.

I copy the upstream URL in hopes that handoff works between Big Sur and Monterey. Oh well, something else to investigate (or probably ignore). I brute force type it instead. I know this won’t work yet — not least of all the custom hostname — but I’m hoping it will give me a clue on what to setup next. Oh, interesting, copying from Monterey to Big Sur works without a charm. Good thing, too, since I haven’t installed 1Password yet and don’t want to type a long password to get into this blog on the new computer.

> gcrypt::rsync://root@digitalocean:gcrypt/dotfiles
Cloning into 'dotfiles'...
git: 'remote-gcrypt' is not a git command. See 'git --help'.

Ah, remote-gcrypt. Homebrew to the rescue? It helpfully suggests git-remote-gcrypt, and a few seconds later I try again to discover my next challenge:

> git clone gcrypt::rsync://root@digitaloean:gcrypt/dotfiles
Cloning into 'dotfiles'...
/opt/homebrew/bin/git-remote-gcrypt: line 403: gpg: command not found
gcrypt: Repository not found: rsync://root@digitaloean:gcrypt/dotfiles
warning: You appear to have cloned an empty repository.

Ah, gpg. Homebrew to the rescue! (You can see why this tool gets installed first!) This one takes a few minutes to download and install all the dependencies, so I launch Apple Music and play a favourite album from The Corner Room. Not expecting much from the built-in speakers, I’m briefly startled by the volume and clarity of the opening guitar strums of Psalms Songs, Vol. 1. Nice! Removing the empty dotfiles from the last failed attempt, I try again:

> git clone gcrypt::rsync://root@digitaloean:gcrypt/dotfiles
Cloning into 'dotfiles'...
gpg: directory '/Users/jesse/.gnupg' created
gpg: keybox '/Users/jesse/.gnupg/pubring.kbx' created
gcrypt: Repository not found: rsync://root@digitaloean:gcrypt/dotfiles
warning: You appear to have cloned an empty repository.

Ok, that’s not… terribly helpful. But I’m guessing it’s the custom .ssh/config hostname? The one configured in the repository I’m trying to clone? Replacing it with the real value prompts for a ED25519 key fingerprint validation, confirming my suspicions. Of course, I don’t expect to be able to authenticate yet without the proper credentials, but gcrypt once again fails to succeed but leaves me with an empty repository. Time to crack the knuckles and just get across this hurdle.

> ssh-keygen -t ed25519 -C "jesse@mattermost.com"

Yay, handoff seems to have started working from Monterey to Big Sur, and I can copy the resulting public key to my old laptop and off to the ~/.ssh/authorized_keys on the host I use for this repository. At this point, I realize I could have probably saved time by just cloning the repository directly from the old machine across the network, but hey: this is fun!

No more issues authenticating to the host, but it looks like there’s something else I need to remember about how to setup gcrypt:

> git clone gcrypt::rsync://root@<the real host name>:gcrypt/dotfiles
Cloning into 'dotfiles'...
gcrypt: Decrypting manifest
gpg: public key decryption failed: No secret key
gpg: decryption failed: No secret key
gcrypt: Failed to decrypt manifest!

Time to read the git-remote-gcrypt documentation. Time to generate a GPG key — mostly using the defaults, but adding a comment to clarify what this key is used for. I copy the key id back to the old laptop, and attempt to authorize that key on the digitaloean host:

> git config remote.digitalocean.gcrypt-participants "<old key id> <new key id>"
> git push digitalocean master
gpg: error reading key: No public key

Ugh, now I’ve broken it locally. Fortunately, it’s easy to revert:

> git config remote.digitalocean.gcrypt-participants "<old key id>"                                                                                                               > git pull
gcrypt: Decrypting manifest
gpg: Signature made Tue  2 Nov 17:10:25 2021 ADT
gpg:                using RSA key <...key...>
gpg: Good signature from "..." [ultimate]
Already up to date.

Ok, so I think I know why I just had a single key configured. Let’s just copy that key to the new machine for now.

> gpg --armor --export <key id> | pbcopy
> gpg --armor --export-secret-key <key id> | pbcopy

After each of the above commands, I imported the public and then private key onto the new machine — magically syncing thanks to Handoff:

> pbpaste | gpg --import

We’re making progress! (Reminder to self to either clean up that newly generate GPG key, or better yet, figure out how to support multiple keys properly.)

> git clone gcrypt::rsync://root@<the real host name>:gcrypt/dotfiles
Cloning into 'dotfiles'...
gcrypt: Decrypting manifest
gpg: Signature made Tue  2 Nov 17:10:25 2021 ADT
gpg:                using RSA key <...key...>
gpg: Good signature from "..." [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: <...key...>
gcrypt: Remote ID is :id:<...remote id...>
gpg: WARNING: "--secret-keyring" is an obsolete option - it has no effect
Receiving objects: 100% (1356/1356), 350.50 KiB | 20.62 MiB/s, done.
Resolving deltas: 100% (735/735), done.
gpg: WARNING: "--secret-keyring" is an obsolete option - it has no effect
Receiving objects: 100% (81/81), 40.87 KiB | 40.87 MiB/s, done.
Resolving deltas: 100% (28/28), done.
gpg: WARNING: "--secret-keyring" is an obsolete option - it has no effect
Receiving objects: 100% (3/3), done.
gpg: WARNING: "--secret-keyring" is an obsolete option - it has no effect
Receiving objects: 100% (9/9), 11.60 KiB | 11.60 MiB/s, done.
ssh: connect to host <the real host name> port 22: Connection refused
rsync: connection unexpectedly closed (0 bytes received so far) [receiver]
rsync error: unexplained error (code 255) at /System/Volumes/Data/SWE/macOS/BuildRoots/6b362bc7f6/Library/Caches/com.apple.xbs/Sources/rsync/rsync-55/rsync/io.c(453) [receiver=2.6.9]
gcrypt: Packfile 4fd09ebb03d8f0a4b27c9ccf6551dd65c728e357f6960d45729e2651ebc04d91 does not match digest!
fatal: early EOF

Hmm, gcryptic again. Especially the part about failing to connect. Maybe I have some rate limiting in place, and since I still don’t have my .ssh/config installed, I’m not setup to persist SSH connections. Lets’ do that by hand for now:

host *
  ControlMaster auto
  ControlPath ~/.ssh/ssh_mux_%h_%p_%r

Interesting, trying to connect in a new terminal shows the same connection issue — definitely rate limiting! Waiting a minute and then connecting succeeds this time:

> git clone ...
> ls dotfiles
Library		autoenv		dsl		fonts		homebrew	infrastructure	setup.sh	synergy.conf	unifi		upgrade.sh	vimgo_setup.sh

Hurrah! Wow, that took almost two hours, and I’ve barely got anything setup.

Let’s move that hand-configured ~/.ssh directory out of the way before I see if setup.sh still works.

> mv ~/.ssh ~/.ssh_manual
> cd ~/dotfiles
> ./setup.sh

Hmm, lots of spurious Git cloning issues:

...
lease make sure you have the correct access rights
and the repository exists.
fatal: clone of 'https://github.com/powerline/fonts' into submodule path '/Users/jesse/dotfiles/fonts' failed
Failed to clone 'fonts'. Retry scheduled
Cloning into '/Users/jesse/dotfiles/.tmux/plugins/tmux-logging'...
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.
...

Hmm, maybe restarting my shell to get the newly installed configurations?

/Users/jesse/.fzf.zsh:source:13: no such file or directory: /usr/local/opt/fzf/shell/key-bindings.zsh
 ~  ls
zsh: no such file or directory: /usr/local/bin/gls

Yikes, I clearly haven’t tested this before. Let’s get brew install coreutils fzf out of the way. Looks like it needs a manual invocation of/opt/homebrew/opt/fzf/install. Yes to fuzzy auto-completion and key bindings. No, I don’t want to update my shell configuration files — I’m assuming those are part of my dotfiles — I hope!

Woot, no errors on starting a new shell! Back to Git — right, I need to import the SSH key into my GitHub profile:

cat ~/.ssh/id_ed25519.pub | pbcopy

Back to the old laptop and over to https://github.com/settings/keys. There we go, setup.sh successful. Is vim working?

> vim
[coc.nvim] "node" is not executable, checkout https://nodejs.org/en/download/
Press ENTER or type command to continue

So, almost. I guess we need to brew install node. No, wait, I think I want brew install nvm so I can juggle multiple versions. Hmm, despite a successful install, I see:

> nvm
zsh: command not found: nvm

I recall setting up some aliases in .zshrc to avoid pre-loading nvm until I needed it. Is ~/.nvm there?

> ls ~/.nvm
zsh: no such file or directory: /usr/local/bin/gls

Hey, I thought I fixed that with brew install coreutils. I guess there’s something in my old laptop’s config that’s not yet here. Weird, looks like I only did this for my old Bash install?

export PATH="/opt/homebrew/opt/coreutils/libexec/gnubin:$PATH"

Oh well, let’s update .zshrc. Nope. Oh, I never modified $PATH before and just hard-coded an old path to /usr/local/bin/gls in an alias. I wonder how long this has been broken? Let’s undo that and keep the $PATH approach, while still customizing ls:

alias ls="ls --color -h --group-directories-first"

Fixed! But nvm is still not found — I’m going to solve this tomorrow. But at this point, the myriad of terminals on mys screen is killing me — brew install tmux to the rescue!

> tmux
[exited]

Ugh, something is failing inside my tmux configuration. I do vaguely recall this failure — brew install reattach-to-user-namespace. Voila!

tmux finally installed and running

Looks like my Powerline shell configuration isn’t working yet, though. I think I need to tell iTerm2 about the configuration settings?

A thing of beauty:

Yes, I’m excited about my terminals.

Battery Checkin

It’s getting late, but I wanted to check on battery performance so far. It’s down to 72% after about 2.5 hours of straight usage, including a brief foray into authorizing Apple TV and testing the HDR playbook and spatial audio of Spies in Disguise. Stunning!

Let’s see what I can accomplish in my spare time on Day 2!

1 Comment

The Third Wave

When it comes to Covid-19, it can be hard to discern the truth between the never-ending daily news briefings and the unending avalanche of conspiracy theories.

When measuring the cases, the beginning of the third wave is obvious:

But when measuring deaths, the curve is suspiciously flat:

In the past few months, the case count has been used as a leading indicator of another wave of deaths. But this wave is now three weeks old, and the death counts are still dropping. One explanation might be the (single dose) vaccination of some six million Canadians — mostly seniors:

If this trend continues, it’s hard to see how the government can continue to justify ongoing lockdowns, mask mandates, and social distancing. To all politicians: you have a unique opportunity to squash the conspiracy theories and restore trust with all Canadians by shifting away from the narrative of fear. Case counts alone are insufficient without deaths.

Shall we give it two more weeks — for real this time?

1 Comment

2020 Photoshoot

Far too much time has passed since our last family update. I suspect many of you have found this year as disruptive to your normal routines as we have.

While God, Himself, does not change, we certainly have since our last family photoshoot! A big thanks to our friends here on the island for helping capture this snapshot of our lives.

1 Comment

Operation Chocolate Milk

Hershey. Cocoa. Lindor. Rolo. Chocolates? Yes, but also the names of the various dogs Charity and her family owned in her youth.

Since meeting a breeder last year from Nova Scotia, we have been inching towards purchasing a dog for ourselves — specifically, a Chesapeake Bay Retriever. Earlier this year we paid a deposit against a litter for pickup in April. We began to speak in code around the children: “We need to plan our chocolate run.” “Have you heard from the chocolatier?” Our pup was born on February 28th.

Puppy #3, around 6-7 weeks old.

Then came covid-19. And provincial border restrictions. While we had no trouble ordering everything we needed for the puppy from critterspet.com, it seemed impossible to get to the little guy. Charity and I resigned to the possibility that it may be months out, or simply never happen at all.

All the supplies we would need, but no way to get get the puppy!

I had been working with the breeder through various options when I got an email on April 24th: there was a window of opportunity to deliver the pup to the Confederation Bridge! I decided to keep the news of this opportunity to myself and surprise both Charity and the children. If it fell through, it would be one fewer disappointment.

Our breeder wanted to deliver that Tuesday, April 28th — but we found ourselves in a mandatory 14-day quarantine that prohibited our leaving the property. Why?

Some months back, we made plans with close friends selling their home in another province to move this way to stay with us for a season. In light of covid-19, this was obviously not the ideal time to move: we weren’t even sure they would be allowed to enter the province. Their successful arrival at our home in mid-April was nothing but an act of God — and a great story for another time.

Unfortunately, we all had to hunker down for 14 days after their arrival, precluding us from meeting the breeder at the bridge. Fortunately, we are blessed with many incredible friends already on the island, one of whom kindly agreed to pick up the pup on our behalf and deliver him to our home.

How to explain to Charity why these friends were swinging by? As it turns out, we were running low on goats milk during our isolation, and I asked them if they would be willing to deliver that at the same time. We codenamed the plan, “Operation Chocolate Milk”.

It was a stunning success.

Sheer enthusiasm!

We’ve spent the last two weeks acclimatizing to the latest addition to our family, but everyone is in love with “Professor Friedrich Bhaer” (named after a character from Little Women). Of course, we go about calling the little guy “Bear”.

And then there were 7!

2 Comments