Don't Be a Dick

So, Wil Wheaton ( previously "I Hate Twitter" ) was just chased off the Fediverse (he still has an account on a siloed non-federating instance, which isn't really useful to anyone else). His last statement's pretty clear, so I put that down below.

"Please do your very best to be kind to each other. The world is a terrible place right now, and that's largely because it is what we make it."

I know some of the people doing the harassing. There's no point in even arguing with them: They've decided he's in Two Minutes Hate, perhaps because he has a friend whom they don't like, and won't consider "Don't be a Dick", or having empathy, tolerance, or self-awareness that some of them aren't such great friends to have, for one hot second.

While Gargron has condemned harassment, it doesn't fix the problem, since there are entire instances where 4chan-like behavior is accepted; all you can do is block accounts or those entire instances, and it still poisons the Federated timeline for a while.

I'm not sure any level of moderation fixes this shit.

This is why I highly recommend owning your own blog, and broadcasting that out to other services where people can read it; even better, read this and many other blogs in your RSS aggregator or RSS reader ( currently free! ) of choice. It's OK to put some ephemeral chat on other services, but remember those are owned by other people, and are easily attacked by angry, stupid mobs. If a stupid mob shows up here, I don't approve their comments and it's done. It's the Castle Doctrine of online posting.

Wil Wheaton August 29, 2018, 3:02 PM (will be a dead link soon)
I have been notified by an Admin here that they are getting 60 reports a day about my account. As far as I can tell, I'm not breaking any rules, and I've done my best to be a good person here. But this admin is going to suspend my account.

It's the Admin's instance, so I fully support their choice to eliminate a source of frustration, but something to consider: a person who is doing nothing wrong can be run off one instance by a mob from another instance. That seems ... not cool. 1/x

But it's been made very, very clear to me that I am not welcome in the Fediverse, and I hear you. I hoped to find an alternative to the birdsite where I could find the same fun community that existed over there in the beginning, and it's clear to me that I won't be finding that. Before I leave, I want to just make something very clear, because I've spent most of my life being yelled at by people who don't know me at all, and I want the record to be clear. 2/x

During GamerGate, I was dogpiled and mobbed and brigaded and attacked by thousands of accounts. I started using a blocklist that was supposed to help stop that. I did not know that the blocklist I signed up for also had a lot of trans women on it. When I found out, I did everything I could to remove those women from the list I shared. When there were still innocents on the list, I stopped sharing the list entirely. Despite this, a mob has decided that I'm anti-trans. 3/x

This lie that I am anti-trans, or anti-LGBQ, is deeply hurtful to me (I know it's nothing like the pain LGBTQ people deal with every day, as they simply try to exist in a world that treats them so badly, but it is still hurtful in its own way to me). I just want to make it extremely clear: that is a lie, and the people spreading it are misinformed.

So I'm leaving the Fediverse, which has treated me with more cruelty, vitriol, hatred, and contempt than than anyone on the birdsite ever did. 4/x

I know that I'm well-off, well-known, and as a CIS white hetro dude in America, I live life on the lowest difficulty setting. I know that I have very little to complain about.

But I still have feelings, and I really do care about the world and the people in it. What I see is a lot of anger and cruelty directed at the IDEA of me, from people who I just hope don't realize that it really does hurt me, in my heart, to be accused of being someone I am not, and to be the target of a hateful mob. 5/x

Anyway, take your victory lap and collect your prizes. You've made it clear that I'm not welcome here, and even though I disagree with the action this Admin is taking (banning me when I didn't break any rules doesn't seem right), I respect and support the Admin's decision to run their instance the way they see fit.

Please do your very best to be kind to each other. The world is a terrible place right now, and that's largely because it is what we make it.



What I'm Watching: Star Wars the Last Jedi

In the "that took a long time" category, I finally hit play on SWTLJ in my Netflix queue. I've been disappointed in all the new ones, so I didn't expect to like this. I'm drinking cheap wine and not in a great mood, perfect.


Holy shit this starts dumb, with Poe crank-calling Hux. I thought that was a joke meme, but no, it's actually a scene with "Admiral Hugs" and "your mother" jokes. The single fighter vs giant starship point defenses thing is nonsense especially since they should have learned since the Death Star. The bombers have really shitty fire control systems, and then somehow are gravity-fed. In space. They're not missiles, they're "bombs" which drop "down". What is down? So stupid.

Old Man Luke is annoying, but he's doing the Yoda thing, so annoying is in character for once. That's the only plot- and character-consistent thing I see in this shitshow.

Drinking intensifies.

The long tail chase with the few Resistance and First Order ships, and the centralized command system they use where one shot can behead the fleet, is so stupid. Scatter the ships to the wind, with randomized meetup locations, and no amount of tracking will help. Everyone in here is an idiot; Finn's attempt to flee is the only sign of sanity.

Now let's zoom off to a sidequest at a casino, like I do in JRPGs; sure, sure, fate of the world, first I have to race and breed Chocobos. The casino should be fun, altho it looks too much like a modern Vegas casino. Instead it's preachy because Rose hates fun. Also there's no way these scruffy degenerates get into a classy casino with a dress code. Also nobody in this will be implanted with Ovion eggs, or have Cait Sith join their party, which is what they deserve.

The endless "psychic phone calls" between Rey and Kylo are like a teenage soap opera, and the low-tech camera cutting is awful. Can't be bothered to even project force ghosts in the scene? Actually, now that I think of it, there are very few scene wipes for transitions in this, which is why it feels so jarring. It's all hard cuts with no context. The director's incompetent.

Burning down the Jedi "library" is typically ham-fisted metaphor for Disney Star Wars burning all the Expanded Universe and classic Star Wars. They don't care, and the callow youts of today aren't capable of reading. Yoda drones on and on, which is not at all Yoda-like, but the writer's a moron and doesn't know or care.

The mutiny is terribly executed. Admiral Bligh, er, Holdo is incompetent, but Poe has no idea how to use handcuffs or a brig? Abandoning warships so you can hide, when the First Order fleet still has scanners, is moronic. Instead of all but 6 ships exploding, it really should be all.

Drinking intensifies.

Snoke's always been a bad ripoff of the Emperor, but at least the hologram in The Force Awakens left the possibility he'd be 1m like Yoda; nope, he's human-sized, and basically parrots the Emperor's lines from Return of the Jedi. The duel in the throne room isn't bad, not amazing but the only good, Star Wars-like content in this film so far.

The only characters with any chemistry in the entire movie are Poe and BB-8. In The Force Awakens, it looked like Poe and Finn were gonna hump right on camera; they barely look at each other here. Rose tries to pull off a relationship with Finn, but it's not there.

I look back at Star Wars, and the love quadrangle between Luke, Leia, Han, and Chewie was amazing. They were junkies hooked on each other. Leia and Luke only meet once in this movie and it's a quick, tired goodbye. Chewie has some cameos (and a bizarre infestation of CGI animals) but is never around Leia, and then vanishes. R2-D2 and C-3PO also get one line together.

The CGI animals and rocks in multiple scenes are so awful, they make Lucas' "special editions" look tasteful. This isn't quite Star Wars Rebels level of shitty cartoon CGI, but it's bad, very inappropriate.

Luke's death is pointless, repetitive of Kenobi's duel with Vader, because the moron writer can't write anything new, only recycle. The Just For Men beard before that is preposterous, though (worse than fake-young CLU in TRON: Legacy, which at least A) was set in a videogame, and B) is a vastly better film than this).

I knew going in that this would be bad, Extruded Star Wars-Like Product, but holy fuck. It's one of the worst-written, worst-acted things I've seen in forever.

In The Last Star Wars Movie, I suggested terminating the franchise, but still ranked TLJ above the Prequels-Which-Don't-Exist. I may have overestimated this trash.

★☆☆☆☆ and may the Force not ever be with you, Rian Johnson.


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/"
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), 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 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.

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.

Cyberpunks or Just Punks?

It's not that I don't like Neuromancer, it might be in my top 10 favorite books, but every time I see it mentioned as the "seminal cyberpunk epic", I roll my eyes, because I know these people have never read another cyberpunk book, there were others before Neuromancer and long after.

So educate yourself, make yourself less eye-rolling to me. Here's a little tiny reading list. When you're done with that, hit the KUOI archive on the right, find my Cyberpunk page, work through that. Or maybe I'll pull it out of archive and update it by then? There's a lot in the last 10-15 years since I touched the page.



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 80
GET / HTTP/1.1
(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.