This is part 5 of the series; part 4 is here.
I've been working about 2 months on my new venture, so I thought it would be worth posting an update. Right now, I'm in prototype phase, which means that the main goal is to get a proof of concept working without worrying too much about things like a beautiful user interface, scalability, and other such distractions. After a few false starts, I decided to base the prototype on MediaWiki, which runs Wikipedia.
MediaWiki is written in PHP and uses MySQL as the underlying storage system. I didn't have experience with either until recently, but they've both been pretty easy to learn.
PHP is a dynamic language that added object-oriented features on top of procedural features. Overall, I don't like PHP very much, but its dynamic method lookup is similar to Smalltalk's and really useful for making powerful proxy classes.
The MediaWiki code base is bloated and not that easy to understand, but once you've gone through the learning curve it is not too hard to hack. The main thing I added is support for semantic web properties so that you can attach attributes and relations to concepts that are represented by wiki pages. For now, I use a single SQL table to store the tuples.
The prototyping has gone very well so far, and by the end of November I should have a rough version of the entire system working. At that point, I'll be able to demonstrate it to teachers, children, schools and parents. Assuming that the feedback is good, it'll then be time to create a production version.
I've been doing some research on languages, platforms and databases, and I'm leaning towards writing the production system using Ruby on Rails with a pluggable tuple storage backend. Working with PHP reminds me of the power of dynamic languages I've used in the past like LISP and Smalltalk, so I don't like the thought of going back to Java. The initial storage system would use SQL for simplicity but the pluggable design buys me the option of replacing SQL with an optimized implementation at a later date.
The worst part of working on the prototype is that it's so much fun that my days tend to be 18 hours long followed by 8 hours of sleep, which equals 26 hours. The result is that I wake up 2 hours later each day, which after a week means I end up going to bed around noon. I'm trying hard to get back to a normal schedule, but it's not easy.
Part 6 of this series is here.
I'd love to know, given your dislike for php and mediawiki, why you nonetheless chose them (assuming you didnt discover this until you were well advanced with prototyping). Is it purely just because of the speed to prototype with and being good _enough_ not to hinder prototyping? Is speed really the number one factor in getting something off the ground?
One of my strengths and failings is I agonise over my technology choices, constantly being jealous of new technologies I'm not using, or doubting the ones I do. Hell its the main reason I read blogs..
Posted by: lurker | Oct 04, 2005 at 03:05 AM
Hi Lurker,
Good question! First of all, I wanted to make my choice fairly quickly because the most important thing was get a prototype up-and-running. Second, I didn't know either until I'd started working on the prototype. Looking back, it might have been better to start with an open-source Ruby wiki instead, but in the big picture it's not really a big deal. Third, the PHP/mediawiki combination has definitely been good enough, which is the main thing at this point.
Cheers,
Graham
Posted by: Graham Glass | Oct 04, 2005 at 08:13 AM
Hey, I'm looking forward to seeing the demos, sounds fabulous...
Miko
Posted by: miko | Oct 05, 2005 at 10:39 AM
Hello Graham,
I know you're pretty busy, and I don't want to start a languages/frameworks war on your blog, but I just wanted you to consider another 'ruby on rails'-like framework for python. It's called django ( http://www.djangoproject.com )
If you get a chance to look at it / play with it, I'd be interested to know what you think about it...
Posted by: Enrico | Oct 05, 2005 at 04:27 PM
The Smalltalker in you will just /love/ Ruby. Everything's an object, just like the good ol' days.
Posted by: Paul Holser | Oct 06, 2005 at 10:47 AM
I would pick PHP5 over Ruby for performance reasons and its large number of mindshares (22 million websites).
Posted by: jdragon | Oct 08, 2005 at 05:07 PM
Graham,
my 2 cents
I got some reports from couple of people who recently used RoR and they was pretty much happy with simplicity and performance
Posted by: Hemant | Oct 16, 2005 at 05:17 AM