Asphalt Festival 2016

Asphalt Festival is an art festival in Düsseldorf, taking place once a year in the summer. It perfectly fills the void created by theaters going on summer break.

Asphalt offers a wide variety of performances consisting of theater, music, dance et cetera. I had seen several performances in previous years, though this year the three I saw seemed particularly excellent.

Maxim Gorki Theater: “Es sagt mir nichts, das sogenannte Draußen” & “Und dann kam Mirna”

These two performances by the Maxim Gorki Theater Berlin based on plays by Sibylle Berg were extremely entertaining. I find it hard to say exactly what it was that made it so. Maybe it was just a good balance of various elements I particularly like in a play: simple stage setting, small cast in ridiculous outfits, mostly spoken word, sometimes grandiloquent, with a few songs and dance routines thrown into the mix.

Maxim Gorki Theater

Oberbühne

Theaterkolletiv Per.Vers: “Düsseldorf Sous-Terrain”

As an audience member, one took on the role of an investor being driven around the city in this old-timer bus to see the various projects that a fictional development firm was working on to improve the city.

Bus

During the bus trip, refreshments were offered.

Zitrone

At various points in the city, the bus stopped so one could watch performers on the street. The funniest part was watching the reactions of passers-by who saw the performers, wondering what they were doing, unaware of the audience on the bus.

Eventually we were shown the recently built “Le Flair” neighborhood consisting of up-scale buildings in an area where many freight depots used to be. Representatives of the fictional development praised (in song) the many luxuries this neighborhood had to offer. Immediately thereafter we were taken just few hundred meters further where there were still tracks, tunnels and other remnants of the railroad connecting the freight depots. It was in these tunnels, that we met Jörg, who told us how after a series of unfortunate events in his life he was now living here.

It wasn’t revealed whether he was a cast member or whether he was actually living down there, but nonetheless it makes you think about how chance through one having good or bad fortune decides whether you end up living in an expensive high-rise apartment building or in a railroad-tunnel one block down the street.

The Case of Running Turbo Pascal 7

After getting Delphi 2007 to run on Windows 10 and seeing some of my earlier Delphi programming again, I was intrigued to try if I couldn’t get Turbo Pascal 7 working too. This was the development environment that I first started programming with in school in 2000. Of course, Windows 10 on an x64 machine has no way of running 16 bit DOS applications, so I needed a different solution.

Installing on hardware: fail

Turbo Pascal Floppy DisksI do in fact own the full set of Borland Pascal 7 installation floppy disks as well as the manuals. Of course, I can’t install the software from them anymore, as I don’t have a floppy drive. Also, I doubt, they would even be readable anymore. But I made a backup of the disks’ contents and kept it was as a ZIP file.

I also still have my 1GHz Pentium III powered laptop running Windows ME from 2001. I remember fondly many a night spent sitting on that laptop working on some Turbo Pascal project I had given myself.

Unfortunately, the installer would not work as it was complaining about “insufficient memory”. This is funny as the 256 MB of RAM my laptop has were substantially more than computers had when Turbo Pascal 7 was released.

Turbo Pascal BooksMaybe the problem wasn’t that there was too little memory, but rather  too much of it. For instance, there is an integer overflow error in the Borland Database Engine causing it to report insufficient disk space when it encounters free space close to a multiple of 2GB.

Hyper-V: better

So next, I tried setting up a virtual machine in Hyper-V. This would allow me to tweak the amount of memory the installer was seeing.

While in college I had free access to Virtual PC 2004 and so ended up with one virtual machine for each version of Windows I had owned up to that point. Unfortunately, all of the machines running Windows 9x/ME would fail to boot in Hyper-V. The earliest version to run was Windows XP.

Unfortunately, Windows XP demanded I activate before I was able to even log in. But without an opportunity to install drivers for the virtual network adaptor, it wasn’t able to get an internet connection and for some reason the phone activation failed as well.

I was, however, able to boot Windows into safe mode with command prompt, allowing me to execute the following command to “rearm” the activation and buy me some more time to get the registration issues sorted out, because of course, this was a licensed version of Windows.

C:\windows\system32\rundll32.exe syssetup,SetupOobeBnk

