Saw #17: A Sharper sed, and X_eTaL in Blender for a Computer Museum
1256 words • 7 min read • Abstract

Two saws this week, one small and one large. The small one is sed-rs, my portable sed in Rust, which got a list of requests from being used in earnest. The large one is 3D: modeling real machines with X_eTaL and Blender, to get good enough at it for a museum.
| Resource | Link |
|---|---|
| sed-rs | sw-cli-tools/sed-rs; the asks from reva-fork |
| IBM 1130 | s1130-3D |
| IBM 5100 | s5100-3D |
| The consoles | console-3D (1053, 2741, 5471) |
| Lucy’s rack | lucy-3D |
| The pipeline | X_eTaL-extensions (the Blender extension) |
| For | the research campus, sw-apl |
| The series | Sharpen the Saw: every post |
| Comments | Discord |
The sed-rs saw
I wrote sed-rs because the Mac’s BSD sed and GNU sed on Linux do not agree, and I wanted one that behaves the same on both. Using it to edit reva-fork’s files produced a list of asks, each with the case that hit it:
- In-place editing with a backup (
-i.orig), written atomically, and leaving every file untouched if the script fails. A rejected script once truncatedCHANGES.mdthrough a shell redirect, and the empty file was committed. - Address ranges and “first match only” (
10,20,/start/,/end/,0,/re/). - Literal patterns (
-F), for edits full of( ) [ ] . * +, which in Forth, Rust and Markdown is most of them. --strict, so an edit that matched nothing fails instead of looking like success.--diff, to show what changed without a separatediff.
Why Sharpen the Saw? — Stephen Covey’s The 7 Habits of Highly Effective People (1989) ends with Habit 7, “Sharpen the Saw”: a woodcutter too busy sawing to stop and sharpen the blade works harder and cuts less. The first six habits are about doing the work; the seventh is about renewing what does it. This series tracks the weekly investment in my tools themselves, so the work done with them goes faster.
All five made it into sed-rs 0.3.0, now in testing, but not all as asked. Some were negotiated:
s//…/does not reuse the last pattern, as GNU’s does; it keeps its old meaning, so ask 2’s example repeats the pattern instead.- Literal mode is not quite “nothing is special”.
\n,\t,\\and an escaped delimiter still work, because inserting lines needs\n. And-Fmakes only the substitutions literal, not the addresses. - No default warning for an edit that matched nothing, only
--strict. Filters that normalize test output often contain substitutions that do not match, and a warning would flood them. - One addition:
--expect=N, which fails unless exactly N replacements were made, so a pattern that is too broad is caught as well as one that matches nothing.
Whatever the flags, a failed script or check now leaves every file untouched. Existing users are protected: 68 recorded invocations from the previous version replay unchanged, apart from two intended changes, and 4,000 generated cases check the new code against a frozen copy of the old.
The Blender saw
The other saw is 3D modeling with X_eTaL and its Blender extension. X_eTaL builds the model as code, the extension hands it to Blender, and Blender writes .blend, .glb and .obj files with named parts, so a switch or a door can be found and moved in an interactive scene. Four projects are teaching me where the pipeline is weak:
- An IBM 1130, the 1131 CPU desk console, with its data switches, buttons, panels and a hatch that opens.
- An IBM 5100, the portable from the mid-1970s, built up in measured, reference-checked steps.
- The consoles: the IBM 1053 console of the 1130 and 1800, the IBM 2741 APL terminal, and the IBM 5471, the printer-keyboard of the System/3. All three are built on the Selectric typing mechanism, so they share their construction helpers. A TRS-80 is to be added.
- Lucy’s rack, a 25U server rack modeled from photos of my home AI cluster, in three views: empty, early (three servers) and later (more servers). It does not yet model the rail slides the servers ride on.
The goal is higher-fidelity models for two places. The first is the virtual Computer History Museum on my research campus. The second is sw-apl, where I plan to show four APLs, each with the machine it ran on, which is where the console models come in:
| APL | Era | Console |
|---|---|---|
| APL\1130 | 1968, IBM’s first APL for sale | IBM 1130 with a 1053 printer console |
| APL\360 | ca. 1970, a later release with added features | an IBM 2741 terminal |
| IBM 5100 APL | 1975 | the IBM 5100 itself |
| APL-80 | future demo | a TRS-80, and an IBM 5471 |
Part 17 of the Sharpen the Saw Sundays series. View all parts
Comments or questions? SW Lab Discord or YouTube @SoftwareWrighter.