As we reach the end of this long series of posts on moving code to the cloud – and a look at ways to use the functionality from a wide variety of applications, many of them on mobile devices – I felt it was worth putting together a quick summary post to reinforce the overall message (which may have been a bit lost in the sheer volume of information).
Firstly, here are the posts in this series, including those looking at the original creation of the “desktop” application functionality:
Creating the core desktop functionality
- Circle packing in AutoCAD: creating an Apollonian gasket using F# – Part 1
- Circle packing in AutoCAD: creating an Apollonian gasket using F# – Part 2
- Sphere packing in AutoCAD: creating an Apollonian packing using F# – Part 1
- Sphere packing in AutoCAD: creating an Apollonian packing using F# – Part 2
Moving it to the cloud
- Moving to the Cloud
- Exposing a RESTful web service for use inside AutoCAD using the ASP.NET Web API – Part 1
- Exposing a RESTful web service for use inside AutoCAD using the ASP.NET Web API – Part 2
- Architecting for the Cloud
- Consuming data from a RESTful web-service inside AutoCAD using .NET
- Hosting our ASP.NET Web API project on Windows Azure – Part 1
- Hosting our ASP.NET Web API project on Windows Azure – Part 2
- Using Windows Azure Caching with our ASP.NET Web API project
Using the web-service from various clients
Here are the client application projects I’ve posted for Android, iOS & WinRT.
Perhaps it’s time to say a few words about the experience I had with each of these environments…
- Unity3D was great and would certainly allow you to create a 3D app that could be used in any of the other environments (with the possible exception of WinRT for now, at least). I’d definitely consider this again to create a cross-platform 3D app.
- Android surprised me: I really liked the language (Java), the chosen 3D framework (Rajawali) and the development tool (Eclipse).
- WebGL & Three.js proved to be both easy to use and extremely powerful. Definitely an area to watch as WebGL gets more browser support, especially on mobile platforms.
- iOS was very strange for me, but didn’t prove to be so awful to develop for: while I found the Objective-C syntax to be quite jarring and the Xcode tool to be both confusing and somewhat unstable, the capabilities of the platform and its primary language were quite mature: you can do quite a lot with relatively few lines of (admittedly pretty weird-looking ;-) code. I found iSGL3D reasonably good, although I was ultimately disappointed with the results I was personally able to get from it.
- WinRT was fairly familiar – given my history with .NET – although the lack of a higher-level framework (with a simple sphere primitive, for instance) meant I struggled more with this than I’d have thought. I hope/expect that to be addressed by somebody at some point: while SharpDX allowed me to at least use C# to create a Metro-style Direct3D app, I really would have benefited from a higher abstraction layer to code against.
And to conclude…
This series was really intended to demonstrate that there are significant benefits in making core algorithms cloud-based, not only from an architectural perspective, but from the broad range of applications it enables you to provide to your customers in the long term. And also that this technology really isn’t hard: most of the client apps took a day or two to develop and none took more than a week.
I’ve chosen to deal with graphical data in this series of posts – mainly to make them more visually interesting – but it’s arguably even more compelling to broaden the reach of associated, non-graphical design data using this kind of approach.
Hopefully some of you have followed along with these posts, and derive at least some benefit from seeing similar code working in a variety of languages on a variety of technology stacks. It’s certainly been a fun one to work on: diving so deeply into the respective technologies has at times been challenging but highly educational. :-)
photo credit: blakespot via photo pin cc
For a further visualization of this data in an augmented reality application, see these posts: