Attic Pluck: Alleged Tarot 2002

It has taken only ten years but we now have SVG support as good as it was ten years ago using Adobe’s SVG Viewer plug-in in Netscape 4. I have decided it is about time I resurrected my 2002 project, the Alleged Tarot.

(Yes, this is yet another post about the site itself. I need to get out more.)

(0. The Fool) (IV. The Emperor) (VIII. Justice) (XII. The Hanged Man) (XVI. The Tower)

What Has Gone Before

It has been moderately interesting revisiting code I wrote 10 years ago. Back then I generated my site pages using TclHTML, a package for generating HTML documents using the tool command language Tcl. I drew the card images using Adobe Illustrator running on my 1997 Apple Macintosh Perform 5260/120. The .ai files were transferred to my Linux desktop and converted to SVG using a lash-up of software the details of which I forget. Since I can no longer run Illustrator, these are effectively the source files now. A Tcl program mkcard3.tcl munges these to add the card descriptions and interactive elements. This whole elaborate scheme is automated through a program called Make (young folk can try to imagine Rake or Ant before they invented Ruby or XML).

(0. The Fool) (IV. The Emperor) (VIII. Justice) (XII. The Hanged Man) (XVI. The Tower)

Because in 2002 SVG was still a slightly obscure, emergent standard, supported only if you had taken the trouble to install Adobe’s plug-in, I also provided a version using PNG files. The ancient software on the Mac could not generate PNGs, only an obsolete format called Targa, so another chain of converters was originally used to get them sorted as well. To make things more interesting, the conversion from Illustrator’s CMYK colour space to RGB was a bit weird and had to be adjusted as well.

So What Went Wrong?

The Mozilla project wanted to release version 1.0, which would freeze the API used for plug-ins. In order to have an API they could commit to supporting forever, they made changes from the 0.9 version which broke Adobe’s plug-in—worse, the breakage was something that caused a crash, with no way to check for compatibility beforehand. Adobe abandoned work on the plug-in. SVG was banished to the outer darkness, handing Macromedia an effective monopoly on vector graphics on-line.

(0. The Fool) (IV. The Emperor) (VIII. Justice) (XII. The Hanged Man) (XVI. The Tower)

Five years later a new strange browser war broke out as the Mozilla, Webkit, and Opera camps attempted to outdo each other with implementing and extending forgotten web standards. SVG was added to one of the Acid tests and lo! corporate ego achieved what years of pleading by standards bodies and potentials users had failed to do, and SVG was widely implemented.

Apart from Microsoft Internet Explorer, of course.

So in 2012 the situation is that SVG is now a slightly obscure, emergent standard. My pages using SVG should now work again, but for one feature Adobe’s plug-in supported that modern implementations do not: compressed SVG files with a .svgz extension. The reason for this is that HTTP supports compression on the wire, so downloading a .svg file takes no more time than its compressed equivalent (since they are both compressed during transit), and whether it is stored compressed is a local matter: there is no reason to bake it in to the file format. So the first step in resurrecting my SVG illustrations is replacing all the .svgz files and links to them.

Fixing It

The first step, as mentioned, is going through the Makefile, which in this case is extra.mk, and find places where SVG files are compressed. I also discovered that past me had the bright idea of making the Python program mksvgindex.py produce the SVG index files already compressed, so I had to change the program to prevent this.

(0. The Fool) (IV. The Emperor) (VIII. Justice) (XII. The Hanged Man) (XVI. The Tower)

This at least gets it so that the index pages work no worse than they did in 2002.

At this point I discovered that the deal page was not working because it did not exist! It seems that some time when I was rearranging my files for the switch to a Django-powered site I left some of the files out. Not too hard to fix, as it turned out: there was an old copy of the site with the files intact elsewhere that I found thanks to the magic of Sherlock. As with the index pages, I have concentrated for now on getting them working again; improving the user experience of using the virtual tarot deck with the knowledge I have accrued in the intervening decade I will leave for later!

Forking TclHTML

The next problem I had was that the old pages are generated with TclHTML, a package I wrote back in the late 1990s. I had to choose between redoing the section over from scratch or getting the old software to run. Actually it worked pretty well until I discovered that the makefile generator (thmkmf) has a couple of interesting bugs.

(0. The Fool) (IV. The Emperor) (VIII. Justice) (XII. The Hanged Man) (XVI. The Tower)

One of the problems was juggling partial paths: srcRootDir, the path from the current directory to the topmost (root) directory, htmlRootDir, the path from the root directory of the source files to the deployment directory, and subDir, the path from the root directory to the current directory. It follows that when looking for an image file referenced in an img command, it should look in $srcRootDir/$htmlRootDir/$subDir. Unfortunately past me got it wrong in a couple of places. So I needed to fix the code and run make again.

This is fine but then there is a second decision point: do I deploy by updating the source code on the server as I already do (git pull) and then run the HTML generation on the server, or generate the HTML locally and then rsync the results to the server? I chose the former, which (with the benefit of hindsight) made things a bit more complicated. Now I not only had to correct bugs in TclHTML, I had to make it possible to deploy the new version to the server.

I published TclHTML to SourceForge back in the Twentieth Century, from an email address I no longer have access to. After a bit of pondering I ended up forking the project through Git’s cvsimport command, so it can now be installed from the TclHTML project on GitHub.

Finally

(0. The Fool) (IV. The Emperor) (VIII. Justice) (XII. The Hanged Man) (XVI. The Tower)

You can now visit the Alleged Tarot site and see it restored to how it looked in 2002, warts and all.