In the early afternoon I finished Hunting Time, A Colter Shaw Novel Book 4 by Jeffery Deaver. I liked the book; recommended.
We have a tiny book club that meets every weekend to read and discuss the book Mastering Emacs, 2022 edition written by Mickey Petersen. We go through a few pages of the book every time we meet, do some demos, and talk about the concepts we learn from the book. In the 36 meetings that we have had so far, we have spent approximately 26 hours together carefully reading every line of the book, trying out the lessons on an actual editor, and experimenting with the new concepts. In the last 3½ months, we have completed four chapters of the book. We are currently reading the fifth chapter. In this post, I'll share what the journey has been like so far and a few interesting things we have learnt.
Source: Mastering Emacs Together, an article by Susam Pal.
A reclusive writer is dead. And her final manuscript has disappeared . . .
Someone is stalking Beryl Madison. Someone who spies on her and makes threatening, obscene phone-calls. Terrified, Beryl flees to Key West - but eventually she must return to her Richmond home. The very night she arrives, Beryl inexplicably invites her killer in . . .
Thus begins for Dr Kay Scarpetta the investigation of a crime that is as convoluted as it is bizarre. Why would Beryl open the door to someone who brutally slashed and then nearly decapitated her? Did she know her killer? Adding to the intrigue is Beryl's enigmatic relationship with a prize-winning author and the disappearance of her own manuscript. As Scarpetta retraces Beryl's footsteps, an investigation that begins in the laboratory with microscopes and lasers leads her deep into a nightmare that soon becomes her own.
In the evening I started in Body Of Evidence, Scarpetta 2, by Patricia Cornwell.
Swift 5.8 is now officially released! 🎉 This release includes major additions to the language and standard library, including
hasFeatureto support piecemeal adoption of upcoming features, an improved developer experience, improvements to tools in the Swift ecosystem including Swift-DocC, Swift Package Manager, and SwiftSyntax, refined Windows support, and more.
Source: Swift 5.8 Released!, an article by Alexander Sandberg.
I’ve been involved in Rust and the Rust community for many years now. Much of my work has been related to creating infrastructure for building GUI toolkits in Rust. However, I have found my frustrations with the language growing, and pine for the stable, mature foundation provided by C++.
Source: Moving from Rust to C++, an article by Raph Levien.
I made some strides in the practical understanding of tensors, convolution and how that becomes the foundation of a variety of DNN architectures referred as Convolutional Neural Networks. I then bit the bullet and began extracting the minimal source code I need from the OIDN library. I know there will be more snippets to extract, but hopefully those will be more mathematical in nature, and less structural.
Source: DNND 2: Tensors and Convolution, an article by Max Liani.
In “Relieving your Python packaging pain”, I shared what I’ve witnessed to be the most reliable way to avoid many python packaging problems, for a large number of users. This article listed the steps to take without justifying them, delegating this responsability to today’s post.
Among other things, it advised not to use homebrew, pyenv, anaconda, poetry, and other tools. The reason is mostly because they have too many modes of failure, while solving problems that people won’t have as long as they are battling more primitive issues.
Instead, it focused on providing a basic procedure that will let most people do their job and have the highest possible rate of success.
There are various ways and tools to generate test data, each with its own strengths and niche. In this post, we will walk through the process step by step using the full power of SQL.
Source: Test Data Generation: There and Back.
Recently, I fixed the indentation errors in dozens of online Python programs that I didn't write. For each of the Python programs, I knew the expected output. For most of these programs, it was easy to fix the indentation errors. However, some of the programs were difficult to fix, because they had multiple indentation errors (e.g., a program with all the indentation removed!), and because I was unfamiliar with the programs.
Source: The Difficulty of Fixing Python Indentation Errors, an article by Bob Lyons.
Is your database ready for production?
You've been building your application for months, you've tested with beta users, you've gotten feedback and iterated. You've gone through your launch checklist, email beta users, publish the blog post, post to hacker news and hope the comments are friendly. But is your database ready for whatever may come on launch day or even 2 months in?
Source: Is your Postgres ready for production?, an article by Craig Kerstiens.
In the design world, masking is a popular technique to achieve unique design effects. As a designer, I’ve used it many times, but my usage of it on the web is rare. I think that the reason that kept me from not using a CSS mask is the browser support, they are partially supported in blink browsers (Chrome and Edge) and fully supported in Safari and Firefox.
The great news is that CSS masking will be part of Interop 2023, which means we should expect cross-browser support (Yay!!).
In this article, I will go through what CSS masking is, how it works, and a few use cases and examples for it.
Source: CSS Masking, an article by Ahmad Shadeed.
In the evening Alice, Esme, and I watched Kill Boksoon. The movie was OK and I give it a 6 out of 10.
Today's blog is announcing SwissMap, a new Golang hash table based on SwissTable that is faster and uses less memory than Golang's built-in map. We'll cover the motivation, design and implementation of this new package and give you some reasons to try it.
Source: SwissMap: A smaller, faster Golang Hash Table, an article by Andy Arthur.
Last month, our service was brought down for days by a nasty deadlock bug, and this isn’t the first deadlock we’ve seen - it’s at least the fourth. And just last week, we saw yet another deadlock-induced outage. Fortunately, four of the five deadlocks (including the most recent two) have the same root cause -
futures::stream::Bufferedis inherently prone to deadlocks. In this post, I will explain the issue and explore ways to prevent this from happening again. The transition won’t be easy, but I think it will pay off for the ecosystem in the long run.
Gut is a user-friendly Git CLI for Windows, Mac, and GNU/Linux. With intuitive commands and streamlined workflows, Gut simplifies the process of using Git's complex system, allowing you to focus on your code.
Source: Gut - Ease your journey with Git.
The U.S. Department of Commerce’s National Institute of Standards and Technology (NIST) has added Rust to its list of “Safer Languages” as part of its Software Assurance Metrics and Tool Evaluation (SAMATE). Here’s why the Rust Foundation sees this news as significant to the wider software development ecosystem.
PostgreSQL (Postgres), is a powerful relational database that can store a wide range of data types and data structures. When it comes to storing graph data structures we might reach for a database marketed for that use case like Neo4J or Dgraph. Hold your horses! While Postgres is not generally thought of when working with graph data structures, it is perfectly capable to store and query graph data efficiently.
Source: Postgres: The Graph Database You Didn't Know You Had, an article by Dylan Paulus.
We as developers need to improve our error messages. Try to be helpful, and explain:
- Who caused the error?
- What happened, and why?
- When will it be fixed?
- How can the user respond to the error?
Depending on the type of service you run, you'll likely still need request IDs and other diagnostics in your error message to help your support staff debug the issue.
A human-readable error message doesn't have to come at the expense of removing all technical information.
Source: On writing better error messages, an article by Max Rozen.
In the previous article Fascination with AWK we discussed why AWK is great for prototyping and is often the best alternative to the shell and Python. In this article I want to show you some interesting technical facts I learned about AWK.
Source: AWK technical notes, an article by Volodymyr Gubarkov.
As for today
golangci-lintcontains 120+ linters and what I often notice:
- not everyone is aware of how to configure it
- what are the pros and cons of some fields
- what is The Best™
In this post, I'm going to share my config and some thoughts on why I prefer this or that. The post might look long due to the big YAML sections (hah, YAML), but most of the stuff is quite simple.
Source: Go linters configuration, the right version, an article by Oleg Kovalov.
I've continued my excursion into improving my local development environment with Nix. In today's post, I want to share the solution I designed to tackle the problem of the root of a repository becoming full of various configuration files.
Source: Generating Configs with Nix + Cue, an article by Joshua Gilman.
If you create GitHub Actions via GitHub’s UI by going to the URL of the form https://github.com///actions/new, it provides templates for setting up the build. However, the template is broken.
There are four problems with the default template
- No dependency caching – so package dependencies will be resolved and reinstalled every time
- No cancelation of stale executions – If you pushed a commit and before the tests finish, you decide to push another commit then the stale commits are not canceled. Rather they continue executing!
- No path filtering – So a change to README will trigger the execution of, for example, linters and tests!
- No timeouts – Rogue tests can run forever leading to resource exhaustion
All these are fixable.
Source: Common pitfalls of GitHub Actions.
The separation of concerns we aim for in design systems has an unwanted byproduct: bloated HTML in the space between components. What can we do as component authors to encourage good markup hygiene at the inter-component level?
Source: Fighting inter-component HTML bloat, an article by Elise Hein.
A wrapper for SOPS: Secrets OPerationS from Mozilla, sops-nix integrates SOPS with NixOS in such a way that you can safely include secrets and files within your system config and not worry about them leaking.
Source: Getting NixOS to keep a secret, an article by Brian McGee.
Interactive widgets powered with only CSS are relatively common as people are playing with all the ways CSS can respond to, or create, interactions. CodePen contests are a great venue to see these experiments (which hopefully are never moved to a live human-facing project).
The problem with many of these examples is they need to convey their state (such as expanded or not), properties (think of relationships), or values, and (sometimes) dynamic names. While CSS is ideal to show these visually, they need to be passed to accessibility APIs so they can be conveyed to users of assistive technologies.
Not everything that relies on CSS for interaction is inaccessible. There are always going to be exceptions, but those are (and should be) rare.
Source: CSS-only Widgets Are Inaccessible, an article by Adrian Roselli.