Farewell to SourceForge

SourceForge has been Woopsi’s source code host since October 2007. They’ve been a great host. They offer some excellent features, and haven’t charged me a thing for nearly 3 years of diligently caring for my code. However, both technology and “social” coding techniques have improved since I adopted Subversion. I’ve found modern distributed version control systems to be faster and more flexible than Subversion, whilst the forking capabilities provided by sites such as GitHub and BitBucket make collaborating with other coders incredibly easy.

A request from Lakedaemon that I move Woopsi to a DVCS finally convinced me that it was time to move on, so I’ve switched from Subversion to Mercurial. Woopsi and its associated sub projects are now hosted on BitBucket:

The SourceForge page remains in place as it’s impossible to close a SourceForge site that has code committed to it. It now includes a notice indicating that the project has moved.


Igmongonious - A MongoDB Framework for C#

I’ve been playing with NoSQL databases lately. The DB I’m most impressed with at the moment is MongoDB. I was so impressed with just how easy it is to get data in and out of the database that I ripped ALite apart and reassembled it as a framework for creating objects that persist to MongoDB automatically.

That’s automatically - there’s no CRUD code needed. No longer do you need to fight against the object/relational impedance problem. Never again will you need to suffer bug-infested template generators, that produce bug-infested templates, that contain millions of lines of sub-optimal code to perform a single “SELECT * FROM table WHERE ObjectID = 3” query. Just inherit from a single class and let the database and the framework take care of persistence.

Igmongonious (the name is a corruption of “ignominious”, but rather harder to pronounce) also includes the rules system from ALite, and a very similar undo system.

The code is available on BitBucket:

The code is in the form of a Visual Studio 2010 project, but I don’t think it uses anything that isn’t compatible with .NET2.0.

The BitBucket wiki has more information about what the framework can do and some simple examples.

Hmm. I’ve jumped to VS2010, C#, Mercurial, MongoDB and BitBucket from VS2008, C++, SVN, embedded development and SourceForge in the space of one blog post. Blimey, I’ve become cutting-edge again.


DevKitPro v24 Compatibility

Those of you keeping up with devKitPro releases will probably have noticed that Woopsi is not compatible with version 24 - devKitARM now includes a built-in “DynamicArray” type which was causing all sorts of problems. I’ve fixed that, plus I’ve reworked the hardware setup code to work with the new register names, touchscreen functions, etc.

A couple of notes on upgrading to handle devKitPro v24. If you call irqInit() and irqEnable() to switch on VBL interrupts, you’ll stop the touchscreen from working. That took ages to find and fix.

Lastly, a word on PALib. PALib has massive problems at the moment. Aside from the fact that the original author, Mollusc, now appears to have a real development job and has stopped maintaining it, the library hasn’t worked correctly with any of the recent devKitPro updates. In fact, you could argue (as most of the GBADev guys do) that PALib has never really worked correctly; I fixed plenty of bugs in it myself trying to get it working. Anyway, Woopsi currently works with dkp24 (when built with the libnds makefile) and also with dkp23 (when built with PALib and the appropriate makefile). However, I can’t maintain the two environments on my laptop at the same time (not enough disk space for two 10GB virtual machines until I can afford to get a new hard disk - not so easy now that I’m a student again and spent Christmas in Italy). This means I’m not checking compatibility with PALib any more, but as the hardware-hitting code shouldn’t change, I don’t foresee any problems. Unless the PALib maintainers do something crazy.

Anyhoo, latest change are in SVN. Expect a real release in the next few days. The only change that could affect user code is the name change from “DynamicArray” to “WoopsiArray”.


Mac Utilities; Versions in Beta

I’ve got a list of programs to buy at the moment. One of the main programs I miss from Windows is Sound Forge - Logic and Garageband are no substitute for a dedicated sample editor. Yeah, they have built-in editors, but they’re too clunky, cramped, counter-intuitive and limited. Audacity’s OK, though still clunky, but I’m looking for something with a more Mac-like interface.

