a tumblelog
week 48, 2020

Molting time

In the afternoon I discovered that the Chromatopelma cyaneopubescens I keep had just molted. It was resting next to its shed exoskeleton.

Chromatopelma cyaneopubescens resting next to its shed exoskeleton
Chromatopelma cyaneopubescens resting next to its shed exoskeleton.

It was already very lethargic for weeks and had been refusing food. Three days earlier I had moistened part of the substrate and placed a single drop on the hammock it webbed. Possibly this triggered the molt?

If you're interested in my current set up for this species I took some photos the 13th of November, 2020.

Also three days earlier I removed the molt of the Psalmopoeus irminia I keep from its enclosure. The tarantula had ejected it from the cork tube it hides in. I am not sure when it has exactly shed this exoskeleton. I also haven't seen the animal itself yet, because it is still hiding in the burrow it dug underneath the vertical cork tube.

Yes, I use Nix

I’ve been on the Nix train for about half a year now, and I have to say that it has completely changed how I look at my development setup. Before Nix, setting up my computer on the Mac was always a mess of Homebrew packages that I would install, being dependent on whatever’s available in the repository, and being forced to have everything installed globally. There’s also not a good way to keep track of what I have installed, there’s potential for conflicting packages, it’s just not great.

Nix changed all of that. I could now version check my environment, I could try out a package in a subshell before installing it globally, I can even easily pin a package to a specific version using Overlays. Installing things is very fast in general because Nix has great caching, which it can download and install from without any compilation or linking.

Source: Yes, I use Nix, an article by Bouke van der Bijl.

Monad Interface: Rust Edition

I assume, reader, that you have some interest in functional programming. You may even already know what a Monad is, and simply want to know how to implement them in Rust. If this is you, read on! You’ve come to the right place.

Source: Monad Interface: Rust Edition. Implementing Monads in Rust.

Apple Silicon M1: A Developer's Perspective

The excitement around Apple’s new M1 chip is everywhere. I bought a MacBook Air 16GB M1 to see how viable it is as main development machine - here’s an early report after a week of testing.

Source: Apple Silicon M1: A Developer's Perspective, an article by Peter Steinberger.

Python DoS Prevention: The ReDOS Attack

ReDos, also know as Evil Regex, is a regex that given a very specific input can result in exponential processing time. This exponential processing time will cause excessive CPU usage and may block processing of other requests.

ReDoS became infamous in 2016 when a misconfigured regular expression accidentally took down Stackoverflow.

Source: Python DoS Prevention: The ReDOS Attack, an article by Andrew Scott.

Alien: Covenant (2017)

The crew of a colony ship, bound for a remote planet, discover an uncharted paradise with a threat beyond their imagination, and must attempt a harrowing escape.

In the evening Alice, Esme, and I watched Alien: Covenant (2017). Adam watched at first as well but considered the movie too scary for his taste and went up to his bedroom to read "The Hobbit". I did like the movie and give it a 7.5 out of 10.

SQLite as a document database

SQLite has had JSON support for a while.

However recently it added a killer feature: generated columns. (This was added in 3.31.0, released 2020-01-22.)

This makes it possible to insert JSON straight into SQLite and then have it extract data and index them, i.e. you can treat SQLite as a document database. This has been possible with PostgreSQL and obviously is what something like Elastic provides but having it available in an embedded database is very nice for lightweight stuff.

Source: SQLite as a document database, an article by David Leadbeater.

Existential Haskell

The majority of software engineering literature portrays object-oriented programming as distinct from, and often irreconcilable with, functional programming. This is, of course, a false dichotomy, as the techniques encouraged by functional programming are applicable in even the most object-oriented languages. Yet object-orientation, being perhaps history’s most popular software paradigm, has popularized its tenets, and occasionally we can see them show up even in programming languages like Haskell, a language about as antithetical to the object-oriented philosophy as possible.

Source: Existential Haskell.

Reasoning about colors

In July 2020 I went on a color-scheme vision quest. This led to some research on various color spaces and their utility, some investigation into the styling guidelines outlined by the base16 project, and the color utilities that ship within the GNU Emacs text editor. This article will be a whirlwind tour of things you can do to individual colors, and at the end how I put these blocks together.

Source: reasoning about colors.

CSS Pre-processor: SASS

It can be very cumbersome writing CSS code when doing it for a large site. They tend to be repetitive, long, complicated, and messy. Debugging large CSS sites can become a nightmare because of this. Using a CSS pre-processor is the solution for many frontend developers, of which SASS is the most popular and preferred.

