atlantis

I saw Dune the week after it opened, which was fortunately timed only 70 or so weeks after last reading Agamemnon. For all the time spent pontificating about justice there doesn't seem to be much of a challenge as to why Tantalus was punished in the first place. The gods presumably knew they could revive Pelops so why'd they act so mortified at the dinner table? That punitive approach traded the relationship Pelops could have had with his father for five or six generations of family conflict, which Aeschylus could only resolve with "Orestes less wrong because penis".

I also happened to pick up Always Sunny again and saw the Hellenization of Philadelphia. Where Catholicism goes Zeus follows. How much of that is reflected from the experience of home life in areas like Philly or Dublin and how much from classics education? On the one hand the stories are comforting as a form of solidarity, then they become a sort of justification themselves for perpetuating painful cycles. I recognize these forms and find understanding by them, but I'm not bound by them. And when the kinship itself becomes repressive where's there to turn? Appalachia? The Wissahickon? In pursuit of a different pantheon of different gods, letting slip the occasional "better" instead of "different". Brewing hooch and following the moon to freedom.

Before the movie I was wondering if Atlantis could be real, if it could be buried beneath the Irish island, if lungs and thumbs are mythologized as technologically advanced from their underwater kingdom, and what it would mean to be half human and half mermaid. I also merged together all the latest source code projects into one new repository.

Most of the concepts are the same, though the names have changed a bit. Internally there's a base layer of abstract types to define statements and their execution. Then the filesystem and processor modules implement the concrete statements from ytree and execvm. I retained poseidon and ursula, each of which now generates a stream of statement objects. I also carried forward the "manager" role to do the actual execution. I kept tar, which serializes any filesystem objects from its input to a tarchive format, and I added sh, which attempts to serialize any command objects from its input to a POSIX shell script format. That one is especially spicy, but it seems useful so it's there. I split off flounder as a separate "print only" manager, which is like a bland dry run. And then there's ariel, the one manager that actually does the "typical" execution. She's supported by an "assistant", which implements the actual syscalls needed to do her work. As a baseline there's zoidberg, who does as close to nothing as possible. Then there's sebastian, who makes read, write, and execve calls "locally". And in progress is krabs, who uses sebastian to start an external process that will run the syscalls "remotely", the biggest little microkernel under the sea!

Finally, for all my consternation about what computation even is it turns out the answer is "magic". To tie all those pieces together I now have one single entry point, the trident. His power is to manifest The First Parser, which he uses to parse his arguments into a script generator and a manager, which he then sets in motion parsing and executing Atlantean objects.

The language looks mostly the same:

local atlantis = require("atlantis")

return function (values)

   coroutine.yield(
      atlantis.v1.proc.cmd {
         argv = {"echo", "hello", "world"}
      }
   )

end

I waffled previously about ursula.execv and whether there should be two command constructors. The answer turned out to be no! poseidon avoids this by requiring his input to have been serialized beforehand. Since he's relying on "carrier language" constructs I figured it's OK for ursula to do the same, and it makes the most sense for the squid to implement the long jump. Using coroutines also makes the internal API nice and clean since both monarchs act as pythonic generators. Execution is nearly identical as well, but for a few extra tokens:

$ python -m atlantis.trident \
         ursula \
         -m hello \
         ariel sebastian
hello world

And it is still possible to pipe ursula into poseidon, but we need a supporting cast. Here flounder is used to "convert" the lua script to yaml, which poseidon can run (with the help of ariel (with the help of sebastian)).

$ python -m atlantis.trident \
         ursula \
         -m hello \
         flounder \
      | python -m atlantis.trident \
               poseidon ariel sebastian
hello world