Blog

Fall of Visual Basic, Rise of QuickBasic?

There was simply no other tool that a developer could use to sketch out a complete user interface and get coding as quickly as VB.

Except Smalltalk on the Xerox Star (1981), ResEdit on Classic Mac (1984), RCS and ORCS on Atari ST (1985), Hypercard (1986), Interface Builder on NeXTstep (1988), and others; Visual Basic came out in 1991, Delphi came out in 1995. Maybe there was no other tool on brain-damaged DOS/Windows systems before VB, I can buy that, but real computers were doing RAD a long time ago.

Alan Cooper, the "father" of Visual Basic, has done some really interesting work with interaction design and user experience, but he didn't invent RAD. VB started life as his project "Tripod", a shell creation tool, basically a user-customizable program launcher or "wizard". Then Microsoft bought it and turned it into "Visual Basic", as a kind of ugly Hypercard (is BASIC a worse language than HyperTalk? Eh.)

VB became famous for a legendary feature called edit-and-continue, which allowed developers to run their programs, find problems, fix them, and then keep going with the new code. This was a sharp difference from almost every other programming environment known to humanity, which force developers to recompile their work and start over after every change.

This is, of course, utterly wrong. Every language with a REPL can do this: You write some code in the REPL, run it, it crashes or produces wrong results, you change the one offending function and resume. All global objects are still present, no recompile necessary.


#;2> (define (hello name) (error 'hello "Unimplemented")) #;3> (define (greetings) (for-each hello '(Cthulhu YogSothoth ShubNiggurath))) #;4> (greetings) Error: (hello) Unimplemented #;4> (define (hello name) (printf "Ia ia, ~A fhtagn!\n" name)) #;5> (greetings) Ia ia, Cthulhu fhtagn! Ia ia, YogSothoth fhtagn! Ia ia, ShubNiggurath fhtagn!

The one difference is that to save state, you have to copy-paste out of .csi_history or whatever. IDLE lets you save off your session history directly, but you still have to edit it into a working script. VB did have the virtue of staying in the live editor, but you're still just coding behind buttons, you have no access to a history or REPL.

(This is why I dislike DrRacket so much: If you edit code, it does destroy your global REPL state! Why even have a fake-REPL there, man?! Command-line Racket doesn't have this problem, but it's still not a great Scheme.)

Just as VB acquired the same power as C#, C# picked up the same conveniences as Visual Basic. For example, .NET’s type safety and memory management features meant that C# developers never needed to worry about memory leaks, just like VB developers.
In other words, C# now had the guardrails to protect hobbyists, students, and new programmers without surrendering its power. All of a sudden, VB was no longer something special. It was just another tool in a capable programmer’s toolkit.

Every part of that is… well, not correct.

  1. My understanding is VB.NET was a mess interacting with .NET resources, so if you used it you were still stuck in the VB gulag or had to learn so much C# or C you might as well move up.
  2. C# is a hard language to start up in, you would never give it to a newbie and say "good luck!"; although that's what Unity does, and most Unity code is nightmarish as a result.
  3. C# is certainly not "never need to worry about memory leaks"; it's a Java ripoff with more native libraries, many of which have dangerous C++ based memory management, and in any case you can over-retain things and fill up memory very quickly.
  4. No capable programmer is going to say "this project is best in… Visual Basic dot Net!" Except on broadcast TV-for-morons.

The one good thing from all this:

An innovative project called QB64 has created a modern QuickBASIC replica. It runs on Windows, MacOS, and Linux, with no emulator required.

OK, this is interesting. Terrible domain name www.portal.qb64.org though, what is happening there? Just qb64.org redirects to that mess.

Once you run the setup_osx.command, it has a qb64 binary, which opens a DOS-like window with the old DOS qbasic.exe UI. Huh. This isn't bad, though the font is small and the only way to change it is with a custom font. It ships with a cyberbit.ttf font which is pretty but very W I D E.

Writing something and hitting Run|Start dumps an untitled binary in the main directory. Saving (to the programs folder in this package) and then hitting the Run|Output EXE to Source Folder toggle does something more reasonable: hello.bas, hello, hello_start.command. A trivial program is 1186K, which is excessive, but it does work, opens a terminal and shows some text.

There's a ton of sample code in program/samples, including a lot of 3D stuff.

This is a pretty credible BASIC environment.

Pro:

  • Structured BASIC, if you want it.
  • You can just recompile on every platform.

