Harper grammar checker: Private and fast (so far)

I’ve been using LanguageTool to check my spelling (and to a lesser degree, grammar) here on my blog and it’s been fine, other than being kind of obsessed with commas. I recently came across Harper, which is an entirely offline, private grammar checker and started trying it out today.

My impressions so far:

  • No obsession with commas
  • It seems a tad more basic, but covers the essentials
  • UI is functional, but could be a little nicer
  • It really is fast
  • No AI!
  • It is distributed by Automattic, so if you have issues with the creator of WordPress, you may want to stay clear

I’m going to stick with it for a while, but if this sounds interesting to you, it’s available as an extension for Firefox and other browsers. Learn more about it here.

My year of interesting health issues continues

Yesterday I had an appointment at VGH1Vancouver General Hospital with a cardiothoracic surgeon, a title I did not know existed until the appointment was made by my family doctor.

We have to go back slightly over one year (and in reality, even further back than that to some unknown time) to trace up to yesterday’s visit to the above-mentioned surgeon.

In December 2024 I experienced what seemed like a prostate infection and was treated as such. For a time, the antibiotics worked, then they very much stopped working. I had blood work done and was re-diagnosed as having a bladder infection and took more antibiotics.

Then, for fun, on December 30th I tripped on a cracked section of sidewalk during my first run in four weeks, banging up both hands nicely.

In January, the antibiotics stopped working again. I ended up at the ER of Burnaby Hospital early in the morning, in a state of mild delirium brought on by fever. This time the big guns came out…more blood work, of course, but also a CT scan.

The infection had spread to my kidneys, which required antibiotics delivered by IV (which lasted for 11 days), and the good news there is that the treatment ended my infection story for 2024/2025–unless something happens in the next month.

But the CT scan also revealed something unexpected–a small mass near the top of my chest, just over 2cm in diameter. My family doctor did not think it was serious, so ordered an MRI on a low priority basis. It took 10 months to happen, as noted here.

Ironically, the MRI was inconclusive.

But that catches us up to yesterday, in which the surgeon told me:

  • More blood work will be done, to detect for markers that would indicate if the mass is cancerous. The surgeon doesn’t think so, but wants to be sure.
  • I will get another CT scan, at VGH or possibly UBC, due to the MRI being inconclusive.
  • Another test will be done at a cancer clinic that may take a while before it gets scheduled. He used words I’d never heard before, I may go back to ask for more details on this.
  • Surgery! The S word!

He explained a couple of things regarding the surgery:

  • Cancer is not malignant or benign, but exists on a spectrum. He thinks the lump I have falls on the benign side, but could still cause issues.
  • Asking nicely will not make it leave (OK, he didn’t say this, but I was thinking it)
  • He described the old-style surgery: cutting open the sternum (breastbone) and yoinking it out. While cutting open the sternum is not dangerous, it does make for a more complicated procedure and recovery.
  • He then described the new-style surgery:
    • Going in through the side–no bone-sawing needed!
    • Surgery time: 2-3 hours
    • Recovery in hospital: Typically a few days
    • Recovery at home after: About two weeks
    • After recovery, all regular activities can be resumed

I am not keen on getting surgery–it will be a first for me–but if it’s gotta be done, it’s gotta be done. For now I await the sheet for the next round of blood work.

Between getting blood taken and various IVs, I have probably been stabbed at least 8-10 times this year, with more to come. I would not have predicted this a year ago, and if I had such powers of prediction, I would have picked winning lottery numbers instead.

Here’s to 2026 being The Year In Which My Health Is Very Boring And Normal.

Run 986: You like puddles? We got puddles.

View from Cariboo Dam, pre-run: Drizzly and so very gray.

I opted to do a repeat of Friday’s run. Most of the conditions were similar, except there was drizzle and light rain. This made it feel a lot cooler, so the two layers felt appropriate both before and during the run.

I suspected I would be slower and I was, which is fine. Again mirroring Friday’s run, my left shoelace came untied, forcing me to stop just past the 2 km point to tie it. Just prior to this, a guy jogged past me, and I briefly entertained a delusion of catching up to him. But then I had to tie my shoe, so that became impossible. Now I can safely pretend I totally would have caught up to him otherwise (ho ho).

My overall pace was 5:40/km and my fastest was at the end, 5:30. BPM was 149, which is good.

While it was kind of drizzly or lightly showering for much of the run, it wasn’t bad at all. I never had to look over my glasses to see. However, it had clearly rained a fair bit earlier because there were puddles aplenty and the trail next to the sports fields was basically puddles with small sections of trail between them. I may write a letter.

