Case Study:

I Can Speak Languages

iCan Speak Languages garnered an Australian Publishing Association Award for Outstanding Digital Resource in 2014 for the initial French language modules. Three cloud-synced teacher-managed language courses for schools were released, along with a series of standalone self-study apps. The school courses featured auto-marking, synchronised student progress reporting, and in-app content management.

All of this rich video and audio heavy content was released across 3 platforms. iOS, OS X and Windows. This project had very agressive timelines and budgets and developing applications for these three platforms within the constraints was a significant challenge. We leveraged hybrid technologies to re-use the vast majority of the codebase within a webiew on iOS and within node-webkit for Mac and PC.

I developed a content addressable storage system that spanned both the frontend code, the API server and the module upload tools in order to be able to share assets between modules and versions. This approach dramatically reduced the bandwith impact of a module updates which were very frequent. Where previously a module update could take the entire length of a class and impact student learning time, this approach meant that updates completed quickly and the kids could get on with the lesson.

I ended up rewriting the existing native/webview iOS solution into a pure Cordova wrapper in order to maximise code reuse between the platforms. This was a significant technical challenge due to the nature of the applications deployment. The schools that the app was being used within are significantly bandwith constrained environments. In order to provide a great user experience to the students we needed to pre-cache all content. This needed to work in conjunction with the per-module licensing system and successfully traverse the wide array of proxies and packet inspection technologies in use in the schools. Furthermore, it was critical to ensure we minimised bandwith usage as a class full of students would often be attempting to download modules concurrently.

In software it’s a truism that the bug is always in your code, it’s never the compiler/platform’s fault. This project allowed me to chalk up a war story where it was. I’m not aware of anybody who was making such heavy use of the HTML5 filesystem API as we were. We would routinely transit multiple gigabytes of content across this API on an iOS device. This uncovered a memory leak that, we ended up tracking to webkit itself. This bug hunt was a multi month affair involving Adobe, third party iOS specialists and an awful lot of time spent staring at Javascript stack dumps.


[email protected]

Let's work together