The EggBlog Adventure

As I said in my About preamble, I want to have a blog-site with the primary purpose of supporting my interest in the OOo programme.  However that being said, I also decided that I wanted to have the flexibility to tailor and modify my site as I wished, also as a worked example of using a modern LAMP environment.  Luckily I already have a proper hosted web site, so it was really just a case of selecting the package and beginning.

So how did I go about selecting the base blog package.  I started by listing my criteria:

  • I want a simple single user blog-site, with no frills and complexities (multi-user, bulletin boards, …) which would drive up the complexity and line count.
  • The package has to be LAMP based, and I want to store my blog articles and meta-data in a MySQL D/B rather than file format.
  • The package has to be available under GPL or equivalent so that I could be free to modify it as I required.
  • It needs to show evidence of stability and current maintenance (that is at least a couple of years old and with a release in the last year).
  • It also has to have a reasonable installed usage base.
  • I want to generate non-invasive XHTML 1.0 conformant web pages.
  • I want it to be secure from hacking and spamming.

Given these, I logged onto SourceForge; selected blog packages by descending numbers of downloads; ignored anything but blog host packages; discarded the multi-user and file based ones;  ditto any which seemed to have no evidence of recent update and floated to top.  On the plus side it pretty much fitted all of my criteria: MySQL based, with a reasonable install base, and simple enough for me to quickly get around the code, so hats off to the authors.  However, the ease of modification turned out pretty essential as I started to use and to tailor it to my needs.  I  found that there were some pretty annoying limitations that I needed to code around.  The main areas that I’ve been working one so far are:

  • eggblog does allow custom skins though I didn’t like the provided ones, so I developed my own style sheets and  skin.  One of the thinks that really annoys me about some styles is when they are laid out for a fixed display width — say 800 pixels — and a key style feature of windows is that the user should be able to resize them and the content font size and that the contents should flex accordingly.  So I’ve done this, though its still not right.  However it’s a lot closer to what I want and at least I now own the current version.
  • There were a lot of problems with the posting engine.  For example if you had things like > in your text then they had a habit of coming back as >, so I had to sort out the load and store engine to prevent it rolling or unrolling HTML.
  • Also given that it is supposed to be XHTL 1.0 conformant using charset= ISO-8859-1, yet the W3C Tidy utility was chucking out a lot of warnings.  Some were due to the HTML being generated by the PHP, including use of raw & instead of special character escaping in URLs, but a healthy proportion lot were from leakage in my postings, so I also put some extra checking HTML special character encoding to minimise these.
  • I added the ability to post in BBcode so that I could do quick posts without having to get into HTML editing.
  • The default GUI rendering implied copyright over the blog contents.  No, the copyright relates to the underlying engine, and not the content, so I have reworded this, whilst still conforming to licence caveats on the downloaded source.
  • One feature of eggblog’s simplicity that I couldn’t live with was its flat and serial article structure.  Also the only way to browse articles is through the calendar roll-up and search.  To over come this I have added a keywords option on the articles to allow articles to be classified by topic themes and added a class of pseudo tags to allow structured reference from one article to another.  These are all based on an unpaired tag <eggblog options /> where the options include
    • article=”N[class=”class Name]. Include a link to article N; the rendering engine automatically picks up the Article title to generate the anchor.
    • include=”N[class=”class Name]. Include article N in-line; the rendering engine automatically picks up the Article content.
    • taster=”N[class=”class Name]. Include article N‘s taster in-line; the rendering engine automatically picks up the Article content.  A taster is a short preamble up to following tag.  The taster is followed by a More >>> anchor which takes you to the full article.
    • endtaster.  Used to delimit the taster preamble.
    • list=”listClause[class=”class Name].  The list clause is a SQL filter clause which is appended to the SELECT id, title FROM eggblog_articles query used to generate the list, Hence <eggblog list=”where keywords like ‘%VBA%’ Order by date” /> will generate a chronological list of links to all articles relating to VBA.
  • I realise that coding practices are a very personal thing, but I have also tidied up some of the ones which made me wince too much — no doubt in doing so I’ve introduced a few that will make the eggblog author do the same.

Still to do:

  • The current implementation mangles presentation logic with access logic.  This needs restructuring to make it more maintainable.
  • SOAP interface for quick uploading or articles.
  • The current implementation has some security vulnerabilities around admin access as spamming, so I’ve locked down the site until I can get around to addressing these properly.
  • The systems doesn’t have calendar view.  It needs one.
  • Anything else that I fancy.
  • Put in a lot more content.  I have a load of whitepapers and notes that I have done to support my work in EDS but are applicable in an open forum.  I need to review to remove and EDS private content for general posting.
  • I’ve had a few comments posted and discovered that (i) they eggBlog people haven’t thought about the UseCases for their maintentance — review, edit, delete, etc. .  Need to think about this one. Also need to decide about the issues around exploitable vulnerabilities intoduced by malicious posters adding naughty HMTL to a comment.  Since I have included a BBCode engine, I will probably require limit comments to BBcode.

Leave a Reply