Projects

    Go, Python, GPT-2
    AI-powered demotivator generator

    Warning: Output may be nsfw/offensive

    This is due to being trained on real demotivators from open directories, some of which seem to have come from old /b/.

    ~6000 demotivators were gathered, and then split into image and caption fragments using Go, which were labelled / OCR’d by Google Cloud Vision. The resulting text blocks were then used to train OpenAI’s GPT-2 language model.

    GPT-2’s output then likewise consists of image labels and captions. The labels are searched on DuckDuckGo images to find a suitable picture, to which the captions are then appended.

    Companion daemon for Ripcord (shareware Discord client) for better notifications

    Ripcord is an amazing alternative Discord client, but its notifications support is rather lacklustre, displaying them only for DMs.
    Since it’s closed source shareware, I can’t go in and tweak it to my liking.

    So, this daemon displays notification following Discord’s own settings in a superior way.

    Web, Python, HFST
    Hybrid Icelandic + Old Norse morphological analyzer

    Done as my final project for a Computational Morphology class. Quite limited (e.g. no strong verbs), but still handles things like double U-umlaut.

    Backend is a Python + Flask app interacting with HFST to output JSON.

    Collects Wiktionary definitions into the Kindle format for in-book lookups

    I couldn’t find a Finnish ➔ English dictionary for Kindle that supported in-book definitions, so I wrote this program to generate one from Wiktionary.

    Web, Vue.js
    Migrates subscriptions and preferences between Reddit accounts.

    Chiefly an exercise to learn Vue.js and how to perform an OAuth flow without a dynamic backend.

    Github

    Rust
    Terminal program for interactively opening search engines / parametric URLs.
    Warcraft III Replay Parser library & WASM frontend/demo

    WarCrumb - my Warcraft III replay parser written in Go, mostly based on a 2007 fanmade spec of the binary format, updated for the new Reforged edition with my own investigations using a hex editor.

    WarCrumpet - in-browser frontend to the parser, powered by WebAssembly.

    Streams data out of Classic WoW addon-space to the outside world

    Since WoW addons have no filesystem or network access, it does this via a thin strip of pixels in the corner of the screen that are then read by a Go program.

    Web, JS
    Lightweight webclient for Wiktionary

    Because Wiktionary’s mobile site is bloated.

    Github