What I'm Reading: Rogue Protocol, by Martha Wells

Murderbot #3, see Murderbot #1: All Systems Red and Murderbot #2: Artificial Condition.

While the page count is about the same as the previous two novellas, this one feels really short and thin, largely because there's only a very short and mostly uneventful ship ride and then a single main story of hijinks, and for most of that Murderbot is an observer.

The facility where most of the time is spent is given only a desultory description, often I have to piece together how it looks and fits together when something is introduced, like windows along the service tunnels. I still have very little idea of what the planet surface is like. There's some "haunted spaceship" atmosphere for a bit, and then reality sets in and Murderbot just has to solve problems, i.e. do some hacking and then very destructive combat.

A bot named Miki is somewhat interesting, as the exact opposite of Murderbot in every way. The humans in this are, as always, dumb, slow, and annoying, whether helpful or antagonistic. It's the reverse of how most SF treats robotics, where the people are interesting and the bots are all the same.

But I can't say this one's that great, full price is excessive on a novella that doesn't deliver. ★★★½☆

Next novella should finish this story, and I'd hope after that Martha writes full novels in the setting.

What I'm Watching: Deadwind

It's that season again: Grim Scandinavian crime dramas with troubled detectives!

Deadwind has it all: A widowed detective returning to work too soon, a rookie partner, a dead woman half-buried in a beach, a real-estate company with shady dealings and a Lex Luthor-looking playboy/fixer. Finland is shot in moody lighting, always night, morning, evening (I think they said it's October? So no sunlight anyway). I love the sets, too, sterile white/black perfect surfaces, inside scruffy weatherbeaten houses. Nobody could live that neat, but it's perfect for mood.

Plot seems to move fast but this is a 12-ep season, with another being written, so expecting a lot more complexity.

★★★★★ so far

What I'm Watching: Disenchantment

The new Matt Groening cartoon, at long last! Surely after 4000 years of the Simpsons, and a few seasons of Futurama over the 30-some years it was on and off and on and off, has taught him how to craft a tightly-wound, kickass cartoon!

Imagine the Dark Ages. Imagine plague, filth, terrible rulership by inbred aristocrats, superstition, religious lunatics praying to gods who aren't there, conquest by savage barbarians… Oh, what fun. Well, it could be. If anyone wrote "jokes" for this.

There's a princess Bean, who apparently you're supposed to sympathize with, but she's loathsome, the kind of shitty inbred mass-murdering spoiled aristocrat you'd hate in real life. An Elf named Elfo, because why even bother trying to make a joke (they did name an elf who left Elfland "Leavo", which was almost funny… Then beat it into the ground with "Returno"). And a shadow demon "Luci"… ugh… which everyone agrees is her cat. Nobody has a personality, just a one-beat repetitive routine. Bean wants to get drunk. Elfo is a goody-goody who wants to date the princess, but of course never will. Luci says "evil" things like "get drunk". It's like a world made of the NPCs from a CRPG. They walk in circles saying one of a few recorded lines.

The plots are tedious and unoriginal, even by the standards of extruded cartoon product like Simpsons. There's an occasional fight, which would at least change this from boring to some kind of adventure show? But they're short, slow-paced, lot of talking in between the occasional axe swing.

In comparison, watch an episode of Berserk, and you'll see great art, giant swords cleaving people apart, a fairy sidekick who's not awful, in a world far darker than this but far funnier, too. I'm fairly eager to see Castlevania S2 on Oct 26. I'm still watching thru the Godzilla anime, which is dumb as hell but amuses me at least half the time.

With anything Groening touches, of course, we need to talk about sexism and racism, see the Problem With Apu. In this case, the boring fantasy kingdom shows male honkies in charge, a few black (or blue & froglike) people off to the side. Women other than Bean are entirely subservient, medieval European gender roles followed 100% up through S1E5. The black vizier is of course evil and perverted; like, how could you expect otherwise from Matt?

I'm disenchanted with Disenchantment. It might be the dullest thing I have ever seen. I would ask Netflix for my money back, but, you know, watching other stuff.

★☆☆☆☆

Xcode Packaging

Speaking of packaging, a thing I hated in Xcode, which made me wish to be filled with nuclear fire, transformed into Godzilla, and stomp thru 1 Infinite Loop, was the package structure:

foo/
    foo/
        foo-Info.plist
        foo-Prefix.pch
        foo.entitlements
        all source, images, and config files in a single giant mess, regardless of "groups"
    foo.xcodeproj/
        foo.xcodeproj/
            project.pbxproj
        project.xcworkspace/
            contents.xcworkspacedata
            xcshareddata/
                foo.xccheckout
            xcuserdata/
                mdh.xcuserdatad/
                    UserInterfaceState.xcuserstate
                    WorkspaceSettings.xcsettings
                    xcschemes/
                        xcschememanagement.plist
        xcuserdata/
            mdh.xcuserdatad/
                xcdebugger/
                    Breakpoints_v2.xcbkptlist
                xcschemes/
                    foo debug.xcscheme
                    foo release.xcscheme
                    xcschememanagement.plist
    fooTests/
        more sources

Are you fucking kidding me?

Groups aren't folders, they're just keywords grouped together until Xcode decides to fuck you over and disorganize them. To fight the project dump dir, I'd make a group, then add a subfolder, edit the group to reference the folder, and then I could create files in their own nicely-organized subfolder. There is of course no automatic name sorting, because that's a developer convenience and Xcode hates developers.

Test code couldn't be in the same folder as the code it was testing. So you'd edit a file, then edit a test file WAY over in a different tree. Good luck knowing how much coverage you had.

I especially love how foo.xcodeproj/xcuserdata/ and foo.xcodeproj/project.xcworkspace/xcuserdata/ have duplicate structures for develop & run/debug modes, because obviously the runtime and debug teams are separate and hate each other.

Julia Local Packaging

So I wanted to move all my common Julia code to a support dir. My filesystem has for 30+ years contained:

$HOME/
    Code/
        CodeC/
            foo/
                src/
                    bar.c
        CodeJava/
            foo/
                src/
                    com/
                        mdh/
                            bar/
                                Quux.java
        et fucking cetera

Build scripts for most languages expect something very like this, and it's easy to import one package's source into another, so I could put common code in a "Marklib" project, and get work done.

Making this happen in Julia was a lot more difficult. With a little help from Slack I made sense of the terrible package documentation for Julia and the incomprehensible errors, and wrote a script juliaMakePackage.zsh:

#!/bin/zsh
if [[ $# -ne 1 ]]; then
    echo "Usage: juliaMakePackage.zsh NAME"
    exit 1
fi
name=$1
devdir=$HOME/Code/CodeJulia
cd $devdir
julia -E "using Pkg; Pkg.activate(\".\"); Pkg.generate(\"${name}\")"
cd $name
git init
git add .
git commit -m "Initial commit"
cd ..
julia -E "using Pkg; Pkg.develop(PackageSpec(url=\"${devdir}/${name}\"))"

And then added the main dir and all packages I make to ~/.julia/config/startup.jl:

# startup.jl

push!(LOAD_PATH, pwd())
push!(LOAD_PATH, "$(homedir())/Code/CodeJulia")
push!(LOAD_PATH, "$(homedir())/Code/CodeJulia/Marklib")

println("READY $(pwd())")

Now finally I can:

% julia
READY /Users/mdh
julia> using Marklib
julia> Marklib.greet()
Hello World!
julia> 

And from there start putting in my libs. Each one needs a package and a startup entry; I may have to automate that by walking my code dir. Waste of several hours figuring that out.

Lovely H.P. Lovecraft Day

Below, one of my favorites to curl up and enjoy; "The Book" fragment elaborates on the first few sections, but the poetic rewrite is more effective:

Fungi from Yuggoth, by H.P. Lovecraft:

I. The Book

The place was dark and dusty and half-lost
In tangles of old alleys near the quays,
Reeking of strange things brought in from the seas,
And with queer curls of fog that west winds tossed.
Small lozenge panes, obscured by smoke and frost,
Just shewed the books, in piles like twisted trees,
Rotting from floor to roof—congeries
Of crumbling elder lore at little cost.

I entered, charmed, and from a cobwebbed heap
Took up the nearest tome and thumbed it through,
Trembling at curious words that seemed to keep
Some secret, monstrous if one only knew.
Then, looking for some seller old in craft,
I could find nothing but a voice that laughed.

II. Pursuit

I held the book beneath my coat, at pains
To hide the thing from sight in such a place;
Hurrying through the ancient harbor lanes
With often-turning head and nervous pace.
Dull, furtive windows in old tottering brick
Peered at me oddly as I hastened by,
And thinking what they sheltered, I grew sick
For a redeeming glimpse of clean blue sky.

No one had seen me take the thing—but still
A blank laugh echoed in my whirling head,
And I could guess what nighted worlds of ill
Lurked in that volume I had coveted.
The way grew strange—the walls alike and madding—
And far behind me, unseen feet were padding.

III. The Key

I do not know what windings in the waste
Of those strange sea-lanes brought me home once more,
But on my porch I trembled, white with haste
To get inside and bolt the heavy door.
I had the book that told the hidden way
Across the void and through the space-hung screens
That hold the undimensioned worlds at bay,
And keep lost aeons to their own demesnes.

At last the key was mine to those vague visions
Of sunset spires and twilight woods that brood
Dim in the gulfs beyond this earth’s precisions,
Lurking as memories of infinitude.
The key was mine, but as I sat there mumbling,
The attic window shook with a faint fumbling.

IV. Recognition

The day had come again, when as a child
I saw—just once—that hollow of old oaks,
Grey with a ground-mist that enfolds and chokes
The slinking shapes which madness has defiled.
It was the same—an herbage rank and wild
Clings round an altar whose carved sign invokes
That Nameless One to whom a thousand smokes
Rose, aeons gone, from unclean towers up-piled.

I saw the body spread on that dank stone,
And knew those things which feasted were not men;
I knew this strange, grey world was not my own,
But Yuggoth, past the starry voids—and then
The body shrieked at me with a dead cry,
And all too late I knew that it was I!

continued

Monday Note

"The social network is built on values that are so shady that it can’t be trusted to address fake news issues. Some countries already suffer from it."
—Frederic Filloux

Normally I read Monday Note for the inimitable Jean-Louis Gassée's posts, like 50 Years in Tech, Part 1 and Part 2 largely about HP; as a former HP-er during Carly's disastrous reign of terror, it's fascinating to read about an HP that wasn't on fire and screaming.

But this time Frederic, the news guy, is actually posting something of interest, and you should read those Fake News posts.