Programming Leftovers
-
Bozhidar Batsov ☛ Learning OCaml: Matching Anything or the Lack of Anything
Both of those are forms of pattern matching, but one of them is a lot stricter than the other. In OCaml () is the single value of the unit type that indicates the absence of any meaningful value. You can think of it as something like void in other languages. What this means is that let () would only match an expression that actually return unit (like the various print_* functions) and you’d get a compilation error otherwise: [...]
-
Bertrand Meyer ☛ Blog Archive New preprint: a standard framework for research on bugs and automatic program repair
What this is in a nutshell (there is a longer abstract below): a proposal for, and first steps towards, helping work on Automatic Program Repair (APR) by providing a common framework, including: a language for describing bugs and fixes in a standard way; the same functionality available as an API (using JSON); and a repository (a database) accessible in that framework and containing numerous bugs and fixes produced by researchers and practitioners.
The article draws on a short paper at the APR workshop of ICSE last year; I plan to use it as a basis for my keynote at the next workshop at ICSE in Ottawa on May 29. Rather than a paper describing firm results, this paper is meant to start a process; quoting from one of the final paragraphs: [...]
-
Andy Bell ☛ In praise of off-screen menus
A lot of User Experience (UX) research looks at interface design through a task-oriented lens. Testers may be asked to “find the newsletter subscribe form and sign up” or “look for information relating to this company’s returns policy”. UX insights like these work really well in a task-oriented context. When your users are in task mode it’s easy to see why it makes sense to keep navigation front and centre — the easier you can make it to find your way around, the faster and smoother the path to task completion. But while information gathering and task completion is one of the primary modes of engagement online, not everyone who visits a website has a specific task in mind.
-
Aman Mittal ☛ Ignoring JSX components in Vale
By understanding Vale’s initialization rules and using custom regular expression patterns to exclude a specific block, you create a robust documentation linting setup that can gracefully handle JSX components within your markdown files.
-
Muxup ☛ ccache for LLVM builds across multiple directories
If you're regularly rebuilding a large project like LLVM, you almost certainly want to be using ccache. Incremental builds are helpful, but it's quite common to be swapping between different commit IDs and it's very handy to have the build complete relatively quickly without needing any explicit thought on your side. Enabling ccache with LLVM's CMake build system is trivial, but out of the box you will suffer from cache misses if building llvm-project in different build directories, even for an identical commit and identical build settings (and even for identical source directories, i.e. without even considering separate checkouts or separate git work trees): [...]
-
Rlang ☛ ShinyConf24 – Keynote: Decade of Shiny in Action: Case Studies from Three Enterprises
Eric’s experience using Shiny has evolved with the technology since its early days in 2012. At that time, the team collected data through phone interviews, and they started to use Shiny because they needed an interactive userface to explore data pathologies and to understand and make judgments on new and existing data. Shiny’s role in enabling interactivity and accessibility started with technical teams, and has now moved to empower both technical and non-technical stakeholders in effectively understanding and leveraging data insights.
-
Open Source For U ☛ Building an IoT Application with Eclipse Kura
Eclipse Kura is an open source IoT edge framework that helps design IoT systems. A project of the Eclipse Foundation, it supports interoperability across devices at the edge. Here’s a short tutorial on how you can install Eclipse Kura, and develop and deploy an application with it.
-
Jussi Pakkanen ☛ Jussi Pakkanen: The price of statelessness is eternal waiting
Most CI systems I have seen have been stateless. That is, they start by getting a fresh Docker container (or building one from scratch), doing a Git checkout, building the thing and then throwing everything away. This is simple and matematically pure, but really slow. This approach is further driven by the way how in clown computing CPU time and network transfers are cheap but storage is expensive (or at least it is possible to get almost infinite CI build time for open source projects but not persistent storage). Probably because the clown vendor needs to take care of things like backups, they can't dispatch the task on any machine on the planet but instead on the one that already has the required state and so on.
-
Perl / Raku
-
Arne Sommer ☛ Intersection Sort with Raku - Arne Sommer
The intersection is of the Set persuation, datatype wise that is. So we use the keys method to get the actual values, the keys. Then we sort them, as a Set is unsorted, thus resorting to random order when we extract the content.
-
-
Shell/Bash/Zsh/Ksh
-
Linuxiac ☛ Fish Shell 4 Is Here Entirely Rewritten in Rust
Without further ado, here’s the star of the show – Rust! Yes, that’s right: Fish 4 has been entirely rewritten in Rust. However, from an everyday user’s perspective, the transition should remain virtually invisible: the commands, settings, and typical interactions are intended to be unchanged.
-
-
Golang
-
Michael Stapelberg ☛ Tips to debug hanging Go programs
I was helping someone get my gokrazy/rsync implementation set up to synchronize RPKI data (used for securing BGP routing infrastructure), when we discovered that with the right invocation, my rsync receiver would just hang indefinitely.
This was a quick problem to solve, but in the process, I realized that I should probably write down a few Go debugging tips I have come to appreciate over the years!
-