Racing game for the Commodore 64, type-in listing!

Get it here!

So in the olden days, the very first personal computers came with a programming environment built-in. In fact, it was the thing you started in after the computer had fired up.

That sounds like a hassle, and maybe it was because manufacturers started taking these programming environments out and replaced them by operating systems, but it wasn’t that bad.

If you wanted to calculate something, all you had to do was punch in a program to calculate it for you. And if you wanted to play a game, you could copy one from a book or a magazine and play it.

10 rem mega monster racer by venlosoft
12 rem press 1 to go left and 2 to go right
100 x=10
110 weg=5
120 scr=0
300 get c
310 if c=1 then x=x-1
312 if c=2 then x=x+1
320 weg=weg+int(rnd(0)*3)-1
322 if weg<0 then weg=0
324 if weg>20 then weg=20
330 if x<weg then 600
332 if x>weg+10 then 600
400 print tab(weg) "!" tab(x) "v" tab(11+weg) "!"
410 scr=scr+1
500 goto 300
600 print: print "boom!!!"
610 print "you drove" scr "kilometers 
612 print "without incident."
620 print "say goodbye to your deductible!"

This is a small racing game. It is based on similar games I have seen. You control your sleek racing car by pressing 1 for left and 2 for right.

I will leave it as an exercise for the reader how to get this program into a Commodore 64 or one of the many available emulators, as explaining that here could make this post of few dozen times larger. I mean, you could always type it in if you felt particularly … historical.

What one used to do once a BASIC program was typed in was save it to disk or cassette, assuming one was lucky enough to own a device that let one do exactly that.

OK, this ‘one’ stuff isn’t working for me.

[animation of a race]

Once the game is in the C64’s memory, you type ‘run’ to start it.

As you can see in the GIF above, the ‘v’ represents your car, the exclamation points represent the sides of the road and imagination represents your only limit.

The next step would be – and I am not saying I ever did that – change the name of the author, copy the game to a 1,000 cassettes, have a mate design cool covers, go to a computer fair and sell them for 2 bob a piece, as your first steps on the way to becoming a billionaire. By the time players would find out the game was a bit meh, you would be miles away.

You could also add a title screen, a game loop, joystick controls, a high score table and so on.

You could even turn it into flappy bird (assuming gravity is to the side of the screen and not the bottom).

One version I saw even played this on a printer, back when printers were typewriters hooked up to a computer, so that you could see what you were playing.

Porting the game

The game’s BASIC is fairly standard, so you should be able to port it to other BASICs of the time. I imagine that the rnd() and tab() commands may work differently on other machines.

Starting up with BASIC

I would like to get back to this for a second. It was a little bit weird to boot into a programming environment back in the day, especially if you never had any interest in programming yourself.

The experience wasn’t too bad, though.

For one thing, all environments were text based in the late 1970s, early 1980s. You weren’t missing out on some sleek user interface that all the cool kids were using. The cool kids also had a command line.

Second, the programming environment tended to double as the operating system, so you had commands to list files, load programs, run programs and so on.

Third, computers of the day started up fast. Like, really fast. Like, blink and you were there. So if you wanted to load an environment better suited to your needs, you did not need to spend much time inside the programming environment.

Finally, the environment doubled as the editor and was therefore, at least in some respects, more powerful than most other command line interfaces of the day. (Although that power was mostly focussed on editing your code.)

And none of that mattered much if you were into programming. Having an expressive and powerful language (meaning: having a programming language that even relative beginners could use to create meaningful software) on start-up turned out to be the gateway drug for a lot of budding programmers.

ABOHZIS, or the army’s sorting hat

I cannot remember much of how I ended up fulfilling my military service, except that I very much would have liked not to.

As the oldest of three brothers, it was clear in the mid-1980s that I would have to go. The rule was that a third (and fourth and so on) brother would get dispensation. My youngest brother had been talking about a carreer in the army, but he purposely wouldn’t join before I had done my bit. A dick move, I thought, but largely irrelevant it turned out, as he ended up staying away from the army.

