Loose Ends

I have released a few other projects to the tinterwebs recently, but haven’t as yet announced them.


First up is version 3.0 of ALite, a simple data-access and data validation framework for .NET4:


This version simplifies much of the framework. I went off on a wild tangent before moving the repository from SourceForge to BitBucket and started implementing features such as pseudo-transaction support. I even tried real transaction support using the classes from the System.Transactions namespace, but ran into so many nasty problems that it quickly became obvious that it wasn’t going to work.

Instead, ALite now works much more like Igmongonious. It uses a document (key/value store) to store the values of properties, which simplifies and speeds up the undo system. Swathes of code have been refactored to make the framework easier to use.

The “changelog” document seems to be inaccurate so I can’t give a complete breakdown of everything that has changed. Fortunately, no-one but me is crazy enough to use this library.

I moved the repository from SourceForge to BitBucket for a number of reasons. SourceForge has done some neat things with their UI and added a host of exciting new features, but:

  • BitBucket is a better fit for small projects like this. SourceForge’s insistence on manually vetting all projects doesn’t seem to have alleviated the amount of junk projects in its database, but it does increase the amount of work necessary to get what should be a minor project up and running.

  • Mercurial is magnitudes faster than SubVersion, particularly when SubVersion is lumbered with SourceForge’s horribly slow SVN servers.

  • BitBucket projects come equipped with a Creole-based wiki. Though SourceForge has recently added a per-project MediaWiki installation to their suite of features, Creole is notably terser than MediaWiki markup. The wiki is much simpler, which again is perfect for smaller projects. The entire wiki can be pulled down as a Mercurial repo allowing local editing and change tracking.


Next up is Chroma-X, my ill-fated, unfinished and unfortunately-named shoot-em-up for the GP2X:


Nothing new in here, but the sourcecode is browsable and easily accessible. Incidentally, I managed to get the game running on a GP2X Wiz. I was disappointed to discover that it was slower on the Wiz than it was on the GP2X F-200, which put a damper on my Wiz coding plans.

Canvas UI

Lastly, my canvas UI project is also now on BitBucket:


Since the last version I’ve fixed a few bugs and added plenty of new features, including:

  • Window close and depth buttons;
  • Scrolling lists;
  • Shadows on label text for disabled buttons;
  • Separation of GUI definition from library code.


ALite Changes

ALite, my long-neglected C#.NET framework for creating objects that interact with databases, has had a few updates. Back in June last year I complained that I wasn’t happy with the basic validation system. I have refactored this into a much more useful and extensible system. Instead of a single object that could validate a primitive value in a handful of simplistic ways, it now uses a combination of an interface and a base class to provide a structured way for creating validation objects that can be as complex as required. Martin Fowler’s Refactoring is already paying for itself.

I’ve tidied up the delegate-based validation system, too. I’ve fixed the only bug I spotted from the last release - clearing a collection now removes the collection’s property event changed listener from the child objects. Lastly, I’ve tidied up some obvious places that would cause problems with multithreaded code and made a few optimisations.

There’s still a few changes I want to make before I create a new release. Note that these changes are breaking changes. Not that anyone uses the library. Perhaps I’ll write some real documentation for the new release.


ALite 2.30 Released

ALite 2.30 is now available from the SourceForge page. Changes are fairly minimal, although the collection is now correctly notified when a property of a child object is changed. I forgot to wire up the events (oops).

Oh, and I neglected to announce the release of 2.20 last month. That just included a single bugfix and a comment alteration.


Still Alive

Phew. So, back again. “What time do you call this?” you cry.

Woopsi-time has been consumed by other activities of late. First off, there’s the impending university course. This in itself isn’t time consuming (yet), but it does mean I’m expending a lot of brain power finishing off projects at work and handing them over. This leaves me with little incentive to code at home, but the aforementioned university course should afford me plenty of time to finish off Woopsi. Just over a month to go until it starts.

The second barrier to progress is my musical projects. I suddenly found myself playing two instruments in four bands, writing music, and scoring out parts for other instruments. I’ve managed to whittle the bands down to just two, but they still eat up a lot of time. Logic and Sound Studio have quickly proven themselves to be just about the most useful applications I have on my Mac. Logic is probably also the most unhelpfully complex application I’ve ever used, mainly because its functionality is hidden within layers and layers of obscure menus. I can see why Apple can charge ¬£TheEarth for the manual.

Woopsi Update

I post this now partly to assure people that I’m not dead, and partly to note some minor Woopsi updates. The Button, CheckBox, RadioButton and CycleGadget all look different when they are disabled (they draw their text with the darkColour value instead of the standard value). Also, in an attempt at improving the API’s consistency, I’ve renamed the “Textbox” class to “TextBox”. Sync with the SVN repo to get the latest changes, then tear out your hair when you realise that all of your code is broken by a single case change.

Releasing a package with these updates in would probably be a good idea, again to assure people that I’m not dead. And, more importantly (depending on your viewpoint) that the project isn’t dead either.

ALite Update

I pushed this into the SVN repo a while ago but didn’t get around to mentioning it. The released version of ALite (2.1) has a bit of a showstopper bug - you can’t use stored procedures with it. The reason for this is a missing exclamation mark, which I’ve fixed but haven’t released properly yet. Look out for version 2.2 at some point.


ALite 2.10

Another ALite update, which fixes a few bugs and adds in database transactions (which may or may not be utterly useless, depending on how you structure your DB calls). I can’t think of anything else I want to add to it that could offer anything I’d want to use regularly, so I declare it finished. The only two areas of functionality I’m tempted to remove (basic rule system and the parameter-less version of the DataAccess constructor) are very handy, so they have to stay.

Fixes include swapping to generic collections, where possible, for minor speedups; improved disposal of DataAccess objects; parameters now get passed when inline SQL is executed; and I’ve fixed a handful of FxCop warnings. Full changelog is in the archive.

I started writing some more useful documentation until I realised that documenting a data access framework is immensely boring. The only thing more boring is reading data access framework documentation, so I gave up. I did take a look at “Why’s (Poignant) Guide to Ruby” for inspiration, but it quickly became apparent that I was automatically skipping over the cartoons of foxes discussing chunky bacon in order to get straight to the programming bits.

Download it from the SourceForge page should you find yourself in the unenviable position of needing a miniature framework for interacting with an SQL database in .NET:



ALite 2.00

ALite, my non-framework framework for creating data-aware objects in .NET with a minimum of fuss, has been updated to version 2. New features include delegate-based property validation that extends the previous simplistic rule-based system, collection sorting, greatly improved undo code that uses a transaction-like system for marking a restore point and reverting to it, and various other bits and pieces.

It’s also got a folder full of Doxygen-generated documentation and a SourceForge page:


It can be downloaded either via SourceForge’s SVN repository, or by grabbing the zip package from the link above.