I recently spent a day tracking down a fairly weird and hard-to-find bug. It required very little advanced knowledge, just the ability to read code and some tenacity. The target audience for this post is newer coders who are intimidated by complex repos or bugs. I want to show that you don’t need special skills or lots of experience to do this sort of thing. Start by searching for key words in the repo, follow the code backwards, and take lots of notes. If you don’t have a key word, look for a file named like it does what you want and start checking method names.

There’s a lot you can do in Linux via a GUI (graphical user interface), and if that’s how you like using a computer, more power to you. Every once in a while, though, you’re going to want to run a program that doesn’t have one, or has options you can’t access via the GUI. Generally, when you run into one of those, you’ll look around for help. The help will come in the form of advice to “run this command” followed by an arcane invocation. I’m going to teach you how to understand those invocations by teaching you the basics of the conventions used to create them.

CSS Grid is the new hotness for website layout design. It expands the concepts introduced in flexbox to two dimensions, and adds some other improvements. One problem with Grid is that it limits you to just the grid dimensions. I recently created a two-column grid, and needed to center something across both columns. Now, you cannot tell grid something like “put this element centered on the line between these two columns.” So we have to fake it.

The popular way to combine datasets in SQL is join, which combines data horizontally - the result set has the columns from both datasets. However, I recently pushed an update to The Fencing Database that involved combining results from two queries vertically - I wanted to treat the results as one long result set. The way to do this is an SQL command called union.

The Emacs philosophy is “do everything in Emacs.” To that end, there are many emacs modes that act as frontends to external command-line programs such as ledger. One common problem is that, depending on how you start your Emacs, it might complain about being unable to find those external programs. This is a common problem if you start Emacs as a systemd service or if you use the GUI version on a Mac.

Linus Torvalds, the creator of Linux, wrote Git as a source code management system (SCM) for the Linux kernel. Legend has it he wrote the whole thing in a weekend, and it was perfect. I was interested in how it all happened, so I went through the Linux Kernel Mailing List (LKML) for April 2005 looking for the real story. What I found was a series of emails that detail the beginning of one of the most successful pieces of software of all time. It started with frustration, and ended with usecases never dreamed of by its creator.

Comma-separated value files, or CSVs, are the default file format. There is no formal csv spec the way there is for JSON - you have to deal with whatever people come up with to separate their values. Programmers everywhere curse these files, since anything that can go wrong with them usually does.

Standard advice for a new programmer is “Google is your best friend.” And it’s true! All the information you could ever want is in google, along with all the information you would have wanted if you were asking the question five years ago, or fifteen. How can you filter out the old, useless, out-of-date results? You can learn how to write a better query, but that will only get you so far. Here’s how you can fix the problem for real, painlessly and automatically.

Number three will surprise you! This post courtesy of the six hours I spent trying to figure out how the hell RVM still had stuff in my $PATH.

Every six months or so, my friend runs a live-action version of the card game Mafia, but on steroids. He used to run it by hand using Google forms, so I offered to build him a website to make it easier for the users and automate some of the more tedious calculations.

A lot has changed since the last update - refactoring, bugfixes, and new tech added. In this post I’ll go through it all. It’s finally in a state where it seems reliable and usable right off the bat. You ought to be able to download it, install the dependencies, and run it on whatever files you want.

The current sftp implementation on bash is primitive and out-of-date. There's no history, no tab-completion, and no arrow-key support. So I decided to write a modern version. It's a lot easier than it sounds, I just took a couple Python libraries and meshed them together, pysftp and prompt_toolkit.

Last week, I released the first video created using this program - you can find it here. I had gotten bored of fixing minor bugs, so I made a reddit post giving myself a deadline and finished up the last few things. I hit a few dead ends and made a few wrong turns as well - I'm including them here for completeness' sake. Much like the last post, this is a mostly-unconnected series of bugs.

When we left off last time, I had what amounted to a minimal working example for taking a video of a bout, extracting the touches, and putting them together in a single video. Now I'm going to turn it into a real program that other people can use. Won't get there today, but I'm making progress.

This is a very boring discussion about making something very hype. You have been warned. I'm going to take you from video to a fully functioning highlight reel in a few easy steps, and a couple more moderately difficult ones. We're assuming a unixlike here - it should work equally well on Mac or Linux. Note that this is an early version of the code and the algorithm is subject to change.