Ben Wiederhake

I like complex algorithms, abstract math, intricate edge case analysis, and computer science in general.


I work on many kinds of things

Practical projects

I have written and collaborated on some practical projects that are being used productively, most prominently:

  • uutils (also sometimes called "coreutils-rs") is a re-implementation of the GNU coreutils with two main goals: drop-in compatibility, and correctness/safety.
  • SerenityOS is a complete operating system, written from the ground up, with its own Kernel, windowing system, solitaire game, browser, text editor, etc. I contributed many bug fixes and features to the Kernel and other parts of the system.
  • sysexpect is a set of tools to show all the ways in which a given mounted file system deviates from a stock installation. This project focuses on Debian, and its rich .deb-package format.
  • monitor-osm-domains is a project in order to monitor the OpenStreetMap database for dead domains, parked domains, etc., with the goal of removing or flagging inaccurate or outdated data from OSM. This project spans many years.
  • der-wopper-bot is only a small project, but it sees heavy use: It's a small game bot for Telegram, including lots of unit tests. I'm weirdly proud of how well the test interface works!
More practical projects!
  • lint-po-args is a linter for translations in the PO file format. It was inspired by a grave translation error in a help message of GNU xargs.
  • matterbridge is a bridge between virtually any messaging service. Not every friend I have is on every platform. Matterbridge can copy messages between groups, so it doesn't matter whether someone reads the group through Discord/Telegram/Matrix/etc. I contributed some bugfixes and features, particularly for the Telegram bridge.
  • tdlib-purple is a plugin for Pidgin (and Finch and Adium and other libpurple-based clients) that provides access to Telegram. I contributed l10n support and some minor fixes, especially to the build system. It is a successor to telegram-purple, which I maintained until it completely fell apart, due to rapid and too disruptive API changes made by Telegram.
  • pwned_passwords is a small, easily-auditable script that can be used to check large amounts of passwords against the excellent haveibeenpwned.com service by Troy Hunt. This way, you can easily and safely check whether any of your passwords has occurred in any breach. Of course, if you have any match at all, you should change that password immediately.
  • spread simplifies spreading your backups. I like the backup program restic a lot, but setting it up and automating it is a bit of a hassle. That's why I wrote this collection of small shell scripts to help me with that.
  • randombias is a simple webpage that shows and explains a single out of the plethora of cognitive biases. I find the Wikipedia list of cognitive biases way too overwhelming to properly digest, so I built this page in order to take in one bias after the other, every once in a while.
  • atomic_store (PyPI) is a thin wrapper around atomicwrites. This way, atomic permanence of simple values is as simple as assigning to a property!
  • phf_mut (crates.io) is my own extension to the family of PHF-crates. The existing libraries exclusively handle immutable data, but my usecase involved data that needed to mutate, hence the need for this crate was born.

Theory-rich projects

I have also written several projects that are interesting Proofs-of-Concept, and show off a certain idea or theory:

  • ohno and judecca are terrible programming languages, that combines the worst of brainfuck and Malbolge. ohno takes the input source code, “compiles” it by computing some kind of hash, and interprets that as brainfuck code. I then wrote judecca to address some shortcomings, and to experiment with extensible-output hash functions like keccak.
  • ear is an incredibly simple and also accurate language detection system. I heard about complicated language detection algorithms, and wondered about a simpler approach: Just look at the text, try to recognize words, and if you recognize, say, 10 Italian words and no other language, then it's probably Italian text. Implemented, tested, and it works well enough. Also, I learned quite a bit about languages.
  • science-bridge applies a lot of science to the card game. Actually, it's a lot of stochastic analysis, math, and philosophizing about which operations might be useful in bridge.
More theory-rich projects!
  • MetaContFn is an offshoot from my doctoral research and that of a college. For a while we were worried that metastability-containment is such a strong property that the set of all metastability-containing functions might be too small, or too uninteresting. This project enumerates all such functions, and ends in the discovery of a particularly interesting and easy to understand family of functions. Read it from top to bottom, see if you can find the family of functions before I explain it directly! :)
  • general_purpose_fixedpoint is a constructive and tangible proof of an incredibly abstract and weird theorem. It basically says: For every code transformation, there is a piece of code whose behavior will not change under that transformation. You provide a code transformation, and this project will give you a fixedpoint. It will even *run* the fixedpoint, both with and without the transformation, just to rub it in!
  • awake is about the series “Awake”. It is a proof-of-concept setup that should be able to address all practical and cryptographic requirements allow the protagonist to prove that both realities exist.
  • solve99game-rs is a ridiculously hyper-optimized solver of the 99game. Through the brute-force search, the surprisingly-easy pattern to solve the game for odd degrees became obvious. However, I don't understand what the pattern is for even degrees, and OEIS doesn't know it, either.
  • steppow is a Proof-of-Concept for a PoW scheme that tries to improve the fairness, in contrast to classic Partial Hash Inversion approaches.
  • implicants are a theoretical property of binary functions. This little piece of code computes the number of implicants for an arbitrary, given function, and thus demonstrates that many functions have exponentially many implicants.

