Marzipan and Electron

Chris is missing the point of both technologies. And I'm sure not a brat Millennial.

Marzipan (candy frosting) is a legacy porting technology: Existing iOS apps can cost more to port to AppKit than they're worth, but may be worth something as a cheap Marzipan port. Nobody ports their iOS apps to tvOS or watchOS because it's not profitable, and everyone (in the first world with money) has an iPhone already.

I loved my UNIX® workstation Macs after suffering with Linux for a decade+, but Timmy Cook's Apple abandoned the Mac after Steve's death and Scott Forstall's firing. Anyone making new native Mac apps is in an abusive relationship: Apple does not love you, and does not care about the Mac.

I'd rather eat broken glass than run Linux again, and I have never and will never be a Windows weenie, but I'm not relying on Apple to support desktop developers ever again.

Apple's Mac apps have generally been shit for years now, because they won't spend the resources to develop & support their own stuff. iTunes is a bloated pile of crap, half-broken because it has to run on Windows, too; you don't like hybrid web apps? Everything except your library is web or XML rendering. Pages and Numbers were fast, minimally useful apps that got rewritten based on the iOS versions, and are just about useful for a memo or a chart, but not real work. Mail's a clusterfuck and not half as useful as when it supported more scripting and addons.

The new Mac commercials, first in years, show the broken-keyboard laptops and models they no longer make, nobody coding Mac apps, no desktop Macs. Where's that shiny "new" iMac Pro from last winter? Isn't that what a real musician would use? A near-blind photographer squints at a tiny Mac laptop instead of a giant 27" retina display?

This is how technical, developer-oriented Apple ads were in 2002:
apple_unix_ad-s

Electron and Node are the future (along with Elixir, Go, Rust, maybe others?). It's 100x faster and more fun (attach the FunMeter™ somewhere fun) to code in than Swift, you can use any good editor instead of fucking Xcode, do layout with HTML/CSS instead of the rotting corpse of Interface Builder trapped inside Xcode. And it's cross-platform; 95% of the users (even in the first world with money) don't run Mac, because Apple never updates the Macs, they failed utterly to follow-through with Macs behind iPhones. There's 20x bigger market potential.

The future is certainly not banging your head against the Swift and Xcode walls, just to make a pure Mac app nobody will see. You can't make fun of Electron's runtime, which needs Node and Chromium, if you use Swift, which has a giant runtime turd because their amateur hour C++ compiler nerds can't make a stable ABI. The Mac's only future source of native apps is Marzipan ports.

There can be performance problems in Electron, but Slack's an outlier at 196MB binary and devouring 1.2GB RAM(!!!); it's the bloated WalMart-shopping fat-ass of Electron apps. Discord is also Electron, it has a 136MB binary and uses 360MB RAM, and does more, faster and better than Slack. Atom is the original Electron, has a 541MB binary, and uses 600MB RAM, for an entire editor/IDE.

