Dark Angel: Good
In the afternoon I finished Dark Angel, a Letty Davenport novel book 2, by John Sandford. I liked the story, maybe a bit more than the previous book which was also good.
In the afternoon I finished Dark Angel, a Letty Davenport novel book 2, by John Sandford. I liked the story, maybe a bit more than the previous book which was also good.
This guide shows you how to run
Vi
without an operating system, bare metal. This is a follow up on my article from 2014 where I made a custom linux distro that would Boot to Vim, VIM as PID 1. This time we go further, we boot intoVi
without an operating system. This is made possible by Cosmopolitan, a libc that outputs a POSIX-approved polyglot format that runs natively on Linux + Mac + Windows + FreeBSD + OpenBSD + NetBSD + BIOS with the best possible performance and the tiniest footprint imaginable.
Source: Bare Metal Vi, boot into Vi without an OS!, an article by Remy van Elst.
Long Short Term Memory networks – usually just called “LSTMs” – are a special kind of RNN, capable of learning long-term dependencies. They were introduced by Hochreiter & Schmidhuber (1997), and were refined and popularized by many people in following work.1 They work tremendously well on a large variety of problems, and are now widely used.
Source: Understanding LSTM Networks, an article by Christopher Olah.
How is tail recursion different from regular recursion? What do continuations have to do with this, what is CPS, and how do trampolines help? This article provides an introduction, with code samples in Python and Clojure.
Source: On Recursion, Continuations and Trampolines, an article by Eli Bendersky.
A killer is stalking young lovers. Taking their lives . . . and leaving just one tantalising clue . . .
When the bodies of young courting couples start turning up in remote woodlands areas, Dr Kay Scarpetta's task as Chief Medical Examiner is made more difficult by the effects of the elements. Eight times she must write that the cause of death is undetermined.
But when the latest girl goes missing turns out to be the daughter of one of the most powerful women in America, Kay finds herself prey to political pressure and press harassment. As she starts to investigate, she finds that vital evidence is being withheld from her - or even faked. And all the time a cunning, sadistic killer is still at large . . .
In the evening I started in All That Remains, Scarpetta 3, by Patricia Cornwell.
The Rust team is happy to announce a nice version of Rust, 1.69.0. Rust is a programming language empowering everyone to build reliable and efficient software.
Source: Announcing Rust 1.69.0.
This is a collection of keyboard and trackpad workflows that I accumulated over the last 7 years of using a MacBook.
Source: Keyboard tricks from a macOS app dev, an article by Alin Panaitiu.
Some months ago, inspired by prior art, I cobbled together Docker Compose, Traefik, and some good old Bash scripting to implement a basic blue-green deployment process. It wasn't perfect, but it got the job done.
Recently I've been working on a new project and in the midst of migrating it to a virtual private server (VPS) dusted off this old implementation, making a few improvements along the way.
In this article we look more closely at how you might approach implementing zero-downtime deployments via blue-green deploys with Docker Compose.
Source: Zero-Downtime Deployments with Docker Compose, an article by Max Countryman.
A young couple travels to a remote island to eat at an exclusive restaurant where the chef has prepared a lavish menu, with some shocking surprises.
In the evening Alice, Esme, and I watched The Menu. I liked the movie somewhat and give it a 6 out of 10.
Asynchronous programming has become a fundamental skill for modern software development, enabling developers to create more efficient and responsive applications. In this blog post, we will explore the advantages of asynchronous programming and demonstrate how to harness the power of Python’s
asyncio
library to write high-quality asynchronous code. This post is designed for intermediate and advanced developers who are ready to elevate their understanding of asynchronous programming in Python.
Source: Unlock the Power of Asynchronous Programming in Python with asyncio, an article by Muhammad Raza.
Starting today, PyPI package maintainers can adopt a new, more secure publishing method that does not require long-lived passwords or API tokens to be shared with external systems.
Source: Introducing 'Trusted Publishers', an article by Dustin Ingram.
Here’s some good news: The F-Droid site now has a more or less complete implementation of GNU Emacs for the Android platform. I’m not sure Emacs on a phone is all that useful other than for dealing with Org files and there are several apps already available for that on both the Android and iOS platforms. On a tablet, though, it could be a real game changer. Emacs on a tablet—perhaps with a real keyboard—would enable truly remote work. Yes, you can carry your laptop around as many of us do but a tablet is much easier especially in situations such as air travel.
Source: Emacs Comes to Android.
I sometimes get asked why I use Perl so much. Am I not a fan of strongly typed functional programming? Yeah, I am. Ask me to write something that is known, for sure, to become a big system and I’ll pick strongly typed functional programming without hesitation. But most of the software I write is not for sure going to become a big system. Here’s what Perl does well:
- It is installed by default everywhere. I don’t need administrative privileges to deploy Perl code almost anywhere. That is extremely empowering.
- With a great amount of discipline, Perl scripts can be successfully scaled up into large, complex systems.
- I can be confident that a Perl script I write today will run unaltered 10 years from now, modulo external collaborators.
- Perl can be used nearly as a shell replacement for very quick scripting.
- Perl has a small set of core syntax and is very extensible and flexible in adopting new paradigms.
Source: Why Perl?, an article by Christoffer Stjernlöf.
In this article, we’re about to dive into the uncharted OpenGL on Linux waters. After briefly explaining how the OpenGL calls are routed from your application to the GPU, we’ll look at the NixOS special case. We’ll then explore how we can run the OpenGL programs built by Nix on a foreign distribution, such as Ubuntu or Fedora. Finally, we’ll introduce NixGLHost a new approach to solve this problem.
Source: The Nix, OpenGL and Ubuntu Integration Nightmare, an article by Ninja Trappeur.
PostgreSQL 16 will support hexadecimal, octal, and binary integer literals as 0x, 0o, and 0b prefixes and underscore as a separator. These notations make it easier to read and understand code, interact with data stored in memory, and represent larger numbers more concisely.
Source: Underscores in numeric constants in PostgreSQL 16, an article by Pavlo Golub.
Today I used the following snippet to find files larger than 1G in my home directory:
find ~ -type f -size +1G -exec \
du -hs {} \; | sort -rh
The find
command calls (-exec
) the du
command for each file (-type f
)
that is larger than 1G (-size +1G
). The option -hs
shows the size
in human readable format for each file. The result is piped to sort
which sorts on the human readable format (-h
) in reverse order
(-r
).
Note that the backslash in the snippet is used to continue the current line on the next one due to the width restriction of this blog. It should be immediately followed by a new line. Feel free to type the snippet on a single line, without the backslash.
Many javascript projects have install instructions recommending that people use a CDN like jsdelivr or unpkg to include the code on their website. This has the advantage that it's quicker to get started with, and it's often claimed to load faster. However, it also has downsides when it comes to privacy, security, and systemic risk, and it may actually be slower in some common cases. Here are some reasons not to use a javascript CDN, and some alternatives to consider instead.
Source: Reasons to avoid Javascript CDNs, an article by Wesley Aptekar-Cassels.
Nix flakes allow to include system dependencies from software that are not published on the nix packages repository but that are themselves flakes. This post will explain how to achieve this.
Source: Composition of Nix Flakes, an article by Didier Amyot.
As a winter associate at Trail of Bits, my goal was to make two improvements to the GNU Project Debugger (GDB): make it run faster and improve its Python API to support and improve tools that rely on it, like Pwndbg. The main goal was to run symbol parsing in parallel and better use all available CPU cores. I ultimately implemented three changes that enhanced GDB’s Python API.
Source: A Winter’s Tale: Improving messages and types in GDB’s Python API, an article by Matheus Branco Borella.
Security researchers are examining newly discovered Mac ransomware samples from the notorious gang LockBit, marking the first known example of a prominent ransomware group toying with macOS versions of its malware.
Source: Apple's Macs Have Long Escaped Ransomware. That May Be Changing, an article by Lily Hay Newman.
Today I wanted to create a bar chart for a new blog post on blog.airsequel.com. It was supposed to show the number of days between each SQLite release. I decided to use Haskell, but I couldn't find any good code examples out there. So, I went ahead and wrote the code from scratch. 😮💨 I'm sharing it here in hopes of sparing the next person the time and effort. 😅
Source: How to create a bar chart from a CSV file with Haskell, an article by Adrian Sieber.
In Go as it is presently…
- Function variables are pointers
- They point to small structs
- Those structs contain either
- just the pointer to the function code for simple functions
- or to pointers to autogenerated wrapper functions and receivers &/or function parameters in the case of method calls and closures.
And why can’t you compare them? I expect it was just too hard to agree to a convention about which pointers would be considered equal when there are closures and method calls and function wrappers around.
Source: What is a Go function variable?, an article by Phil Pearl.
I highly recommend that you go ahead, delete your dev setup today, and document the steps it takes to get it up and running. Future you, and future contributors will thank you. A lot. Seriously.
Source: Delete Your Dev Environment Regularly, an article by Alex Riviere.
The Internet is a mess, and one of the biggest parts of that mess is Network Address Translation (NAT), a technique which allows multiple devices to share the same network address. In this series of posts, we'll be looking at NATs and NAT traversal. This post is on NATs and the next one will be on NAT traversal techniques.
Source: Everything you never knew about NATs and wish you hadn't asked, an article by Eric Rescorla.