All Unkept
Posted in: Haskell, Web development  —  20 July 2007

Rewriting my blog in Haskell

I've decided I want to rewrite my current blog software in Haskell, and I'm going to blog about it as I go along. I actually started this a few weeks ago, keeping track of everything, but decided it would be much more useful to blog as I go along. I'll post brief reports from my first 5 sessions, lumping some of them together.

Motivation

  • Having links that look like http://lukeplant.me.uk/blog.php?id=1107301655 really isn't good for my credibility as a web developer, and just plain sucks anyway
  • After a heavy load of spamming, my comments file very occasionally gets truncated (I'm storing everything in a flat file database at the moment). I imagine it is to do with PHP aborting part way through a request, when the comments.txt file has just been opened for writing. I've tried to stop this happening, but obviously not successfully. A real database is the answer, which, along with various other improvements I want to make, gives me an opportunity to do a rewrite :-)
  • I want to learn some Haskell in a real world project,
  • Fun.

So, please don't post a comment saying "Why don't you just install WordPress etc?" -- I'm doing this for the sake of learning :-)

Constraints

  • I'm a typical Yorkshireman -- tightfisted as they come, and my web host is very basic. This means that if I'm using Haskell, I'm limited to CGI. My database is also limited to MySQL.
  • I've got very limited time. My coding will have to be done in sessions up to 90 minutes, usually less. So, this may take a long time, and it may never produce anything. But hopefully I'll learn things in the process.

Haskell Blog Rewrite - Session 1 - 2007-07-05

Aims

  • Hello world in Haskell CGI
  • Basic performance test on local box and on actual host
  • Get Apache redirection working if possible

Preliminaries

  • Had to download and install cgi, xhtml and html libraries from Hackage. Thankfully Haskell libraries are now pretty much standardised, and it is easy to install locally rather than mess up your system.

Notes

  • s/NewCGI/CGI in the above tutorial -- then it worked.

  • How do I get apache to actually run the stupid CGI, instead of returning it?! Ah:

    <Directory "/my/webdev/folder/cgi-bin">
        AddHandler cgi-script .cgi
    </Directory>
    
  • Usual hassles with the fact that I'm wanting Apache to read files within my home directory, which means extended permissions on all the relevant files (and parent folders, but I'd already done that)

  • 40 minutes in: 'Hello, blogosphere' works in local machine. blog.cgi is 1.54 MB.

  • 1h in: found out how to link statically so that it would work on my real host and now it's working. blog.cgi is now 2.2 Mb, which means I'm likely to get a big latency hit the first time it is accessed for a while, but after that it won't really affect its performance.

  • "wajig install siege" to test it. For my live host, I was getting about 22 requests/sec, which is 4 times better than my current blog (PHP) at 5.6 requests/sec. (That sounds pretty bad -- but I have made no attempt to optimise my current PHP blog). This lets me know that CGI is practical. CGI may be considered 'retro', especially when you can get 4000 requests/sec using FastCGI but CGI will be good enough for me and I can't use FastCGI anyway. If I do decide to upgrade my host, I should have slashdottable performance.

  • 1h 30 - done for the day, Apache URL rewriting works:

    http://lukeplant.me.uk/testblog/

Analysis

  • Achieved my basic aims.

Comments §

§ On 21 July 2007, Pupeno wrote:
227 Have you tried Happs, it really looks interesting and might be better suited for your "fast programming" approach, since you won't need an external database.
I want myself to take a look at it.

§ On 21 July 2007, luke wrote:
229 Pupeno: Happs isn't a possibility, as it would be a long running process, and I'm going to be restricted to CGI.

§ On 23 July 2007, Paul Brown wrote:
232 The 4k req/sec is on a dedicated 4-way box, so you probably wouldn't see that level of performance from a webhost even if you did use FastCGI instead of CGI.

I'll look forward to seeing how your efforts turn out.

§ On 24 July 2007, Jason Davies wrote:
233 Wow, looks like an interesting project. Good luck :)

Add comment

Format:

  • Javascript has to be on to get past my spam protection, and cookies, and there is a delay, sorry for any inconvenience!
  • I reserve the right to moderate comments.