My game currently has a 139MB binary, and uses 200-300MB RAM when running. Comparing to a random casual game from my Steam library, Chainsaw Warrior (well, "casual"; I've only beaten it once on Easy). It's based on Unity (another VM!), has a 249MB binary, and uses 200MB RAM when running, plus Steam itself uses 130MB RAM (I may yet integrate Steam into mine, so that may even out). It doesn't seem excessive.

I can't compare my Swift game prototype from 3 years ago, because it was written in a version of Swift that doesn't compile in any Xcode that runs on current hardware & OS, and Xcode "helpfully" deleted the built binary; who needs working binaries, right? I might have an old Xcode on my old laptop? Maybe I could waste a couple days fixing the code by hand in current Xcode, if I hated myself or loved Timmy Cook's Apple that much?

New languages evolve fast, but I can run 20-year-old Javascript and it'll run thousands of times faster than it did in the '90s, because the language was improved with forwards-compatibility in mind, hardware caught up, and the newer VMs compile & run it faster. I can compile 30-year-old Objective-C, and it'll run.

We had something similar to web tech 20 years ago with desktop Java, but the convicted criminal organization Microsoft sabotaged it and made a shitty single-platform ripoff called C#. Viruses became a problem for applets, which had nothing to do with desktop Java, but killed Java deployment even before Oracle bought & ruined SUN. Android runs on another Java ripoff, but their dev tools and APIs are even shittier than Xcode or C#, and the users are poor, so why make anything for them? Server-side development in Java, Clojure, or Scala, running on the Java VM, is hidden away in a back room, and made as boring as possible.

So now we have to reinvent the runtime, this time with Node & Chromium. OK with me.

Nintendo E3

  • Daemon Ex Machina: Looks like recycled material from the bad Starfox and non-Metroid "Metroid" mecha games. Dire.
  • Xenoblade Chronicles 2: Cartoony JRPG with pretty art, music, and numbers all over the screen: I love you. I barely remember the first Xenoblade Chronicles game (Wii?), but I'm up for it.
  • Pokémon Let's Go: I've never poked a man and never will, except briefly in Go. The physical Pokéball Plus is a cute idea.
  • Super Mario Party: Video shows way more ethnically integrated families and friends than entirely plausible. It's Mario Party, pointless but fun little minigames, it'll be fine. Everyone should have one.
  • Fire Emblem Three Houses: Pretty, seems like there's more story than usual between the tactical battles, and bigger armies? Cool, tho I expect like all FE games it'll get dull fast, they never learned to build pressure on the player.
  • Fortnite: The message of the novel (one of my favorites, along with the manga & movie) Battle Royale by Koushun Takami is that totalitarianism thrives on cruelty, people will do almost anything to each other to survive… but resistance and hope through sacrifice is possible. The central message of all these Battle Royale ripoff games is that it's fun to just murder your friends and classmates and reinforce totalitarianism. So, you know, I'm not a fan of this bullshit.
  • Overcooked 2, Killer Queen Black, Hollow Knight: Ports of indie games, the kind of things worth playing. Nice.
  • Long string of games, but I will call out The World Ends With You, which I loved on iOS until Squenix stopped supporting it, and Apple's moved the platform so often you can't rely on it to stay playable. If Squenix gives me back my $20 I'll buy the game again, Switch would be a really good platform for it.
  • Super Smash DoucheBros Ultimate DX GameCube Elite Pro for Smashing Faces: I have never cared less about a game franchise than Smash, and this I cared about less than usual. But I'm sure it's super exciting to Smashbros. Samus & Ridley Amiibo might be nice to have, as an old Metroid fanboy.

Have I missed it or did they say nothing about Animal Crossing for Switch?

Sony E3

Catching up:

  • Japanese instruments: Not exactly my thing, I prefer WagakkiBand, but classier than anything else we'll see here.
  • The Last of Us Part II: Laster of Us: Little girl (ignoring first game's plot choice to sacrifice her and save the world) goes on a mass murder spree after dancing with her girlfriend. No sign of the clicker zombies. Just a psychopath chopping people's necks open. What the actual fuck is wrong with you?
  • Ghost of Tsushima: Very lovely natural world and samurai. And then it's just used for a bunch more murders. You can't go play a flute and drink and fish in a river, the dialogue is very obviously scripted and choiceless. All this tech wasted making another fucking fighting game?
  • Control: While it seems to have a lot of fighting, there's maybe some puzzles with your amazing psycho powers?
  • Resident Evil 2: When there are no more good ideas in Hell, remakes will walk the Earth. But at least shootin' zombies is OK.
  • Trover Saves the Universe: Fuck yeah Justin Roiland and some kinda silly platformer! First time I've been interested in anything here.
  • Kingdom Hearts III: Pirates of the Caribbean WTF, is Jack Sparrow a Disney Prince(ss) now? Toy Story? Why not the Incredible Hulk and Deadpool, Squenix? The first one was weird, but this is so mashed together I don't even know what it is.
  • Death Stranding: Weirdest fucking thing ever gets weirder (but also more boring? Lot of walking scenes) in each video. What if there is no game, just increasingly fucked-up videos as an art project/troll? Hey, Lindsay Wagner (Bionic Woman), awesome!
  • Spider-Man: New York's shittiest hero gets to fight shitty villains like the Shocker (two fingers and thumb), looks like an exact ripoff of Batman Arkham Asylum. Super shitty skintight texture suit like a 2001-era low-poly game.
  • Dreams: Cute little VR-based toy, like LittleBigPlanet. Probably even more penises. Huge points for not being a murder simulator.

Debugging a Flicker

Working on the game, and every time I mouse-click to move (finally adding that, it's been all keyboard up to now), the screen was flickering! This had never happened before. Literally 3 hours of debugging, adding voodoo CSS incantations like:

-webkit-backface-visibility: hidden;
-webkit-tap-highlight-color: rgba(0,0,0,0);

which did nothing…

Finally made a new test project with just the canvas code and a mouse handler. Still not flickering. Then I add random lines on the screen to see some content, need to find the canvas size to make those lines, and that flushes out the offending line:

1: canvasSize() {
2:  const canvas = $("canvas");
3:  const size = [canvas.offsetWidth, canvas.offsetHeight];
4:  canvas.width = size[0]; canvas.height = size[1];
5:  return size;
6: }

See it? Line 4 is reassigning the width & height of the element, based on the display width/height. Which has to be done during setup and on window resize, but blanks out the entire canvas.

SIGH. Split that out into setup, and the flicker goes away.

It's so impossible to know what's my fault and what's HTML/CSS/JS being weird.

At least I'm only fighting a single rendering engine here. I miss doing this stuff in UIKit/SpriteKit or OpenGL ("I made a triangle!"), but the former's sinking in the Swamp of Swift, and the latter's RIP deprecated, and I'm hardly going to chain myself further to Apple with Metal.

Microsoft Says They'll Support Atom

Re Microsoft Acquires Github,

reddit AMA with Nat Friedman:

Developers are really particular about their setup, and choosing an editor is one of the most personal decisions a developer makes. Languages change, jobs change, you often get a new computer or upgrade your OS, but you usually pick an editor and grow with it for years. The last thing I would want to do is take that decision away from Atom users.
Atom is a fantastic editor with a healthy community, adoring fans, excellent design, and a promising foray into real-time collaboration. At Microsoft, we already use every editor from Atom to VS Code to Sublime to Vim, and we want developers to use any editor they prefer with GitHub.
So we will continue to develop and support both Atom and VS Code going forward.

Obviously, trusting Microsoft is how you get left in the desert staked out over an anthill without your editor of choice, but it's a little better to at least hear the new puppet CEO of Github commit to it.