But other than having to carefully navigate puddles post-run, it was a perfectly adequate way to start the week.

The lake, post-run. So very gray. Also, I spooked a coot as I approached to get this shot. Sorry, coot!

Stats:

Run 986
Average pace: 5:40/km

Training status: Maintaining
Location: Burnaby Lake (CW)
Start: 10:00 a.m.
Distance: 5.02 km
Time: 28:28
Weather: Drizzle, light rain
Temp: 8-9°C
Humidity: 89-87%
Wind: light
BPM: 149
Weight: 166.7 pounds
Total distance to date: 6,760 km
Devices: Garmin Forerunner 255 Music, iPhone 12, AirPods (3rd generation)
Shoes: Saucony Peregrine 15 (20/34/54)

Music: Voices, Hall & Oates

Birding, November 15, 2025: Seagulls snacking, coots cuddling, grebes ghosting

Where: Piper Spit, Burnaby Lake (Burnaby), Tlahutum Regional Park (Coquitlam)
Weather: Cloudy, 11-12°C

It was a relatively brief afternoon of birding, thanks to ever-changing weather conditions. As it turned out, the weather was better than expected, with only a wee bit of drizzle at the start and then the sun even appeared several times.

Piper Spit, Burnaby Lake

Gray on gray, with a few rowers out on the lake.

We started at Piper Lake, which was unusually busy. Maybe people are feeling claustrophobic staying inside all the time by mid-November, so any non-rainy weather is good enough to get out. Or maybe everything on Netflix sucks right now. Whatever the case, there were plenty of gulls and plenty of people. But none of the people were feeding the birds, so hooray for that.

Speaking of feeding, it’s spawning season, which meant two things:

  • The occasional salmon carcass
  • Seagulls tending to the above

I took photos.

No new exotic species were on hand, and even the wood ducks seemed relatively scare. The only geese were flying overhead. But we seem to have two semi-new regular groups now:

  • Dowitchers hanging out in the shallow/muddy area to the west of the pier (they shift as the water level of the lake rises and falls)
  • Cormorants gathered off to the east–close enough to shoot, but not very close

The seagull population has also grown, likely due to the salmon. Maybe seagulls and geese don’t get along, which is why the geese are elsewhere.

In even shorter supply were sparrows and similar birbs. We did see a fair number of song sparrows–or maybe just the same one following us around. But others were much more scarce. Admittedly, we arrived via the Nature House entrance, which meant we had a fairly small area for seeing birbs.

Teals, mallards and coots were well-represented, with two coots swapping out their usual drama for some gentle affection. Probably followed later by drama.

Tlahutum Regional Park

Coquitlam River and reflection.

We got a window of golden hour shots here, when the sky cleared enough for the sun to poke out for several minutes. This gave us some fairly snazzy landscape shots. By the time we were leaving, it was back to gray, dim, and getting dimmer.

In the air, we saw little, other than crows and a juvenile bald eagle way up yonder. In the water, we fared better, with a group of common mergansers in the river (where we’ve seen them before), and the main pond had an assortment of shovellers, gadwalls and a trans-dimensional grebe.

I say this because the grebe was fairly close to us–a rarity to begin with–but before either of us could line up a shot, it dove. I observed its direction and speed, and made a rough calculation on where it would surface. It did not appear in that spot. Nor did it appear in any other spot. It just vanished, apparently, gone through the portal back to the grebeverse, denying us a single shot. Perhaps to compensate, a coot came up close to provide a few glamour shots, coot-style.

In all, a fine afternoon out, especially given the original forecast.

The Shots

Shot with a Canon EOS R7 with 18-150 mm kit lens and 100-400 mm telephoto.

Soon™.

The Birds (and other critters)

Sparrows and sparrow-adjacent:

  • Dark-eyed Junco
  • Red-winged Blackbird
  • Ruby-crowned Kinglet
  • Song Sparrow

Waterfowl and shorebirds:

  • American Coot
  • Canada Goose
  • Common Merganser
  • Double-crested Cormorant
  • Gadwall
  • Great Blue Heron
  • Green-winged Teal
  • Long-billed Dowitcher
  • Mallard
  • Northern Pintail
  • Northern Shoveller
  • Pied-billed Grebe
  • Wood Duck

Common:

  • American Crow
  • Assorted gulls
  • Rock Pigeon

Raptors:

  • Bald Eagle

Non-birds:

  • Several ex-salmon
  • A single fuzzy caterpillar

Run 985: In foamy comfort

