Interesting language, originally a math/statistics package but now as general-purpose as any lang. More or less Pythonic, though it has some type-annotation stuff, and heavily-optimized Julia looks like a mess of annotations with your code buried somewhere inside.

The Mac version comes as a dmg with an app (which I'd prefer for easy install/uninstall), or brew (which I prefer not to use). The app just launches a single command in a new Terminal window; add that path/bin to the PATH in your .profile, e.g.:

export JULIA_HOME="$HOME/Applications/Julia-1.0.app/Contents/Resources/julia"
export MANPATH="$MANPATH:$JULIA_HOME/share/man"
export PATH="$PATH:$JULIA_HOME/bin"

And now in Terminal:

% echo 'println("Hello, world!")' >hello.jl
% julia hello.jl
Hello, world!

The only way I can see to make it compile to a binary is embedding, and I'm not clear on how you package that with a full Julia distribution yet. That's unfortunate. I like REPL workflows as much as anyone, but binaries are what "normal" people run.

Getting Started

<voice tone="excessively chipper"> Let's read the manual! </voice>

Syntax is nicer than usual: function/end, if/elseif/else/end, for/end, while/end, begin/end, let/end, which beats the hell out of Python's def, if/elif/else; to say nothing of abominations like Swift's "func". No do/while loop, which is annoying especially for file processing, but I suspect that can be fixed with macros.

There's a lot of ways to write functions, which is nice but allows some ugly choices. Anonymous functions are x->x^2 or function(x) x^2 end; named functions can just be assigned f(x)=x^2 or written in full:

function f(x)
    return x^2

Whitespace is not significant, and indentation is not enforced, which is a major bummer for style-enforcing-structure, but I'm sure sloppy jerks will love that.

You can use tuples for multiple returns, or as ad-hoc structures:

> point(x, y) = (x=x, y=y)
point (generic function with 1 method)
> p = point(13, 2)
(x = 13, y = 2)
> a, b = p
(x = 13, y = 2)
> a

It's pass-by-reference, not copying, so be careful with mutable data.

My only real kvetch so far is that arrays are 1-indexed and column-major, like FORTRAN, not 0-indexed and row-major, like C. For a numeric package, that makes sense, but for other programming tasks it's frustrating and error-prone, see EWD 831.

This is a functional language, and there are no classes/inheritance/methods, however "methods" are functions which are overloaded based on types, and can be used like class methods:

> quack(x::Int64) = "int $x"
> quack(x::Float64) = "float $x"
> quack(1)
"int 1"
> quack(6.66)
"float 6.66"

As well, you can use closures to make pseudo-classes, the same way you do in Scheme:

let state = 0
    global counter() = (state += 1)
    global counterReset() = (state = 0)

struct (immutable) and mutable struct make "Composite types", and can make objects the usual way:

struct Point
pointDist(p::Point) = sqrt(p.x^2 + p.y^2)
Base.show(io::IO, p::Point) = print(io, "{$(p.x),$(p.y)}")

> p = Point(6, 6)
> pointDist(p)

The default constructor can be overridden at the end of the field list, it's defined as Point(x,y) = new(x,y). The "toString" equivalent there is ugly as hell, but there's a ton of options for overloading it by type of output.

There's a lot of fucking around with generics and strong typing (for weak minds), but ignore all that crap.

Interfaces are a somewhat messy use of several methods to create pseudo-types; define the basic interface methods for your type, and most things calling those interface methods will work. So, a couple iter() functions and you have an iterable, and so on. This would work much better if Julia had an actual OOP class system and real interfaces, but Python half-asses interfaces the same way and aside from being 1000x slower than you'd like, it gets by.

Quickly skimming modules, seems pretty standard import mechanism, but I don't see any way to make something private. OK, I'm bored of reading docs. Let's do something. Something semi-practical here, my standard RPN calculator, one command per line.

Docs/libraries are kind of a mess, Vector is discussed in Base.Arrays, push!/pop! methods are discussed in Collections (an interface). parse is under Numbers, not Strings, as one might expect.

eof() does the extremely unfortunate thing of blocking for input, so it's utterly useless in a main interactive loop.

… About 30 minutes later, I have a working, final version. Well, that was pretty easy, and it's a clean implementation, other than the interactive loop.

Next time I open this, I'll put it in a module, and tokenize the line instead of requiring just one token per line, and have some command-line argument to suppress help and prompts.

I should also investigate IJulia which is a Jupyter notebook, which seems like the "expected" way to make it interactive and handle graphics or media.


#!/usr/bin/env julia
# RPNCalc.jl
# Copyright ©2018 by Mark Damon Hughes. All Rights Reserved.

stack = Vector()

function checkStack(n)
    if length(stack) < n
        error("Stack underflow: Needs $n values")

function parseLine(s)
    s = strip(s)
    if s == "+"
        b = pop!(stack); a = pop!(stack)
        push!(stack, a + b)
    elseif s == "-"
        b = pop!(stack); a = pop!(stack)
        push!(stack, a - b)
    elseif s == "*"
        b = pop!(stack); a = pop!(stack)
        push!(stack, a * b)
    elseif s == "/"
        b = pop!(stack); a = pop!(stack)
        push!(stack, a / b)
    elseif s == "="
        push!(stack, parse(Float64, s) )

function main()
    println("RPN Calc: Type numbers or operators (+, -, *, /) one at a time, = to show top of the stack, ^D to end.")
    while true
        print("> "); flush(stdout)
        s = readline(stdin, keep=true)
        if s == ""
        catch e


Beyond Cyberpunk Web Design

What I want to note here is the UI in the original BCP and Billy's app. Borders filled with wiring and lights. Knobs and switches. Big chunky click areas. Punk rock, graffiti art. When you click things, audio and animations tell you something happened. Not so much the "Jacking into the Matrix. Into the FUTURE!" clip.

It's much easier to find and read information in the web version, but it's not fun. It's ugly and boring. Like almost everything on the web and apps these days, from Jony IVE-1138's sterile white room prisons where you're tortured for daring to have a personality, to all these endless linkblogs.

There are places with personality, but not many. The web looks like shit. One of the best things about cybre.space is that it doesn't look like every other bland, neutral, anodyne Mastodon instance. Update: Brutalist Websites has some GeoCities-like aesthetics in a few. Others are sterile voids.

And that's bothering me about this blog. It looks OK, the stolen Midgar art and my '80s neon colors set some kind of tone, but it can be so much more. So in the weeks and months to come, I'm gonna be doing some redesign, make this into something weirder, if not full-on GeoCities. The RSS feed should be uninterrupted, but I'm going to put a lot more resources on the front page.

Liberation in Art but not in Your Stupid Life: 2112, Real Genius, TRON, and Ready Player One

In which art is not blamed for the problems of the world:


A man in a controlled, music-less dystopia finds a guitar, learns to play, and feels joy. The priests of Syrinx who rule the system in the name of "average" (a la Harrison Bergeron) crush him. The ancients of rock who created the guitar return and liberate the system with a prog rock concert.

Our world could use this beauty
Just think what we might do
Listen to my music
And hear what it can do
There's something here that's as strong as life
I know that it will reach you

Don't annoy us further!
Oh, we have our work to do
Just think about the average
What use have they for you?
Another toy that helped destroy
The elder race of man
Forget about your silly whim
It doesn't fit the plan!


A game designer dude lives in exile above his arcade, robbed by evil AI & corporate suit. His ex and her dork boyfriend let him into the building, and he goes into the computer world, which the evil AI & corporate suit rule as well. The ancient soul of the machine gives the dork's program access and lets it play Breakout against the AI, and the game designer sacrifices himself, liberating the inner world, deleting the evil AI & firing the corporate suit, restoring the game designer to power in the real world.

Greetings, programs!

Real Genius

A too-young, too-uptight student works for an evil professor, but makes friends with other weirdo students and loosens up. The evil professor and the military trick the weirdos and make a death ray from their work. The ancient student in the closet emerges and the weirdos hack the death ray and turn the evil professor's house into popcorn.

All for freedom and for pleasure
Nothing ever lasts forever
Everybody wants to rule the world

Ready Player One

A boy in a crapsack world, literally in a trailer home on top of trailer homes, finds solace in ancient movies and games from a book by an ancient nerd. The corporation which rules the world and the virtual world crushes him and his friends. The ancient nerd's program runs, and gives the boy power and he liberates the virtual world and the real one.

After a long silence she asked, "So what happens now?"

Just Stories

These stories, they're just stories of their time.

2112 didn't end the "Moral Majority" or censors. The PMRC of Syrinx was founded 6 years later to destroy rock 'n roll and rap; the PMRC is gone but Tipper Gore still lives and hates, and music is still censored; remember Fuck You, by CeeLo Green? You probably only heard the censored radio version "Forget You".

TRON didn't end centralized computing, AI, or thieving corporate assholes. Today EA has ruined large gaming, and Google & Amazon make AIs that will probably kill us all.

Real Genius didn't end all CIA/military weapons. Today the babykillers have unmanned drones that can fly anywhere and assassinate anyone (and any bystanders/witnesses).

Ready Player One didn't make the real Internet a "safe space". Facebook, Twitter, or Google can still track you, filter what you see, and give Nazis access to harass you.

This is not a failing of art, it exists for fun or catharsis, and to give you coping strategies. It is not a magic spell to fix everything.

So, you can do something inspired by art; make art yourself; or, if you are completely useless, just whine unreasonably about art and be held in contempt.

What I'm Watching: The Cloverfield Paradox

Cloverfield Paradox: I was bored and drunk and saw this while queue-cleaning. So buckle up, this is gonna be a rough ride. This makes the Lost in Space movie look like 2001: A Space Odyssey.

Earth is "out of power", whatever that means: They still have gasoline, if in long traffic lines, and electricity and computers and lights everywhere, but somehow they're starving because no power. The Sun hasn't gone out, but they don't know about solar, wind, or hydro power? They can't bring nuclear reactors online?

But now there's a MAGIC particle accelerator IN SPACE, which starts up with the sound of a '57 Chevy turning over, visualized by purple neon tubes on a spinny disk, and it'll fix everything if it ever works. Which is not what particle accelerators are for at all.

So, multi-racial, multi-national crew, many from countries that have no manned space program, speaking their own languages instead of Russian-English pidgin real astronauts use. Station's gigantic, with artificial gravity and weird spinning bits attached to a spinning core—whee like a carnival ride!—heavy bulkheads, but no seatbelts on any chair, and they have a fucking foosball table. It's completely outside our ability to build in the next few decades, and yet Earth tech looks like the present. The writer clearly has no goddamned idea what our tin-can & duct-tape space programs are like, never spent 10 minutes watching NASA TV.

Spoiler times, as if anyone cares.

The MAGIC particle accelerator is some kind of FTL star drive (so double MAGIC), and they're so fucking stupid they say "did we destroy Earth? Kill billions of people?" Do you see the Sun, Moon, planets, familiar constellations, and a debris cloud? NO, you fucking moron? Then you didn't blow up the Earth! No "astronaut" would think that for a second in this situation! Take angles to distant pulsars and figure out where you actually are. Goddamn I want to shove a sextant up the writer's ass. Later: The writer thinks a constellation will be "upside down" if you're 2 AU away; does he think the stars are a geocentric shell and the station's now on the other side of it?

Oh no the gyroscope is missing, possibly because the moron writer thinks it'd vanish if you move FTL or something. The woman in the wall is not that weird by comparison.

Remember when I complained that Lost in Space 3D printer wouldn't make a gun until the Robot overrode it? You shouldn't make a gun on a space station. But that's OK, guy's full of worms. MAGIC severed arm like Thing Addams or the Night Gallery "Return of the Sorcerer".

Nothing here makes any sense. The bullshit excuse of a "paradox" from particles being in two "dimensions" (parallel universes is the au currant term for the last century, dumbass writer) wouldn't allow MAGIC to fucking happen. Someone being in the wrong place and phasing over, maybe, lot of conservation of mass/energy violation there. "Spooky MAGIC shit" is not a symptom of parallel universes.

Cut to Earth and half-assed tie-in to Groverfield. Asshole husband doctor drives while texting on his phone. He serves no purpose in the film and could be replaced with a framed photo. Giant monsters are also not present on any parallel universe Earth, because they'd require MAGIC to stand up.

Reality: Water in space is interesting stuff. In low-G, it makes a bubble because surface tension is higher than internal pressure. Space is "cold" but because there's nothing to conduct heat, just like a vacuum thermos, nothing loses heat rapidly. This fucking movie: Water exposed to vacuum instantly freezes into jagged ice spears and cryogenic ice cubes! Where did all the heat go? What's splitting the surface tension? FUCK.

Reality: Space station supply ships are minimally-fueled, barely able to be lifted to orbit and maneuver to dock, then return mostly by gravity. This fucking movie: "Pods" can fly across the Solar System in short enough time a passenger wouldn't die. Inconceivable with any drive that wouldn't also solve the "power crisis".

Reality: Debris blasted from a station would move steadily away in a parallel orbit. This fucking movie: Debris orbits around a pole like a stripper. "We can activate the thing remotely!" "No, I must heroically die and get out of this fucking movie!"

Jensen's awful sprightly and Terminator-like for someone who just had major surgery and blood loss a few hours ago. Continuity, right? Who fucking needs it.

Sending the plans for the MAGIC device to the second parallel is an extra stupid idea, since it'll fuck up reality every time it's used. Having it on the first parallel is bad enough, but at least it can't destroy or merge with the other station again. With two of them working, each parallel would fuck up the other. So stupid.

"Tell them not to come back (to a theatre showing a JJ Abrams film)! Tell them not to come back! AM I SHOUTING LOUD ENOUGH FOR AN OSCAR?!"

☆☆☆☆☆ and everyone is now dumber

TBL Has Some Regrets

"We demonstrated that the Web had failed instead of served humanity, as it was supposed to have done, and failed in many places … [increasing centralization of the Web] ended up producing—with no deliberate action of the people who designed the platform—a large-scale emergent phenomenon which is anti-human."
"While the problems facing the web are complex and large, I think we should see them as bugs: problems with existing code and software systems that have been created by people—and can be fixed by people."
"You don’t have to have any coding skills. You just have to have a heart to decide enough is enough. Get out your Magic Marker and your signboard and your broomstick. And go out on the streets."
Tim Berners-Lee, Vanity Fair

On the contrary, Tim, the World Wide Web is very human, and these are not "bugs" or "emergent": It's not a perfect crystalline utopia inhabited by rule-following robots reading RDF tags, but instead it's like an organically grown city, with a mix of lovely things and nice people, and also back alleys and skyscraper offices full of predators. There's surveillance systems everywhere because the predators wanted surveillance, paid engineers well to make them, and it's much harder to stop Internet surveillance than spray-painting a closed-circuit camera.

The Internet didn't create spies, tyrants, or marketing scumbags; the Stasi managed to spy on everyone, and they barely used the few shitty Soviet computers they had. Madison Avenue invented scumbag marketing long before they had "data" supporting their psychological manipulations. Of course now the same kind of villains at the NSA, KGB (FSV & SVR these days, same thing), and Facebook are going to use modern computer networks to spy and manipulate. A poster-board sign isn't going to convince them to stop.

"Oh gosh I just realized I've spent my life deceiving people, and that's wrong!", said absolutely no spy ever. (The Spy Who Came in from the Cold is fiction)

Getting more people connected is somewhat positive and empowering for the "last billion"; although you, presumably fellow first-world libertarian/liberal/con-but-not-an-asshole-servative reader, may well not like the political and religious programming the last billion have…

But even if everyone has a computer & unfettered Internet access, it's not going to make everyone freer, they're just more entries in Facebook's databases. The only cheap mobile phones are Android, which is run by and for the benefit of Google's surveillance systems. You can release any kind of utopian decentralized system, and people will say "I want Facebook and Youtube… and what are ads?" and many will end up in it by social pressure and marketing.

Some of us do what we can to exist outside of those networks, but don't get too idealistic about it, or you end up crazy or yet another dead martyr.

WWDC 2018 Predictions

Opening Video: Emotional music. Mortuary full of coffins. Crying mourners. THEN! Light shines from one casket after another: iDeath! The iPhone app that live-streams to and from inside your casket so your loved ones never have to let you go! SOMBER!

Item 0: Apple's best year ever, look at this literal mountain of cash and gold they can swim in like Scrooge McDuck, at the new Apple spaceship campus! KA-CHING!

Item 1: Apple announces the end of mechanical keyboards. If you filthy heathens in non-sterile, non-white-void rooms can't take care not to spill Coke (or coke), crumbs, hair, or microscopic dust particles into Jony IVE-1138's perfect butterfly switches, jamming them up, and then have the audacity to sue, then you just don't deserve them. All replacement and new-issue keyboards will be sealed-in, membrane keyboards like the Atari 400. COURAGE!

Item 2: Apple announces the end of C, C++, Objective-C, AppleScript, Javascript, and Swift, in favor of a new cross-platform language: Workflow, acquired last year. Kids and junior developers alike will love learning to code with easy visual blocks. Expert developers can eat shit and die use remote APIs to implement code on their own web server. SWEET!

Sub-Item: Apple is responding to Developer's Union by hiring the Pinkerton Agency. There will be no trials of any kind. BEATINGS FOR ALL!

Item 3: New Macs! Finally, the new Mac-itecture is here: ARM, iOS, with an Intel emulator that runs up to 20% as fast as a real Intel chip in this rigged demo. Available 2019 or 2020, they really want to get this right, so all existing Macs are EOL today. POWER!

Item 4: Apple announces all-new game development tools, streaming from a home server or iCloud Games server, just like Steam Link but, you know, for the children!, with Apple's 30% cut and no expensive $9.99 games, only "free" IAP games allowed. Obsolete native iOS games will be phased out over the next 6 weeks as OpenGL is deprecated and then unsupported, and Metal only supported on MacTruck platforms. BEEP BOOP (nobody at Apple has ever played a videogame, so this presentation's kind of awkward).