I don’t remember the age at which I was called in for the obligatory preliminary physical and mental check-up, but I am guessing I must have been 16 or 17 years old. The place was an army base in Roermond, Limburg, in a building that had what I can describe in no more detail than old-office-feel. We had to undress in front of a doctor who poked and prodded us, we had to read eye charts and listen to beeps, and we had to take part in an interview, of which I mostly remember being asked what role I wanted to play in the army if I ever were to be called up.

This last bit was something that had already been asked on a form I had to fill out in the run-up to the check-up, so I repeated that I wanted to be an officer or an NCO. This sounds strange for somebody who did not want to be in the army in the first place, but the way I figured it was that if I had to go, I might as well make the most of it.

The reputation of the Dutch army for putting the right people in the right place was pretty bad; trained nurses becoming cooks, trained cooks becoming engineers, trained engineers becoming chauffeurs and so on. I don’t know if that reputation was well-deserved, but anecdotes were rife.

During the check-up one was scored along ABOHZIS: Algemeen (general physique), Boven (upper body), Onder (lower body), Horen (hearing), Zien (sight), Intelligentie (intelligence), and Stabiliteit (mental stability). The scores given were 1 (good), 3 (adequate) and 5 (inadequate). Scoring a single 5 meant the army had no use for you.

My mother told a story about her brothers (or so I seem to remember), about how she drove the older one, gung-ho to perform his service, to the army base while collecting the younger one who had done something so that he would be discharged. I guess I could ask either of them what happened, but I fear the story might lose in the telling.

At some point I must have received a message that the army thought me fit to become cannon fodder, though not in those words of course. That did not mean that it was certain I would be called up. Some years there were more young men available than the army needed and then they would not call you up.

Military service was obligatory for young men in the Netherlands, but there was an alternative for conscientious objectors. Actually, there were two. The alternative was that you could apply for so-called alternative service. This meant that you were employed outside the army. Military service lasted 14 months, alternative service lasted 17 months.

In order to apply for alternative service, you had to state that you had serious conscientious problems with being in the army. And to prove this, you had to give an interview in which you stated your objections. The way this had looked to me was that you basically had to tell the interviewers that you were a pacifist, which sounded all very tree-hugging hippie to me. A pacifist to me was somebody with Ghandi-like qualities who would stand back while his house was burnt down and his family murdered.

Then there was the alleged nature of alternative service. The way I heard it, I’d have to clean toilets for seventeen months, or wash old people. If there were a war, I don’t think I would raise arms against an enemy. I could not see myself do this. But performing military service is not the same as going to war. The way I looked at the conundrum was one of the amount of time wasted versus the way that time was wasted. And my choice then was clear – if I were to be called up, I’d sit out my 14 months in the army.

It turns out, or so it was explained to me much later by members of a foundation that helped conscientious objectors, that playing the saint would have been detrimental to one’s classification as a conscientious objector, because it sounds like a lie. People who would say in their interview that they would turn the cheek no matter, would find an invitation to come to dress in olive on their doormat.

Here is how it has been explained to me since then what happens to hard core objectors who wouldn’t or couldn’t perform alternative service. They would either cut their losses and acknowledge the invitation, or they would stay at home the day they were supposed to report for duty. Then a week later or so, the military police would come and collect them and drive them to an army base where they were given some trivial order, like ‘sweep the floor’ or ‘do ten push-ups’. If they refused, that would count as disobeying a direct order. The objector would be arrested and brought before a military court, where they would be sentenced to 1 year in prison.

In the end I did get called up. I received a letter telling me that I was going to be a gunner in the artillery, the least impressive of the fighting arms. I was not going to be an officer or an NCO. My slender frame, resulting in an ABOHZIS score of A3, might have had something to do with that. The letter did not give a reason for me being sorted in the artillery, but it did tell me to report for duty on a freezing Monday morning, which I did.

