It lives!

Reading with the sun in my back.

When terminals were real tty’s

For my first Retro Saturday live stream, I chose working with a PDP-11 minicomputer. I don’t own a PDP-11, nor can I afford to buy or run one, but I can simulate one realistically usingsimh, the simulator for historic computer systems.

After successfully installing Unix V7, the original Unix operating system from 1979, I ran into unexpected issues with entering source code. One of the problems was the lack of a full-screen editor combined with my lack of ed skills. Another problem was that the Backspace key didn’t work as expected; an issue I first encountered 27 years ago trying out an early version of Linux. And then there was the strange behaviour that I had to escape the number sign at the beginning of #include <stdio.h> with a backslash; otherwise it would disappear.

After the stream, I found out what the problem was: V7 was simply still geared towards being operated from a teletype, basically a typewriter with a serial port. (It would take many years until typewriters actually came with correction ribbons that enabled you to erase and overwrite. But by that time, teletypes had been replaced by serial terminals with CRT screens.)

On an input device that prints each character you type immediately on paper, it’s impossible to do what Backspace does. That’s why the Unix developers assigned special meaning to the # and @ signs.

The # sign tells the V7 shell to ignore the previously typed character. Correcting a typo would look like this: cat memp#o.txt.

For larger errors, there’s the @ sign. It tells the shell to ignore everything before it. For example: rm mem@mv memo.txt memo.bak.

Exploring historic operating systems has become a passion for me lately. Not only do I learn a lot about early computing technology. It also makes me appreciate so much more the achievements of pioneers like Thompson and Richie who didn’t have any of the conveniences software developers enjoy today.

2.11BSD seems to be a more user-friendly OS for the PDP-11, so that’s what I’m going to try next!

Supporting UDUMASS

I’d like us to start gathering funds to have the uncensored version played every day on every major TV station and streaming service.

VAX on, VAX off

In “geewiz explores computer history” news, I’m now an official member of DECUS, the Digital Equipment Corporation User Society! The reason is that HP (who bought Compaq who bought DEC) issue a Hobbyist License to DECUS members who’d like to install OpenVMS for funsies. And I have to admit, working with an old-school operating system that isn’t unixoid has been a great experience so far. I’ll do a live installation of OpenVMS on my Twitch stream tomorrow.

☑️ Go full coffee hipster

Weeknote 8/2020

As I’m pretty much Epoch years old, I celebrated a special birthday this week. It’s interesting in this context that my interest in historic computer systems has never been higher. I want that PiDP11 so hard. I’ve just applied for a hobbyist OpenVMS license. And on my live stream today, I installed the ancient Unix V7 from a virtual tape.

I mentioned in my last weeknote that I was trying out to put focus-improving background noise into my head. During one of my uses, its selection page for choosing a style of music made me remember another familiar page: the “Music” page that Calm added to their mindfulness app last year (I think?). While I’ve been using Calm for meditation for years, I’ve been using its music feature only for falling asleep easier. But since there’s also a “Focus” section, I won’t need to add another music app to my already long list of subscriptions.

That list still did get a new entry recently, though. Despite the fact that I’m fortunate in that I don’t have to schedule many meetings and calls, my calendar is one of my most important productivity tools. Most of the entries there are appointments with myself that I schedule every morning. By time-boxing my most important tasks for the day, I make sure that I actually have the time to get them done. That’s why I’m among the first subscribers of Fantastical 3 Premium, my calendar app of choice on all my devices.

My usual table at Starbucks where I sit to plan my day in the morning has a raised platform in the middle. Because of its more ergonomic height, it’s the ideal place for my iPad. The downside: It makes touching the screen inconvenient because I have to lean in and reach out with my arm. Even though there are people who started using a mouse as soon as iPadOS 13 came out, I dismissed the iPad’s mouse support because it was “only an accessibility feature”. Now that I finally decided to try connecting a Logitech Master Anywhere mouse, I am wondering how many times my “doing it the proper way” has been getting in the way of actual improvement already. Setting up the mouse (with all its 5 buttons, no driver installation necessary) took 2 minutes and it’s working perfectly. I can tap things easily, and with just a single click, I can go back to the home screen, switch to a different app or display the control center. With the iPad, the Happy Hacking Keyboard and the new mouse, I think I’ve found my mobile work endgame.

Josh Wood’s article resonates a lot with me. I’ve chosen a humble amount of “fuck-that money” over the chance of getting lots of “fuck-you money”.…

An easy and secure way to launch helper scripts in a project

On one of my recent live coding streams, a viewer asked what my abe script does. I showed that it simply launched a Ruby command in my project’s application container. Since I’m using Docker Compose to spin up most of my development environments, I have to run all development tasks within the application container. Typing abe rake test is much faster than typing docker-compose exec app bundle exec rake test, so I added this script to my project’s bin directory:

docker-compose exec app bundle exec $@

It’s a nifty time-saver, but the smart part of this isn’t the script itself but how I make helper scripts in the bin directory of my projects easy to launch without having to prepend every command with ./bin/.

