on OS user interfaces

A lot of the time, our preferences for what an OS user interface should look like come down, ultimately, to either nostalgia or past experiences. Someone gets annoyed at a UI change and their instinctive reaction is to assume that whatever “the old way” was, was inherently better.

This especially applies to people who use Linux (or any of the BSDs, but for purposes of this page, I’ll refer to any of the “free desktops” as Linux), since it is rarely ever their first operating system – usually they started off with either Windows or macOS, and picked up habits and assumptions from that.

shogi move parser

I’ve decided to write a little script using JS that reads a Japanese notation for a move in shogi and tries to convert it into English.

ascii table

A table describing the ASCII character set.

midnight commander subshell bug

After updating Alpine Linux on my VPS to version 3.14, I noticed that Midnight Commander (mc) crashed with a segmentation fault around 90% of the time, and at other times it ran, but refused to accept any input.

At first, I thought that it had to do with the OS update itself and something was wrong with the version of mc or some other package built in Alpine, so I tried building mc with ncurses instead of slang as it was before, but to no effect. To make matters worse, the bug disappeared when I tried to trace it in strace or valgrind.

linux framebuffer palette switching

Just like graphical terminals such as urxvt, the Linux framebuffer has an option to change the built-in palette. Distributions like Ubuntu use it to make the palette look nicer during bootup.

Tags:

cuda debugging notes

So, turns out, when you run a program that uses CUDA, either directly or indirectly (my program runs on CUDA, but uses OpenCL instead), there are issues preventing libasan from working. More specifically, if you run a program with libasan, the CUDA libraries will not work, and the OpenCL ones will not display an NVIDIA platform as available in the first place.

From my experience, seems like there are similar issues preventing Valgrind from working, either.

irssi tips and tricks

Recently found myself using irssi on a setup that’s slightly unusual, so I’m recording the information I found useful for posterity.

  • To switch windows, use Alt + number keys for windows 1-10, or Alt + top row (qwertyuiop) for windows 11-20.

  • Alt+Left / Ctrl+p and Alt+Right / Ctrl+n switches to the previous or next window respectively. It loops around from first to last or vice versa.

  • The script revolve is useful, since it compresses consecutive joins/leaves onto a single line. Useful for channels where there’s not a lot of activity.

Tags:

vim hints

These are some of the useful settings and functions I use when working with vim.

note on cpan

Note to self: if your distro’s repositories don’t have a Perl package, it’s best to install them from CPAN instead. A tool called cpan minus (In Alpine, its packaged as perl-app-cpanminus) can do it easily, either installing packages into one’s home directory or globally.

midnight commander tips

Assorted key combinations that are useful in MC.

Tags:

freetype hinting settings

I have a bunch of FreeType settings that I prefer on my systems, and these differ from the defaults on basically every Linux distro these days.

2026 update: This is a rather old post, made back when the monitors I used were pretty low-resolution, and saving every pixel of space seemed like a good idea. These days, high-DPI monitors are more common, and the old settings I preferred look absolutely terrible on these.

Tags:

Alpine Linux

This page will host an assortment of tips and tricks collected while using Alpine Linux.

trying to do assembly-level debugging in gdb

GDB seems to have been clearly made with source-level debugging in mind, the kind where the source code of the program is available. Sometimes this is not the case, or you just don’t want to bother looking for the source code. Here I’ll put a bunch of useful commands.

assorted shell scripts

shell scripts:

grab lines from dictionary, convert them into up-to-16-byte strings, do a binary dump

for x in `cat input_words.txt`; do echo $x | tr -d \\n | dd ibs=16 conv=sync 2>/dev/null | xxd; done

convert a .vgz directory to a .vgm one, along with updating all the playlists:

rename ".vgz" ".vgm.gz" *.vgz; gzip -d *.vgm.gz; sed -i "s/\.vgz/\.vgm/" *.m3u

(requires rename from util-linux and not from perl)

profiling utility hints

Some small hints for profiling utilities used on Linux systems.

shell parameter expansion

This is a small cheat sheet to remind me of how parameter expansion works in unix shells.