Other things that I'm proud of

These things have, in one way or another, a (marginally) positive effect on the world, or at least make me better as a person. Also, I'm somehow proud to have achieved these, even though there is technically nothing special about these. “There may be many like it, but this one is mine!”

More things that I'm a bit proud of!
  • FidgetCubeBot is a Telegram bot that acts basically like a fidget cube. Use it like a stressball.
  • plasmoire is an exploration of moire patterns and interference. Pretty wallpapers and intricate math! :D
  • lessonsonlife (repo) is an incomplete list of stuff everyone should know. I tried to assemble some foundational advice-for-everyone that I had to learn the hard way; maybe this makes it easier for someone else.
  • mastermind is my own implementation of a Mastermind-solver.
  • pixelcrush provides a canvas for everyone to draw on. A bit like r/place, but overwriting a pixel gets progressively more difficult. Originally I planned something way more complicated that never saw the light of day.
  • portable-endian is a minimalistic solution to the problem of endian conversion (big/little/host). Instead of a messy detection mechanism that ends up being faulty all the time, this approach exploits the fact that the compiler already knows the machine endianess. This code is dead-simple, ultra-portable (written in C89 and compiles in every conceivable compiler), and in many compilers these functions are compiled down to nop or bswap, respectively. The code is branch-free, and does not use any global state or initialization!
  • statictactoe (repo) started as a simple question: Can I implement TicTacToe without any JavaScript? Yes, yes I can!
  • narrate creates a narrative out of nothing. In fact, it is technically you who creates the narrative, but only subconsciously!
  • minrpn gives you the minimal expression to arrive at a goal number, given only other input numbers.

Silly things, just for the hell of it

Recreational coding, just for fun :)

  • normal-quine “decodes” its own source code. I've also written a git_quine that recreates its own git repository. QuInE recreates its own source code with randomized capitalization.
  • oeis-funfacts (repo) tells you what is currently the first uninteresting number (FUN). This is computed using the OEIS database.
More silly things!
  • emojiver (repo) is a perfectly reasonably versioning scheme. I will deny any claims that it is completely insane and unusable 🤡.
  • sentence-overflow helps you generate insanely long sentence-abominations that would make Mark Twain proud. And angry. This project
  • aeiou searches a dictionary for a particular type of tuple of words that I find entertaining. My current favorites at the time of writing are blander/blender/blinder/blonder/blunder in English, and zacken/zecken/zicken/zocken/zucken in German.
  • antiocd (repo) is a silly website that violates every single principle of good style.
  • moar-emoji (repo) enriches your life by giving you 💃M🚍O👗A💧R🐹 🐖E🚠M🍪O🐃J⏳I🍤!🫠 Also available as a command-line tool.
  • stimulus-check outputs a stimulating checkmark. Yes, I'm silly like that. :)
  • shitlist (repo) is a minimalistic website where you can't sell your stuff. No relation to Craigslist.
  • amicovid19positive (repo) answers the burning question everyone has these days: Am I COVID-19 positive? The answer might shock you!

Exploratory projects

“Can I do …?” very often has the answer “Yes.” These projects helped me explore some topics in both a theoretical depth, as well as checking whether I understood it well enough to actually complete a practical project out of it.

  • mebongo (repo) is a solver for polynomino-like puzzles, heavily inspired by the game Ubongo. The implementation is mostly written Rust, compiled to wasm, and executed client-side. My goal was to see whether wasm-integration really is that simple, and also, unrelatedly, see how computationally difficult Ubongo-puzzles really are.
  • PiWalkLn shows how Pi walks all over the place. Look at all these cool pictures! I learned a lot about projections and angles that day.
  • evo_path evolves a short path/polygon so that it looks like a given map. Isn't that neat? :D I learned a lot about evolution and paths that day. Inspired by GeneticCode, where teensy Tutrle-like programs evolve in order to hunt food and survive.
  • stackerhour was an attempt to recreate the POVRay “Stackerday” scene from scratch, in Python. I learned a lot about perspective and z-order that day.
  • noisycols and noisycols-rs: I know a thing or two about how colors work. So what happens if we start with a Voronoi-like partitioning, use a bright high-saturation color for the centers, interpolate in a gamma-corrected way across the borders, and apply Gaussian-distributed shifts to introduce fuzziness? Answer: Pretty pictures! And now my desktop background.