View from Cariboo Dam, pre-run: Single digit temperatures, but very calm.

I missed my Wednesday run because I was waiting for a delivery and the timing was about what you’d expect (vague window of many hours, then delivered some time after that window had passed), so I was unsure how today would go.

One thing I changed up, though, was my insoles. My Peregrine 15s come with unusually cushy foam insoles and I decided to just leave them in, instead of putting in my increasingly worn orthotics that date back to the simpler days of 2016. And it actually went fine! The only foot-related issue I had was the left shoelace threatening to come untied just as I was heading past the parking lot at the rowing pavilion. I stopped to re-tie it, then finished the run, which was already in its final km at that point.

As for the run, it went well. I started strong and only dipped to 5:40/km for one km, then finished strong, with an overall pace of 5:34/km and BPM of 148. It was the coolest1Not Fonzie cool, of course run of the fall yet–only 7C to start, but I wore two layers and the utter lack of wind meant it was fine. I never felt cold. I saw half a dozen or so other joggers, though no regulars. Someone who had just finished a run was returning to their vehicle at the parking lot by the aforementioned rowing pavilion–and had gone sans shirt. Show off. Admittedly, he had stuff to show off, but still.

One other thing of note. I am considering making an inquiry to Metro Vancouver, as the trail adjacent to the sports fields is very swampy and puddle-rich, as seen in the photo below. It’s a pretty miserable experience for both joggers and walkers. Even skirting the puddles is iffy, because the grass is often saturated with water, too. I’m hoping they finally do something about this, but I’ve been running here for 14 years now, so I’m not exactly holding my breath.

A section farther ahead of this shot is even worse.

Overall, a good run to wrap up the week. Hopefully next week stays dry and I get in all three runs.

Still Creek, post-run. The trees are looking a bit spindly, but the creek is as still as ever.

Stats:

Run 985
Average pace: 5:34/km

Training status: Maintaining
Location: Burnaby Lake (CW)
Start: 9:48 a.m.
Distance: 5.03 km
Time: 28:00
Weather: Cloudy
Temp: 7-8°C
Humidity: 87%
Wind: light
BPM: 148
Weight: 165.9 pounds
Total distance to date: 6,755 km
Devices: Garmin Forerunner 255 Music, iPhone 12, AirPods (3rd generation)
Shoes: Saucony Peregrine 15 (15/21/32)

Music: Green, R.E.M.

New shoes, old leaves, my feet

Taken after my run yesterday. I had someone ask me where I’d been, in reference to my tanned legs, and I answered, “Running.” Which is true! I put zero effort in getting a tan, it just happens. It’s my favourite kind of tan.

Also, the best tag I could find for this was “urban scenery”, which is in regard to the paving stones, not my legs.

Forcing Chromium on people in 2025 is bad design

I got an email from Keychron inviting me to try their newly-improved keyboard launcher software. Better yet, it’s browser-based, so you just open up your browser and go, no software to install or keep updated. Except for one thing…

Now, if you don’t run macros, or want to assign keys to quick launch applications, or remap keys in general, or fine-tune the RGB lighting, this software can be considered optional.

However, it’s the only way you can do a firmware update if something goes amiss with your Keychron keyboard. And that can happen!

Forcing users to use a Chromium-based browser is bad because it ignores other perfectly viable browsers, like Firefox or Safari. macOS and most Linux distros don’t even include a Chromium-based browser. The graphic above isn’t accurate, either, as it ignores other notable Chromium-based browsers, like Vivaldi or Brave. This is also a bad thing because instead of adhering to web standards (as any good web-based software should), it uses hooks that are exclusive to Chromium, helping to further entrench Chromium–and Google–as the de facto monopoly in web browsing. And Google is actively working to destroy the web right now, in order to make more money for itself.

Mostly, it’s silly forcing people to use specific browsers, because it goes against everything that the web is meant to represent.

In conclusion, Keychron is bad and should feel bad.

Run 984: Running from the blahs

View from Cariboo Dam, pre-run: Calm, and very mild for mid-November.

For some reason, I was very unmotivated this morning. Monday blahs? Moon madness? SAD1Seasonal Affective Disorder?

Whatever it was, I almost reached a point of not running at all, which would have been bad, because it has been four days since my previous run and I don’t like long gaps between runs. They have a tendency to grow.

Also, it wasn’t raining, so I really had no reason to not get out.

I started my run just shy of 1 p.m. under extremely mild conditions–it was 14C, which is 5 degrees warmer than normal, with little wind. I wore two layers, which felt like too much until the walk home, when the wind did pick up and the cooling sweat began to chill.

