# 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.

• 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.

• Elaborating on a Creative Danish Christmas Tradition

“Julehjerter” or “Christmas Hearts” are woven paper baskets hung on the Christmas tree for decoration and sometimes filled with candy. They are ubiquitous in Denmark, and everyone learns how to weave these wonders from primary school, though few take it to the extreme I do.

I have been designing and weaving Christmas hearts since I was nine years old. I share my designs on my blog, and show how the traditional limits of Christmas hearts can be challenged in surprising and beautiful ways.

• 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.