• Implementing MsgPack.rkt, part 1

    When I originally set out to write MsgPack.rkt, a Racket implementation of the MessagePack protocol, I had a hard time wrapping my mind around where to begin. I had no experience in writing a serialisation library, and reading the source code of existing implementations only revealed the what, but not the why. This is why I'm starting this short mini-series of blog posts to provide a commentary on my implementation. I hope that it will serve other people who are looking for a starting point to their own implementations.

    Continue reading…

  • A pure HTML & CSS menubar

    In the process of de-Bootstrapping the workshop I have to replace whole components provided by Bootstrap with my own constructs. The menu bar is one of the larger components I use, it's fairly complex and requires a lot of non-semantic markup to get working. In this blog post I will describe step by step how I built mine, which requires less markup and does not rely on Javascript. You can try the demo to see what we are going for (please resize your window to see the responsiveness).

    Continue reading…

  • Neovim channel for GNU Guix

    I have set up a channel for GNU Guix to build Neovim. This channel serves as an experimental staging ground for porting Neovim (and perhaps other related projects in the future) to the Guix functional package manager. When the packages are deemed stable and correct enough they will be submitted to Guix proper.

    Continue reading…

  • Introducing Quicklisp.nvim

    One of the new features of Neovim is its ability to write plugins in any programming language, provided that there is a plugin host available. I have wanted to play around with the Common Lisp host for a while, and I like for something useful to come out of it in the end, so I created Quicklisp.nvim, a plugin which allows users to manage Common Lisp libraries from inside Neovim.

    Continue reading…

  • A new static site generator

    Over two years already without rewriting the workshop? I have to rectify this, with the greatest rewrite yet! I have abandoned Pelican because I constantly had to adjust things manually after the build process, and even then there were parts of the website that weren't working. This put me off from blogging, since after each post I would have to stitch everything back together by hand. Seeing that no static site generator would be able to meet my needs I decided to instead write my own in Scheme.

    Continue reading…

  • Goodbye macOS, hello GNU/Linux

    I knew this day would come eventually, so here we are: I moved from macOS to GNU/Linux as my operating system. It has been a couple of months since then and I have settled in pretty comfortably; some things are better some things are worse, and some things are just plain different.

    Continue reading…

  • A purely functional fixed timestep loop

    There is a great article by Glenn Fiedler titled “Fix Your Timestep!” in which the author explains various approaches to writing a game loop and concludes with a loop that provides a fixed time step for simulation. If you are not familiar with this topic go read the article first and come back later. The author has written the implementation in C or C++ using a lot of mutation and looping, so I wanted to give a purely functional approach a shot.

    Continue reading…

  • Creating a mock REPL on Unix

    During the development of REPL.nvim I had to be able to test the plugin without relying on any particular REPL present on the development system. The solution was to create a mock REPL, a shell script which acts like a really dumb REPL. Here is the code:

    Continue reading…

  • Introducing REPL.nvim

    Integrating a REPL in Vim has been a difficult issue in the past, but with Nvim's built-in terminal emulator it is just a few commands away. My new REPL.nvim plugin now puts the REPL only one command away, for any programming language you wish. The end goal is to have a complete generic and configurable REPL framework which can be customised to the needs of any language and which forms a solid foundation for other plugins as well.

    Continue reading…