The two most intriguing developments in the recent evolution of the Microsoft Windows operating system are Windows System for Linux (WSL) and the porting of their Microsoft Edge browser to Ubuntu. For those of you not keeping up, WSL allows unmodified Linux binaries to run under Windows 10. No emulation, no shim layer, they just… Continue reading Last phase of the desktop wars?
Category: Software
Documentation as knowledge capture
Maybe you’re one of the tiny minority of programmers that, like me, already enjoys writing documentation and works hard at doing it right. If so,the rest of this essay is not for you and you can skip it. Otherwise, you might want to re-read (or at least re-skim) Ground-Truth Documents before continuing. Because ground-truth documents… Continue reading Documentation as knowledge capture
A user story about user stories
The way I learned to use the term “user story”, back in the late 1990s at the beginnings of what is now called “agile programming”, was to describe a kind of roleplaying exercise in which you imagine a person and the person’s use case as a way of getting an outside perspective on the design,… Continue reading A user story about user stories
Looking for C-to-anything transpilers
I’m looking for languages that have three properties: (1) Must have weak memory safety. The language is permitted to crash on an out -of-bounds array reference or null pointer, but may not corrupt or overwrite memory as a result. (2) Must have a transpiler from C that produces human-readable, maintainable code that preserves (non-perverse) comments.… Continue reading Looking for C-to-anything transpilers
Lassie errors
I didn’t invent this term, but boosting the signal gives me a good excuse for a rant against its referent. Lassie was a fictional dog. In all her literary, film, and TV adaptations the most recurring plot device was some character getting in trouble (in the print original, two brothers lost in a snowstorm; in… Continue reading Lassie errors
Payload, singleton, and stride lengths
Once again I’m inventing terms for useful distinctions that programmers need to make and sometimes get confused about because they lack precise language. The motivation today is some issues that came up while I was trying to refactor some data representations to reduce reposurgeon’s working set. I realized that there are no fewer than three… Continue reading Payload, singleton, and stride lengths
shellcheck: boosting the signal
I like code-validation tools, because I hate defects in my software and I know that there are lots of kinds of defects that are difficult for an unaided human brain to notice. On my projects, I throw every code validater I can find at my code. Standbys are cppcheck for C code, pylint for Python,… Continue reading shellcheck: boosting the signal
Reposurgeon defeats all monsters!
On January 12th 2020, reposurgeon performed a successful conversion of its biggest repository ever – the entire history of the GNU Compiler Collection, 280K commits with a history stretching back through 1987. Not only were some parts CVS, the earliest portions predated CVS and had been stored in RCS. I waited this long to talk… Continue reading Reposurgeon defeats all monsters!
Build engines suck. Help GPSD select a new one.
One of the eternal mysteries of software is why build engines suck so badly.
30 Days in the Hole
Yes, it’s been a month since I posted here. To be more precise, 30 Days in the Hole – I’ve been heads-down on a project with a deadline which I just barely met. and then preoccupied with cleanup from that effort. The project was reposurgeon’s biggest conversion yet, the 280K-commit history of the Gnu Compiler… Continue reading 30 Days in the Hole
Segfaults and Twitter monkeys: a tale of pointlessness
For a few years in the 1990s, when PNG was just getting established as a Web image format, I was a developer on the libpng team. One reason I got involved is that the compression patent on GIFs was a big deal at the time. I had been the maintainer of GIFLIB since 1989; it… Continue reading Segfaults and Twitter monkeys: a tale of pointlessness
Fear of COMITment
I shipped the first release of another retro-language revival today: COMIT. Dating from 1957 (coincidentally the year I was born) this was the first string-processing language, ancestral to SNOBOL and sed and ed and Unix shell. One of the notational conventions invented in COMIT, the use of $0, $1…etc. as substitution variables, survives in all… Continue reading Fear of COMITment
The dangerous folly of “Software as a Service”
Comes the word that Saleforce.com has announced a ban on its customers selling “military-style rifles”. The reason this ban has teeth is that the company provides “software as a service”; that is, the software you run is a client for servers that the provider owns and operates. If the provider decides it doesn’t want your… Continue reading The dangerous folly of “Software as a Service”
Contributor agreements considered harmful
Yesterday I got email from a project asking me to wear my tribal-elder hat, looking for advice on how to re-invent its governance structure. I’m not going to name the project because they haven’t given me permission to air their problems in public, but I need to write about something that came up during the… Continue reading Contributor agreements considered harmful
Am I really shipper’s only deployment case?
I released shipper 1.14 just now. It takes advantage of the conventional asciidoc extension – .adoc – that GitHub and GitLab have established, to do a useful little step if it can detect that your project README and NEWS files are asciidoc. And I wondered, as I usually do when I cut a shipper release:… Continue reading Am I really shipper’s only deployment case?
Declarative is greater than imperative
Sometimes I’m a helpless victim of my urges. A while back -very late in 2016 – I started work on a program called loccount. This project originally had two purposes. One is that I wanted a better, faster replacement for David Wheeler’s sloccount tool, which I was using to collect statistics on the amount of… Continue reading Declarative is greater than imperative
How not to design a wire protocol
A wire protocol is a way to pass data structures or aggregates over a serial channel between different computing environments. At the very lowest level of networking there are bit-level wire protocols to pass around data structures called “bytes”; further up the stack streams of bytes are used to serialize more complex things, starting with… Continue reading How not to design a wire protocol
Announcing loccount 2.0 – now up to 74 languages
I just released the 2.0 version of loccount. This is a major release with many new features and upgrades. It’s gone well beyond just being a faster, cleaner, bug-fixed port of David A. Wheeler’s sloccount. The count of supported languages is now up to 74 from sloccount’s 30. But the bigger change is that for… Continue reading Announcing loccount 2.0 – now up to 74 languages
Announcing a new book: “The Programmer’s Way”
A decade and change after “The Art of Unix Programming”, I’ve decided to do another book. Actually, I have more than just an intention and some notes; I’ve been working hard on it over the last five days it and have 41 Kwords of rough-cut manuscript ready.
Pessimism about parallelism
Massive concurrency and hardware parallelism are sexy topics in the 21st century. There are a couple of good reasons for this and one rather unfortunate one. Two good reasons are the combination of eye-catching uses of Graphics Processing Units (GPUs) in games and their unexpected secondary uses in deep-learning AI – these exploit massive hardware… Continue reading Pessimism about parallelism