Con:

  • No interactive REPL (that was one of the few things classic line-oriented BASIC, or hybrids like ST BASIC, had going for them).
  • Slow compile.
  • Ugly editor, though probably playing with fonts and colors would improve this.

You'll always be better off just giving a newbie Python, but some people may have old code or nostalgia.

  • Chipmunk BASIC is certainly nicer as an interactive environment, but probably hundreds of times slower.

Evangelion Session 2: E05-07

Stopped just short of Asuka. That's too much to leave as a cliffhanger for one day.

Rei's early appearances are even more stiff and awkward with everyone except Gendo than I'd recalled. She is an utter robot, not even autistic or depressed and withdrawn, but just not there. That weird smile is almost worse than nothing.

Misato in a towel, and Rei in a towel or nothing at all, the fanservice was a little heavy still, but less than the first few eps. Misato's morning ritual is how I lived my 20s, too, but sooner or later that catches up with you. Just coffee now.

The "Human weapon" ep… if you wondered how cold and calculating Ritsuko and Gendo are…

If you're missing the old ED music instead of Rei's theme, because the songwriter and 26 artists couldn't make a deal with Netflix:

  • Every "Fly Me to the Moon": I recommend watching it now, maybe youtube-dl if you want to keep it. (minor annoyance: It's in webm, so I now have 4 CPU cores on fire[^1] trying to convert it to mp4)

The reviews are in!

Netflix isn't providing subs for some of the text screens, but they're usually duplicated later in English (at second commercial break?). I can read enough kana to recognize things like the roommate chore board being all シ (Shi, for Shinji) and just a few ミ (Mi, for Misato), which is funny because she won't even do those days. This is really motivating me to get back to learning Japanese properly, because just reading nonsense words is frustrating. I accept that my calligraphy will always be shit.

1:

Evangelion Session 1: E01-04

In the distant future of 2015… after the Second Impact in 1999… SIGH. Those seemed like plausible "future" times when this came out, really.

Netflix defaulted to JP/subtitles for me, but I tried the EN dub for about 15 minutes. It's OK, maybe better/more literal than the old one? Nobody sounds goofy, Shinji's very mild, as he should be. But I went back to JP, at least for this first time thru. Might do a dub watch second run.

This is the Netflix English dub actors list:

Looking some of these up, they're interesting choices. Several also appear in the new Gundam dubs. The Shinji actor Casey Mongillo being a transwoman is very appropriate, given Shinji's gender ambivalence.

It's weird that Netflix changed the "Fly Me to the Moon" cover from the end credits, it's just incidental music now. Rights problems? I never felt it was really appropriate, but I only sit thru the end credits to see the "next episode" bit, which is A) Not very spoilery, and B) sometimes contains in-jokes. "More fanservice" is not so much a joke as self-awareness; there's a lot of T&A from Misato and even scientist Ritsuko in early eps.

I am just as much in love with Misato as I was when I first saw her. When she kicks her clock and wakes up looking like a storm hit. Whoo.

Get in the damn robot, Shinji. And follow Misato's orders, ya little creep. I'd forgotten about the blackout/flashback structure of E01-02. The dumbass schoolkids are great for illustrating how weird Shinji is, but they're an annoying distraction the rest of the time, and they mostly get dropped later.

The constant SDAT rewinding of tracks 25 & 26…

Only goes up to 22, so I dunno how he's listening to the last two eps (yes, I know Shinji doesn't have the OST to his own show on his SDAT. OR DOES HE?!)

Neon Genesis Evangelion

There's lots of theories about what order to watch. Just watch it straight through, maybe no more than 2-4 eps per day because this is some heavy shit for what's ostensibly a "mecha anime". Definitely watch eps 25 & 26 and then the movie, End of Evangelion. Evangelion Death(True)² is a recap/remake which is entirely optional, but fine afterwards; I barely recall Death & Rebirth.

If you're very confused, that's fine, that means its working. Keep watching.

What I'm Watching: I Am Mother

13,000 days since extinction event, a single robot Mother raises a young girl (Clara Rugaard) in an advanced complex, the first to repopulate the Earth. Everyone outside is presumed dead from plague. Until a stranger shows up.

Most of the plot is based on who is lying or just deluded, and it turns out everyone, all the time.

The sets are great, sterile industrial Terminator vibe to everything.

