Just before 12PM I finished Body Of Evidence, Scarpetta 2, by Patricia Cornwell. I liked this book a little more than the previous one.
I get the occasional question about my Emacs theme, font, and other eye candy. I'm always tickled and happy to share.
Source: My Emacs eye candy, an article by Álvaro Ramírez.
SQL:2023 has been wrapped. The final text has been submitted by the working group to ISO Central Secretariat, and it’s now up to the ISO gods when it will be published. Based on past experience, it could be between a few weeks and a few months.
In the meantime, we can look at what is new. The changes can be grouped into three areas:
- Various smaller changes to the existing SQL language
- New features related to JSON
- A new part for property graph queries
Let’s look at each one.
Source: SQL:2023 is finished: Here is what’s new, an article by Peter Eisentraut.
Transformers are a new development in machine learning that have been making a lot of noise lately. They are incredibly good at keeping track of context, and this is why the text that they write makes sense. In this blog post, we will go over their architecture and how they work.
Source: What Are Transformer Models and How Do They Work?, an article by Luis Serrano.
Letty Davenport’s days working a desk job at are behind her. Her previous actions at a gunfight in Texas—and her incredible skills with firearms—draw the attention of several branches of the US government, and make her a perfect fit for even more dangerous work. The Department of Homeland Security and the NSA have tasked her with infiltrating a hacker group, known only as Ordinary People, that is intent on wreaking havoc. Letty and her reluctant partner from the NSA pose as free-spirited programmers for hire and embark on a cross country road trip to the group’s California headquarters.
While the two work to make inroads with Ordinary People and uncover their plans, they begin to suspect that the hackers are not their only enemy. Someone within their own circle may have betrayed them, and has ulterior motives that place their mission—and their lives—in grave danger.
In the evening I started in Dark Angel, a Letty Davenport novel book 2, by John Sandford.
I want to learn C, for several reasons:
- it's the granddaddy of all languages
- I need a compiled language in my repertoire
- in the short time that I've used it, it feels really simple
- flexing rights
I am all too well aware of the new hotness - Rust/Go. I am sure both of these are excellent languages, each with its unique ecosystem of features, communities, and goals. But there's a back to the roots feeling with C. Somewhere in my mind, I feel that C is still important if you want to know what the heck is going in your computer.
Source: Grappling With C: Part 1 🏋, an article by Ishaan Arora.
So over time, Emacs has become my programming environment, email client, window manager, knowledge base, and a lot more. I think I ended up using Emacs for almost as many things as possible; I even authored a few packages that implement certain parts of my workflows that weren’t readily available.
Source: 916 days of Emacs, an article by Pavel Korytov.
Async support has really been improving and expanding in Django! Since Django 3.0 with the addition of ASGI support (Asynchronous Server Gateway Interface) there has been a steady march of improvements that bring Django closer to having a full asynchronous request-response cycle.
Now we're to the point where there's enough foundational support that interesting things are possible for our "normal web apps.". This is where it gets really exciting for people! Here we'll take a look at how we can start using async views with Django.
Source: Running tasks concurrently in Django asynchronous views, an article by Mariusz Felisiak.
A while ago, I wrote about how difficult it is to get an execution plan for a parameterized query. The method suggested in that article works, but is still somewhat complicated. So I wrote a patch to support an
GENERIC_PLAN, which provides native support for that. My patch got committed by Tom Lane in 3c05284d83, which means the new option will be available from v16 on. This article describes how the new feature works and how it can be useful.
Source: PostgreSQL 16: EXPLAIN (GENERIC_PLAN), an article by Laurenz Albe.
What is Nix? Among other things, Nix is an ecosystem of tools that you can use to build software in a reproducible way: Usually, when I try to compile a program, I need to make sure that I have all libraries and other dependencies I need, in the correct versions. With Nix, you can describe exactly which other things a piece of software depends on, and also how to build those.
So I thought: Could we try to build some really old software? Like, for example, Firefox from 15 years ago? :D Let’s try that, and let’s also try to build the graphics programs Blender, Inkscape and GIMP.
While running a course on functional programming and using Haskell for the practical sessions, I have experienced several issues that act as impediments to understanding.
I still think Haskell is one of the best ways to teach functional programming. In any case, the issues below are difficulties in teaching and learning Haskell. Most of them actually make the life of a working Haskell programmer better.
Source: Pedagogical Downsides of Haskell, an article by Stefan Ciobaca.
A detective investigates the death of the patriarch of an eccentric, combative family.
Learn how Bowtie uses Nix to build network appliance images, enabling us to support a variety of formats with a high degree of code reuse and an elegant upgrade process. Ensuring that network appliances are easy to run, test, update, and operate reliably is important and underpins Bowtie’s commitment to robust simplicity.
Source: Baking Images with Nix for Robust Private Networks at Bowtie, an article by Tyler Langlois.
Recently, the machine learning community has been buzzed with discussions surrounding how many parameters state-of-the-art models are. This blog post aims to offer a comprehensive overview of parameter counting, delving into the methods of counting parameters in various transformer-like architectures from first principles and shedding light on how the majority of parameter counts can be attributed to the feedforward network. For this blog post, we will mostly focus on OpenAI’s GPT-3 architecture and Google’s PALM architecture.
Source: Transformer Deep Dive: Parameter Counting, an article by Oren Leung.
In this article we will discuss some strategies and tools to make managing disk arrays on FreeBSD (and related platforms like TrueNAS Core) much easier. These concepts also apply to other operating systems, but the tools might differ slightly.
Source: Managing Disk Arrays on FreeBSD/TrueNAS Core, an article by Allan Jude.
We recently ripped out RabbitMQ from our system and replaced it with a queue built on top of our Postgres db and written in SQL. The change took half a day to implement + test, and had a net delta of -580 LOC. Much more importantly, it drastically improved the reliability and resiliency of our system. This is a writeup of that change, the rationale behind it, and how we did it.
Source: SQL Maxis: Why We Ditched RabbitMQ And Replaced It With A Postgres Queue, an article by Charles Chretien.
A certain category of developer uses Git with a “patch stack” workflow, in which they accumulate a sequence of small, individually-reviewable commits that together implement a large change. In these cases, it’s oftentimes useful to run linters or formatters on each commit in the stack and apply the results. However, this can be tedious, and a naive approach can cause needless merge conflicts. (One workaround is to run formatters on each commit in the stack backwards.)
git testcommand offers a solution to quickly run formatters, etc., on an entire stack of commits without causing merge conflicts. Additionally, it can be performed in parallel, and it caches results so that reformats of the same commits are skipped. You can see the announcement post or the documentation for
Source: Quickly formatting a stack of commits, an article by Waleed Khan.
Go 1.20.2 fixed a small vulnerability in the
crypto/ellipticpackage. The impact was minor, to the point that I don’t think any application was impacted, but the issue was interesting to look at as a near-miss, and to learn from.
Source: A Cryptographic Near Miss, an article by Filippo Valsorda.
April 1940. The eyes of the world are on Narvik, a small town in northern Norway, source of the iron ore needed for Hitler's war machinery. Through two months of fierce winter warfare, Hitler is dealt his first defeat.
In the evening I watched Narvik: Hitler's First Defeat. I liked the movie and give it a 7 out of 10.
The FreeBSD Release Engineering Team is pleased to announce the availability of FreeBSD 13.2-RELEASE. This is the third release of the stable/13 branch.
Some of the highlights:
- OpenSSH has been updated to version 9.2p1.
- OpenSSL has been updated to version 1.1.1t.
- The bhyve hypervisor now supports more than 16 vCPUs in a guest.
- Address Space Layout Randomization (ASLR) is now enabled for 64-bit executables by default.
- ZFS has been upgraded to OpenZFS release 2.1.9.
- It is now possible to take snapshots on UFS filesystems when running with journaled soft updates.
- The kernel wg(4) WireGuard driver is now available.
- The kernel netlink(4) network configuration protocol is now available.
Source: FreeBSD 13.2-RELEASE Announcement.
Authentication and Authorization (AuthN and AuthZ) are terms that refer to discrete, specific concepts that can easily be confused.
Authentication is the process of proving that someone is who they claim to be.
Authorization is the process of granting access to a resource.
Source: Authentication vs Authorization, an article by Dan Schnau.
Last month, I posted about writing my new todo app called To-Day: why I wrote it and how I wrote it. At the time, I mentioned that I had set it up to install updates using Sparkle but there was too much detail to include in the initial post. So here, as promised, is the article about implementing Sparkle.
Source: Sparkle, an article by Sarah Reichelt.
What I’m here to convince you of today is that this principle applies additionally to error types: that is, error types should be located near to their unit of fallibility. To illustrate this point, I will follow the initial development and later API improvement of a hypothetical Rust library.
Source: Modular Errors in Rust, an article by Sabrina Jewson.
The integration tests are most effective way to test your application. Those tests are usually written by the developers themselves. The purpose of this tutorial is to show you how easy and efficient it is to write integration tests with
Source: Write integration tests with dockertest in Golang, an article by Roman Kiselenko.
If you’re used to writing unit tests, you might already know that when you’re testing a function with parameters, you want to test it using many (or ideally, all) possible inputs. That is to ensure that the function is doing what we want for anything we decide to throw at it. However, if we’re repeating the same pattern of set up data – run function – expect certain result for writing unit tests, an undesirable pattern could potentially emerge.
Source: Write Cleaner Unit Tests Using Parameterization, an article by Teagen Kiel.
Which is better, Rust or Go? Go or Rust? Which language should you choose for your next project in 2023, and why? How do the two compare in areas like performance, simplicity, safety, features, scale, and concurrency? What do they have in common, and where do they fundamentally differ? Let’s find out, in this friendly and even-handed comparison of Rust and Golang.
Source: Rust vs Go in 2023, an article by John Arundel.
Recuperating from trauma, Jennifer remains in danger as she returns to a life she doesn't remember.
In the evening Alice, Esme, and I watched Secret Obsession. The movie was OK and I give it a 6 out of 10.