The home storage crisis, via Doc Searls

Hardware

No, not that ridiculous Chia storage crisis. Doc discusses something with which I’m sure we’re all familiar:

The best new phones come with the ability to shoot 108 megapixel photos, record 4K video with stereo sound, and pack the results into a terabyte of onboard storage. But what do you do when that storage fills up?

If you want to keep those files, you’ll need to offload them somewhere. Since your computer probably doesn’t have more than 2Tb of storage, you’ll need an external drive. Or two. Or three. Or more. Over time, a lot more.

His solution was to keep his local drives, and back them up to the cloud. That works if you have a fat pipe, and are willing to trade immediate access for convenience, and the knowledge that a team of storage experts are maintaining that remote copy. The former rules out most of Australia.

The options are:

  • Use what I dubbed a Stonehenge of External Drives back in 2009. Iomega had that excellent drive catalogue software in the 1990s that let you look up which Zip, Jaz, or Ditto cart had a file you were after; I wonder if there’s something similar now?

  • Take the eggs-in-one-basket approach and buy one very large external drive. Maybe you could use another drive as a duplicate that you keep off-site, assuming you remember to do this regularly.

  • Get on board the NAS train or build a home server, assuming you want another appliance somewhere in your house you need to maintain.

  • Accept that you’ll never be able to keep anything or everything, and use the camera in your phone for ephemeral social networks like Instagram. I’m seeing more people do this, as terrifying as it sounds to me.

I went with the home server option, with a series of OpenZFS mirrored pools on a FreeBSD server. OpenZFS is the only file system I trust with anything important, but there’s no doubt building that setup was expensive. There isn’t a one size fits all solution here.

It’s funny that it took Doc reminding me of the capabilities of our phones to get me thinking about this again.


Erroneous systemd Ghost errors in FreeBSD

Software

Too long, didn’t read? I reinstalled Ghost and copied across the content and configuration file. It worked.

I get a bit into the weeds here, and there isn’t much of a satisfying conclusion, but I’m documenting the process in the hopes that parts of it might help someone. A few Ghost blogs I run for people on a FreeBSD virtual server failed last night, and were only serving their content via local caches.

I tried restarting one of them in its FreeBSD jail:

$ ghost start example-blog
	
Process manager 'systemd' will not run on this system, 
	defaulting to 'local'
[..]

That’s true, FreeBSD doesn’t use systemd. But then I got systemd-related errors anyway, which made no sense:

✖ Checking systemd unit file
✖ Checking systemd node version
One or more errors occurred.
	
1) SystemError
	
Message: Unable to load or parse systemd unit file
	
2) SystemError
	
Message: Unable to determine node version in use by systemd
Help: Ensure 'ExecStart' exists in 
	/lib/systemd/system/ghost_ghost-local.service 
	and uses a valid Node version
	
Debug Information:
	OS: FreeBSD, v12.2
	Node Version: v14.17.0
	Ghost Version: 4.8.4
	Ghost-CLI Version: 1.17.3
	Environment: production
	Command: 'ghost start local'

Checking logs:

$ ghost log --error
Process manager 'systemd' will not run on this system,
	defaulting to 'local'
[2021-04-22 16:22:17] ERROR
NAME: InternalServerError
CODE: SHARP_INSTALLATION
MESSAGE: Sharp wasn't installed

Okay, let’s install it then:

$ npm install sharp

Bingo, the most recent version requires an external library on BSD and Solaris:

npm ERR! code 1
npm ERR! path /var/ghost/node_modules/sharp
npm ERR! command failed
[..]
npm ERR! sharp: Please see 
	https://sharp.pixelplumbing.com/install for required dependencies
npm ERR! sharp: Installation error: 
	BSD/SunOS systems require manual installation of libvips >= 8.10.6

I searched the ports system and found it, courtesy of danilo@. I installed:

$ sudo pkg search vips
==> vips-8.10.6_1  Free image processing system
	
