Martin Legris here, in this post I will explain how I came about in choosing C#, Mono, Mono for Android, MonoTouch & MonoGame as the technologies underlying the development of the TasteFilter client. There were several factors that pushed us into pursuing alternatives to developing using native libraries.
- I despise Objective-C. It is antiquated and counter-productive.
- Java is a solid language, however there is much more coding involved than say Python, Scala or ..
- The pain of having to manage multiple code-bases, in different languages.
TasteFilter applies well to mobile because of the tactile and multitouch aspect of the user experience, however I wanted to have the possibility to port it to desktop, gaming platforms, microsoft surface and have the openness to deliver on not yet released platforms. For this, Mono (microsoft-free C#) became very alluring. Here are some of it’s selling points:
- The Mono VM is very mature, even more so than Google’s Dalvyk.
To quote the experts are Xamarin, who recently ported Android to C#
, “Dalvik is a young virtual machine, it is not as performant or tuned as Mono and suffers from many of Java’s performance limitations without the benefit of the high-end optimizations from Oracle’s HotSpot
- C# is a modern language, with which you can code less and produce more
- There are a lot of open source libraries in C# / Mono that cover a wide area of functionality; some of it is core to TasteFilter.
By using MonoGame
, you can develop once and deliver on:
- iOS (iPad, iPhone, iPod)
- Android (all flavors)
- Mac OS X
- Microsoft Surface
- Windows 8 Tablets, x86 & ARM
- XBox Live
- PlayStation Vita
That in itself is quite impressive. But is TasteFilter going to be a game? The answer is no. However the level of interaction of the application will be closer to a game than a traditional application. Things will move around, some 3D will be implemented in the near future, almost everything will response to touch gestures, be animated, hence why not use a gaming platform?
In the end, we decided to take the jump; buy a Mono for Android license and start coding. The first few weeks were spend developing a layout system under MonoGame that allows for the development of re-usable visual components; then we tested the abilities of MonoGame on Android & iOS, played in the framework, worked on a universal gesture handler system. These last few weeks were spent ensuring integration of Mono For Android with different social network native libraries to ensure SSO, music playback, and web services interaction.
It was not an easy road, however because we are going down a road that is relatively new, this is something we had to expect.
In the next few days I will share some of the development efforts that we made for Mono for Android, things that if you read the documentation you think are taken for granted however… not quite.
That’s it for today! Take care y’all!