week 46, 2022

Prey (2022)

Naru, a skilled warrior of the Comanche Nation, fights to protect her tribe against one of the first highly-evolved Predators to land on Earth.

In the evening we watched Prey. I liked the movie a lot and give it an 8 out of 10.

Swift project in 2023

There’s a lot of exciting work going on in the Swift project, and it’s hard to keep track of it all because it’s happening in many different repositories, pull requests, and forum threads. To give the community a better view of the big picture, the Core Team surveyed workgroups and developers across the project and collected information about what they’re focused on over the next year.

Please keep in mind that nothing here is a lock for any particular release of the project — plans and priorities can change over time. This also isn’t an exhaustive list of everything happening in the project. But we hope you find this interesting and informative, and if you have questions about any of these areas, please feel free to reach out and ask for more details.

Source: Swift project in 2023, an article by John McCall.

How to use a Raspberry Pi in kiosk mode

Kiosks are designed to offer users specific information or a specific experience, while preventing access to any other activities on the device. They are often found in airports, shops, hospitals, cafes, and museums — any location where people need easy access to information or services like timetables, waiting times, product information, directions, self check-in machines, and so on.

Kiosk mode on your Raspberry Pi allows you to boot straight into a full-screen web page or an application without using the desktop environment. It’s the foundation for many different projects where you want to display information for a dedicated interaction with a user.

Source: How to use a Raspberry Pi in kiosk mode.

Tree views in CSS

A tree view (collapsible list) can be created using only HTML and CSS, without the need for JavaScript. Accessibility software will see the tree view as lists nested inside disclosure widgets, and the standard keyboard interaction is supported automatically.

Source: Tree views in CSS, an article by Kate Rose Morley.

A from-scratch tour of Bitcoin in Python

I find blockchain fascinating because it extends open source software development to open source + state. This seems to be a genuine/exciting innovation in computing paradigms; We don’t just get to share code, we get to share a running computer, and anyone anywhere can use it in an open and permissionless manner. The seeds of this revolution arguably began with Bitcoin, so I became curious to drill into it in some detail to get an intuitive understanding of how it works. And in the spirit of “what I cannot create I do not understand”, what better way to do this than implement it from scratch?

We are going to create, digitally sign, and broadcast a Bitcoin transaction in pure Python, from scratch, and with zero dependencies. In the process we’re going to learn quite a bit about how Bitcoin represents value. Let’s get it.

Source: A from-scratch tour of Bitcoin in Python, an article by Andrej Karpathy

Switching between SwiftUI’s HStack and VStack

SwiftUI’s various stacks are some of the framework’s most fundamental layout tools, and enable us to define groups of views that are aligned either horizontally, vertically, or stacked in terms of depth.

When it comes to the horizontal and vertical variants (HStack and VStack), we might sometimes end up in a situation where we want to dynamically switch between the two. For example, let’s say that we’re building an app that contains the following LoginActionsView, which lets the user pick from a list of actions when logging in.

Source: Switching between SwiftUI’s HStack and VStack, an article by John Sundell.

Demystifying Fourier analysis

I've started learning about spectrum analysis a long time ago at university, but failed to gain a true insight in how it works under the hood. For me, it was just some magical math formulas I had to memorize and know about. I knew the theory but it didn't really "click".

A few years ago I wanted to do some audio programming and play around with analyzing sound. That's how I got interested into building an intuition on how the Fourier transform "actually" works.

Source: Demystifying Fourier analysis, an article by Davorin Šego.

Perl is Actually Portable

After stumbling upon Gautham's APE Python port and seeing how far along the Cosmopolitan Libc has come along, I was inspired to see what it would take to port my scripting language of choice, Perl, to the Cosmopolitan Libc and turn it into a self-contained binary. My motivation came from wanting to prove that if Python can do it, Perl can do it too, wanting a more robust Windows Perl port for running my personal media server (MHFS), and the cool factor of hacking on Perl and the Cosmopolitan Libc.

Source: Perl is Actually Portable, an article by Gavin Hayes.

Who controls parallelism? A disagreement that leads to slower code

If you’re using NumPy, Polars, Zarr, or many other libraries, setting a single environment variable or calling a single API function might make your code run 20%-80% faster. Or, more accurately, it may be that your code is running that much more slowly than it ought to.