# sudo pkg install -y graphics/vips
[..]
Number of packages to be installed: 101
The process will require 768 MiB more space.
140 MiB to be downloaded.

Holy dependencies Batman. Good thing I’m running this in a FreeBSD jail so I’m keeping this all local to the ghost install, and not clobbering system versions of things.

Now I could try installing sharp again:

$ npm install sharp
added 32 packages, changed 1 package, and audited 158 packages in 6s

That looked promising. Alas, the same Ghost error from the start of this post.

I tried rebuilding in the Ghost directory:

$ npm rebuild
npm ERR! code 1
npm ERR! path /var/ghost/node_modules/sharp
npm ERR! command failed
npm ERR! command sh -c (node install/libvips && node install/dll-copy && prebuild-install) || (node install/can-compile && node-gyp rebuild && node install/dll-copy)
npm ERR! sharp: Detected globally-installed libvips v8.10.6
npm ERR! sharp: Building from source via node-gyp
npm ERR! gyp info it worked if it ends with ok
npm ERR! gyp info using node-gyp@3.8.0
npm ERR! gyp info using node@14.17.0 | freebsd | x64
npm ERR! gyp ERR! configure error 
npm ERR! gyp ERR! stack Error: Command failed: /usr/local/bin/python3.8 -c import sys; print "%s.%s.%s" % sys.version_info[:3];
npm ERR! gyp ERR! stack   File "<string>", line 1
npm ERR! gyp ERR! stack     import sys; print "%s.%s.%s" % sys.version_info[:3];
npm ERR! gyp ERR! stack                       ^
npm ERR! gyp ERR! stack SyntaxError: invalid syntax

This forum post suggested removing the Sharp directory, then try building again:

$ cd /var/ghost/node_modules
$ mv sharp sharp-backup
$ npm install sharp

Same error as above.

At this stage I just wanted to get back to my Sunday breakfast. I mulled rolling back to yesterday’s automatic ZFS snapshot, but in the end I installed a new version of Ghost, and copied across the config:

$ mv /var/ghost /var/ghost-borked
$ mkdir /var/ghost
$ cd /var/ghost
$ ghost install
$ rm -rf /var/ghost/content
$ cp /var/ghost-borked/config.production.json /var/ghost/
$ cp -R /var/ghost-borked/content /var/ghost/content

It worked. Either npm or Ruben borked a bunch of dependencies. I could get back to my breakfast, and a partner in crime could get back to her writing.

Things I learned today:

  • OpenZFS is a lifesaver. Had stuff really gone belly-up, I could have rolled back to an earlier snapshot and troubleshooted on my own time.

  • The fact you can rebuild an entire Ghost install in a few commands, and import the config and content from another install is awesome.

  • Ghost is way faster and easier for end users, but its dependency tree is so much more brittle than WordPress. I’ve been running the latter for people since 2005 without equivalent errors, save for that one adventure with PHP’s MySQL package in 2010-ish.

  • I need to skill up on node and npm package management more than I thought.


Verbal ticks that never change

Thoughts

The more I learn about improving habits, the more I realise there are certain neural pathways in my brain that are so set in stone, invoking them feels like breathing. Not only are the following words completely wrong, but my identification and awareness of their inaccuracy doesn’t shake my continued misuse of them:

  • Referring to shoulders as elbows.

  • Referring to dishwashers as washing machines.

  • Pronouncing and reading retime as re-a-time.

  • Saying etc as etcetera not ex-cetra, and referring to coffee as espresso not expresso. Wait, those are right, carry on!

  • Reading Chesapeake as cheapskate.

In my defence of the last one, I only discovered recently that Newport News is a place, not a publication. Who calls a place news? Then again, this was named by the same people who brought us Jersey City, New Jersey and Kansas City not in Kansas, but Missouri. Just like Texas City in… Texas. The same Anglo colonists would later come to Australia and bestow the engima of New South Wales on us. Is it a newer version of South Wales, or is it a newer, southern version of Wales?

