Skip to main content

Building Supportable Systems (Package Management)

· 3 min read

Working in a large company where we do most of our own software development in-house we have a wide range of coding practices and various levels of supportability. For example, much of the older code doesn't make use of any IOC and this is fair enough, it was written in the days of ASP.NET web forms, or windows forms, dependency injection wasn't a common practice a few years ago, and unit testing wasn't much of a consideration at the time either.

Building Supportable Systems (Performance & Diagnostics)

· 4 min read

Isolating performance issues or tracing web traffic problems can be a challenge. Modern browsers have excellent developer tools and 3rd party tools like Fiddler are also great for this job, but they only give you so much information. Sometimes you want to get more in-depth information around the request processing times, or the configuration variables on the server.

SerenityOne 2013 Wrapup

· 3 min read

Throughout the month of November 2013 I spent three weekends at three different Salsa and Latin competitions running the SerenityOne scoring system.

The first two competitions were in New Zealand: the NZ Salsa Championships, and the NZ Salsa Open. The Australian and International Salsa Solo was a very successful event where they pushed SerenityOne to the limits by running two concurrent competitions in different rooms at the same time.

I was pretty anxious about this, but it worked a treat, and as I was running back and forth between the two rooms everything was running almost perfectly without me. The only issue which I hadn't considered was the range of my cheap Airport Express WiFi device, but by placing it in the middle of the two rooms it worked fine. This was on the tail-end of a major rewrite and refactoring of the software backend and tablet interface.

My new software "stack" now comprises the following components:

  • ASP.NET MVC Administration Interface (Replacing the old WinForms solution)
  • BootStrap.js for overall MVC site design
  • DevExpress Components for Reporting and rich MVC UI
  • ASP.NET WebAPI API Implementation (Replacing ServiceStack)
  • SQL Server Database Backend
  • Xamarin Android and Xamarin IOS Mobile UI implementation
  • MVVMCross Core Application and Custom UI implementation
  • GitHub for source control

In the next iteration of development I would like to add some bells and whistles to overcome some limitations in the current system:

  • Implement a SignalR-based "live" scoreboard function. I previously planned to do this as a WPF application, but after doing some research and prototyping with SignalR it seems to be a much better choice to use SignalR as a push mechanism to a web page. This will allow the live scoreboard to run on any spare laptop, desktop or tablet and to be easily connected to a projector.
  • Related to the scoreboard, a variety of simple monitoring screens to allow the MC, DJ, etc to have a live monitor screen to show them the current state of the competition.

Following on from these "simple" enhancements, which will run perfectly on top of the existing on-premises model which I use (running the software directly from my laptop), I would like to then work on deploying the administration and registration functionality to the cloud. I'm not sure about whether it's feasible to have the entire server-side hosted due to the reliability issues of internet access at the venues of dance competitions, but that would be the ultimate goal, along with BYO device + App Store software.

SerenityOne MvvmCross Rewrite

· 2 min read

I've now been working on and developing my SerenityOne Dance Competition Scoring Software for a number of years. It has grown from a concept simply to help speed up the data entry and remove the chances of human error, to a fully automated tablet-based system. From a simple WinForms app with hand-written score sheets, through a number of iterations and rewrites to a server-based system relying upon ServiceStack for REST and Serialization coupled with a Xamarin.Android application running on a fleet of up to ten 9" Android tablets.

My next revamp of the system is (and will be) to refactor and rewrite the mobile application to use the excellent MvvmCross framework. I did a fair amount of research around cross-platform development for mobile apps and was considering the use of MonoCross but after a bit of reading it felt like MvvmCross is more actively supported.

The advantage to using a framework like MvvmCross is that, in theory, you can write your core application logic once (in ViewModels) and then implement your views in a platform-specific manner for each of the targeted platforms you require. In my case I currently only need to worry about Android, but I'm working towards the picture of eventually releasing iPad and Android apps commercially so that I don't need to provide SerenityOne as a managed solution, though the business-model of how this might work still eludes me.

I will write some posts as I make progress on my conversion from basic MonoDroid to MvvmCross, along with some links to resources or any gotchas I might encounter. So far I've found the MvvmCross Wiki and Samples invaluable, and Stuart Lodge (@slodge) is by far the greatest resource available to support this great project. I hope to be able to provide some handy plugins and contributions to MvvmCross as work on my own projects.

