Programming Leftovers
-
Geshan ☛ Good software engineering is about finding a solution at the correct layer with boring technology
In the ever-evolving landscape of technology, the importance of good software engineering cannot be overstated. It's the core of efficient, scalable, and maintainable software solutions. While there are various methodologies and practices, a key aspect often overlooked is the art of finding the right solution at the correct layer and level of abstraction. On top of that, reliable software systems are best built with boring technology. You will learn more about these topics in this post, let’s get started!
-
Fred Herbert ☛ Negotiable Abstractions
When I used to write more software and do more architecture professionally (I still do, but less intensively so with the SRE title), one of the most important questions I'd seek answers to was "how do I cut this up?" Or more accurately, "how do I cut this up without it coming back to haunt me later?" My favorite guideline was to write code that is easy to delete, not code that is easy to maintain; Tef wrote about this more eloquently than I ever did. I long ago gave up on the idea of writing maintainable code rather than code that was articulated in the right places to make things easy to get rid of.
-
Nicholas Tietz-Sokolsky ☛ My reference was dropped, why is the compiler complaining about multiple borrows?
Recently someone I was talking to ran into a fun borrow checker problem in Rust which is illustrative of some current underlying limitations of Rust's borrow checker. The problem boiled down to: they took a reference in a loop (dropped on each iteration), and the borrow checker complains that it cannot borrow it mutably multiple times, since it was borrowed in a previous iteration. But: didn't we drop it? Why is it still borrowed?
-
Nikita Prokopov ☛ Humble Chronicles: Managing State with VDOM
This post follows the implementation of VDOM for Humble UI. We look at various aspects of the problem, weigh our options, and decide on the solution. In some cases, it’s not clear how to proceed, so we just state the problem.
Follow along if you are curious about how the sausage is made. This is not the final design yet, more of an exploration of possibilities.
-
Anton Zhiyanov ☛ Go 1.22: Interactive release notes
Go 1.22 is scheduled for February 2024, but you can already try out many of its features without leaving your browser. Read on and see!
-
Education
-
Arduino ☛ C3D joins Arduino Pro’s System Integrators Partnership Program
We are pleased to announce a new partnership with Chilean engineering services firm C3D, joining our System Integrators Program at the Gold level. The collaboration will focus on enhancing the company’s IoT and automation capabilities by leveraging the entire Arduino Pro product line to accelerate the product development of connected applications in key verticals.
-
-
Perl / Raku
-
Perl ☛ Perl Advent Calendar 2023: St. Nick's Reindeers Need More H2O!
Over the past year, he's done quite a bit of digging into a related module named, Util::H2O::More. The following is a summary of a few neat things available in this module, most of which are built upon Util::H2O's h2o method which gives accessors to to HASH references - and the inverse, that converts an blessed reference with accessors into a pure HASH reference, o2h. There's a mnemonic there, hash 2 object; and the reverse, oject 2 hash. All of the public methods try to follow this pattern, which will hopefully be apparent below.
-
Rakulang ☛ Day 22 – The Magic Of hyper
Since we’re going to mostly talk about (wallclock) performance, I will add timing information as well (for what it’s worth: on an M1 (ARM) processor that does not support JITting).
Let’s start with a very simple piece of code, to understand some of the basics: please give me the 1 millionth prime number!
-
-
Python
-
Seth Michael Larson ☛ Security Developer-in-Residence Weekly Report #22
This week was all about working on Software Bill-of-Materials tooling and documentation for CPython. I published a new resource to the CPython core developer guide. This documents Software Bill-of-Materials and all of the tooling and processes for adding, updating, and removing dependencies. I'll continue to add to this document as more is developed in this project.
-
James Bennett ☛ Use Django’s system checks
While you can do very minimal Django setups, more typical use cases tend to involve a mix of applications — your own, some third-party, and some from django.contrib — and associated configuration, and while you can run a lot of “code quality” checks, it still can be daunting to verify you’re using and configuring Django correctly.
-
-
Rust
-
Rust Blog ☛ Announcing `async fn` and return-position `impl Trait` in traits
Ever since the stabilization of RFC #1522 in Rust 1.26, Rust has allowed users to write impl Trait as the return type of functions (often called "RPIT"). This means that the function returns "some type that implements Trait". This is commonly used to return closures, iterators, and other types that are complex or impossible to write explicitly. [...]
Starting in Rust 1.75, you can use return-position impl Trait in trait (RPITIT) definitions and in trait impls. For example, you could use this to write a trait method that returns an iterator: [...]
So what does all of this have to do with async functions? Well, async functions are "just sugar" for functions that return -> impl Future. Since these are now permitted in traits, we also permit you to write traits that use async fn.
-