Blog

Code listings with nice line wrapping and line numbers from plain CSS

2025-07-23

Code listings in web pages are often a bit of a pain to use. Usually, they don't wrap on small screens. Also, copy-pasting code from a code listing often copies the line numbers along with the code. Finally, many implementations use heavyweight HTML and/or javascript, making them slow to render. For this blog, I wrote a little CSS hack that renders nice, wrapping code blocks with line continuation markers in plain CSS without any JS.

Read more

Getting the .ipynb Notebook File Location From a Running Jupyter Lab Notebook

2025-06-29

If you need to get the path of the ipynb file in a running #Jupyter notebook, this one-liner will do the trick. It seems chatgpt is confused, and a bunch of other approaches on the web look fragile and/or unnecessarily complex to me.

Read more

8seg Technical Overview

2023-12-26

8seg is a large-scale LED light art installation that displays text on a 1.5 meter high, 30 meter wide 8-segment display made from cheap LED tape.

Read more

Ubiquiti EdgeRouter on Deutsche Telekom GPON Fiber

2022-02-21

Short tutorial on getting a Deutsche Telekom GPON internet connection running using a SFP ONU unit in an Ubiquiti EdgeRouter.

Read more

New Paper on Inertial Hardware Security Modules

2021-11-23

Paper announcement: We have published a paper on how you can DIY a tamper-sensing hardware security module from any single-board computer using a moving tamper-sensing mesh made from cheap PCBs.

Read more

Kicad Mesh Plugin

2020-08-18

I wrote a little KiCad plugin that you can use to create security meshes, heaters and other things where you need one or more traces cover the entire surface of a PCB. The plugin supports arbitrary PCB shapes, cutouts, and can route around existing footprints and traces on the PCB.

Read more

Private Contact Discovery

2019-06-22

I gave a short introduction into Private Contact Discovery protocols at our university workgroup.

Read more

Hardware Security Module Basics

2019-05-17

I gave a short introduction into Hardware Security Modules at our university workgroup, including an overview on interesting research directions.

Read more

How to talk to your microcontroller over serial

2018-05-19

Scroll to the end for the TL;DR.

In this article I will give an overview on the protocols spoken on serial ports, highlighting common pitfalls. I will summarize some points on how to design a serial protocol that is simple to implement and works reliably even under error conditions.

If you have done low-level microcontroller firmware you will regularly have had to stuff some data up a serial port to another microcontroller or to a computer. In the age of USB, an old-school serial port is still the simplest and quickest way to get communication to a control computer up and running. Integrating a ten thousand-line USB stack into your firmware and writing the necessary low-level drivers on the host side might take days. Poking a few registers to set up your UART to talk to an external hardware USB to serial converter is a matter of minutes.

Read more

Thor's Hammer

2018-05-03

In case you were having an inferiority complex because your friends' IBM Model M keyboards are so much louder than the shitty rubber dome freebie you got with your pc... Here's the solution: Thor's Hammer, a simple typing cadence enhancer for PS/2 keyboards.

Read more

32-Channel LED tape driver

2018-05-02

Together, a friend and I outfitted the small staircase at Berlin's Chaos Computer Club with nice, shiny RGB-WW LED tape for ambient lighting. For this installation, I made a 32-channel LED driver that achieves high dynamic range on all 32 channels using a cheap microcontroller by using Binary Code Modulation.

Read more

Wifi Led Driver

2018-05-02

After the multichannel LED driver was completed, I was just getting used to controlling LEDs at 14-bit resolution. I liked the board we designed in this project, but at 32 channels it was a bit large for most use cases. Sometimes I just want to pop a piece of LED tape or two somewhere, but I don't need a full 32 channels of control. I ended up thinking that a smaller version of the 32-channel driver that didn't require a separate control computer would be handy. So I sat down and designed a variant of the design with only 8 channels instead of 32 and an on-board ESP8266 module instead of the RS485 transceiver for WiFi connectivity.

Read more

LED Characterization

2018-05-02

Recently, I have been working on a small driver for ambient lighting using 12V LED strips like you can get inexpensively from China. I wanted to be able to just throw one of these somewhere, stick down some LED tape, hook it up to a small transformer and be able to control it through Wifi. When I was writing the firmware, I noticed that when fading between different colors, the colors look all wrong! This observation led me down a rabbit hole of color perception and LED peculiarities.

Read more