During the brief periods that I'm not working on other peoples' projects, I like to put new theories and technologies to the test in various experiments. Occasionally the results of these experiments are then used for client projects.
There's a tool for every job, and whilst my chosen toolset won't generate the next blockbuster PS3 title, they manage to help build solutions for the more modest problems posed by Internet-aware applications ...
All code is object-oriented, standards-compliant and well documented which all help to make projects extensible, easily maintained and team-friendly.
The majority of the projects I undertake require working within an in-house team or with fellow freelancers. Writing clean, consistent code has helped no end in such situations.
Here are a few projects, all of which are available to download from the Subversion repository at:
http://svn.thundermonkey.net/jdg/ (anonymous read access)
A daily snapshot of certain projects may also be available for download.
These projects are all in various states of completeness, most being in a perpetual beta-stage.
TortoiseSVN (for Windows) is a nice graphical interface for accessing subversion repositories.
Buan ("Bee-yan") is a lightweight, loose-MVC (Model-View-Controller) framework written for PHP 5.
Yep, it's the "F" word again. I'm sick of it too so as a friend of mine might say, let's call Buan a "Badger".
Buan's greatest asset is it's comparatively lack-lustre feature set. It doesn't have a built-in "session authentication module", or a massive library of helper functions - these things just get in the way. Instead it simply provides an API to carry out the following tasks:
::renderAfter() method.And you may find Buan quite liberating when compared to other Badgers.
The MVC structure is there to use, but only if you want to use it, and it's very lenient on where you can execute code within this structure - load a Model from within a View, Generate a View form within a Model class, etc. It leaves the structural integrity up to you the developer.
Alternatively you can write PHP scripts that don't fit into this structure whatsoever - just include Buan's initialisation script, tell it where to find all the config settings and carry on coding in whatever style you wish, using Buan's API if and where you want.
It's still young, and under a very ad-hoc development schedule (ie. when I get a spare 5 minutes), but here are the guiding principles for it's continuing development:
And here are a few insights into the API to whet your appetite:
<?php
/* Initialise Buan */
require_once('/path/to/buan-core/init.php');
Core::configure('/path/to/config/files');
/* Define Model relationships */
/* (this would normally be done elsewhere) */
ModelRelation::define("Person(1):Pet(M)");
/* Create a new "Person" */
$person = Model::create('Person');
$person->name = "Bob Robertson";
/* Create a new "Pet" */
$pet = Model::create('Pet');
$pet->name = "Bobby";
$pet->species = "Dog";
/* Associate and save Models */
$person->addRelatedModel($pet);
$pet->getModelManager()->save($pet); // (saves $person and $pet)
/* Create and render a View */
$view = new View();
$view->setSource('/path/to/view/template/source.tpl');
$view->person = $person;
$output = $view->render();
This site itself is built on Buan so have a nose around to see it in action!
Find more info at http://buan.thundermonkey.net/.
Back in 2002 I was commissioned by Tricycle Media to design and develop a Content Management System for managing their websites.
Since then Valhalla has exploded into an extremely powerful and extensible framework capable of delivering pretty much anything you want.
The entire framework relies on a few core features, including:
Tricycle Media has successfully launched over one hundred sites built on Valhalla. Take a look at their portfolio for examples of it in action.
This was an attempt to create a beautifully tidy method of rendering nested drop-down menus based on the <UL> element set.
For the most part it actually works pretty well and the underlying HTML source code is, I'd say, very tidy. Unfortunately it doesn't work perfectly in all target browsers (IE5.5+, FF1+, Safari, Opera 8+), but if you can download the source, have a poke around and find the solution(s) then I'd be more than happy to post it back here giving you full credit!