In the afternoon I discovered that the Chromatopelma cyaneopubescens
I keep had just molted. It was 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
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.
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.
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.
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.
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.
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
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.
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
outlined by the base16 project, and the color
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.
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.
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.
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.
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.
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.
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
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.
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.
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.