Cosmic Rays – Extragalactic Objects

Determinism is an important part of computing.

2 + 2 = 4

Knowing that the computation of the above never changes gives the programmer the ability to reason about there machine in a scientific way. Two plus two is always equal to four!

Or is it?

With our molten iron core spinning within the earth, it creates a giant electromagnetic (EM) field that shields the planet. Very high up there, there is a cloud of stuff that is rejected and deflected from entering our atmosphere and ultimately us and our devices.

Mostly sunburn is the only problem coming from the heavens toward us, but there are other things to “look” for as well. Cosmic Rays are really charged particles believed to come from the stars exploding…

 In 1929, Bothe and Kolhörster discovered charged cosmic-ray particles that could penetrate 4.1 cm of gold.

Wikipedia 2020 🙂

So what happens when one of these particles hits a semi-conductor like your RAM, CPU, SWITCH?

Bad stuff. It could flip a bit.

2 + 2 = 5

This could be a problem. Flip the right bit, you have a blue screen of death. Not a big deal to an entertainment device or non-mission critical systems. Very big deal for a self-driving car, or a power plant control and monitoring system.

Shielding can help, but shielding is expensive. I wonder how well those NeXT cubes with the magnesium cases do for shielding.

Lockstep Computing…

Copy Pasta Style

Typing in codes character by character, while reading it off of a glossy magazine page, was how most of the “learning” to program was done in the 1980s and 90s. Taking code you don’t understand and trying to type it in exactly and watching it work first time was a treat!

Most of time this old method of coding is same method as you should be doing now in 2021 when you type create-react-app, but ya know… deadlines.

I still like to type character by character and not copy pasta. But sometimes you just gotta git r done. It takes a considerable amount of time to become a competent programmer on any particular platform.

A world without Stack Overflow is hard to imagine, but it was what it was. I remember saving up 70 bucks for a C Compiler. Software used to cost money… I begged people to teach me C++. I bought a book that claimed to teach me C++ in 24 Hours!

Anyways, copy pasta style is all about getting something working, so you can study it. Hold it in your hand, mutate the characters and see the results. This person seemed to have done it before at X date. I will try and see if I can replicate results right now.

Is this science?

Perfectly normal. Don’t feel bad. Use libraries, import dependencies you don’t understand. Feel the pain, and then learn what it is these black boxes or preferably opaque boxes provide you. Iterate on the depth you are willing to go down the rabbit hole of “devops”. There is a benefit to writing everything from scratch and doing it all yourself, but most of the time the risk outweighs the benefit. It is a great way to learn, to “reinvent the wheel” but my advise is make your App, not a Library.

So that isn’t to say you shouldn’t be refactoring your App to extract useful features to into a library. But they should exist in the “client” first. And then later be extracted and generalized if seems needed.

The idea when building libraries is to write client code first against some pretend API that you wish existed and then to implement that API.

Chris Sells

Mr. Sells advise is true for UI design as much as it is for API design which is a kind of “UI”. I always like to do a “puppet show” version of anything and work out all the kinks and discover the problem before we ever write any “real code”. It works well with a group of 3-4 people who are stakeholders in the feature/flow.

Ok, back to the history lesson of copy pasta in the 90s and many peoples origin stories in tech… Visual Studio was not really a thing yet, compilers cost money, Windows 95 just came out. Visual Basic 3 (VB3) was the “python of the 90s”, I would say or the “PHP of the 2000s” 🙂

BASIC was my first language, and the idea of making “real GUI apps” was appealing with Visual Basic’s drag and drop editor and easily hooking up to the Windows C APIs if you needed it. The only other thing that ever came close to this for traditional “native” developers was the MFC… in Visual C++ 4.0 had a Drag and Drop editor that really tried to capitalize on this “Rapid Application Development” (RAD) was the acronym of the times.

People often ask what language should you learn? I always say pick what other people are using to make the kind of product you want. If you wanted to make an AOL “addon” as I liked to call them, you would choose Visual Basic.

I think the last version of America Online (AOL) that you could program with VB3 was AOL 2.5. AOL2 .5 was a very, very important part of the “zerver” scene. It was the only version of AOL until like 6.0 you could run reliably for days/hours while automating. Using VB3 and AOL2.5 you could write long running programs that would not leak, and “run forever”.

The way to interact and make “proggies” was shared with others. Through “.bas” (base) I remember using Macro Recorder to do some “scrolling” of ascii art until I discovered there was a whole community and huge codebases to reference.

The first library that I had access to was the terribly named genozide.bas, which copied sk8r.bas and a few others. Most of the libraries that followed would just copy pasta and put their branding on it. Shout out to Insane Clown Posse for the juggalo32.bas 🤡

I would say most people did this. You combine multiple bas’s into a single file and just keep dumping more functions and constants in it. It was the way. Many, many libraries were copied verbatim from others and with no real functional changes, they were essentially plagiarized. Others took pride in a “no copying” ideology. I was one of them, because I was writing my apps in MFC C++ (like a fool), I studied these libraries to port into C++ so I could use them.

The best library I could find to port was DOS32.BAS. Line 4 is my jam. You should never write VB without this statement. It is similar to the “use strict” in javascript which I am also a big, big, fan. Don’t do the compiler’s job!

DOS32.bas was released and met critical acclaim. It was claimed no copying was done to make DOS32.bas and it is excellently documented. But there was one little bit of code that had to be copied always. This was true even in the old days of sk8r.bas with the 311.dll. AddRoomToList is the function that was beyond all of us in the prog scene. Not sure who wrote it, but here is the most copied function of all time in proggie scene:

Stay tuned for Part II, when I finally break down and try to understand why this piece of code was copied and what it really does. Hope you enjoyed the trip down memory lane.


Further Reading