I really stuck my shoulder elbow in this one.


Rubenerd Show 415: The Amehhhhh Sharipov episode

Show

Rubenerd Show 415

Podcast: Play in new window | Download

55:49 – In part one, your sophisticated host attempts to make an Aeropress coffee live on air, namedrops his friend, mentions some Minecraft LEGO adventures, and discusses some listener mail from Oskar Sharipov regarding audio recording, OGG files, and independent production. Then we timeskip a week to when your aforementioned host walks around an abandoned Chatswood street late at night to find which coffee shops are open during the Sydney lockdowns. Mmm, coffee.

Recorded in Sydney, Australia. Licence for this track: Creative Commons Attribution 3.0. Attribution: Ruben Schade.

Released July 2021 on The Overnightscape Underground, an Internet talk radio channel focusing on a freeform monologue style, with diverse and fascinating hosts; this one notwithstanding. Hosted graciously by the Internet Archive.

Subscribe with iTunes, Pocket Casts, Overcast or add this feed to your podcast client.


Official Gurren Lagann art book announced

Anime

This is the most dangerous news news I’ve read in weeks. Everyone’s favourite drill-piercing anime from the 2000s is getting a new 488-page art book with over 350 illustrations. It has all the CD and DVD covers, character designs, image boards, and those that made it into anime magazines like Newtype.

Cover of the new official archive art book... cries in wallet!

It’s available for pre-order on the Anime Style Online Shop, and Amazon Japan, to be shipped on the 10th of August this year. Remember when anime figs were released a short time after pre-orders too, and not five hundred years later!?

I blogged obsessively about this series a decade ago. There’s a reason anime fans consider it a seminal work!


Jokes as alternative input for Cunningham’s Law

Thoughts

We all know the Simpsons meme of McBain saying “that’s the joke”. But what if we could tap this potential hoard of explainers and put their retorts to good use?

Cunningham’s Law states that the best way to get the right answer on the Internet is not to ask a question; it’s to post the wrong answer. I propose jokes are as effective a delivery mechanism to achieve this desired outcome.

Exhibit A: A friend forwarded me this brilliant video showing an oscillating fan bumping a mouse to prevent a computer sleeping. It was creative, original, and just a bit silly in the best possible way.

What do you think most of the responses were? You don’t need a hint, but let me provide you with an example anyway:

You know you can turn off power saving mode…. right??

The deductive brilliance of these people is wasted on sites like Reddit. Next they’ll be asking have we considered that video doorbells render knock knock jokes obsolete, or that the chicken could have just crossed at the traffic light. You do know that airline food has a reputation for being bad, don’t you?

Whether jokes form a subset of “wrong answers”, or whether they warrant a corollary theorem to Cunningham’s Law, is something I’m still investigating.


A report on exercise and sleep

Thoughts

A report by the British Journal of Sports Medicine has been making the rounds on various news outlets. Sky in the UK was the first to break the story, as far as I can tell:

The research suggested that two-and-a-half hours of walking or one hour and 15 minutes of running per week “eliminated most of the deleterious associations” of poor sleep and risk of an early death.

Other outlets summarised the report the same way.

It helps to confirm what I arrived at myself years ago. I’ve long taken to brisk evening walks not only to burn off excess energy, but to clear my head. I suffered insomnia for years, and this was the only thing outside drugs that helped. People lament that they don’t have time for exercise; I say I don’t have time not to! Especially with IT as an occupation.

Covid lockdowns have only made this more critical. I didn’t realise how much I’d come to depend on powerwalking to train stations and the office for much of my exercise. Anxiety about the state of the world and family have played a big part in deteriorating sleep quality, but there’s no question a more sedentary lifestyle (read: being stuck at home!) has negatively fed this. Getting back into late-night walks during lockdown saw an immediate improvement.

But here’s where things get interesting. I searched around for the original study, and Men’s Health was the only outlet to link to it. A lifestyle magazine has more journalistic integrity than newspapers! I wonder why that didn’t surprise me?

