• Portfolio

    This is a colleciton of the programming projects that I, Kristoffer Levin Hansen, have perpretrated over the years, presented in something like chronological order.

    Revy A/V

    By tradition, FysikRevyen, the physics students' revue at the University of Copenhagen put song lyrics on the big screen—for engagement—in addition to the exptected video and graphics. After watching the AV–ist switch between PowerPoint and various media players, I decided that there must be a better solution. This here is a browser–based solution, which makes use of html5's media tags (which were new at the time), and uses server-sent events through a node.js server, to synchronize timing between several browser windows.

    Status:
    Works well for the week or two a year that it's spun up, and has features added.
    Outlook:
    Depends on whether or not the next AV–ist can be convinced to adopt my approach.
    Assorted buzzwords:
    node.ja, server-sent events, theater, svg animation

    Sourcenpm

    Spellsheet

    A tool for printing spellsheets in D&D 5e. Runs in the browser, and written in the holy trinity (html+css+js). Can keep track of known spells or spell slot limits. Uses TaffyDB for database operations on a json formatted list of spells.

    Status:
    Sure does things. Some of them take a while. Probably pretty inscrutable.
    Outlook:
    ...maybe I should get back into D&D?
    Assorted buzzwords:
    Single page web app, database, TaffyDB, drag'n'drop, serverless

    SourceExampleGitHub

    ass-to-vtt

    A small npm module, that I contributed to. It converts subtitles in ass-format to vtt-format.

    Status:
    Simple, but effective
    Outlook:
    Currently gloriously frre of feature creep.
    Assorted buzzwords:
    Subtitles, node.js, stream transformer

    GitHub

    DougScore Visualizer

    Youtube car reviewer Doug deMuro uses a complicated scoring system of ten ten-point scores in two categories, wich he presents on screen with screenshots of spreadsheets. I had the very dangerous idea that there must be a better way.

    So this project uses some svg animation in a webpage. Much of the interactivity is not finished, and it needs some serious optimization to be able to handle the full set of reviwed cars. But it's complete enough that you can mostly see what I was going for.

    Status:
    Back-burner'd
    Outlook:
    I have every intention of getting back to this.
    Assorted Buzzwords:
    Single page web app, data visualization, svg animation, fuzzy search, stylus style seets, Google Sheets API, YouTube API, REST API, car reviews

    SourceExample

    Omega

    The FysikRevy at the University of Copenhagen has a preculiar habit of writing its scripts in LaTeX format. Overleaf is a website that enables collaborative writing of LaTeX documents, and it's (at least mostly) open source. And especially as our existing storage solution was being discontinued, there seemed to be an obvious fit there, for a fork of the community edition of Overleaf, adapted for our purposes.

    Overleaf is also a project under active development, and the Revue, as a student organization, turns out not to be organisatorially capable of keeping its own fork up to date, or to manage a hosting solution. And thus, the project ran aground.

    The name is due to it being intended to replace a site named Psi.

    Status:
    Worked for a little while.
    Outlook:
    Abandoned.
    Assorted buzzwords:
    Full stack web app, Docker, node.js, mongoDB, Redis, express.js, passport.js, websockets, collaborative editing, LaTeX

    GitHub

    Comic-Epublish

    A powershell script, which scrapes the panels of a (purposely unnamed) webcomic, and packs them as an epub file.

    I figured that my ebook reader would have superior ergonomics when digging through the archive on a long running web comic.

    Status:
    Done.
    Outlook:
    Done.
    Assorted buzzwords:
    PowerShell script, web scraping, epub, .NET platform

    Source

    Middlemega

    Having abandoned Omega, the problem of storing and managing access to the manuscript files of the FysikRevy (at the University of Copenhagen) remains. Overleaf provides good facilities for writing individual LaTeX files, but poor facilities for managing access to a collection of them.

    This project, then, is designed to sit in between the revue writers and Overleaf (hence the name), and keep track of which projects are part of the script file colleciton, and grant access to those that need it, as well as allowing filtering on the associated tags.

    It works well enough, but has become nearly useless, since Overleaf have been putting captchas on access to their service.

    Status:
    Feature complete, pretty much.
    Outlook:
    Made impossible by changes in external dependencies.
    Assorted buzzwords:
    php, jQuery, access control, websockets, cookies, scraping

    Source

    FysikRevyTex

    A set of python scripts, which help compile and collate the manuscripts for the FysikRevy.

    I didn't originate this one. I simply contributed and maintained for a few years.

    My most notable contributions are the integrations with Google Sheets and Google Forms

    Status:
    Works well.
    Outlook:
    I haven't got anything planned.
    Assorted buzzwords:
    Python, multiprocessing, LaTeX, pdf, git, Google Sheets, Google Forms

    GitHub

    ucph-revy.cls

    A streamlined and expanded version of the LaTeX code that the student's revues at the University of Copenhagens Faculty of Science use for laying out their manuscripts.

    It has accumulated over many years. My contributions are primarily the ability to add a thumb index, and the documentation, which is written in a “literate programming” style, or at least an appproximation thereof.

    Published on CTAN, the Comprehensive TeX Archive Network.

    Status:
    Works well.
    Outlook:
    I haven't got anything planned.
    Assorted buzzwords:
    LaTeX, pdf, literate

    CTAN