Thinkpad X62 Review

The Thinkpad X62 is a “restomod” of the well-received Lenovo Thinkpad X61 (produced in 2007) with a replacement motherboard and components, and usually a display upgrade, in the original case and keyboard. It's an interesting exercise in combining the lost positive attributes of older hardware (high-quality keyboard, 4:3 screens, comfortable surfaces) with some of the gains from newer hardware (faster components, broader and newer hardware standard support). I've been using one as my primary laptop since 2018, and these are my thoughts about it.


An Interesting Coding Problem

A colleague referred me to an interesting coding brainteaser. The problem statement was (paraphrased) roughly as follows:

Given a list of integers, produce an output list which consists of the product of every integer in the input list except the one at the corresponding index.

For example, given the list [1, 2, 3, 4, 5], the output should be [120, 60, 40, 30, 24].

As a followup, what if you can't use division?



I spent the day porting my blog from a hacked-together homegrown static generator using Python and Jinja to Pelican, a free software static generator using Python and Jinja. The result should be at least 90% invisible, which is partially a result of the shared foundations, and partially a testament to good, flexible design on the part of Pelican.


Compile-time Typechecked Sum Types in Java

Java has compile-time typechecked sum types with exhaustive matching built into the base language.

“Of course it doesn't” you say? “Their absence is one of Java's most glaring deficiencies”? Well, kind of. Read on to see what I mean.


A Backwards Git Tutorial, Part 1

Most git tutorials start with teaching you a series of commands to manipulate a repository and only follow up later, if at all, with the effects those commands have on the underlying data. This is great for getting started quickly, but I think it underprepares users for more advanced usage: there's a fairly low limit to the number of opaque commands one can memorize to resolve a particular situation, and eventually every advanced user will need to learn what the underlying data model is and how git's commands manipulate it. So this tutorial is backwards: instead of starting with commands and working down to the underlying model, we'll start with the model and work up.

This tutorial was inspired by comments on this post.