I have recently been getting into Elixir, and one nice feature it has is the pipe operator. It allows us to express a pipeline of function through which an object will be dragged. This got me thinking: with how flexible Lua is, would it be possible to add something similar to Lua as well?
LuaRocks is a community-driven package manager for the Lua programming language. LuaRocks packages can be installed globally or in the user's home directory, but sadly LuaRocks does not follow the XDG Base Directory specification. However, with a few lines of Lua code we can fix this shortcoming partially at least.
GNU Bash does not comply with the XDG Base Directory specification, it uses the classical dotfiles approach where it just dumps all its files into the home directory. It does not even have the courtesy of putting all its files in one common
~/.bashdirectory. Fortunately we can coerce Bash into compliance with a bit of effort.
I use GNU Guix as a secondary package manager on my system. Previously I have been running Kubuntu, which uses systemd as its init system, but I have since switched to Void, which uses runit. Guix comes with services for systemd and Upstart included, but not for runit. Let's find out how to create a runit service from scratch.
mancommand can open a manual page if you know its name, and the
aproposcommand can search through the manuals if you are looking for a specific word. Let's put the two to work together into a command I like to call
mancommand on steroids.
I have a number of machines I need to connect to via the secure shell (SSH), and typing in the IP address or host name by hand every time get tedious very quickly. I could use an application for that, but that's bloat. Let's instead see how we can leverage small universal tools to build an elegant solution of our own instead.
In the previous article we have seen how to pack an object, this time we will see how to unpack it again on the receiving end.
In this part of the series I want to go into how to pack data to bytes in MessagePack. We will see how to dynamically dispatch on type and how to pack a selection of particular types.