After I did that and could log on normally, I still had trouble with getting a network connection between host and VM. So in order to get the Turbo Pascal installer onto the VM, I had to copy it to the VM’s virtual hard drive (VHD). Luckily, Windows 10 makes it really easy to work with VHD files: double-clicking mounts them as a drive and you can copy any files you want onto them just like with a real disk.

Now I had all the pieces on the VM and was ready to install. However, no matter how much or how little memory I assigned to the VM, the installer’s unzip component would always complain about it being insufficient. I considered writing a replacement for the unzip.exe which would not have this limitation. But it didn’t come to that, as I remembered having an installed version of Turbo Pascal 7 on a VM that I had cloned from the PC I used when I first started programming. I copied it to this VM, and boom there I was looking at white and yellow text on blue background: the Turbo Pascal IDE.

TurboPascalIDE

A few more steps

What you see above is part of the source code to TaRech, an RPN-based calculator that I wrote as my first project while learning Turbo Pascal.

Compilation, however, failed, because some essential components were still missing: object files for the graphics components (EGAVGA and the fonts used by my application). I found a solution in an old physics textbook on Google books. This command line uses the binobj.exe utility from Turbo Pascal’s bin folder to convert bgi and chr files into obj files:

binobj ..\BGI\egavga.bgi ..\OBJ\egavga.obj EGAVGADriverProc

The next problem was that once compiled my program failed to run, crashing during startup with error 200: division by zero. I learned that one of the central pieces of code, the unit crt, has a bug that causes this error when running on very fast computers (i.e. clock speeds greater than 200MHz). Luckily, that article pointed me to a fix published by c’t, a German PC magazine, in an issue of theirs from 1997. That code is still available from their FTP server.

Finally

With all these issues sorted out, I was finally able to see my application running again.; including what at the time seemed like fancy transitions; Unfortunately, the timing in the virtualized environment is off and they were now running substantially slower.

Intro1

Intro2

Intro3

Start

TaRech (named after “Taschen-Rechner”, the German word for calculator) supports basic arithmetic as well as trig and other functions. You can choose a fixed number of decimal places or switch to scientific notation. The boxes on the right show the contents of the calculator’s four registers.

Main

ThankYou

Conclusion

It took me a few hours, but eventually I was really happy to see code and program again which I had been really proud of at the time. That code is available on GitHub.

Looking back at it now, 15 years later, I am a bit ashamed of the quality of that code, however: there are no useful comments, almost all all variables have global scope, values for positioning elements on screen are hard-coded, identifiers have terrible names and I apparently couldn’t make up my mind whether to choose English or German.

But no matter whether I look at code I wrote 15 years ago or code I wrote 15 months ago, it’s all terrible. I think this is a good sign, as it means that I keep improving and honing my skills.

Sunny Day in Düsseldorf’s Grafenberger Wald

It’s officially summer now, though you could not tell by the weather. Luckily, we’ve already had a few beautifully sunny days this year, which is when the pictures below were taken in Düsseldorf’s Grafenberger Wald.

Bäume und Blauer Himmel

Peeking through the trees one can look across Düsseldorf with the Rheinturm in the distance.

Schöne Aussicht

The Case of Installing Delphi 2006 on Windows 10

tl;dr I did not get Delphi 2006 to install on Windows 10. Delphi 2007 with the right patches seems to work fine, though.

Getting started