The problem? A conflict over who controls parallelism: your application, or the libraries it uses.

Source: Who controls parallelism? A disagreement that leads to slower code, an article by Itamar Turner-Trauring.

Building TUIs with textual: first impressions

Last week, I finally started exploring textual. The main motivation was to start implementing a few project ideas I've had in my todo list for years. I don't particularly have a preference between TUI (terminal user interface) and GUI (graphical user interface) for these projects. Seeing a few Textual demos on twitter (courtesy Will McGugan) over the past few months, I felt like exploring this framework first.

Source: Building TUIs with textual: first impressions, an article by Sundeep Agarwal.

ABI compatibility in Python: How hard could it be?

Trail of Bits has developed abi3audit, a new Python tool for checking Python packages for CPython application binary interface (ABI) violations. We’ve used it to discover hundreds of inconsistently and incorrectly tagged package distributions, each of which is a potential source of crashes and exploitable memory corruption due to undetected ABI differences. It’s publicly available under a permissive open source license, so you can use it today!

Source: ABI compatibility in Python: How hard could it be?.

80/20 Refactoring

I have found a new bugbear. Something to be creatively annoyed about. I’m going to call it 80/20 refactoring, to express the idea that a refactoring is started, but then not finished. Probably because doing all of the edge cases in a refactoring is hard.

Source: 80/20 Refactoring, an article by Adriaan De Groot.

Staged programming with typeclasses

Staged programming consists of evaluating parts of a program at compile time for greater efficiency at runtime, as some computations would have already been executed or made more efficient during compilation. The poster child for staged programming is the exponential function: to compute a^b, if b is known at compile time, a^b can be replaced by b explicit multiplications. Staged programming allows you to write a^5, but have the expression compile to a*a*a*a*a.

Source: Staged programming with typeclasses, an article by Thomas Bagrel.

Desert Star

A year has passed since LAPD detective Renée Ballard quit the force in the face of misogyny, demoralization, and endless red tape. But after the chief of police himself tells her she can write her own ticket within the department, Ballard takes back her badge, leaving “the Late Show” to rebuild and lead the cold case unit at the elite Robbery-Homicide Division.

For years, Harry Bosch has been working a case that haunts him—the murder of an entire family by a psychopath who still walks free. Ballard makes Bosch an offer: come volunteer as an investigator in her new Open-Unsolved Unit, and he can pursue his “white whale” with the resources of the LAPD behind him.

First priority for Ballard is to clear the unsolved rape and murder of a sixteen-year-old girl. The decades-old case is essential to the councilman who supported re-forming the unit, and who could shutter it again—the victim was his sister. When Ballard gets a “cold hit” connecting the killing to a similar crime, proving that a serial predator has been at work in the city for years, the political pressure has never been higher. To keep momentum going, she has to pull Bosch off his own investigation, the case that is the consummation of his lifelong mission.

The two must put aside old resentments and new tensions to run to ground not one but two dangerous killers who have operated with brash impunity. In what may be his most gripping and profoundly moving book yet, Michael Connelly shows once again why he has been dubbed “one of the greatest crime writers of all time” (Ryan Steck, Crimereads).

In the evening I started in Desert Star, a Renée Ballard and Harry Bosch novel by Michael Connelly.

Taking off with Nix at FlightAware

At the time of writing, most articles on the Nix package manager are written with individuals or small teams in mind. Unfortunately, these articles do not offer much insight or advice on adopting Nix across an entire engineering organization. This blog post is our attempt to fix that.

Source: Taking off with Nix at FlightAware, an article by Andrew Brooks.

Python, Catastrophic Regular Expressions and the GIL

The other day at work one of our python processes stopped responding. It was on one of our servers that was responsible for fetching and analyzing the web pages that we might recommend to people.

By the time I got around to debugging this problem, the last log message was over 20 minutes old - and the server had been maxed out at 100% CPU for the whole time. And while it wasn’t dead, it wasn’t responding to any requests, or even sending out any heartbeats. Even worse, in the meantime this problem had repeated itself on another server. Our whole ability to ingest new web pages looked to be going down one server at a time.

Source: Python, Catastrophic Regular Expressions and the GIL, an article by Ben Frederickson.