More exploratory projects!
  • mystrtod is my very own strtod-implementation. It should still be mostly recignizable in the Serenity implementation and tests.
  • practical-floop is a practical implementation of the BlooP/FlooP languages. This showcases how the addition of the while-keyword makes the difference between a language whose programs always halt and a Turing-complete language. I even implemented some useful macros.
  • permutators was an experiment to see which method of “player permutation” I like best. I learned a lot about randomness, fairness, and human perception. In fact, I have the impression I'm still not done yet!
  • how-to-random gives you an automatic collection of random images from WikiHow. I learned a lot about scraping and copyright that day.
  • markovimg visualizes how “uniform random in isolation, but with dependencies” look like. Isn't that neat?
  • tripmage is based on the idea that R, G, B is just the canonical color vector basis in the 3D colorspace, and can be rotated arbitrarily. The idea was to rotate the vector basis randomly as a function of the position in the image, but never got around to finish that part. Enjoy the nicely distorted picture of a train, in the meantime!
  • restic-slow is the proof of concept to demonstrate that the backup program restic used to have terrible performance in some cases. Turns out, it was a classic “accidentally quadratic” bug. (Apparently it is even cubic in some cases, but I couldn't reproduce that.) I learned a lot about flamegraphs, automation, and the Go language that day. :)
  • selfcount is an exploration of numbers that count their own zeros (or ones). As usual, turns out that there already is an entry in OEIS for that.
  • what-the-unicode is an attempt to make weird unicode-shenaniganery more visible. I already know that Unicode and human language symbols behave weirdly, but it turns out they behave even more weirdly than I thought.
  • domain-word started out by observing that some domains, like bullsh.it, sound really funny. What other domains can be constructed this way? Turns out, there's a lot of words that could be domains, and by far not all are taken!

Education

I have a M.Sc. and PhD (de: „Dr.-Ing.“) in Computer Science.

Beacons

A beacon is an easily-rememberable name that can be googled, to be used in places where a full name or specification is not really practical, and a “creative” backronym is undesirable.

Sometimes, an idea is not new. Sometimes, there are many similar things. Sometimes, you really don't just wanna have to call something “oh you know it was the thing that does XYZ, and I mean the implementation that was done by John, but not by that John, I rather mean like, uhh …”.

And that's where beacons come in. Unique names, generated by using three or four truly random words from a dictionary. After all, it's much easier to remember VIPERS_BEGAN_HOBBLE than something like YetAnotherEndianHeaderConversionLibraryAcronymPublic or even 9690a4e6-c484-47ea-baf8-3b0299462ae5. The idea is that these are the only places in the world that use these weird word combinations, so that they may be findable through Google. Apparently git repositories aren't well-indexed, so I hope to improve the situation by just putting them here and seeing what happens.

I made these libraries, but do not necessarily claim that they are of high value. I merely want the world to have an option to more easily resolve references to obscure projects, which by nature are forced to have either "creative" names, or effectively UUIDs.

  • VIPERS_BEGAN_HOBBLE identifies my very own endian conversion library. The idea is to exploit the fact that the compiler already knows the endianness of the architecture, intrinsicially, or it would not be able to emit any instructions. This uses no system-headers, no built-ins, no fancy C features, no branches, no caching, and is optimized by most compilers either to zero instructions (in case of no-op) or one instruction (usually something like bswap). So if you have code or documentation that contains VIPERS_BEGAN_HOBBLE, it probably originated there.
  • insane-triangle-banana identifies a low-quality, single-shot PEM decoder whose only purpose was to convert a single file once. I wrote this while learning about the wonders and horrors of ASN.1 for the first time.
  • CowBirdTacitFlower identifies my very own implementation of a crawler of the current collection of Mozilla-trusted intermediate CA certificates. This intermediate-ca-bundle crawler is nothing special, it is essentially just a hand-rolled kinto client, configured and pointed at the constantly-changing data store run by the Common CA Database, and whose results are easily downloadable. So, dear Mozilla, if your logs show a huge influx of requests from CowBirdTacitFlower, then even before contacting my e-mail address (which is included in the Useragent) you know that it's probably this codebase, or someone impersonating me.
  • SuperTallSoupFleece identifies the crawler of my automated OSM domain crawler and monitor. The idea is to make the project more easily findable if my crawler runs amuck. Remember, Useragents can be easily faked, so if you see SuperTallSoupFleece in your webserver log, it's not necessarily this codebase, and even if, the person running it is not necessarily me.
  • Although not a beacon in the strict sense, I hope that der-wopper-bot identifies my very own implementation of a truth-or-dare bot on telegram. There are many like it, but this one is mine.

Interested in hiring me?

I'm actually looking for work! I hope this collection of projects could convince you that I'm already able to work on challenging projects with other people or alone. I like chewing on complex problems, breaking them into smaller parts, learning more about how things work, and know to appreciate existing libraries to do the heavy lifting. Contact me at Firstname Lastname At Posteo Dot De.