Fourteen months in the army provided me with plenty of glimpses of promising exits. There was the discharge of the guy who seemed to have upgraded his mental stability score from S1, healthy, to S5, looney tunes. I do not know how he did that, but him consistently calling the wachtmeester (artillery sergeant) ‘sir’, despite having been told numerous times not to, was part of his rich mental tapestry.

Then there were the many cases of unspecified back problems which seemed to get the army shaking in its boots, presumably because it feared having to pay life-long disability pensions. In most cases, claims of back problems were solved with a doctor’s note stating that gunner so-and-so was no longer allowed to lift shells.

After I finished my fourteen months, I started talking to conscientious objectors who had performed or were performing their alternative service. It turned out they all had cushy desk jobs with charities that, contrary to army life, actually prepared them for life and gave them something to put on their resumes. The exceptions were conscripts who at least had gotten their driver’s license or Russian studies out of it.

A lot of the above is memories of conjectures. I don’t really know how the Dutch army selected and assigned its conscripts in the 1980s. Normally I would double check what I write in a blog post to see that it is factually correct, but my goal with this post is to have it be a witness report and nothing more.

A row of M109 howitzers and trucks waiting to move on, while conscripts are milling about

Worth a listen

(Big Thief’s 2016 NPR Tiny Desk concert.)

Some minor blog-keeping

I have changed a few small things on this blog that should make your experience slightly better:

– I replaced the plugin that took care of the Recent Comments section in the sidebar by something called Better Recent Comments… because it is better.

(In this case, because the old one stopped working.)

– I made the blue that I use for links slightly darker to improve contrast.

– I added my famous, home-baked Youtube Nocookie plugin, not even so much for the privacy aspect, but because it lets me display Youtube videos across the width of the screen or column and in the correct aspect ratio (more or less, ’cause rounding errors).

– My implementation of responsive images used to be a bit wonky, causing some pages and posts to be narrower on mobile than strictly necessary; I fixed this.

– All fields of the comment forms are now nice and large, regardless of which device you view this site on.

Apart from bragging rights I mention this so that if any of my improvements turn out to be the opposite, you have a comment form you can use for posting bug reports.

Two notes on using Docker in 2020 on a non-vanilla Windows 10 Home system

A couple of things I ran across today when trying to install Docker on Windows 10 Home.

All the documentation I have run across so far seems to assume that you have a freshly installed Windows.

Docker for Windows 10 Home in 2020 is basically Docker for Linux ran through the WSL (Windows Subsystem for Linux) VM.

WSL seems very nice, though it takes up a fair chunk of disk space. The only caveat I ran into so far as is that you are strongly recommended to use the Linux file system when working on the Linux side, so that side of the set-up is not as transparent as one might have hoped.

If you previously toyed with or used Docker on Windows, you need to uninstall the old Docker before you can install the new one (even though the new one runs on a different ‘machine’).

This works just as with any Windows program, so far so good.

Note 1. The Docker uninstall does not uninstall everything and the things it leaves behind will conflict with the new Docker. I kid you not.

The error message you get is something like “could not read CA certificate”.

I had to a) manually remove two sets of environment variables and then b) restart Windows. Unlike the winning answer I did not have to uninstall Virtualbox.

Once you have done that, Docker will run just fine. So you start playing with the tutorial, only to find out that:

Note 2. The Docker tutorial binds to localhost.

Which in my case meant I could not see the tutorial, because I had already bound localhost on my host machine (Windows) to a XAMPP.

On the Linux VM, localhost gets ‘correctly’ bound to the Docker container, so at least that was a relief. (I found out through installing and running the Lynx web browser. I guess I could have used curl.)