My ambition on the run was to just do it and have a respectable, if somewhat plodding pace. Mission accomplished, as my overall pace was 5:47/km, rather pokey by my current standards. I did get faster as I progressed, at least, and managed 5:39/km for the final lap. The trail was not too crowded even at this later time, probably because while it didn’t rain, the overall feel was kind of gloomy.

Or maybe that was just me.

Also, it’s bring-your-own-water until probably March 2026:

Winter means no water for you!

In any case, the first run of the week is done!

Silver Creek, post-run.

Stats:

Run 984
Average pace: 5:47/km

Training status: Maintaining
Location: Burnaby Lake (CCW, short loop)
Start: 12:58 p.m.
Distance: 5.03 km
Time: 29:06
Weather: Mostly cloudy
Temp: 14°C
Humidity: 82-80%
Wind: light
BPM: 148
Weight: 165.7 pounds
Total distance to date: 6,750 km
Devices: Garmin Forerunner 255 Music, iPhone 12, AirPods (3rd generation)
Shoes: Saucony Peregrine 15 (10/8/18)

Music: Face the Music, ELO

Birding, November 8, 2025: Mild marshes and chatty chickadees

Where: Reifel Bird Sanctuary (Delta) Piper Spit, Burnaby Lake (Burnaby)
Weather: Sun and high cloud, 8-13°C

Reifel Bird Sanctuary

View of the marshland, with Rusty (the pipe) barely visible.

Finally, the weather cooperated long enough to get in a day of birding, during the few hours of daylight we currently are afforded under SST (Stupid Standard Time). There was even sun, at times.

The main themes at Reifel mid-fall seem to be:

  • Chickadees everywhere, with most of them thinking every person is holding seed
  • The Canada geese have fully retreated, with many in a nearby field adjacent to the sanctuary (interestingly, a group of eight or so Sandhill Cranes were also in the same area–and we haven’t seen the “local” cranes for some time. Hmm, I say!)
  • The Wood Ducks have also seemingly vacated or hidden themselves
  • All the marsh grass is now sad and yellow

The feeders are now full of seed and suet, so most of them are seeing action, which can make for easy-ish shots. I say easy-ish because it is never exactly easy to capture a chickadee. We did not see any squirrels trying to dive onto the feeders, though that may come as the weather gets colder.

We saw the first Buffleheads of the season, which was neat, though they were not very close, which was less neat.

In all, it was a fine fall return to Reifel.

Piper Spit, Burnaby Lake

The lake, now with (more visible) water, and looking moody.

There was a family feeding birds at Piper Spit and Nic gave them the what-for! The father pretended that they hadn’t seen the multiple large signs saying NO FEEDING, including one that was literally feet away. But I guess you gotta say something when someone calls you out.

The lake level was quite low, with the west side of the pier now a large muddy patch, and the lily pads retreating enough to give the lake a more lake-like appearance. I shot artsy shots of the clouds and water.

There were also gulls on hand, probably attracted by the desiccated remains of salmon that had spawned, or tried to spawn, but ended up in the same place: dead.

Thinking back, I’m not sure that we saw any Canada geese here, either. Making up for them were plenty of Mallards, some Green-winged Teals and Wood Ducks. And, of course, coots.

With light starting to fade (see above, re: SST), we bade goodbye to the lake, but it was nice to finally get in some birding again.

The Shots

Shot with a Canon EOS R7 with 18-150 mm kit lens and 100-400 mm telephoto.

Gallery of shots:

The Birds (and other critters)

Sparrows and sparrow-adjacent:

  • Anna’s Hummingbird
  • Black-capped Chickadee
  • Dark-eyed Junco
  • Fox Sparrow
  • Golden-crowned Sparrow
  • House Sparrow
  • Red-winged Blackbird
  • Song Sparrow
  • Spotted Towhee

Waterfowl and shorebirds:

  • American Coot
  • American Wigeon
  • Belted Kingfisher
  • Bufflehead
  • Canada Goose
  • Gadwall
  • Great Blue Heron
  • Greater Yellowlegs
  • Green-winged Teal
  • Hooded Merganser
  • Long-billed Dowitcher
  • Mallard
  • Northern Pintail
  • Northern Shoveller
  • Ring-necked Duck
  • Sandhill Crane
  • Wood Duck

Common:

  • American Crow
  • Assorted gulls
  • Rock Pigeon

Raptors:

  • Bald Eagle
  • Northern Harrier

Non-birds:

  • A very few pollinators
  • Chonky gray squirrel