I was going to complain about the origin of the stranger, and then it's resolved. I was going to complain about various robot cliches, and then the film does the right thing instead.

Just a perfect actual science fiction film.

★★★★★

What I'm Reading: Lord of the Fantastic: Stories in Honor of Roger Zelazny

"I took it with equanimity, however: I've long known that fortune's a whore and life itself a kind of stupid muddle. I am not a religious man. Far from it. I hold, if anything, a belief which I believe was once ascribed to the Gnostic: that Satan won out over God, not the other way around, and the Dark Prince runs things in the dismal and disastrous way that suits his nature. I knew that everything was just chance and bad luck, in a universe in which things were stacked against us and even our ruling deity hated us."
—Robert Sheckley, "The Eryx"

Great little anthology, Walter Jon Williams' "Lethe" in particular hits a Zelazny note (not the first time; his Ace Double "Elegy for Angels and Dogs" sequel to Zelazny's "The Graveyard Heart" is fantastic), "The Eryx" is the kind of wiseass story Sheckley told in all his work, with a little Zelazny mysticism. Some of these are more poetic fantasy than I'm really into, but that was also Zelazny's thing.

  • Lethe, by Walter Jon Williams
  • The Story Roger Never Told, by Jack Williamson
  • The Somehow Not Yet Dead, by Nina Kiriki Hoffman
  • Calling Pittsburgh, by Steven Brust
  • If I Take the Wings of Morning, by Katharine Eliska Kimbriel
  • Ki'rin and the Blue and White Tiger, by Jane M. Lindskold
  • The Eryx, by Robert Sheckley
  • Southern Discomfort, by Jack C. Haldeman II
  • Suicide Kings, by John J. Miller
  • Changing of the Guard, by Robert Wayne McCoy and Thomas F. Monteleone
  • The Flying Dutchman, by John Varley
  • Ninekiller and the Neterw, by William Sanders
  • Call Me Titan, by Robert Silverberg
  • The Outling, by Andre Norton
  • Arroyo De Oro, by Pati Nagle
  • Back in "The Real World", by Bradley H. Sinor
  • Mad Jack, by Jennifer Roberson
  • Movers and Shakers, by Paul Dellinger
  • The Halfway House at the Heart of Darkness, by William Browning Spencer
  • Only the End of the World Again, by Neil Gaiman
  • Slow Symphonies of Mass and Time, by Gregory Benford
  • Asgard Unlimited, by Michael A. Stackpole
  • Wherefore the Rest Is Silence, by Gerald Hausman

What I'm Reading: Perihelion Summer by Greg Egan

Here's your light summer reading!

Cosmic catastrophe, in this case a close fly-by of a black hole Taraxippus, has long-term consequences for Earth's climate, and people on a rickety fish-farming ship try to survive and make the best use of it.

It's hard not to directly compare this to Neal Stephenson's SevenEves, which was terrible: That had ludicrously bad physics (hint: planets in collisions don't work like concrete hit by bullets, but more like water balloons), then ludicrously bad planning, then ludicrously bad genetics leading into full-on magical fairy tales. But what it also reminds me of is Neal Stephenson's Zodiac, an excellent book from back when he could write a tight story about science and then let an editor edit the manuscript.

Perihelion Summer, on the other hand, is written by someone who can do math and science. So the means of tracking the black hole makes sense, the physics of the catastrophe make sense.

It's also mercifully short, though that sometimes comes at a cost. The initial crew of the Mandjet (one of the ancient Egyptian names for the ship of the Sun) is small, but poorly described; and having both Arun and Aaron in the crew is a little confusing. Egan's never been strong at dialogue, does his characterization through actions and scientific discovery, which needs more page count. The action moves forward in time rapidly, letting us deal with the consequences now rather than in hundreds of pages.

Matt said, “Let me start by saying that if we end up in prison, I promise to install ceiling insulation and double glazing in all of your cells.”

The coming apocalypse and the migrations necessary to survive, are what this is all about. Part of this is Egan's perspective in the Southern hemisphere, which already has a terrible temperature gradient and Australia's genocidal immigration policies; if that gets worse, billions die. And not entirely off-page like so many other catastrophe books.

“But however vast the fleet, however crowded the decks and holds of every fleeing vessel, they would always be outnumbered by the ones they’d left behind.”

The American solution to some of the problems isn't the Southern solution, which changes the tone quite a few times.

The ending's a bit abrupt. I'm still very pleased with it.

★★★★★