Ruben the university graduate

After more spam, I got an email I’ve been waiting on for a decade.

Hi Ruben,

Congratulations on completing your courses! Your faculty has advised that you have met the academic requirements of your course, and that you may be eligible to graduate.

Essential information to ensure that you are eligible to graduate on time is included in this email.

Brace yourself, these are going be two long, boring, self-absorbed paragraphs.

I started studying Computer Science at UniSA in Adelaide in 2005; I even did one of the first Rubénerd Shows about it. Then family stuff (and the precursors to that) happened. Then we moved again, I returned to Malaysia to help out, did correspondence, moved back to Singapore again, family stuff, transferred back to Adelaide, more family stuff, moved back to Singapore, transferred, re-enrolled for correspondence, more family stuff. By 2010, I was understandably perturbed by their lack of flexibility in response to issues outside my or my family’s control.

Then to add insult to injury, when we moved back to Sydney in 2011, UTS didn’t recognise my prior studies on account of them being done more than two years prior. So! I started and finished from scratch. Then ran into issues with my professional practice diploma required for graduation due to work scheduling issues. I was faced with the prospect of having to re-enrol and take fully one third of the courses again (making that three times now?); something I wouldn’t have done. I thought I was destined to be another of those “he did okay, and he didn’t even graduate university!” guys. Fortunately, after a lengthy appeal process and emails to the head of Information Technology, that took several months, I was approved for graduation.

It took more than 12 years, enough red tape and bureaucracy to encircle the sun at least nine times, duplicating almost two degrees worth of work, my beloved late mum dying in the process, five international moves, eight house moves and more HECS debt than I know what to do with, but I’ve finally graduated.

People say closure is overrated, but as they say “I legit cried after this”.

Lead generation spam

Have you ever wondered why you started getting spam to a certain address, when you’ve never had correspondence or even an account with a company before? There’s an entire industry of trading email addresses for euphemistically-termed “marketing campaigns” harvested from users under false pretences, spiders, or even downright database theft.

So when I get spam from people wanting to sell me addresses to send spam, it makes me smile. We’ve come full circle people! Now all we need are offers to sell me emails offering people lists of addresses to sell to people.

Some are funnier than others. This was my favourite one for the week:

I was just wondering would you be interested in reaching out to the following Microsoft Install Base of for your lead generation and marketing initiatives: [..]

  • Microsoft HyperV and VMware

I’d almost be tempted to ask for all the addresses they have of users on Microsoft’s VMware. Maybe I should ask if they have any Yokogawa Xen users as well.

Housing policy for renters

This article in Domain was a corker: Australian housing policy needs to shift away from investors to cater to renters, say experts:

With home ownership on the decline, experts are calling for the housing system to be overhauled to cater to a growing proportion of renters.

Just over half of adults own their own home in NSW and Victoria

Or written with a different spin, “just under half don’t”. It’s an incredible number.

[..] and the trend is for this figure to dwindle over the next few years, new data from the Household, Income and Labour Dynamics in Australia survey shows. This would leave the majority of adults either living with friends and family or, more likely, renting.

Notice the headline in this article (and similar ones in the Murdoch and Fairfax press) wasn’t “cater for owner-occupiers”. Most of us aren’t renters by choice, we’re here because institutional investors have priced us out by treating housing as a speculative, wealth-creating resource instead of a dwelling to live in and raise families.

The flow-on effects will be multi-generational, and last decades. And I’m one of the lucky ones; I don’t live on the street, or in my car, or permanently on the couches of friends. That’d be brutal; I don’t even have a frame of reference to genuinely empathise with what that would feel like.

And the tech press thought San Francisco was bad.

Lynda email newsletters

A recurring theme here is abuse of customer address lists to send unsolicited newsletters. Or as I put more colourfully two years ago:

For reasons I can’t penny fathom, the new black is taking the email addresses of all your customers, and subscribing them to your newfangled email address they neither wanted, nor ever requested. [..]

Whoever is advising companies to abuse their email lists like this, please stop for the good of humanity and all that we hold dear.

Now is doing it:

We’ll share new courses, recommended content, and special offers with you by email. Please see the suggestions below as examples. You can update email preferences at anytime by following the instructions in the footer below.

I’ve unsubscribed, and am cancelling my account. Companies need to get the message (HAH!) that this isn’t acceptable. Like chocolate sauce on a steak, which vegetarians can’t even eat.

Hugo generating content in memory

This may be a little “inside baseball” as my American friends would say, but it was something I learned.

This site has been statically generated since 2013, originally with Jekyll and now with Hugo. Avoiding a CMS renders (HAH!) the site easier to maintain, and faster. The only obvious downside is the time to generate content each time.

ASIDE: If Jekyll takes too long to render your 4000+ blog posts too, try Hugo. Go being orders of magnitude faster than Ruby shouldn’t have come as a shock, but wow is Hugo fast. It also has nothing whatsoever to do with the fragrance.

