Your Writing System Sucks
Anthologica Universe Atlas / Users / Rhetorica

Miscellanea This universe is a general container for creations that do not belong to a universe or alternate history, such as auxlangs.
Reference This is the Reference Desk project. Contribute information on natlangs, how to conlang, and how to use the site (and other software) here. If you'd like to contribute to the reference desk, please contact someone from the Site Staff or ask in the forum thread, and you will be added to the user group. See also the reference desk forum thread for discussion on what work is actively being done.
Testiverse This is a demonstration universe meant to show off Anthologica's universe management features. This text only appears in universe listings and on user profile pages.
Black Maldisian Maldisian as spoken in Umami and outlying regions.
Proto-Testian This is an example Test Language.


Eigengenomes, Part 2

When I wrote this, back in the before times (when graduate school seemed more like the Elysian Fields than it did a ravine full of a pile of dead Sisyphus impersonators), I honestly thought it was a somewhat strained analogy. Bacterial genomes were, I knew, somewhat prone to self-stabilizing. That seemed sort of like the right thing to map onto a matrix, with the eigenvectors being forces that act on it. But there's no really snappy way to refer to, specifically, a matrix that is part of a system with a set of eigenvectors and eigenvalues, so I twisted the metaphor, slapped the nice eigenvector label on it, and sort of let it go, like the shower thought it was.

But now, having long-since fled the ravine and all its boulders, I'm not so sure I was wrong. […]
read more · 4 months ago

js Arrays and delete


const animals = ['ant', 'bison', 'camel', 'duck', 'elephant'];

delete animals[2];

console.log(animals.filter((x) => { return x !== undefined; }));

This produces the output:

> Array ["ant", "bison", "camel", "duck", "elephant"]
> Array ["ant", "bison", undefined, "duck", "elephant"]
> Array ["ant", "bison", "duck", "elephant"]

Sometimes you just need to iterate over a non-iterable collection and delete things as you go. Now you can clean up after and not feel bad about it.

This question has been asked quite a lot by newbies, and they are invariably told to just use Array.prototype.splice(), but that has the annoying habit of immediately re-indexing the array.

I should probably mention that using delete on Array elements is slightly undefined behaviour; at least one checker (JSlint) apparently dislikes it. But the MDN page for Array is almost weirdly glib about casually discussing implementation details, so we'll just say YMMV.
read more · 4 months ago

Your Writing System Sucks

I've come to believe that my approach to constructed languages is a little different from most conlangers. It seems to me that most people first fall in love with the phonology or diachronics of a natural language (or a family of natural languages), and spend as much time as possible fixating on sounds: for the unadventurous, 'build-your-own-Romance-language' is an entire genre, and will probably be the only way they'll arrive at something that can be used to write more than a few words. Beyond that, xenophilia is an overriding obsession: for phonologies that aren't nearly identical to English, [ɕ] is more common than [ɹ]. Maybe this is all just an artefact of how linguistics is taught in the average university curriculum, but it's always struck me as odd that so many conlangers immediately make a bee-line for the parts of the art that are the least creative. (And if a conlang does make it past the first post and get into some vocabulary, there's a good chance it'll have triconsonantal verb roots, which have become, for lack of a better term, a meme.) To avoid drawing out this too much, my favourite topics are more in the areas of glyphs and words. I'd rather see a dictionary with a nice alphabet chart than a complete set of sound changes and grammar. (Although grammar is, I suppose, neutral ground. It's pretty cool too.)

Anyway. With that venting done, let's talk about your conscript and why it's probably garbage. […]
read more · 10 months ago

Ex foris

? Rhetorica Your Writing System Sucks
posts: 1274
, Kelatetía: Dis, Major Belt 1
It was Winter, in the ninety-first year of the second reign of Klito XIX (Klito the Nineteenth), when the woman arrived at the temple.

CLASSICAL ILLERAN (6th c. LILPO): Reselíat, pléovet vesalkevis il leví hakrodeklo-talo o Klitéan ʖLevis (o Klito Mivesevis), sta ha koistillas ogelzé.

WANISINESE ILLERAN (124th c. WANPO): Reselyat, wete ple vezagev il lev halo il Klito ʖLev (o Klito Stavezev), ogeze godya melas kistilla.

REGENI LILITIC (4th c. TGC): Kimoite, en ninta he enevi etos il diavi basileno il to Klito ΙΘʹ (o Klito Dekaennea), gina hikanelle an Heirelias.

MODERN IMPERIAL WANISINI (124th c. WANPO): Klaregsat, lak e tangtakhev plevot il lenev Salkzeto il o Klito ƧN.ʖev (o Klito Raitang e Mitev), oymor sto o tigvotikolos.


Linguistic family tree for the above (Archipelagian, Wanisini, and Wanisinese Illeran are all contemporary; true Illeran is many thousands of years old at this point):


