|
The Piece Window is essentially finished. What's left is bits and bobs: a set of rename tests, the shells of the layout windows (for now a title over an empty page, since the page has nothing to put on it yet), one drag-resolution routine that predates the shared one and hasn't been folded into it. Nothing on that list is interesting, which is the point of it being what's left. It's been an intense stretch. The Piece Window is where the semantic model becomes operable: you create players, give them instruments, add staves, assemble scores and parts, decide who doubles on what. Doing all of that by gesture, with no modes and no dialogs, forced a distinction into the open. There are the things that contain the music, and there's the music itself. Membership, ordering, identity, naming, configuration: each of those announces itself the moment it changes, synchronously, as one event. The music says nothing directly and defers instead to the formatting pipeline. Two channels, and neither can express the other's business. That's now a property of the system rather than a habit of mine, and it emerged from building gestures rather than from contemplating architecture. Work at that pitch leaves a wake. Over the past few weeks I've raised a dozen or so tickets in passing. None of them is urgent. All of them are real. For readers who don't build software: the general term for this is technical debt. Some of it is debt in the strict sense, a shortcut taken to keep moving and whose cost doesn't disappear but is merely postponed, accruing interest, because by the time you come back other things have been built on top of it. The rest is small wrongnesses noticed in passing and not stopped for: cheap today, expensive later, and invisible until something else fails on account of them. A project that never pays it down eventually spends all its time servicing the debt rather than doing anything new. That is, in a sentence, the story of every notation program that has hit its ceiling. (Yes, Finale, I'm looking at you.) So before I close the Piece Window I'm going through the list. And I'm enjoying it enormously, which brings me to Polish genitive plurals. (Major language nerd alert at this point.) Ooloi ships in twenty-two locales (roughly: 'languages'), and the translation machinery is the industry-standard gettext, which handles counting properly. A message with a number in it declares a singular and a plural form, and each language declares how many forms it actually has and supplies a rule for choosing between them. English and Swedish have two, split at one. French and Brazilian Portuguese have two, but treat zero as singular. Czech has three. Polish and Ukrainian have three, on rules involving the last digit and the last two digits. Icelandic has two, with a rule that would look like a typo if you didn't know Icelandic. A single confirmation message, 'Delete this stave?' and 'Delete these %{n} staves?', turned out to be wrong in four of the twenty-two. The most instructive failures were in East Asia. Japanese, Korean and Chinese declare a single form. Their nouns aren't inflected for number, so a count has nothing to choose between, and whatever sits in the first slot is what every reader sees, for one stave and for fifty. Japanese and Chinese had a polite singular sitting there, so deleting five staves asked whether you wanted to delete this stave, and the count was silently dropped on the floor. The plural translation underneath was perfectly good and could never be selected by anything. Korean had it right, and the fix was to follow Korean's lead: a single form that names the count, which reads correctly for one as well as for five, there being no separate singular for it to displace. Polish and Ukrainian were subtler and needed a native ear rather than a rule table. Polish has three forms, and the third of them, which covers five staves and twenty-five but not twenty-two, takes the genitive plural; the demonstrative then has to agree with it, tych rather than te. Ukrainian had the two-to-four form carrying a genitive where it wants a nominative plural. There's a reason I'm being this fussy about a dialog box. The people who'll maintain these files, and who I hope will add the languages I haven't got, are musicians and engravers rather than professional localisers. Someone who notices that Ooloi's Hungarian is stilted, or that nobody in Lisbon phrases it like that, should be able to open the file, find the string, and see straight away what's wrong and how to put it right, without knowing a line of Clojure. That puts a real obligation on the files themselves: correct plural counts, honest context labels, entries that read as language rather than as data. It also means every existing entry is a worked example whether I intend it as one or not. Anyone adding Catalan or Turkish or Russian will copy the shape of what's already there, and a wrong shape propagates. A Japanese entry carrying a plural form that can never be selected quietly teaches the next contributor to write one too. And because a translation that can't be selected is indistinguishable from a translation that doesn't exist, the fix comes with tests that resolve the actual message, in the actual locale, at a count that exercises the rule. This sort of thing is a holiday after months of transaction boundaries, event coalescing and a deserialisation bug that turned out to hinge on a hyphen becoming an underscore in a compiled class name (a process tecchies call munging). Each item is small, bounded, verifiable, and improves something a real person will notice in their own language. I recommend it to anyone emerging from deep water.
When the list is empty, the Piece Window closes as a milestone in its own right: the semantic gestures are settled, and with them the vocabulary for manipulating a piece. Everything that follows is new operations through that vocabulary rather than a new way of working. Things are moving quickly now. Touch wood. After the Piece Window comes the plugin system and MusicXML, which is when the engine finally has real orchestral scores thrown at it in volume, by an importer written as an ordinary plugin against the public API with no privileges of its own. Then Skija, the rendering pipeline, and at long last the notes. But first: the Swedish summer is glorious this year, unreasonably so, and I intend to spend a week or two of it nowhere near a computer. Some air, and then the page.
4 Comments
Magnus Johansson
1/8/2026 21:41:03
"[...] I intend to spend a week or two of it nowhere near a computer."
Reply
Peter Bengtson
2/8/2026 10:15:07
Sound plan! I'm aiming for water rather than tarmac, but the principle holds. Enjoy the rest of it.
Reply
Ulrik Bodén
3/8/2026 19:27:48
Great work Peter, I hope you'll have a nice holiday and I'm looking forward to see what's up next here!
Peter Bengtson
3/8/2026 19:38:19
Thanks, Ulrik!
Reply
Leave a Reply. |
AuthorPeter Bengtson – SearchArchives
August 2026
Categories
All
|
|
|
Ooloi is an open-source desktop music notation system for musicians who need stable, precise engraving and the freedom to notate complex music without workarounds. Scores and parts are handled consistently, remain responsive at scale, and support collaborative work without semantic compromise. They are not tied to proprietary formats or licensing.
Ooloi is currently under development. No release date has been announced.
|
RSS Feed