Source: CSS Pre-processor: SASS, an article by Mariya Videva.

Nix(OS) Thoughts

This post is relatively scatterbrained, and if you’re familiar with Nix, there’s not any explicitly new ground to tread here. However, I have enjoyed my experience with NixOS so much that I felt compelled to write this post, although there’s already a plethora of posts drilling the same points.

From time to time, I find software that immediately seems to click with me, and I start integrating it almost irreversibly into my workflow, to the point where it’s difficult to think outside of its scope. Emacs is one of these: when I began using it, I started integrating most of my software into Emacs, be it IRC or RSS.

My recent experience with NixOS, though not my first (more on that later), was like this. As of today, my two laptops and my server all run NixOS, and they all use the same configuration – just with different things enabled/disabled across different machines. From both the perspective of a system administrator and the perspective as someone with a meticulous set of dotfiles, this is one of the best decisions I’ve ever made.

Source: Nix(OS) Thoughts.

Resign An iOS App At The Command Line

Do you need to resign an iOS app due to an expiring provisioning profile or new bundle identifier, but you don't have access to the project files (.xcodeproj or .xcworkspace)? Or maybe you do have access to the project files, but your environment's version of Xcode can't build the project within the GUI for whatever reason? In this article, I'll share with you a solution that resigns an app without having to open Xcode.

Source: Resign An iOS App At The Command Line, an article by Daniel Torrecillas.

Run Pi-hole as a container with Podman

There is arguably no better way to protect devices on your local network from unwanted content than Pi-hole. Add a machine running Pi-hole to your network, and it will quietly scrub all incoming traffic from pesky stuff like ads and trackers in the background. As the name suggests, Pi-hole was initially designed to run on a Raspberry Pi. But if you already have a Linux server on your network, you can deploy a Pi-hole container on it instead. That's what I did when I replaced a QNAP NAS appliance with a ThinkPad T410 running Linux Mint. But instead of Docker, I chose to use Podman Deploying Pi-hole on Linux Mint (and by extension, on any Ubuntu-based Linux distribution) requires a few steps, but it's not beyond the wit of man.

Source: Run Pi-hole as a container with Podman, an article by Dmitri Popov.

Intuitive Guide to Convolution

Like making engineering students squirm? Have them explain convolution and (if you're barbarous) the convolution theorem. They'll mutter something about sliding windows as they try to escape through one.

Source: Intuitive Guide to Convolution.

Everything curl – Trace Options

There are times when -v is not enough. In particular, when you want to store the complete stream including the actual transferred data.

For situations when curl does encrypted file transfers with protocols such as HTTPS, FTPS or SFTP, other network monitoring tools (like Wireshark or tcpdump) will not be able to do this job as easily for you.

For this, curl offers two other options that you use instead of -v.

Source: Trace options - Everything curl

Configuring Git for Work

You can override your globally configured email inside individual repositories, allowing you to use your work email for work-related repos. Setting this up for each repo—and remembering to do so—is cumbersome. Luckily, there is an easier way to accomplish this for all repos within a certain directory.

Source: Configuring Git for Work, an article by Philipe Fatio.

Life inside a docker container

To understand how Docker works, we need to understand how the outside world interacts with it, and how it looks on the inside.

Source: Life inside a docker container, an article by Omkar Birade.

Introspection in Python

Let’s investigate how you can use built-in Python tools to both:

  • find out exactly what any module can do, and
  • find out exactly how Python will execute your code.

This makes debugging Python code much easier than in other languages I’ve used. You can ask any object what it does and what data it holds - and this is built in to the language!

Source: Python objects speak for themselves.

Interviewing Apple about its Mac silicon revolution

Some time ago, in an Apple campus building, a group of engineers got together. Isolated from others in the company, they took the guts of old MacBook Air laptops and connected them to their own prototype boards with the goal of building the very first machines that would run macOS on Apple's own, custom-designed, ARM-based silicon.

Source: “We are giddy”—interviewing Apple about its Mac silicon revolution, an article by Samuel Axon.

The "ARM™ Powered" mug

Back in the 90's I was able to get one of the official "ARM™ Powered" mugs for free. I hope that in the near future its possible to run Linux on an Apple silicon powered Mac mini so I can upgrade to such a machine. I've liked the ARM architecture ever since I read about it in Byte magazine and have fond memories of using an Acorn Archimedes A310 for many years.

The "ARM™ Powered" mug
The "ARM™ Powered" mug.