Michael Homer

@mwh
52 Followers
91 Following
35 Posts
I make programming languages & user interfaces at Victoria University of Wellington
Websitehttps://michael.homer.nz/
GitHubhttps://github.com/mwh
@nicolas17 It seems like no. The error is “Illegal byte sequence”.
@nicolas17 Yes, HFS+ enforced something close to NFD. APFS is normalisation-insensitive but -preserving and doesn’t change the given name, but won’t allow two canonically-equivalent names to exist at once. Finder is actually doing the normalisation work here — if you use the POSIX APIs to make a file (e.g. at the terminal) you can create NFC or unnormalised names, and then copying those out of Finder will give you the name unchanged. It is an odd set of choices.
@mcc A plausible route is “create a file with this name on macOS, then copy the name out”, which will normalise to NFD on APFS. When you copy the name out afterwards you get the fully decomposed text regardless of what you put in originally. I just checked creating a directory in Finder by pasting in 한국 (2 codepoints), and it copies out as 한국 (6 codepoints, though only 18 bytes UTF-8). That should work for any precomposed characters and copying a path seems “reasonable” to do naturally.
@glyph There are a lot of multimodal approaches attempting to bridge exactly this gap, with middling effectiveness. Tiled Grace was part of my thesis work & lets you switch mode, Poliglot has both at once, several others for both teaching and real languages. There was a good survey last year that covered most of them: https://www.sciencedirect.com/science/article/pii/S2590118425000280. It’s a hard problem and part of it is exactly what you brought up—the programming itself is one thing but all the other tooling is as much of an obstacle.

Timely as ever, I have released an MS-DOS shareware game in 2025: https://mhomer.itch.io/cromavor

A turn-based quick territorial acquisition game, it runs under DOSBox and it should also be playable in-browser at https://mwh.nz/dos/cromavor

Cromavor by mhomer

Turn-based territorial game for DOS

itch.io
@Tijn You want the “normal” version. The “Hitman 3 Access Pass: Hitman 2 Expansion” has two more (good) maps in it that you’ll probably want eventually. Both the normal and deluxe are routinely on sale, and the deluxe includes H2 expansion & is often cheaper during those. “Part One” is the levels from Hitman 1 in the H3 engine; “normal” is all the levels from 1-3 in the same engine, except for the two from the H2 expansion. Somehow, this is still an improvement on how it used to be.
Fast & Easy ASTs for Flexible Embedded Interpreters, in MPLR this week. A format encoding ASTs into text that is simultaneously valid as code in languages from Java to Haskell to Excel, allowing programs — or parsers, typecheckers, and libraries — to be serialised and run under a simple interpreter in that language. https://mwh.nz/pubs/mplr25 PDF: https://mwh.nz/pdf/mplr25 Live demo: https://mwh.nz/demos/mplr2025 (generate freestanding Java, Haskell, Javascript programs embedding a program as an AST)
Fast & Easy ASTs for Flexible Embedded Interpreters

Self-hosted software language systems need to bootstrap core components such as data structure libraries, parsers, type checkers, or even compilers. Bytecode interpreters can load byte code files, while image-based systems can load in images of entire systems — Emacs, for example, does both. Bootstrapping is more of a problem, however, for traditional AST-based systems, especially when they must be portable across multiple host systems and languages. In this short paper, we demonstrate how abstract syntax trees can quickly and easily be incorporated into the source code of an embedded interpreter. Our key insight is that a carefully engineered format enables textually identical ASTs to be valid across a wide spectrum of contemporary programming languages. This means languages can be self-hosted with very little bootstrapping infrastructure: only the host interpreter or compiler and a minimal default library, while the rest of the system is imported as ASTs. This paper outlines our technique, and analyses the engineering design tradeoffs required to make it work in practice. We validate our design by describing our experience supporting the on-going development of GraceKit, which shares a single Grace parser across host language implementations from Java and JavaScript to Haskell and Swift and to Grace itself, and even more eccentric languages like Excel.

Michael Homer

Not sure how to go about it? Questions about how to present what you’ve done, whether it’s in scope, or how to tie in with existing work? We are hosting drop-in LIVE office hours this week

- Thursday, June 19, 2025, 0100 – 0300  UTC
- Thursday, June 19, 2025, 1800  – 2000  UTC

Details at https://liveprog.org/#resources

Workshop on Live Programming (LIVE)

The 12th Workshop on Live Programming (LIVE 2026) will take place online. LIVE invites submissions of ideas for improving the immediacy, usability, and learnability of programming.

@PaniczGodek Thanks, I’ve passed that on to Josh.

Not sure how to go about it? Questions about how to present what you’ve done, whether it’s in scope, or how to tie in with existing work? We are hosting drop-in LIVE office hours this week

- Thursday, June 19, 2025, 0100 – 0300  UTC
- Thursday, June 19, 2025, 1800  – 2000  UTC

Details at https://liveprog.org/#resources

Workshop on Live Programming (LIVE)

The 12th Workshop on Live Programming (LIVE 2026) will take place online. LIVE invites submissions of ideas for improving the immediacy, usability, and learnability of programming.