(Not diagrammed: Later developments in Lilitika, history of Oksirapho, modern revivalist Illeran, or any influences from foreign languages. Most obviously, by the time of the Regeni/Reed era in Thet, most vocabulary had been replaced with Greek due to Glissia influence within academic communities. Bizarrely this is not the only Terran in the samples given: the Illeran word pléovu, "year," has been reconstructed as having an ancestor in Classical English "planet.")
in thread: Translat-o-matic
? Rhetorica Your Writing System Sucks
posts: 1274
, Kelatetía: Dis, Major Belt 1
I had a teenage phase as a computing history enthusiast, which was centred specifically around Multics and other MIT developments of the seventies, particularly Lisp machines and ITS. (Separately and concurrently I have a soft spot for the C64 and the Amiga. I usually win at retrocomputing trivia.) My admiration for PL/I is one unfettered by any actual experience with it, although when one understands the differences between it and C, the motivation between new projects like Rust and Go becomes blindingly obvious. In the nineties all of the software engineers who had the necessary expertise to reverse C's momentum were working on Java, so only now, after Oracle has ruined Java, has the brain drain been over for long enough to move attention back to putting the other academic discoveries of the seventies and eighties into real use. Rust has a built-in fixed-precision library, so even COBOL's day in the sun could conceivably end.

One other thing about PL/I: it was somewhat infamous in its heyday as being cumbersome and overly complex, but compared to Java and mid-nineties C++ it was quite small. Anything you might read about PL/I being obnoxious or baroque is propaganda written by people with access to, at best, a few hundred kilowords of core, i.e., less than a megabyte of RAM. You might not want to use it for embedded programming these days, but the most important implementation, Multics EPL, was a systems-oriented subset that didn't include all of the language's features.

Anyway. I assume this was brought up because I casually made mention about tinkering with Octavia. To be honest, programming a basic language interpreter isn't really that hard, though it does require some creative problem-solving if you've never taken a course on it. Clean tokenization was something that took me a few tries to understand properly; the first few designs I wrote in high school were based on string prefix-matching, which invariably led to problems when function notation and infix operators were combined. Even Octavia's implementation of tokenization, which was written all the way back in 2009 when I was still a first-year undergrad, had some deficiencies in this regard for the longest time—it would occasionally do bizarre things like abort parsing because of unmatched parentheses inside string literals. I haven't actually coded a language from scratch since that time (Sappho's p3 interpreter was written around the same timeframe, in an even worse language) so I'm somewhat looking forward to doing a new implementation, especially one with less of a post-hoc attitude toward functions and objects.

Programming language theory and linguistics have a lot in common, but unfortunately enthusiasts of both are scarce. PLT does a lot of work with formalizing concepts of a statement's context that are potentially a gold mine for conlanging, especially philosophical languages. As far as I know Lojban and Ithkuil never approached these subjects and have mostly concentrated on providing the tools that their respective authors felt they needed to describe their own thoughts—by far my favourite is that Lojban wasted a three-phoneme word (which is prime real estate from a Huffman coding perspective) on a connective that indicates the Cartesian product (every pairwise combination of elements from sets X and Y), which I sincerely doubt anyone has ever used or will ever use.

So... yeah. Look forward to that. I'll try to make it interesting without making it too hard to convert Octavia code.
? Rhetorica Your Writing System Sucks
posts: 1274
, Kelatetía: Dis, Major Belt 1
And now, a monologue about site performance and what I'm going to do about it.

Truth be told, the current software stack behind Annie is never going to be blazing fast. All of its features come at a cost to performance. The single worst culprit of this is a conflict between programming paradigms: Cadre's page template philosophy encourages encapsulation (routing all activity through smaller pieces of code to keep it cleanly isolated) but this results in a lot of individual SQL queries (which might otherwise be grouped into one single query.) The forums and the languages page both have this problem, although I've done some work to mitigate it on the forums. (The site's front page is laggy because it counts unread forum posts; by contrast, it's very fast if you're not logged in, as are the forums more generally.)

I haven't mentioned this much, but the truth is that Cadre wasn't really designed as a production-grade platform for websites. Way, way back in 2009, when the project was new, my goal was to build a coding sandbox for prototyping new social platforms—alternatives to wikis, forums, Facebook, et cetera—so performance was never a top priority; instead, I was concerned with making it possible for users to program new site functionality through the website itself while respecting file-system-like access permissions so they couldn't damage the content made by others. This was a pretty unexplored piece of territory at the time, and I think Cadre's still better at it than, say, MediaWiki.

For a while I was looking at translating the Cadre software stack into C++, as it was the language I worked in the most while I was in grad school. These days most of my work is actually in JavaScript, for better or worse, and I've decided to do this with node.js instead. As I despise omnibus frameworks and libraries this might even be passably performant, and I'll get a lot of web-relevant functionality for little or no effort (HTTP handling, Unicode, multithreading) which would be a lot more granular to put together in C++. So, consider this notice that I'm starting work on this new project. It will still have an Octavia-like hosted language, but I may rethink some of its syntax choices.

Your Writing System Sucks
last seen: 10 hours ago
posts: 1274

send message
find forum posts

Creator of Lilitika and co-creator of Thet.

I started this site in late 2013 to give the conlanging and conworlding community a specially-tailored way to showcase projects. I don't do quite as much administrating any more, and sometimes I can be scarce because I have so many other big responsibilities, but I try to maintain and improve things whenever I can.

See my profile page elsewhere for more information about me.