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