Unbricking a Proxmark III with JTAG

· 3 min read

I recently tried to upgrade my ProxMark III to the latest CDC firmware to try out some of the new features. In the process I somehow managed to brick it into a boot loop whereby it would just hardware reset ever 2-3 seconds.

There are some other instructions around on the net (see references below) on how to do this using a bus pirate also, and some of the instructions on the proxmark website explain how to flash the s19 files. I found that the s19 firmware files didn't work for me, but if I followed the bus pirate instructions using the Olimex OpenOCD instead, everything worked nicely.

Shaw's Coding Standards Rant

· 2 min read

In both my professional life, and through using open source projects I've come across what I think are some really simple code quality practices that anyone can follow. I wrote these down one day in a moment of frustration after previously fixing a build at work so that it had no "warnings" in the build, only to discover about 3 months later that other team members didn't see the 130+ yellow warnings on their visual studio errors pane. (The cool thing with visual studio is that of course you can untick the box and never see warnings... it's bliss, you never need to see the mess! It's the IDE equivalent of dust under the mat)

Serenity One Dance Scoring Software - Tablet Edition

· 2 min read

So I've been thinking, every time I run the scoring for a dance competition my conscience is destroyed by the fact that I have to print so many judging marksheets out. For example, if there are 6 judges, with 20 competitors that's 120 bits of paper… 20 competitors is quite small for a salsa competition, and some of the competitions I've been doing recently have 8-10 judges. So it quickly blows out to 100's of pages.

That's the primary reason for a re-think of the way Serenity One should work… the secondary motivation is the fact that someone has to then enter these figures into the system (twice). Not a really fun task.

This has brought me around the idea of writing a tablet version. I've evaluated hardware and development platforms and decided to use the Xamarin Mono for Android to develop a C# app for Android as my first attempt at making this a paperless solution. The reason I chose Android first was basically due to the cost of the hardware. Windows Mobile devices are expensive, and iPads are too. My prototype hardware platform is the Pioneer DreamBook 9.7". It's running Android 4 and is quite a nice device.

To support the "mobile" devices, I have decided to use ServiceStack.Net to expose a number of REST web services using Json. At this stage I will probably still host these on a local PC at the event, but there's no reason why I couldn't have it hosted on a cloud platform – just so long as reliable internet connectivity could be guaranteed during the running of a competition. More updates to come soon… including screenshots and code snippets…

Project Andromeda

· One min read

For the last few months I have been working on a UAV project with three other guys - the project is called "Project Andromeda" and the goal is to design and manufacture a small UAV suitable for low-cost civilian aerial operations such as search and rescue, mapping and aerial survey. The project has been underway for 2-3 years now, and it is nearing the stage of commercialization.

Netduinos and Micro Framework

· 2 min read

I have a couple of ideas for projects that could be done on the Netduino. I initially heard about these devices through Scott Hansleman's podcast a few months ago. More recently I came up with a few ideas that could leverage the small form factor, with the wireless Xbee networking options. Having now actually SEEN a Netduino device, I realise they are HEAPS smaller than I imagined. The possibilities are endless, and I've started formulating a plan of action to develop these things into something useful. Some ideas I have for open source libraries in .NET:

SerenityOne Dance Scoring Software

· 2 min read

A few months ago I noticed that there was a need for a better way to score and coordinate the scoring of salsa competitions. I wrote SerenityOne Dance to solve this problem. I've now used SerenityOne at 3 national competitions and 1 state level competition with great feedback from both competitors and judges.

The SerenityOne Dance system is a system for the management and scoring of Dance Competitions. Initially developed to streamline the score calculation for Salsa competitions but has since grown to handle competitor regirstration, scoring, results publication and much more...

The system runs on Microsoft Windows and can be used on a single system, or scaled up to work in a multi-user environment to allow scores to be entered by several operators concurrently.

The use of barcode scanning technology streamlines the entry of scores, which is historically the area of competition scoring that is both time-consuming and error prone.

So far the system has been used at the following events:

  • 2010 Australian Salsa Open - calculations only, scoresheets were handled separately.
  • 2010 Australian Salsa Solo Competition
  • 2010 Australian Salsa Classic NSW State Titles
  • 2010 Australian Salsa Classic

I've put together a website for the product: - Below is a quick demo I put together to show to one event organiser.

A YouTube video of the system in operation...