Earlier last month, however, I decided to give again the Pi a
spin. Just to blow the dust from the top and see how it was doing,
nothing really serious. Fast forward to now, and I have just
completed a streak of over 4 weeks of using nothing but my Raspberry
Pi as my personal computer. That is: 4 weeks of using it for
everything including full browsing, messaging, and even
work-related stuff - and I have absolutely no intentions to stop
using it!
We’ve all been there: You worked on lots of changes at once, some of
which didn’t have anything in common. For the sake of convenience,
you decided to lump all of these changes into a single commit and
call it a day. But while this may seem tempting, it could actually
cause more problems down the line. Bigger commits can:
Obfuscate the source of bugs or regressions in the future.
Make it difficult to revert undesired changes without also
reverting desired ones.
Make larger tickets more overwhelming and difficult to manage.
I’ve recently developed a habit of making atomic commits to keep
my work more manageable; I recommend that you give this a try to see
if it works for you.
We have a reasonable number of
Linux servers, almost all of them running various versions of
Ubuntu. Like pretty much everyone configuring Linux servers, we give
them some swap space; the Linux kernel traditionally is much happier
if it has a bit of swap space
(cf),
although you don't want too
much. For
a long time we used a separate disk partition for this (or a
mirrored pair of them in a separate software RAID mirror device),
although Linux distributions themselves were increasingly moving to
using swap files located in the root filesystem (sometimes rather
excessively large ones; the Ubuntu 20.04 and 22.04 installers use 4
GB even for machines with only 4 GB of RAM). We didn't have any
particularly strong reasons for using a swap partition instead of a
swap file; it was just what we'd started out with and what we were
used to.
The major issue with getting sucked into a black-hole of “featurism”
is there is no single person to blame. It probably seems easy to
place all the responsibility on PMs or team leaders, but even if
they are the ones adding excessive complexity to a given project, it
is the role of developers and designers to speak up. It requires a
team effort. Therefore, the whole team needs to be on-guard to
avoid it.
HTTP (HyperText Transfer Protocol) is the underlying protocol of
the World Wide Web. Developed by Tim Berners-Lee and his team
between 1989-1991, HTTP has gone through many changes that have
helped maintain its simplicity while shaping its flexibility. Keep
reading to learn how HTTP evolved from a protocol designed to
exchange files in a semitrusted laboratory environment into a modern
internet maze that carries images and videos in high resolution and
3D.
PostgreSQL 15 builds on the performance improvements of recent
releases with noticeable gains for managing workloads in both local
and distributed deployments, including improved sorting. This
release improves the developer experience with the addition of the
popular MERGE
command, and adds more capabilities for observing the state of the
database.
What I'm documenting here is an extension of the full-bleed CSS Grid
layout. In the last version of my site, selected elements – images,
code blocks, quotes – were made wider than the page content area
using negative margins. It worked well! For this next iteration, I
explored applying these breakout offsets using CSS grid and named
grid
lines.
Earlier this year I rewrote my
website
with Next.js, React, tsx, and mdx. Having tried full-stack rust in
the past, I didn’t think its developer experience was on par with
the Next.js stack. Well times have changed, and I wanted to see just
how far I could push rust to feel like Next.js. So I did what any
developer would do and rewrote my personal site… again.
As a speaker of Greek, I’ve been fixing issues in the handling of
non-ASCII characters for over 40 years, using techniques ranging
from simple lookup tables to dynamic patching of in-memory
images. Here’s how I debugged and fixed the handling of UTF-8
characters in the git grep command, which was broken for almost a
decade.
In numerical linear algebra we are concerned with solving linear
algebra problems accurately and efficiently and understanding the
sensitivity of the problems to perturbations. We describe seven
sins, whereby accuracy or efficiency is lost or misleading
information about sensitivity is obtained.
Python package management / installation is famously difficult… or
so the story goes. This keeps getting reinforced by forum comments,
quoting that one xkcd page, and people who aren’t actually running
into the issues repeating the meme. In practice, it will take just a
few minutes to understand and not end up in a mess.
Carta made the mypy type checker an option for individual teams in
2018, but the burdensome manual work of adding missing type
annotations meant that few adopted it. Mypy would have generated an
unmanageable number of errors if we had required it universally.
Carta’s infrastructure team saw this as an opportunity to improve
the quality of life for our engineers and enhance our overall code
quality and ownership. We built an automated refactoring framework
to add those missing types, particularly useful for repaying tech
debt in a large codebase. We estimate that it has saved over four
years of manual work and greatly helped engineers focus on product
development.
Recently on the Swift Forums, someone complained that putting Swift
in the OS has only made things worse for developers. My immediate
reaction is a snarky “welcome to the world of libraries shipped with
the OS”, but that’s not helpful and also doesn’t refute their
point. So here’s a blog post that talks about how we got where we
did, covering time when I worked on Swift at Apple. But I’m going to
have to start a lot earlier to explain the problem…
At runtime, the SUPER:: method redispatch looks at the package
into which Perl 5 compiled the current method, then looks in its
list of parent classes to figure out which method to call next.
You can see the problem. This behavior is, I believe, largely an
artifact of a particular implementation -- likely the intersection
of several sensible design decisions which combined to produce an
unfortunate corner case.
The Twelve-Factor App methodology is a methodology for building
software-as-a-service applications by Adam Wiggins. We cover how
they have since evolved, and what we can learn from them today and
how they changed the status quo of yesteryear.
As a NixOS configuration grows in complexity, it may eventually
become clear that it’s not optimally organized. Maybe the entire
configuration is in a single unwieldy file and needs to be broken
up. Maybe there are bits repeated for every machine which should
really be placed in a common module. This can become a problem in
any codebase, but there is a trick for NixOS configurations that
makes the process a whole lot less stressful.
In the afternoon I finished Locklands,
book 3 in The Founders Trilogy by Robert Jackson Bennett. I liked the
final book in the trilogy a lot, a real page turner and a great
conclusion; recommended.
The Internet is full of Ads and Trackers. And a way to avoid those
is to simply not reach the stinky servers. This can be partially
done using a local DNS resolver.
If you have a static HTML website, but you want to include
comments, here’s an interesting way to do it using PostgreSQL’s
NOTIFY and LISTEN.
The big idea is to write the comments as static HTML, only when
comments change, instead of doing a database query to display them
every time. This prevents the “hug of death” if you get a burst of
traffic.
“We’re going to murder people who need to be murdered.”
So begins a press release from a mysterious group known only as “The
Five,” shortly after a vicious predator is murdered in San
Francisco. The Five is made up of vigilante killers who are very
bored…and very rich. They target the worst of society—rapists,
murderers, and thieves—and then use their unlimited resources to
offset the damage done by those who they’ve killed, donating
untraceable Bitcoin to charities and victims via the dark net. The
Five soon become popular figures in the media …though their motives
may not be entirely pure.
After The Five strike again in the Twin Cities, Virgil Flowers and
Lucas Davenport are sent in to investigate. And they soon have their
hands full--the killings are smart and carefully choreographed, and
with no apparent direct connection to the victims, the killers are
virtually untraceable. But if anyone can destroy this group, it will
be the dynamic team of Davenport and Flowers.
In the evening I started in Righteous
Prey
by John Sandford.