One More Thing: HomePod now supports stereo, a mere 87 years after radio, records, and movies went stereo. Surprise announcements of vinyl LP and 8-track addons for the HomePod Hi-Fi shipping this Fall, and another U2 album in your iTunes library today! ROCKIN'!

Quite a lineup you got there, Timmy Cook! Don't ask how Steve would run the company, you do it your way!

The HTTP Sky Is Falling, Says Chicken Little

Dave's explanation is just absolutely wrong, and he has to know this, he's lying to frighten you away from security; I don't know why. Google's not planning censorship, just a warning being provided that a site taking your personal information is not secure.

Will this break plain HTTP sites?
No. HTTP sites will continue to work; we currently have no plans to block them in Chrome. All that will change is the security indicator(s).
Chromium: Marking HTTP as Non-Secure

Even if Google Don't Be Evil was Evil, you could still use Free-as-in-Drugs Firefox or whatever, and can just use curl to archive sites, or even by hand:

% telnet example.com 80
GET / HTTP/1.1
Server: example.com
(hit return twice, ctrl-D to end)

But you shouldn't be trusting anything you see or entering anything on an HTTP page.

If you connect to a site over HTTP and you do not fully control the wires from your computer to the server, that site can be spoofed and spied on. If you use public wifi to talk to HTTP, your logins and credit cards WILL be stolen. Guaranteed, some jackass in your Starbucks is wiresharking your connection.