In the WSL documentation, under Comparing WSL 1 and WSL 2, sub-section Accessing Linux networking apps from Windows (localhost), it is explained how to find out the IP address of the Linux VM (in your VM’s shell enter ‘ip addr’ and use the inet value of the eth0 entry) and you can use that to access your container’s web server from the host system. I don’t know if this address persists across sessions.

Disclaimer: I may have set up things incorrectly, in which case this memo will send the unaware reader googling for help even further into the woods. Certainly that would explain why I haven’t found any documentation on especially the second issue. In that case, please let me know in the comments where I went wrong.

More on the Million Short search engine and on adding search engines to your browser

In my most recent post I introduced the search engine that lets you remove the most popular web sites from its results, Million Short.

Removing those websites should help you counteract some of the bias that search engines may have towards popular websites.

I felt like checking out if the concept actually works, so I wanted to make Million Short my default search engine. The current post is about the roadblocks I encountered.

The first roadblock was adding a new search engine. The only reason this even was a roadblock was because of myself. I had assumed that this would be a tricky process that involved finding a browser addon or writing one of my own, so that is what I set out to do.

Looking in the wrong places meant it took me a while to stumble onto the fact that there is something called the Open Search API, that lets search engine manufacturers offer some basic information about how they work; based on this, browsers already have all the information they need to easily add tons of search engines.

The way this works in Firefox is if you go to the website of a supporting search engine, the magnifying glass icon in Firefox’ search bar will get a green cross overlayed. When you click the icon, you get an extra option “Add NAME”, where NAME is the name of the search engine.

Google Chrome works slightly different: it remembers all the supporting search engines you have come across during your travels on the world wide web and offers them to you on its settings page.

Million Short’s Open Search implementation uses the engine’s default settings and that was the second roadblock. For some reason the default setting of Million Short is to show all the search results and not filter out the top million websites.

One of the cool things about Open Search API is that you can write your own implementation of somebody else’s search engine. All it takes is a copy of the spec and some minor knowledge about how HTML and URLs work. The only caveat is that your implementation has to be served from a web server, the browser won’t let you read the file from a local harddisk.

So I ended up writing my own Open Search implementation for Million Short that adds the query remove=1000000 to the URL.

Million Short also filters your results by country and this too is a default setting. The result was that I sometimes got more Dutch search results than I had bargained for. I am unsure how I feel about this. Google does the same, but doesn’t filter out the million most popular websites. It feels like on Million Short this works as a multiplier and sometimes that is what you want, sometimes not.

Finally, a large stumbling block during the first 3 weeks I used Million Short as my default search engine is that it kept presenting me with a captcha. Since search engines are a utility, you really don’t want them to cause any sort of friction. If the calculator app on my phone kept asking me for a password, for example, I’d install a different app.

After three weeks the captchas mysteriously disappeared, which made Million Short a lot more pleasant to use.

In the end though, I found I kept switching to Google for ‘proper’ search results. I think this is because for many of the things I use a search engine for, the most popular result on the most popular website tends to be the right one.

Million Short presents the user with a number of filters and invites you to suggest your own. I imagine that using these filters (‘facets’ as they are called in search parlance) is the proper (if slightly unwieldy) way to use Million Short.

The search engine that lets you remove the most popular web sites

This is a nifty thing: Million Short is a search engine that will let you remove links to the million most popular web sites from its search results.

Sometimes good (and more importantly, relevant) sites get crowded out by popular sites in the results of search engines like Google. This is a natural result of how Google works — it prefers to present the websites that everybody links to; it sees the linking as a stamp that denotes quality.

Sites that are already popular get a head start as a result. They get shown more in the results, so they get visited more often, so they get linked to more often, so Google likes them better.

And sometimes industries get good at gaming the search engines. For example, that one time I wanted to figure out the architectural style of the American Hotel in Amsterdam*, I got flooded with search results linking to booking aggregators. Now generally I can see how two or three of those would be the most useful results for a simple search like “American Hotel Amsterdam”. And typically you would just refine your search by adding words like “architecture”.