If you’re familiar with how a Unix shell finds the right program to execute, you ’ll probably suggest just adding ./bin to the environment variable PATH. But that’s a risky move because you don’t want to accidentally launch a malicious script after checking out a repository that happens to have an executable ls command in its bin directory.

Once again, it was the talented devs over at ThoughtBot who found a better solution. Instead of adding ./bin to PATH, they recommend adding .git/safe/../../bin. With this entry, the shell descends into .git, further down into safe, all the way back to the repository root and only then into bin. What makes this seemingly roundabout way to find your helper scripts secure is that it only works if you’ve first manually created the subdirectory safe within .git. The latter is, after all, git’s data directory which normally doesn’t contain a directory named safe.

There you have it — easy access to your project’s helper scripts is simple to achieve. And without any additional effort, it’s safe as well!

I’ve been using DuckDuckGo as my default search engine for a while. TIL that DuckDuckGo also has practical shortcuts called bangs for searching on a specific site.

Weeknote 4/2020

In my experience, the value of getting enough sleep can not be overstated. I feel like I got more work done on Tuesday alone than in the entire previous week. And the main difference was that I started last week already tired and didn’t get enough rest to change my state until the weekend. I highly recommend the Focused podcast on this topic. Apart from discussing sleep schedules and good tactics, it also briefly mentions taking sleep headphones on trips. I have some of these in my nightstand but it never occurred to me that they could save me from lying in a hotel bed frustrated by noise outside again.

And on the topic of focus, I’m trying out two apps that might help me maintain it: One is Freedom for making sure my Pomorodo sessions are distraction-free, and the other is for creating a neutral work soundtrack.

After two weeks with the HHKB Hybrid, I can report that it’s a great travel keyboard. Typing feel and sound is excellent, and its weight and plastic cover make it very portable.

My live coding stream is jugging along nicely. Having scheduled broadcasting times has put me into a steady pace of freistilbox dashboard development. Finishing at least one issue queue item each session is very satisfying. I also enjoy being a member of the burgeoning Live Coders community. It’s a small but diverse bunch of people who have visible fun sharing their expertise and helping each other. I’m looking forward to my next session this afternoon!

“Don’t use ZFS. It’s that simple.”

Weeknote 3/2020

Lack of sleep was the theme that ran through this week. For various reasons, I didn’t get into bed early enough a single night. The immediate result of not having slept enough for me is a lack of focus. Even while writing this, I’m getting distracted by watching flocks of birds in the sky through my office window. I’ve successfully established my work routine after coming back from the holidays. I’ve also started a writing routine this week. Now it’s time to get back into a sleep routine.

The writing routine I’ve just mentioned is related to a goal I’ve set myself for this year: I want to write a beginners course for Ruby programmers with an accompanying video series. Having written a Perl programming book back in the day, I know that I have the necessary skills. But I also know how much time it takes to write a whole book. Therefore, what will make or break this project is taking the time to write. By scheduling writing time every time I plan my day in the morning, I’ve accomplished a few hours of writing this week already. It’s a good start, and it’s how I’d like to continue. If you’d like to follow along, I’m going to publish preliminary versions of the book on LeanPub and I’ll post a link here.

On the keyboard building side of things, I’ve finally received the HS60 PCB I had pre-ordered in September. I was pleasantly surprised by how well it was packaged. After all, unboxing stuff that is broken because of its flimsy packaging isn’t unknown to me. Unfortunately, the PCB is defective nonetheless. A few hours after taking delivery, I received an email apologising for a manufacturing error. A diode had been soldered on the wrong way, which renders the connected key switch unresponsive. Since the email also said that it’s okay if I try to resolve the issue myself (I can get a replacement in any case), I’m going to take a stab at replacing an SMD diode the size of a pin head this weekend. It’ll be a challenge for my shaking hands and deteriorating eyesight, but I do love challenges! Mad props to Mechboards for both their careful packaging and their transparent and hobbyist-friendly issue resolution!

Where the Magic Happens

Effortful study means constantly tackling problems at the very edge of your ability. Stuff you may have a high probability of failing at. Unless you’re failing some of the time, you’re probably not growing professionally. You have to seek out those challenges and push yourself beyond your comfort limit. —Jeff Atwood, “How to Stop Sucking and Be Awesome Instead”

Telemetry != Observability

This post helps to understand the difference: Understanding Observability.

Weeknote 2/2020

Happy New Year! I’m back from my holiday break. We spent Christmas at home and had my brother-in-law flown over. Of course, as soon as I left the office on my last work day, a cold knocked me right out and I spent most of the time until Christmas Day in bed. The next day, we went to Germany to visit family. I’m happy to report that we had a very relaxed stay.

I’m glad to be back at work. Wednesday was my first day in the (home) office. During my two-week break, I had time to develop new ideas and I’m eager to get started implementing them. I was also excited to get back into live coding. Sadly, my first stream of the year didn’t yield too many results, but I guess I should cut myself some slack; it’ll take a bit of time to get my head back into the game. Skipping lunch wasn’t the best idea either, I guess…