Even if you think you have a secure connection, anyone on the routers between you and the server can read your connection. Routers are not secure, they have been routinely compromised.

The only protection you have against these "Man in the Middle" attacks is TLS (successor to SSL), using HTTPS instead of HTTP, SSH instead of telnet, SFTP instead of FTP, emailing with MIME and SMTP over TLS instead of unsecured ports, iMessage or Signal instead of IRC or Twitter & Facebook "direct messages" (which have bever been hidden from their staff).

In the early days of the ARPAnet and Internet, there was no security and we couldn't do much about it, but to resist warning people about insecure sites now is irresponsible.

New Electron Dance

No, wait, that's the Neutron Dance, I get those confused.


Since abandoning any hope of the iOS App Store paying my bills, I've had to look back at the web or desktop. My current available time-at-computer and energy these days isn't sufficient for a day job or even contracts, much to everyone's dismay. So time for another hard look at the situation.

I like working on my Mac, but Mac isn't that big a market. I also want to ship on Windows (and Linux, I suppose). Objective-C is one of my favorite languages ever, Cocoa & UIKit (on iOS) were great APIs, AppKit on the Mac much less so, but since Apple's killed Obj-C and it's not portable, my happy years of typing [ ] are over.


Swift might be the worst mental disorder to strike programmers in decades. Swift is orders of magnitude slower than Objective-C, crashes constantly, the moving-target "spec" creates incompatible changes every year, and because they're too stupid to standardize a binary interface, every program has a 20MB+ blob of Swift runtime. For a single-platform joke language perpetrated by a C++ bozo who fucked off after a year to play with cars. So I'm all too happy to say good riddance to that bullshit. I mean exactly this: If you're using Swift, you either don't know better (it's OK to say you don't know!), or are defrauding your employer for hours, or have something wrong inside.

