Software

I write quite a lot of software, for many different purposes and using many different languages. Most of it ends up being handy tools for my own idiosyncratic needs. Some of it becomes mature enough for being potentially useful for a broader audience.

I extensively use Free software, so most software I write I also naturally release as Open Source, usually under the GPL license.

• 2-year project with full-time software developer for improving coding theory in Sage

The main thrust of this project is to vastly enhance the coding theory part of Sage. We want to develop a whole range of functionalities for coding theory that may also be useful for other areas: combinatorics, cryptography, computer science, etc. Our intended audience consists of researchers, students, and teachers. We also keep in mind the engineering community.

The project employs David Lucas as a full-time software developer. I act as main technical project leader. The other participants are Clément Pernet and Daniel Augot. The project started October 1st.

• An algebraic coding theory library for Sage

This is a library for experimenting with algebraic coding theory in Sage, with an emphasis on decoding algorithms. It contains many decoding algorithms for algebraic codes, in particular a rather efficient implementation of the Guruswami–Sudan algorithm.

The code is written in the Sage extension language to Python. For anyone working in algebraic coding theory, it should provide a much stronger basis than what currently exists in Sage, and if one is working on decoding algorithms, it is quite powerful indeed.

• Implementations of algorithms proposed in publications

This is implementations of algorithms described in papers but which I have not merged into Codinglib (see above). It can also be useful as examples and simulations of how to call functionality in Codinglib. It is structured into .sheet-files, which are clear-text analogues of the Sage Notebook’s worksheet files.

• Adding appear/disappear to Sozi presentations

Sozi is a really nice open source javascript library which makes SVG drawings into presentations. Most of my talks are made using Inkscape and Sozi.

One feature I lacked from Sozi is to make objects appear and disappear on certain frames. This feature has also been requested on the project page. Based on a manual solution from Sozi’s main developer, senshu, I wrote a small Python script for automating the process as well as making it much more flexible.

• Traditional Danish Christmas ornaments with a severe twist

I can’t help putting a link the page of my Christmast-passion: creating small pieces of braided paper-art called “julehjerter” or “Christmas hearts”. All Danes learn how to braid the standard checkerboard-pattern, but few take the pasttime to the extreme that I do every year.

I have been designing, cutting and braiding Christmas hearts since I was nine years old. I made this web page as inspiration for other people that the traditional limits of Christmas hearts can be bent, twisted and even broken.

• Scripts for automatic fixing of BibTeX files

This repository contains the following tools for simple, automated fixes in BibTeX files:

• abbrev.pl: Abbreviate journal, conference, etc. names in BibTeX files.
• freshen.pl: Various small fixes: protect capitalisation, optionally remove unwanted properties on entries.
• Typesetting chord-annotated songs beautifully

Musicians often play songs from lyrics annotated with simple chords, since they know the basic melody and tempo beforehand. Such texts are usually typeset in Notepad or similar using a fixed width font, such as the songs on UltimateGuitar.com. The result is usually visually jarring, prints even worse, and takes up a lot of space on screen or paper.

chords is a tool for automatically converting such chord-annotated lyrics into beautifully typeset pdfs. One has further control, such as varying font size and multiple columns.

• Logic solver and cryptographic protocol analysis

Based on the theoretical description in the PhD thesis by Christoffer Rosenkilde Nielsen, Christoffer and I implemented a Horn logic clause solver in OCaml. The solver precisely solves any formulas in the class H1, but uses an iterative refinement framework invented by Christoffer for precisely or approximately solving much outside this class.

The HornSolver is the computational core of CryptoKlaim, a language developed by Christoffer for describing cryptographic communication protocols and analysing them for confidentiality and integrity. I implemented CryptoKlaim as well as a user-friendly front-end for reading off the analysis results.

The two projects have their own webpages with more information: The Iterative HornSolver and CryptoKlaim. Both projects are released under the GPL v3.

• Extensive configuration of an incredible editor

Things I do with Emacs (and for which I have specific setups):

• Programming (Python, Sage, Ocaml, Haskell, C, scripting, …)
• Math experimentation in Sage (using sage-mode)
• Writing papers (in LaTeX)
• Reading/Writing email (with mu4e)
• Keeping a calendar (using org-mode)
• Keeping lists (todos, reminders, document outlines, …, all with org-mode)
• Password management (using my own package simple-secrets)
• Web-form filling in Firefox (aided by Vimperator)

My Emacs use is powered by extensive customised setup. Notably:

• Evil (Vim modes and keys)
• Session-switching (using my own package mdesktop.el)
• Remapping shortcuts for the Workman keyboard layout

I put my .emacs online in case it is useful for others.