Generally, I wasn’t too productive over my first three work days. I got distracted too quickly too many times. I’m going to consider this my warm-up phase. Next week, I’ll build myself a better basis for getting shit done by getting back into a routine of setting myself concrete goals. I’ve also realised that deadlines create accountability and focus. Perhaps it’s time to pull this SMART method out of the drawer!

On the hobby front, it’s all good. I’ve joined a new World of Warcraft guild a few weeks ago and did a great dungeon run with my new buddies last night. And typing this post, I’m enjoying the “good feeling of oneness with cup rubber”; in other words, I’ve added an original Happy Hacking Keyboard (the new Hybrid model) to my collection.

I hope you had a pleasant start into 2020, too!

The Ariana Grande retrospective

I like how a few creative modifications can make a dull team activity interesting again!

Guess I'll give Dark a watch

In addition, German children merrily walk home from school on their own through the forest. Everybody knows that it is extremely unhealthy for Irish children to walk anywhere, especially to or from school, never mind through forests.

The sarcasm is strong in this one. Didn’t expect to grin reading an article by Breda O’Brien.

Put a dent in the universe

Markus is thinking about making a ruckus. What a great New Year’s resolution!

“We’re here to put a dent in the universe. Otherwise why else even be here?” —Steve Jobs

I’m incredibly excited for 2020.

A great example how hosting a conference is more than just running it.

It's okay if you're not running Kubernetes

Adopt technology because it’s helpful to you, not just because it’s hot. Or, as Mattias Geniar says, “get satisfaction in knowing that you’re making a difference for the business & its developers because your servers are running as best they can.”…

What a lame excuse for corporate greed. Die like the dinosaur you are, Irish Rail. “Irish Rail ban on reusable cups angers passengers”…

Weeknote 50/2019

It is true what they say about growing an audience: You have to show up regularly and in a predictable manner. Only after I settled on a consistent schedule, the number of viewers of my Ruby on Rails live coding stream has been increasing steadily. What makes me especially happy is that this makes the live chat more interesting. I’ll admit that I also had fun turning my home office into a little studio with proper lighting and two cameras. Come join me on Twitch on Tuesdays, Fridays and Saturdays at 4pm Irish time, and say “Hi!”

On my stream, I was struggling with finding a good place for some authorisation logic for more than two weeks. I finally realised that it needed its own object class. How I was missing that simple option for all this time is a mystery (and a bit of a shock) to me. I can only assume that it was part lack of OOD experience and part framework tunnel vision. But hey, just another reason to keep on truckin’!

On the keyboard front, I’ve lately been using Kailh Box Pink switches in a 60% Tofu aluminium case with HHKB layout. I really like the clicky and thocky sound, and the HHKB layout (which resembles the classic Sun Type 3 keyboard) makes coding more comfortable.

For 2020, I’ve set myself the goal of learning Javascript. I’ll use the year-end break to work through Wes Bos’ “Beginner Javascript” video course.

Tests are hygiene

Because I started programming a long, long time ago, I have to admit that I spent most of my career without writing tests to accompany my code. It was only in recent years that I learned how to use a test suite to my advantage. In hindsight, I should have started earlier because having tests completely changed my life as a software developer.

Tests create peace of mind. The amount of confidence with which I now release my code to production is worlds apart from the trepidation of past deployments when I was on edge for hours waiting for the other shoe to drop. Beginning of this year, I wrote about this in my article “Test-Driven”.

I remember how difficult it was for me to get into writing tests. Honestly, once in a while I still struggle with building clean and efficient tests. That’s why I can relate to developers who are turned off writing tests by the additional effort it takes.

Decades of me coding without a test suite prove that you can not have tests and still do a decent job. However, that doesn’t mean that it’s a good idea. Or that it’s good practice in 2019. I’d even go so far as to state that building tests for your code has become basic professional behaviour.

Martin Thompson draws an interesting parallel to the medical profession on the episode “Protocols and Sympathy” of the Arrested DevOps podcast (link jumps right to the related point in the conversation):

“A surgeon will not consider performing an operation without washing their hands.”

But did you know that it wasn’t until the efforts of people like Ignaz Semmelweis in the 1800s that antiseptic procedures were even considered par for the course by doctors? Setting higher standards for hygiene transformed medical practice.

I’ve come to the realisation that spending time on writing tests before coding business logic is like washing your hands ahead of performing surgery. In the long run, it saves time and money because it make sure that “done” means “done”. Better hygiene in medicine reduced the number of deaths and minimised the need for antibiotics and urgent follow-up operations. A robust test suite will reduce the number of outages and minimise the need for workarounds and urgent debugging sessions.

In both cases, there’s going to be far less suffering for everyone involved.

Is it just me or is Bad Lip Reading getting better all the time? “MORE STRANGER THINGS”

If you have any questions or would like to discuss a topic, tweet me @geewiz or join the chat on my Discord server!