It’s been a ‘swimming through molasses’ project all things considered, but today marks a milestone where I can finally drop down a gear. After clearing things with my employer, I’ve just placed the source-code to Release 1.0 of the ‘Murrumbidgee Wetlands Condition Indicator Tool’ under a BSD-3 license, and hosted it with GitHub.
The BSD-3 license was suggested by the University when I was sniffing around for options on how the project client could retain access to the source if they need it once my gig here is up. Turns out there’s excellent reasons for BSD-3 (or more accurately, NOT a Creative Commons license which was my first choice), so I was more than happy to settle on the suggestion.
Now, before you get all excited, Release 1.0 of the MWCIT isn’t much more than a button launcher driven by config-files:
Still, if you’re a developer with a passing interest in a simple (but not trivial) example of a home-grown Model-View-Presenter (MVP) implementation, or you’re interested in how to coax NSubstitute into firing events out of a mock object, there might be something in it for you.
Now, button launchers can be made with far less effort, I know.
In my defense, the contract was looking for a Web deployment, but the things handed to me to integrate absolutely scream “Over my dead body!”. I’ve not completely given up on a Web deployment, but right now, it looks like total re-write to web-enable some of these tools.
I settled on MVP so I could easily tear off the WinForms facing, and drop in a web interface instead (probably ASP) . The plan was hatched in a moment of desperation, and I nick-named it “The Clown with A Tear-Away Face”.
Accurate call in hindsight, except perhaps for that bit about being gone without a trace.
A delightful side-effect is that object are all chatting to each other via interfaces thanks to the MVP reliance on Inversion of Control. The suite of unit-tests ended up with excellent, and easy to achieve code coverage.
Now I think about it, I’m somewhat interested in seeing if the design document gets any link-hits, because there are so few examples of open-source software with designs that I’m aware of.
And finally, I was told in Mid-September (after losing 3 months to lawyers debating IP issues that weren’t issues, and other fun stuff) that the contract-variation had an unmovable milestone delivery of “something to show” by mid-December. I didn’t get approval for my “poor-man’s integration” plan until mid-October.
The code above didn’t take too long to whip up (here in a flash). The time was mostly spent with very poor-quality data-sets, out-of-date API calls in 3rd-party tools, and extremely large files that broke installer tech like a ‘monster with a taste for the sweet nectar of spinal column juice’ . Oh, and those last two data-sets that landed a week before my oft-repeated release-freeze date.
In hind-sight, a decision to go very light on the ‘software build’ aspect of things was an excellent call. I also learnt a bucket-load more about IP issues around software. Here’s hoping that the next six months of this project allows some serious integration.