Anyway I downloaded the report, and it makes no mention of walking or running whatsoever. I also couldn’t find where “two-and-a-half hours of walking or one hour and 15 minutes of running” were quantified. The full conclusion, with the widely-quote section in bold, is below:

Poor sleep was associated with a higher risk for all-cause and cause-specific mortality, and these risks were markedly exacerbated among participants with insufficient PA [physical activity]. Meeting the lower threshold of the current PA guidelines (600 MET-mins/week) eliminated most of the deleterious associations of poor sleep with mortality. Our results support the value of interventions to concurrently target PA and sleep to improve health. Future prospective studies with device-based sleep and PA assessments and trials concurrently targeting both behaviours are warranted.

MET refers to metabolic equivalent tasks. 10 hours or 600 minutes a week translates to about 85 minutes a day.

I checked the source for the PA guidelines they cited, which lead me to this 2018 paper by the American Medical Association. It also doesn’t mention walking or running, but quantifies activities and times:

Adults should do at least 150 minutes to 300 minutes a week of moderate-intensity, or 75 minutes to 150 minutes a week of vigorous-intensity aerobic physical activity, or an equivalent combination of moderate- and vigorous-intensity aerobic activity.

The original report probably tried to humanise these by saying that walking is an example of moderate activity, and running is intensive. I wish they’d said that though.

I’m probably splitting hairs; the thrust of the research is that physical activity is correlated with reduced negative effects of poor sleep, which should encourage all of us to exercise more! My worry is when the popular press summarises and distills a study into a few bytes that aren’t entirely accurate, which are prone to be disseminated without further context or references. We saw this with the “10,000 hours to be a professional” meme.


RSS feedback from Simon Ruderich

Internet

Simon emailed yesterday to say my blog RSS feed could no longer be parsed properly. He correctly identified it as a missing namespace issue. Thank you!

I’d added Google Base to my feed, but upon seeing RSS validators choke on it, I removed it. Either these validators are outdated, or simply can’t parse entirely-valid XML and RSS feeds. I can see now why this caused animosity in the past from the likes of Dave Winer.

I removed the namespace and what I thought was all the other elements, but I hadn’t removed <g:from_location> from each post itself. I’ve fixed this now.

It’s a shame, I was looking forward to using the Google Base namespace for declaring personal details in a feed that future applications could pick up, in lieu of using a social network. It’s no surprise the original spec is offline, but you can find the elements declared elsewhere.

I make it no secret that my blog also serves as a testbed and learning tool. Much of what I know about static site generators, content management systems, TLS, and FreeBSD as a webserver, all come down to my over-engineering and breaking stuff here.


You can search line numbers in Firefox!?

Software

There’s someone born every minute who hasn’t seen The Flintstones, as Merlin Mann says. I’ve been using Firefox since its original Phoenix incarnation, and I only discovered today that you can search line numbers in source.

  1. Hit Command+U or Control+U to view the page source.

  2. Hit Command+F or Control+F to bring up the find bar.

  3. Type the number for the line you want to go to.

I had no idea the line numbers are rendered as plain text alongside the HTML source of a document. I was searching for an errant %20 buried somewhere, but the first result took me to line 20. I scarcely believed my eyes.

It reminds me of an old Firefox plugin called Vimperator that would bring in Vim keybindings. I could hit a forward slash, and immediately type text to find it on the page. Alas, their site no longer resolves.

Now I’m thinking what else I’m missing out on in this complicated piece of software. I’m probably only using the same few features it shipped with from the start.


Al Jarreau: Fallin’

Media

Today’s Music Monday is a gem I only recently discovered. The imagery and lyrics are so beautiful.

Misty water colors;
Raining trees and flowers. ♫

I still kick myself that I missed the opportunity to see him perform with George Benson in Singapore so I could study for an exam. The mark was, as they say, totally not worth it!

Play Fallin'