13 years ago, Project Builder/Interface Builder was a pretty good dev toolkit since I could use a real editor (BBEdit) with it, but Xcode locked that out, and then as Apple sucked in more tools over time, it sucked harder and harder; I can't stand the rickety deathtrap these days. I was getting by in JetBrains' AppCode, but still had to use Xcode for Interface Builder (RIP) and to get builds onto a device half the time. Xcode is a crashy, substandard pile of shit with maybe the worst editor in any IDE in history. Syntax highlighting stops working at random, for most of a decade it has code-completed "nss" as "NSStreamDelegate" rather than the slightly more useful "NSString" (before that it couldn't code-complete at all!), I could go on for hours or days about how Xcode kicks you in the input/output ports every time.

And the worst part is you can't fix the fucking thing, no user-serviceable parts inside, Radar is a black hole, no scripting or plugins. Just bend over and take what Apple Developer gives you good and hard. It's kind of a relief that current Xcode doesn't run on the last stable MacOS version (Sierra).

I'll stick with BBEdit for text and Atom for code, thanks. If I'm angry at Atom I can fix it myself or file a publicly-trackable ticket; I'm rarely angry at BBEdit but I can ask Rich to fix it.

So I'm writing web-type software in Javascript, with Node or Electron behind it. Javascript aka ECMAScript has become a good language in the last 5-10 years, and the V8 runtime in Node/Electron runs close enough to native now for most needs. I love that I can just write UI in HTML again. No fucking around with Apple's bullshit of deprecating APIs out from under me (I "get" to rewrite alert/menu code again?!), or promising to support SpriteKit/SceneKit across iOS & Mac and then doing fuck-all on either. WebGL (or Three.js, anyway) isn't fast enough for complex scene-graphs, but 2D work in Canvas is mostly fine (and it gets better every year, instead of bit-rotting like unused S*Kit APIs). localstorage in a web page isn't enough for any real program, thus Node is needed to reach the filesystem.

I slander Swift for leaving a giant runtime turd in every program, but Electron's the same way: It has to contain a browser, Node, and system APIs. But I'm not at the mercy of Apple's marketing-driven dev tools.

Certain Mac nerds obsess about Purity of Essence, insisting that everyone should love Xcode, Swift, and AppKit, and that use of any other technology is an abomination to the end-users, whom they clearly love more than me. Can you hear that slurping sound? That's someone fellating Apple marketing. Roughly 4 billion more people are familiar with web pages and will find a web-like UI more comfortable.

I intend to keep up my experiments in Scheme and Pascal when I have time, I'd far rather have small, fast, native binaries on every platform, but shipping beats purity.

Progress is being made:



(the + road texture there will get replaced soonish)

HP Lovecraft's Xenophobia

It occurs to me after a number of rereads (now up to "Dagon") that Ruthanna and Anne there live a callow, sunlit, happy existence, don't really know much of the world, and have never read a history book. "He was as wrong about humanity as it’s possible to be without actually believing that we’re all sessile pebbles"1: No, he was not.

World War I, which informed most of Lovecraft's despair at Human stupidity and imminent extinction, was then exceeded by World War II in every kind of atrocity, and that was exceeded by the Communist states during the Cold War and beyond. There is no depravity or horror to which Humans will not sink given power and the ability to "other" people. "Kindly, liberal, crippled, New Deal" FDR imprisoned and robbed 120,000 Americans of Japanese ancestry; the Tuskegee syphilis experiment treated Black people as test animals. The KKK was still terrorizing and lynching in the South (still is, if smaller). It's still unsafe to walk or drive or stand around in Starbucks while Black in America. Immigrants and refugees are treated like unwanted vermin in every country. Humans murder each other over minor differences in skin color, birthplace, language, or what name to call some fairy tale god (or for saying it's a fairy tale). No joke, Humans blow up other Humans over cartoons of their prophet. Half of Americans voted for the Cheeto thing that squats and defecates in the White House.

Any notion that Howard's xenophobia is excessive for his time, or even now, is just delusional. He was an asshole about race, and perhaps about gender (very scant evidence, from a time when few male writers wrote women except as objects), but the distinction is that he was more literate and expressive of his bigotry, while the assholes next door just couldn't write about it coherently. If he'd been into politics, he'd have been the William Safire of his time. Somehow he found his way to the weird tale instead.

So when his narrators see the real owners of the Earth, and they're nothing like Humans, of course they flip out. What are Humans going to do when confronted with fish-frog-humanoid things, unspeaking but greater in intelligence, ancient and undying, worshipping gods (or godlike aliens) who provide true power? As in "Shadow over Innsmouth", bombing the Devil's Reef is a minimum possible freak-out. Somehow they pull back from provoking a full-out war with billions of living demigods, and the Deep Ones (being our moral superiors) are uninterested in great conquests of the land.

Howard does have characters who don't flip out at the alien, like the narrator and some other abductees in "Shadow Out of Time", but then when he's confronted with the truth of our imminent doom, he loses it.

I am extremely pessimistic about First Contact, and I expect that true AI will end very very badly for Humanity. Nobody's going to show up and say "You're totally ready to join the Federation of Nice Planets!"; we'll either meet Conquistadors, exterminators, or if we get to a lower-tech species first, victims. Ideally, alien contact would unify Humanity, but more likely every group will seek their own advantage and agenda.

As for the reread, I'm switching to publication order, then see if they or someone else has any commentary for a story. I've previously read some of ST Joshi's annotated books, but his apologies and delusions are just as annoying.