Calling a C Library for QR Generation from Chicken Scheme

1 February 2023

I wanted to create a QR code from within Chicken Scheme, but I couldn't find an existing Scheme library or chicken Scheme egg online that would let me do this. Fortunately, Chicken Scheme is pretty easy to integrate with existing C code.

The first thing I did was I wrote a Hello World in Scheme and another Hello World in C, and checked that I could get both of these to run (using the chicken compiler and GCC).

Continue reading →

Generating New Email Addresses for new services

14 December 2022

I wrote a little script recently to generate new email addresses using the CloudFlare API.

By doing this, I can create loads of email addresses really quickly and set up disposable ones for new services or categories of services. The script either randomly generates an identifier, or will use a value provided as input.

Continue reading →

A very simple way to use NVM without sourcing it in your rc (+ works with fish)

14 August 2022

I mainly use fish, and NVM does not work with fish out-of-the-box.

Even if I happen to be using zsh/sh/ksh/bash, I don't want to be loading NVM when I start a new shell, when I am only using it on occasion.

Continue reading →

Unix Shell Scripting

29 March 2022

While building a simple HTTP Server in Racket, I wanted to automatically restart the server when I changed the source file.

To achieve this, I wrote a simple shell script.

Continue reading →

Racket HTTP Server 2 - Reading the Path

28 February 2022

Previously, I wrote a simple HTTP server in Racket. The next step I will take with this project is to figure out how to extract the HTTP method and path from the request.

The handle method's first argument, in, is an input port, from which the request can be read. We can read the first line from the request using the read-line function:

Continue reading →

Adding TLS/SSL to a web service with Nginx

23 February 2022

As I previously mentioned, it is almost always better to use a battle-hardened old favourite for security software, rather than to roll your own.

With Nginx, you can add SSL/TLS support in front of your web server, using tried and tested software.

Continue reading →

Using Template Haskell to bundle data into an executable at compile time

21 February 2022

Often, a program will rely on static data - lookup tables, files to serve, initial values for internal data structures, and so on. Template Haskell can be used to load files, and execute code, at compile time.

This is a very gentle introduction to the otherwise often intimidating world of Template Haskell. For the sake of simplicity, I am keeping a narrow focus: loading a file, and then manipulating the data from that file, both at compile time.

Continue reading →

Racket HTTP Server

6 February 2022

When I start playing with a new language, I like to have a look at how I could build a simple HTTP server in that language.

Racket's racket/tcp library provides us with functions for managing TCP connections. Using this, we can implement a server.

Continue reading →

Mycs - Logistics Optimisation - Declarative Constraint Programming

16 October 2021

Using Constraint Programming / MiniZinc for Manufacturing Optimisation

Used Declarative Constraint Programming (with MiniZinc) to optimise the assignment of Purchase Orders to Manufacturers, increasing Supply Chain cost-efficiency while also introducing checks and safeguards. Built a RESTful API wrapper in Go to allow the constraint solver to be accessed over the network.

Continue reading →

Implementing a Feistel Cipher in Haskell

1 May 2021

I was reading about Feistel Ciphers, and thought it would be fun to implement a toy one. I have shared it below.

Wikipedia Feistel Cipher ArticleGithub Gist: Haskell Feistel Cipher

Continue reading →