Projects

On this page I give a brief overview of some of my personal projects and open source projects I’m involved in. Most of the links below will take you to my github, which is where you’ll find more detailed information about each project.

NetBSD

I’ve been a long-time user of NetBSD and run it on a wide range of hardware (sparc, mips, vax, i386, amd64, aarch64, …​) Over the years I have made minor contributions to various parts of the system. Some more recent ones include the following:

cgdconfig-zfs

Added zfs verification to the cryptographic disk driver configuration utility cgdconfig(8). This allows using raw cgd devices as vdevs in a zfs pool without requiring an intermediate disklabel or partition table. (PR #58212, committed.)

netbsd-cgdzfsroot

An initial ramdisk with encrypted ZFS root pool support. Using this ramdisk it is possible to set up a system in such a way that the only unencrypted data is the UEFI boot partition and all persistent file systems are ZFS.

netbsd-thinkpad-battery

Adds sysctl tunables allowing the user to set charging thresholds, inhibit charging, or force discharge ThinkPad batteries in order to extend their battery lifespan.

netbsd-acpibat

Adds sysctl tunables for control method batteries implementing the ACPI battery maintenance data (_BMD) and control (_BMD) methods. I don’t have the hardware to test this, so feedback is welcome.

netbsd-autofs

I am currently working on getting nested automounting to work. While the new (FreeBSD) autofs automounter is in many ways better than the previous Berkeley implementation, lack of nested automounting is a serious regression and needs to be fixed.

In addition, I also contribute to pkgsrc, a cross platform package management system and NetBSD’s default package manager. I maintain a number of packages, among them are: LuaJIT{2,21,-git}, neovim-git, neatroff-*, RE/flex, 8bc, py-notmuch2, py-lieer, and others.

Machine Learning

Recently, I’ve worked on a Python package for neural style transfer that I call NSTesia. I started this project to become more familiar with TensorFlow, and to test and solidify my understanding of the literature. These are some of the style transfer algorithms I implemented:

johnson-fast-style-transfer

A pre-trained neural network is employed to compute a style vector for a given style image. This vector is then used to train a style transfer network to turn arbitrary content images into stylized images (pastiches).

johnson-fast-style-transfer-pytorch

Another implementation of Johnson’s style transfer model, this time using PyTorch. Uses Hydra for simple training configuration. Pre-trained models for various styles made available via torch hub.

dumoulin-multi-style-transfer

Style vectors are computed for a small number of style images instead of just a single one. A style transfer network is trained to turn arbitrary content images into pastiches in any (mix) of the given styles.

ghiasi-arbitrary-style-transfer

A style transfer network is trained on pairs of style and content images to produce stylized versions of images in previously unseen styles.

kolkin-style-transport

A iterative approach to style transfer based on methods of optimal transport.

Other ML related projects I have been working on include the following:

milligrad

A basic tensor/backprop and neural networks package built on top of NumPy. Essentially a vectorized version of Karpathy’s micrograd.

Sun OpenBoot Firmware

I was introduced to Unix workstations in 2002 and have been fascinated by them ever since. From that first Ultra 80, I’ve always had a particular interest in Sun Microsystems. These days I own a small collection.

The default resolution of Sun workstations for the longest time was 1152x900, an awkward mode when trying to use LCD displays. Luckily the hardware is quite flexible and with a few modifications to the firmware it can be convinced to produce high-resolution LCD-friendly VESA video modes.

fcode-tools

A collection of tools I wrote to aid in reverse engineering and modifying OpenBoot device firmware.

sslx-vesa-mod

With this mod, the SPARCstation LX onboard CG6 framebuffer will generate resolutions up to 1600x1200 or 1920x1080. The repository also contains an explanation of how to reprogram the ICS1562M pixel clock generator chip.

tgx-plus-vesa-mod

The Sun TGX+ framebuffer is very similar but has 4MB of VRAM, enough to increase the resolution to 1920x1200 or even 2560x1600. This repository also contains an explanation of how to load firmware over the network in testing.

cg14-vesa-mod

The SPARCstation 10SX/20 onboard CG14 is a 24-bit capable framebuffer with up to 8MB VRAM. It can display the same resolutions as the TGX+ in double-buffered mode, or up to 1600x1200 or 1920x1080 in 24-bit true color. Getting X11 to work on a modified CG14 required some changes to the xf86-video-suncg14 driver for which I submitted the necessary patches.

The Sun Framebuffer Logo Collection

I’ve always thought that the boot screen on a Sun workstation looked really cool with the little logo next to the banner. During my work on the framebuffer firmware, I decided to start a collection of these logos (sun-fb-logos). This project turned out to be surprisingly popular: it was shared on Hacker News, and since then people from all over the world, including several former employees of Sun Microsystems, have contacted me to contribute.

SPARC Emulation

I wrote a simple Solaris 7/8 device driver for the Aurora Personality Chip (apc-driver). The APC provides power management functions for the SPARCstation 4/5—​the default target of the QEMU SPARC emulator. Enabling this driver inside the virtual machine significantly reduces host CPU load, allowing me to run it on a laptop without draining the battery too quickly.

Hardware

While I am more comfortable with software, I have done a couple of minor hardware projects, too.

p7x-floppy-adapter

Long ago I came into the possession of an IBM PS/2 P75 Portable, a briefcase shaped computer with a 10 inch orange gas plasma display. After diving deep into the spec sheets I finally figured out how to get it to boot from a standard PC floppy drive. I designed a little PCB to convert a PC drive to one suitable for the IBM PS/2 P70/P75.

m48txx-battery-fix

Certain Sun SPARCstations use M48TXX NVRAM chips to store their mac address, serial number, and other configuration. These chips have a builtin battery which fails eventually. This little PCB provides a clean solution to the issue.

vs3100-scsi-terminator

Replacement for the proprietary, hard to find, and expensive SCSI terminator required to run a VAXstation 3100. I know it looks like regular wide SCSI, but it really is not!