The first thing the Delphi 2006 installer checks is the presence of the .NET Framework 1.1, as parts of the IDE are implemented in .NET (J# I believe).

Unfortunately, according to MSDN Windows 7 is the latest version of Windows that the .NET Framework 1.1 is supported on.

Note that it says, Windows 8.1 isn’t supported either. However, I found several people claiming they got .NET 1.1 to install on Windows 8.1. Figuring that Windows 10 was internally close to Windows 8.1 I set out to install .NET 1.1 on Windows 10.

The installation seemed to be going fine for a while, until eventually the installer ran into an error and everything was rolled back. I checked the application event log and saw a large number of warnings with Source “MsiInstaller” such as this one:

Product: Microsoft .NET Framework 1.1. The application tried to modify a protected Windows registry key \Software\Classes\CLSID\…

Trying to figure it out

Interestingly, the error came pretty late in the installation process, at which point the .NET Framework installation directory C:\Windows\Microsoft.NET\Framework\v1.1.4322\ already contained many or most of the framework’s files.

I figured this might be just enough for Delphi to install and run. So I just killed the installer process as soon as it had hit the error but before it got a chance to begin the rollback. It seems, though, that Windows Installer was prepared for this, as the rollback was executed automatically even after the installer process had been killed.

I imagine Windows Installer has a process in background waiting on the installer process handle to undo its work in case of a crash.

So I thought what if I just suspended the installer? This seemed to do the trick, as no rollback was taking place. Of course, this would not be a permanent solution, but at this point I just wanted to figure out how this thing was operating. With the installer suspended and the rollback staved off, I wanted to compile a Hello World program.

And lo and behold using the command line compiler csc.exe from the aforementioned framework directory worked. Executing the resulting program, however, did not, as it crashed immediately. I guess there is more to the .NET framework than was contained in that directory. Too bad.

At this point, I gave up on running Delphi 2006 on Windows 10. Using the .NET Framework cleanup tool I found recommended in one post seemed to risky to me, given all the caveats regarding the impact on newer .NET frameworks in this MSDN blog post.

Delphi 2007 instead

But lucky for me, I also own a copy of Delphi 2007 which no longer needs .NET 1.1. So until .NET 2.0 isn’t supported anymore, I have an alternative.

And Delphi 2006 and 2007 are binary compatible, hopefully making the switch relatively painless.

Since there had been a number of updates since I bought Delphi 2007, I installed with the CodeGear RAD Studio 2007 ISO (Dec 2007) instead of the original install disk.

That ISO is 4.2GB, but alas I don’t have Delphi 2007 R2, which would entitle me to use this smaller web installer instead.

I also got the Help Update 4 and the unofficial debugger patch based on this helpful response on Stack Overflow.

Not mentioned there is Andreas Hausladen’s IdeFixPack 4.4 for Delphi 2007 on Windows 10 which came highly recommended, so I installed that one, too.

Why do this?

So why did I go through all this trouble of installing a ten year old IDE?

I had been interested in distributed version control for a while, but only read about it and never actually used it. So when I came across a Delphi 2006 project that I had begun in school and improved upon while in college, I wanted to take it as an opportunity to try out GitHub and keep the project there.

With Delphi 2007 installed now, I can hopefully get started on making this project ready to be shared. So far, though, I’ve only registered the personalnexus username on GitHub. Stay tuned.

Hiking in Haltern am See

After Oberhausen and Gelsenkirchen, the final destination in my trip through the Ruhr was Haltern am See.

My first stop there was at the Roman museum, educating me on Haltern’s role as a Roman military base. It seems to me this is an important chapter in the history of the city, judging by the number of streets I saw named after people involved with researching and excavating Haltern’s Roman past.

I also went to the town square to see the two other sights mentioned on Haltern’s Wikipedia page: its old town hall and church. Not much to see, but I wanted to check them off my list.

Haltern Altes Rathaus Haltern Kirche

The town’s main attraction for me, though, was the lake and the roughly 10km hiking path around it. I have been told that the “correct” way to walk around the lake is clockwise, so I did just that.

There are benches every few hundred meters, so when you tire, you can sit down and take in the beautiful lake panorama. Very relaxing.

Haltern See Panorama

Haltern See mit Booten und Enten

Before taking the train back home, I concluded the day with a glass of delicious grape juice at WuGaT, the premier destination for wine lovers in Haltern according to what I had been told.

WuGaT

Nordsternpark in Gelsenkirchen

On my way from Oberhausen to Haltern am See, I made a quick stop at the Nordsternpark in Gelsenkirchen.

The last time I was here was when around the time that this had been the site of the Bundesgartenschau 1997. So it was interesting to see what had become of the area since then. Not a lot had changed and as I walked the park it immediately felt very familiar.

Gelsenkirchen Nordstern Schriftzug

Gelsenkirchen Nordstern Türme

Even though the weather was warm, the park was mostly empty.

Gelsenkirchen Blick von der Pyramide

Gelsenkirchen Gärten der Stadt

Red tubes as a recurring design element in bridges and walk-ways.

Gelsenkirchen Steg

Gelsenkirchen Emscher-Brücke

Gelsenkirchen Straßen-Brücke

Gelsenkirchen Rhein-Herne-Kanal-Brücke