I realise as I write this that it has been almost exactly a month since I last updated the content on this site. Strange how having more free time actually leads to me doing less...

I’ll briefly update my situation. I am now in Belgium, although I went back to the UK last week for my graduation ceremony. As a result, I am now a graduate with a Master’s degree. (MEng Electronic Engineering with Language to be precise.) Apart from that, I am spending the time being generally idle.

The current hiatus in my life is not solely due to laziness. Next month, on 9th August, I’ll be flying to Japan. I have a working holiday visa, valid for a year, and an interview with a company for a job on 19th August. If that goes well, I’ll be set for the next twelve months. Once I get some money, I’ll get a digital camera, and be able to add some graphical flair to this site. I might even be able to afford a new laptop...

One of the things that has kept me from writing updates at the moment is that when I am doing very little from day to day, it is a bit difficult to write any news or keep a diary. I thought I should add something now to prove that I am still alive!

The second reason why I haven’t been working on the site is that I am designing a “mark 3” site engine. I am doing usability testing against myself, in a sense. I have designed this site for myself, trying to solve some specific problems in doing so:

  • Automatic generation of navigation
  • Easy to update
  • Works in multiple languages

At the same time, my chosen solution has some distinct limitations:

  • Only one presentational form (hierarchically arranged blogs, in essence)
  • Difficult to move content around
  • Can only be updated via command line (i.e. using ssh)
  • File access problems (site engine reading from a file while I am trying to write it to update the content)

Therefore, in order to overcome these limitations, I am working on a new design. It will still work the same as it currently does, but will add some extra features:

  • Chapter-based formatting as well as the current blog style
  • Use a database for storage and extraction of data (MySQL)
  • Cache pages once generated to improve speed
  • Move static content (images, programs, etc.) to a separate tree to simplify references in the text. At present, there is some pretty weird code to try and second-guess things.
  • Photo galleries
  • Maintenance interface

I have recently been using the Ruby programming language, and I really like it. It’s very readable (unlike Perl, which is sometimes disparagingly compared to line noise) and is inherently object-oriented. OK, Perl can do object-orientation too, but after reading the documentation on that I quickly decided to give up trying to learn that. It’s the ugliest kludge I’ve ever seen. I do want to move to object-oriented programming for this site engine, for a few reasons:

  • Clean up the namespace
  • Enable re-use of data generated (i.e. have a single set of data and represent it in multiple forms without regenerating it from scratch)

Ruby is a beautiful, sensible, rational language, and although my subjective impression is that it is somewhat slower than Perl, I believe that this can be overcome using caching. It’s close enough to Perl in functionality that I can port over sections of the existing codebase, which will help my development.

I have been giving thought to the structure of the database. My design consists of two tables, Nodes and Documents:

Table: Nodes
Defines the navigational hierarchy of the site

  • Id
  • Title
  • Description
  • ParentId (links to Id of another row in Nodes)
  • Flags
  • Languages

Note 1: Flags is just a list of configuration options parsed by the engine. Rather than using separate fields in the database for each parameter, this is easily extensible without changing the data structure. E.g. “type=article;docs_per_page=1;show_contents=yes;sort=title”

Note 2: Languages is a list of languages available for the node, e.g. “en,ja”

Table: Documents
Contains the text for each ’page’

  • NodeId (links to Id in Nodes table)
  • Title
  • Created
  • LastEdit
  • Text
  • Language

I think that that just about covers everything except for picture galleries. Those would be dealt with using entries in Nodes.Flags such as “type=gallery;gallery_path=/images/party”. I still need a decent way of generating thumbnails automatically, but as I don’t have a digital camera at present, that’s not pressing.