So it is going to be interesting to see how this develops.

*) It probably wasn’t the American Hotel in Amsterdam, but this was some time ago and I can only remember the shock at seeing so many booking sites in the search results. In fact, when I google “American Hotel Amsterdam” now, the second result is a link to the Wikipedia article, which at the time of writing this blog post claims that the hotel was built in the Berlage style.

Drupal legends are legendary

I got this graph from drupal.org. It made me laugh out loud. It shows you which versions of Drupal, one of the more popular off-the-shelf content management systems, are used the most.

For some reason the webmasters of drupal.org decided to split the then current major version, 8, into all its medium versions. If you just looked at the legend, you might be forgiven for believing that Drupal 8 is very popular. (It is not.)

Below is the graph contrasting the popularity of major Drupal versions against the space they receive in the legend.

Note that I copied the top graph in March of this year. In the meantime, Drupal 9 has become the official current version.

Elon Musk according to Lefttube

Elon Musk is a wealthy industrialist and an aspirational character to many, certainly to himself.

If you call yourself the founder of Tesla, a company you bought, at the very least that means you wanted to be the founder of Tesla.

The disconnect between how Musk and his mindless fans portray Musk and the person he actually is, has been fuel for grateful left-wing Youtubers who have been having their fun with him.

Philosphy Tube takes us back to the counter culture of the 1960s, which included radical leftists who were operating in the realm of civil rights and of practical progression, and the new communalists “who built communes, LSD, free love, rock and roll, anti-authoritarianism, flower power, peace signs – the people you probably think of when you hear «60s’ counterculture.»”

Also the mechanics of flirting.

Donoteat01 takes a large axe to Musk’s preposterous and quite frankly dangerous idea of putting high-speed tunnels for private car transport under cities. Explains the concept of AM/FM (actual machines versus funky magic). Why ‘dangerous’? Because funky magic is the realm politics operates in, so plans for actual working public transport are being shelved while waiting for Musk’s impossible tunnel scheme to come to fruition.

Rebecca Watson points out that according to Musk, freedom means the freedom to open factories during a pandemic, not the freedom to refuse work during a pandemic.

Thought Slime: Nikola Tesla was an inventor, AG Bell was a copyist; Iron Man is a genius, the guy who calls himself the founder of Tesla is a fictional character.

Facebook: watch out for third-party page edit requests

Two years ago, I received an ominous e-mail from Facebook:

“Peope who recently visited your page recommended changes to the information on your page. Please verify the information below for accuracy. [List of changes.] If we don’t hear from you before [11 days from now], the information in question will be automatically updated.”

Users can tell Facebook to change your page.

This change will happen automatically unless you stop it; the change request is not a suggestion to you, but an instruction to Facebook.

Facebook will give you a short time to review and reject this instruction, namely 11 days. If somebody who wants to harm you, knows you are on holiday for instance, they have plenty of time to change your page.

No notification of this appears on Facebook itself. Instead you receive an e-mail from Facebook. This is problematic for at least two reasons I can think of. One is that you can unsubscribe from this type of e-mail, which you may have done for a variety of reasons. The other is that the e-mail comes from Facebookmail.com, a domain that was plagued by spam a couple of years ago, so a lot of people have blocked mail from this domain as a matter of fact.

Basically, and this is not the first time I have noticed this, Facebook outsources as much manual labour as they can get away with.

Also interesting is that Facebook sees Pages as a largely commercial product. Anybody can set up as many free pages as they like, but from then on will be flooded with requests to buy page views. The message is clear: if you want people to view your page, you will have to pay for it.

I have no solution for this, other than to not bet the farm on Facebook. If information is important enough for you to present on the internet, make sure all of it can be found outside of Facebook.

[screenshot of the dialog through which you can request changes to name, category, phone, website and e-mail address]

[screenshot of the e-mail message the page 'owner' receives]

[The Facebook dialog for managing change requests.]