It’s Time to Replace Urban Delivery Vans

Via Kottke.


GVC Chromebox to Vanilla Chromebox

Oh, man. Recently got my hands on an old Asus CN65. Back in the olden days at Google we were always tinkering with these devices (and they were a breeze to support). Great “parent devices” as they are really hard to destroy (aka download dodgy shit and fill them with viruses).

This post is mostly for myself, as a reminder, for the next time I need to do this.

Seems like this Chromebox was actually a GVC unit. Google has this thing where devices auto-install the Google Meet app and autoload it at boot. Officially, it’s called CfM (Chrome (or ChromeOS?) For Meet). It requires a separate licence in your Google Admin to get this to work.

GVC is actually Google Video Conference. We called anything "Google Meet" simply GVC. A GVC unit, jump on a GVC, the GVC room, etc.  

Anyhow, GVC units aren’t all that useful and while you can cancel the Meet app from launching at boot (Ctrl, Alt, S I think), it’s annoying as it requires that combo at every boot.

I remember there used to be a way to move them back into the main track (instead of the GVC track), but here my mind gets a bit fuzzy. It was a key combo and/or an internal tool that would move the serial number to the stable channel.

It also seems ChromeOS is now at 116 and in my time at Google we were somewhere between version 60 and 85. So, needless to say, things have changed.

So I tried the usual way of powerwashing/wiping the device (move it to developer mode and back again), etc. It kept asking for the corp enrolment (and I was certain the device was no longer corp enrolled). Apparently, GVC units just, by default, ask for corp enrolment now because you can’t really use them without the special license anyway.

There were some hacks that didn’t work for me.

Turns out this Reddit post had the answer. Basically:

  • get ChromeOS version 88 (or lower?),
  • burn it to a USB stick,
  • boot into recovery mode and restore it.
  • It’ll reboot,
  • and then you can sign in right away with a Gmail account (as opposed to a corp (GSuite/GApps) account) and it’ll boot the stable channel (running CrOS v88).

At this point, you can upgrade safely to the latest CrOS version.

It has been a few years since I last saw a ChromeOS device. Oh, the memories…

While I really tried to get the Pixelbook to replace my Mac, I never quite succeeded (even got an SSH server running in Docker to use as jump box with all my tools etc)… I missed too many of my shortcuts, habits and full-fledged terminal to make it work. I guess it was a bit like an iPad: great device, can be useful, but for anything serious I always yearned back to my Mac.

Looking at my NextDNS logs on the other hand… Damn, this device is noisy. An avalanche of requests to Google domains. Even when it’s not doing much…

Software www

Check websites with LanguageTool for typos

This is quick and dirty (and with the help of ChatGPT).

FlatTurtle has a new site, and there’s been some fine-tuning here and there that led to a few typos creeping in. I wanted a quick tool to plug in a page, and that would highlight possible mistakes.

I’ve been a personal (paying) user of LanguageTool for a few years now (European, and less spammy and dodgy than Grammarly)

Started off with a terminal tool, but in the end that wasn’t working out (hard to get the colouring to work and make it clear enough).

Figured a website would be easier:

  • Insert a site
  • Let it go through the LanguageTool API for mistakes*
  • Show what is potentially wrong and explain why so I can go and edit it

(*) Surprisingly hard because it needs to trim all HTML and js and other crap. And it has issues detecting headers (without punctuation) from paragraph text, etc).

It’s far from perfect, but it works well enough for half a day of fiddling around.

You can hover your mouse over the red words to get some information as to why something is wrong.

The code, provided as-is, is here, and you can run it using:

python3 -m pip install flask selenium beautifulsoup4 geckodriver-autoinstaller requests
python3 --api-key KEY --username EMAIL

And opening http://localhost:5000.

EMAIL is your login, the KEY can be found here.

Have fun.

Apple Hardware Software

Script to display Mac battery information

You can see how this script makes that couple very happy.

Quick and dirty script that shows your Mac battery information (health, cycles, etc). If an Apple keyboard or mouse is connected, it’ll also display the battery % of those.

# Battery information
battery() {

	if !ioreg > /dev/null 2>&1; then
		echo "ioreg not found. Exiting."
		return 1

	_ioreg=`ioreg -l`
	_profile=`system_profiler SPPowerDataType`

	MOUSE=`echo $_ioreg -l | grep -A 10 "Mouse" | grep '"BatteryPercent" =' | sed 's/[^0-9]*//g'`
	TRACKPAD=`echo $_ioreg -l | grep -A 10 "Track" | grep '"BatteryPercent" =' | sed 's/[^0-9]*//g'`
	KEYBOARD=`echo $_ioreg -l | grep -A 10 "Keyboard" | grep '"BatteryPercent" =' | sed 's/[^0-9]*//g'`
	CYCLE=`echo $_profile | grep "Cycle Count" | awk '{print $3}'`

	if [ -n "$MOUSE" ]; then
		echo "Mouse: "$MOUSE"%"

	if [ -n "$TRACKPAD" ]; then
		echo "Trackpad: "$TRACKPAD"%"

	if [ -n "$KEYBOARD" ]; then
		echo "Keyboard: "$KEYBOARD"%"

	if [ -n "$CYCLE" ] && [ "$CYCLE" -ne 0 ]; then
		echo "Mac battery "`echo $_profile | grep "State of Charge" | awk '{print $5}'`"%"
		echo "Charging: "`echo $_profile | grep "Charging" | head -n 1 | awk '{print $2}'`
		echo "Cycles: "$CYCLE
		echo "Condition: "`echo $_profile | grep "Condition" | awk '{print $2}'`
		echo "Health: "`echo $_profile | grep "Maximum Capacity" | awk '{print $3}'`

Outputs something similar to this (no mouse or keyboard connected):

nazgul ~ $ battery
Mac battery 54%
Charging: No
Cycles: 224
Condition: Normal
Health: 89%

This works on zsh and may not work in bash.