I’ve found two main contenders for the role of Sound Forge Replacement. First up is Wave Editor from Audiofile Engineering. Not bad, but at $250 (or £125 in real money) it’s well out of my budget. That’s the same price as Logic Express.

I’ve settled instead on Sound Studio from Felt Tip Software. Great interface, fast, has all of the features I want and more, and only costs $80 (£40 in real money).

Whilst I’m on the topic of audio software, I discovered Soundflower the other day. It’s a tiny GPL program that creates a virtual sound device in OSX. You can set it as the output for one program and the input for another and, for example, rip audio streams as easily as recording from the microphone.

Anyhoo, the second program I’m thinking of buying at the moment is Pixelmator. It’s yet another Photoshop copy with all of the features you’d expect, but with two big differences. It uses the GPU for its effects processing (and so does neat things like rotating images in realtime) and only costs $59 (roughly £30). Photoshop is another application I’ve been missing since migrating away from Windows, and this looks like it’ll fill the gap.

The reason for mentioning this is that my SynchroSVN trial has expired. I’ve taken to storing all of my important files - source code, images, documents, serial numbers, etc - in a set of Subversion repositories. That means I have a working copy on my MacBook, the repositories on my MacMini, backups in their Time Machine databases, and a copy of the repositories in a SuperDuper image on a NAS. Unless the house explodes I’m pretty sure I’ll never lose anything important. I don’t want to buy any more serial numbers if I can’t add them to SVN and get them backed up automatically, so I need to buy Synchro first.


Versions, an OSX SVN client that seems like it’s been in development for nearly as long as Duke Nukem Forever, has finally gone into public beta. I tried it out today and it really is a massive step beyond all of the other clients available on the Mac. Forget Synchro, I’m going to wait for this to have a proper release. No mention of price yet, but as long as it’s not ridiculous I’m definitely getting it.

If you’re interested in trying it out, note that it currently has a stupid bug when trying to access SourceForge repos. When you try to bookmark a SourceForge repo, Versions runs into problems with the SSL certificate and opens an error dialogue with a “PROPFIND” message. There’s no way to accept the unknown certificate via Versions, so you can’t add the bookmark. The workaround is to open a shell and perform the initial checkout with the commandline client - this will prompt you to accept the certificate. If you choose to accept the certificate permanently, you’ll be able to work with the repo via Versions from then on. I’ve notified the programmers, so hopefully they’ll fix the problem before it gets a proper release.


ListBox Take 2 and SVN Again

The rewritten version of the ListBox class is now in the SVN repository. Instead of farming out the drawing routines to an array of ListBoxItem child gadgets, the ListBox now draws its own list items. It’s made a massive difference to the scroll speed. Just need to make a wrapper gadget for it that includes a scrollbar and I can knock another item off the SourceForge to-do list.

As part of that rewrite, I had to fix a bug in the double click code. Nothing major, just a magic number that had slipped past somehow.

Given up for today because SourceForge’s SVN server is abysmally slow at the moment. I’ve come to rely on SVN heavily, and not being able to rely on it makes me uncomfortable…

Related to that, I’ve been tinkering with alternative OSX SVN clients again. I’ve gone back to ZigVersion, which I’ve discovered is free for non-commercial use; you just have to register for a free licence key. It’s got a much, much better interface than SmartSVN. It has several big problems, though. First of all, its ignore list functionality is lacklustre. There’s no way to change it unless you right-click on a file that can be ignored, as far as I can see.

Secondly, it seems to work directly off the server all of the time instead of from a cache. TortoiseSVN uses a cache, and is generally better for it, or it is until it starts sucking up 95% of the processor time and most of the computer’s RAM. Firefox 2’s memory leaks have nothing on TortoiseSVN.

Lastly, it keeps crashing on me. For all of its weird interface problems, SmartSVN is at least stable. I gave svnX another go, but the interface for that really makes no sense.

Honestly, are there no good SVN clients for OSX? I’m seriously considering installing Eclipse just so that I can give Subclipse a try. Either that or I turn my back on 30 years of progress and join the guys who still think that the command line is an amazingly good idea.