I generate content on the server, but I was also wary of wearing out my SSD with thousands of small file writes each time I previewed a change. So I wrote a couple of terrible shell scripts that:

  1. Created and formatted a new RAM disk
  2. Symlinked Hugo’s public folder to the disk
  3. Generated a site preview with Hugo
  4. Destroyed the disk after terminating Hugo

Since upgrading to Hugo 0.16 though, I noticed nothing was being written to the RAM disk. I thought it was a bug in my script; maybe the symlink wasn’t being created.

Turns out, the answer was right in the shell:

$ hugo server --watch
==> Started building site [..]
==> Serving pages from memory.

Huzzah! And from their docs:

‘hugo server’ will avoid writing the rendered and served content to disk, preferring to store it in memory.

This makes me happy. It’s also another reason to try Hugo if you haven’t yet.

Covering laptop camers

Leading Daring Fireball prognosticator John Gruber had a rare slip when admitting he was less than enthusiastic about covering laptop cameras with tape:

I think this is nonsense. Malware that can surreptitiously engage your camera can do all sort of other nefarious things. If you can’t trust your camera, you can’t trust your keyboard either. Follow best practices to avoid malware in the first place — don’t install Flash Player, and don’t install software from sketchy sources — and you’ll almost certainly be fine.

This is conflating security with privacy. It’d be bad enough knowing our banking details and other credentials were compromised, without knowing some creep was watching us during the ordeal too.

I don’t think getting access to email accounts was the primary concern of children and their parents in Pennsylvania when their webcams were remotely accessed in 2010:

According to the lawsuit filed by a high school student and his parents, the Lower Merion School District of Ardmore, Pa. has spied on students and families by “indiscriminate use of and ability to remotely activate the webcams incorporated into each laptop issued to students by the School District.”

Michael and Holly Robbins of Penn Valley, Pa., said they first found out about the alleged spying last November after their son Blake was accused by a Harriton High School official of “improper behavior in his home” and shown a photograph taken by his laptop.

I use whole drive encryption. I also have a separate password for my login and 1Password, and either carry the device with me or stash it in a locked apartment. Security is about layers, so covering your laptop camera is perfectly rational.

Rubénerd Show 347: The Harrison Ford episode

Rubénerd Show 347

Podcast: Play in new window | Download

53:33 – Harrison Ford has done a lot of movies (GET ME OFF THIS PLANE). Also plummeting down a lift shaft, making the mistake of asking a question online, lack of empathy over anonymity, nostalgia for the early days of Twitter, Jimbo listener feedback, American education nomenclature, and drops of Jupiter’s clouds. Music by the fabulously talented Who-ha once more.

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

Released July 2016 on The Overnightscape Underground, an Internet talk radio channel focusing on a freeform monologue style, with diverse and fascinating hosts.

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

Rubénerd Show 346: The cereal episode

Rubénerd Show 346

Podcast: Play in new window | Download

36:29 – Ruben discusses mixing your own carbohydrated breakfast, and comments on Shambles' Facebook adventures. Also feedback from episode 345, aircraft identification, umbrage, MythBusters and Penn and Teller Bullshit, rental inspections, weekend getaways, and debuting the all-new Moment with Clara Segment.

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

Released July 2016 on The Overnightscape Underground, an Internet talk radio channel focusing on a freeform monologue style, with diverse and fascinating hosts.

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

Alternative Let’s Encrypt Clients

I haven’t blogged about Let’s Encrypt yet, but I’ve been using it professionally and personally since it came out of beta, and am very impressed. I’d argue the client and automation even beat the fact its free.

To meet their goal of a universal and accessible client, it’s necessarily large. For most projects it makes sense to use this and save yourself problems, but there may be times where you need something lighter–weight. I’ve used two alternatives, and can vouch for their awesomeness.


This takes the form of a tiny Python script that works great unmodified on the Debian and CentOS VMs I’ve tried on Joviam. From the [acme-tiny repo]:

This is a tiny, auditable script that you can throw on your server to issue and renew Let’s Encrypt certificates. Since it has to be run on your server and have access to your private Let’s Encrypt account key, I tried to make it as tiny as possible (currently less than 200 lines). The only prerequisites are python and openssl.

It does require manual steps, but then again that’s why you’re going with a light weight solution.

This is my current favourite. As Ansible users would be keenly aware, FreeBSD and NetBSD don’t ship with Python. I don’t want to install an entire dependency chain to run a script from cron, so this works (though it still needs bash or zsh). From the repo:

This is a client for signing certificates with an ACME-server (currently only provided by letsencrypt) implemented as a relatively simple bash-script.

It uses the openssl utility for everything related to actually handling keys and certificates, so you need to have that installed.

There are dependencies, but are handled gracefully even with BSD/GPL differences:

Other dependencies are: curl, sed, grep, mktemp (all found on almost any system, curl being the only exception)

FreeBSD and NetBSD users can use git-lite to pull the repo, or on FreeBSD you can just install it from ports.