header

A Dutch Diceware List

Ever since I read XKCD 936, I’ve been a big fan of the Diceware approach for picking strong passwords, where you randomly pick words from a list to create a memorable passphrase. Sometimes, I need to generate Diceware passwords in Dutch for friends and relatives. Unfortunately, the Dutch word list from the Diceware page contains many uncommon words, non-existent words, duplicate words (yikes!), numbers, and characters (as the example ijler 100 leperd akolei kolkje on that page proves), which diminishes the memorability and usability of the generated passwords. I therefore created my own, improved lists, which you can try out directly from your browser on my password generator. The list consists of the most common Dutch words, and has an added benefit that it only contains words that don’t weaken security when leaving out spaces between words. This post discusses the details how I composed this list. The process and links can be used as a guide to generate Diceware lists for other languages.

Continue reading post

header

HAProxy Alerts with WebHooks

I want to be notified immediately when one of the backend servers behind my HAProxy instance goes down. HAProxy offers alerting functionality, but only via SMTP: when a backend goes down it sends an email to a list of recipients via an SMTP server you provide. Unfortunately, email isn’t an ideal mechanism for real-time notification, and I don’t have an SMTP server accessible from my HAProxy instance. In this post, I’ll show my setup of HAProxy posting its alerts to a Slack channel and the Pushover push notification service, using smtp-http-proxy and AWS Lambda.

Continue reading post

header

Extracting Surround Music Discs

I own a couple of multi-channel Surround Sound music albums on DVD, Blu-Ray, and SACD discs. I wanted to extract them all to a hard drive to avoid the nuisance of putting discs in slow (and often stammering) CD/DVD/Blu-Ray players with unfriendly navigation menus, and wanted to have a backup of the audio in case the discs go bad. Each of the different formats requires different tools to convert them to a playable format, so it took me some time to figure out how to convert each one of them. I wrote up a summary of the tools and processes for future reference.

Continue reading post

Unicode Emoji Combinations

Playing around with emoji over the weekend, I found out that the Unicode consortium did some pretty neat tricks here and there:

  • Country flags are encoded in such a way that adding a new country doesn’t require them to update a standard. They defined 26 Regional Indicator Symbols, one for each letter of the English alphabet. Creating a flag is just a matter of looking up the 2-letter ISO3166 country code (e.g. BE), mapping each letter to the Regional Indicator Symbol (e.g. 🇧,🇪), and concatenating them (e.g. 🇧🇪).
  • Skin tones have recently been added to the standard simply by providing 5 Fitzpatrick Emoji Modifiers (🏻 🏼 🏽 🏾 🏿), corresponding to different categories of the Fitzpatrick Scale. You take an emoji 👩, append a skin tone 🏽, and you get 👩🏽.
  • Combined emoji such as 👪 are actually just combinations of simpler emoji such as 👨👩👦 with zero-width joiner characters between them. A slightly longer one: 👩+❤+💋+👨=👩‍❤️‍💋‍👨

Have a look at this bin to see the emoji combinations live.

header

Optimizing Static Sites

As an excuse to play around with some web stuff, I pretended my website was getting so much traffic it was costing me an arm and leg to host it, and that my users complained it was too slow for them. Because my website is statically generated, optimizing it was pretty low hanging fruit, so I set out to do a few tweaks to optimize it, and wrote them down here for future reference.

Continue reading post

header

Simple Infinite Scrolling

While looking at the demo site of Twenty Fifteen (the theme I use for this blog), I noticed it used infinite scrolling, where more articles get automatically loaded when you reach the end of the page. It looked like a neat thing to have, but since I didn’t actually use WordPress, I couldn’t use the plugins that provide infinite scrolling. Writing it myself seemed like more effort than it was worth, so I dismissed it at the time. However, I later realized that I could actually do it with just a few lines of client-side JavaScript, and didn’t need any changes or support from the backend (or, in my case, static site generator) or the theme.

Continue reading post

header

More Fun with Monad Do-notation in Scheme

In a previous post, I played around with monad do-notation in Scheme (well, Racket) to have a nicer syntax to play with asynchronous callbacks. This do-notation is actually quite fun to use with other monads as well. What’s interesting is that the same notation gets entirely different meanings and forms depending on which monad you use it with.

There are many interesting monads, and this post shows only a couple of simple ones in action in Scheme (for which you can find the code here). If you want a much better description and in-depth of these monads (and more), I highly recommend you read the awesome Learn You a Haskell for Great Good!

Continue reading post

header

Flattening Callback Chains with Monad Do-Notation

A few unrelated topics on my reading list made me want to randomly experiment with a few things. I wanted to understand monads a bit better, see how they applied to callback-based asynchronous programming, and play around with macro programming in a Lisp dialect. This is a partial log of the theoretical-and-probably-not-directly-applicable-but-nevertheless-fun rabbit hole I dived into.

Continue reading post