Code page 437 aesthetic

At Axiom, our design team has recently come up with a “new” (to us) 🌟aesthetic🌟 for some of our online content. It shows up in posts & ads on social media and in featured images on blog posts. Here is an example.

It’s the lines, the boxes, the drop-shadow for me.

It’s all very Code Page 437. Beautiful. I love it.

Code Page 437

As a DOS user in the 1990s, this tingled some nostalgic memories for me.

College

At college in the early 90’s, I learned a bit of database theory. What database you ask? Well, the fantastic dBase III from Ashton Tate Corporation, later Borland.

Look at this. Beautiful 😍

dbase III

It came on floppy disks, in a cardboard box!

dbase III

Every time I watch Office Space, this scene makes me smile.

Office Space

Obviously, other scenes also make me smile. This one does because it makes me do this.

Leonardo, pointing

Actual work

After I finished my education at the college, I got a job at the same faculty, but in another department. Most of my time was as a technician, setting up experiments for the students. I also managed the departments’ small collection of personal computers.

My reputation for computer enthusiasm spread. I got roped into helping another department with a database migration project.

Not at work

This work was actually for a boutique hotel in Knightsbridge, London. I forget which hotel it was, but I do recall visiting once and seeing a famous actor checking out. It was quite posh and very out of my comfort zone as a 23-year-old nerd.

The hotel had a database of customers on a PC located at the hotel. On April 16th, 1995 the UK had “PhONEday”, where most phone numbers had to change to accommodate more customer capacity.

The hotel needed the customer database to be updated, essentially modifying every record to replace old, incorrect phone numbers with the new format. For some reason, this work came to me. How a college in Farnborough ended up helping a posh hotel in London with some dbaseIII work I do not know.

Privacy?

I managed to get a subset of the database sent over on a floppy disk. I could then write some dBase code to do the migration on this snapshot. In those days it seemed perfectly normal to put your entire customer database on a floppy disk and post it to some random 23-year-old nerd. How times change!

The goal was for me to write the migration script, validate the output, then do the actual data migration on-site. I had plenty of time to write the code, but there was a hard deadline for the actual migration to happen before PhONEday.

I don’t remember how many records were in the database, but it was in the region of some thousands. It wasn’t a massive hotel. Having a copy of the database also meant I could run the migration repeatedly until I got it right. I did this on my own PC, an IBM PS/2 Model 50Z.

Coding

It didn’t take long to figure out the various .SELECT .UPDATE (or whatever the syntax was) commands to reliably run the migration.

My 1.0 MVP would just sit there until the database was migrated. I only had a subset of the data though, and didn’t know what speed the computer they had was, so I had no idea how long it would run for. Something had to be done!

Finesse

I spent hours writing a user interface for the migration tool, way more hours than the core code to convert phone numbers. I added calculations to determine the number of records in the database, the start time of the migration, and how far through the database we had progressed.

From that I could build something to show the user how far we’d got and an estimated completion time. Here’s a rough mockup of what that might have looked like:

         β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
         β”‚                                                                         β”‚
         β”‚                Hotel database PhONEday number migration                 β”‚
         β”‚                                                                         β”‚
         β”‚                                                                         β”‚
         β”‚      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”        β”‚
         β”‚      β”‚β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–“β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β”‚        β”‚
         β”‚      β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜        β”‚
         β”‚     0%                                                         100%     β”‚
         β”‚                    2500 of 12300 records processed                      β”‚
         β”‚                                                                         β”‚
         β”‚                                                                         β”‚
         β”‚                             Start: 10:15:00                             β”‚
         β”‚                               Now: 11:10:00                             β”‚
         β”‚                  Estimated finish: 14:23:21                             β”‚
         β”‚                                                                         β”‚
         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Something like that, anyway. It constantly updated the time and records processed.

Now, the ‘user’ in this case was me. I didn’t trust anyone else to run this code properly, especially not directly on their production database!

Note: I say “production” as if there was any other database. There was not.

I put a smart(ish) suit on, and travelled to London with my colleague to do the migration myself. Every so often, a member of staff (or my colleague) would look over my shoulder and see what the ETA was. As I recall, they were all very impressed with the system, and the timing was pretty accurate. It finished when it said it would.

Overall I think I spent no more than thirty minutes on the actual migration code. However long I spent on this Codepage 437 style user interface, was hours. I have a real soft spot for the old DOS style user interfaces. So it was the most fun part of the whole thing though!

That, and going to a swanky hotel in London.

I think this probably explains why I’m really enjoying the current design 🌟aesthetic🌟 we’re using at Axiom. By the way, we’re hiring - check out the open positions.

Not dead yet

Finally, a fun fact for you. dBase still exists as dBASE CLASSICβ„’. Yours for the low, low price of $99!

dBASE CLASSIC

Yes, they should probably have open-sourced it, about twenty years ago.