cloud

WP7: Libraries about Cloud services (Azure, AWS, Hawaii), Toolkits (WP7) and more


Hi,

I’d like to share with you some of the libraries that I’ve been reading (or using in some cases) in WP7 projects.

Silverlight for Windows Phone Toolkit @ http://silverlight.codeplex.com/
This might be the only one that should be mandatory in your WP7 project. This library contains a set of controls to enhance the WP7 experience by adding custom animations and custom controls. 

Reactive Extensions for Windows Phone 7 @ http://msdn.microsoft.com/en-us/data/gg577610
This library helps you to control Asynchronous tasks or events. It’s like creating pipes based on asynchronous events.

Hawaii Cloud Services SDK for Windows Phone 7 @ http://research.microsoft.com/en-us/um/redmond/projects/hawaii/students/
This particular project is for non-commercial projects, and at this time it’s free because it’s a research project. This project lets use use the cloud services in order to have services such as: Speech to Text (aka voice recognition), OCR among others.

[watwp] Windows Azure Toolkit for Windows Phone 7 @ http://watwp.codeplex.com/
(http://channel9.msdn.com/posts/Getting-Started-with-the-Windows-Azure-Toolkit-for-Windows-Phone-7-v12)
A simple way to access Azure services thru your WP7.

Amazon Web Services SDK for Windows Phone 7 @ https://github.com/Microsoft-Interop/AWS-SDK-for-WP (http://channel9.msdn.com/Blogs/Interoperability/Getting-Started-with-the-AWS-SDK-for-Windows-Phone)
Well for those how have worked with AWS, this library will simplify some of the tasks accessing services such as S3 (which is web storage).

[PAARC] Phone as Remote Control @ http://paarc.codeplex.com/ (http://channel9.msdn.com/coding4fun/blog/Getting-your-WP7—Desktop-integration-out-of-park-with-PAARC-the-Phone-as-a-Remote-Control-library)
I really like this one. It’s just a simple (and efficient) mechanism to establish a connection between your phone and your PC. Thus, the phone will work as a input device, and the PC has already a running a service which will report all the input generated by the phone.

Zune Web API @ http://channel9.msdn.com/coding4fun/articles/Using-the-Zune-Web-API-on-Windows-Phone-7
This is not exactly an SDK, but it will help you to get information from your Zune account 😉

Best regards,
Herber

The Chaos Monkey and Working with AWS


Hello,

There has been awhile since my last post. I’d like to share a really good posts that I’ve read recently.

As usual, I want to share two articles:

5 Lessons We’ve Learned Using AWS
http://techblog.netflix.com/2010/12/5-lessons-weve-learned-using-aws.html

Working with the Chaos Monkey
http://www.codinghorror.com/blog/2011/04/working-with-the-chaos-monkey.html

The second is a post based on the first one, both are good to think about: “the best way to avoid failure is to fail constantly”

Google Apps Engine: Thinking in the Cloud


Hi,

I still working on learning Google Application Engine (w/ Python) and understanding how the cloud differ from the “normal” web app.

There is no such as a server for your application, so your app will be hosted in many (virtual or physical.. not sure yet) different servers.

There is no server: It’s a cloud!

I think planning is the key for the success of an Cloud Application. Certainly you already know the speech about the importance of planning and designing your application. The fact is that the design and architecture for cloud applications is quite different from a regular applications, for example Google App have restrictions about response time for (web) requests, or the amount of data that can be fetch from the data storage per query. These practices are in favor of creating scalable applications, but they change the playground.

The tight relation between performance and price

The second aspect about the Cloud application is about the performance. Certainly developers do their best for creating well-performed applications. However, not all the applications are thought in this way, and the Cloud is going to charge you for your resource consumption. This means that if you can do all your work with less resources it might cost less in long term.

One cloud for each need: Read the fine print

Other important aspect is the “kind of cloud‘ that you are buying. For example, Amazon offers services for storage, so they might charge you for bandwidth and the storage, I think this service is S3 from AWS. ( see http://aws.amazon.com/s3/ ).  Also, Amazon offers EC2, which is based on processing, and their charge you for CPU time consumption http://aws.amazon.com/ec2/. In this quick sample both services are easy to set up, but they are oriented to different needs. If your application exceeds your quota Amazon services are able to auto upgrade your plan. It’s important to notices that Amazon is capable of charging you in two different plans, your regular plan and the the exceeded quota  in a different plan.

On the other hand, Google’s Cloud (http://code.google.com/appengine/) sets a quotas for different services based on a plan, for example a plan defines a limit for storage, CPU, etc. The Google’s could does not increase your quota automatically; If you reach your quota, then the system will deny the additional requests until the next period starts.

Just because of I’m a Microsoft Developer I’ll mention that Microsoft also has its Cloud services. Sadly, I haven’t done anything on it yet, so you can check their capabilities at http://www.microsoft.com/windowsazure/

NoSQL, and scalable databases: Think in bigger things!

This is other interesting thing about data storage in the cloud. Developers are very used to ER Databases (http://en.wikipedia.org/wiki/Entity-relationship_model), however in the Cloud you might find other kind data storage. It’s a model called NoSQL (http://en.wikipedia.org/wiki/NoSQL), and it’s used for some Clouds such as Google and Amazon clouds. These NoSQL implementations can vary among clouds. Sadly, I’m not sure if Microsoft has implemented this NoSQL model yet. (BTW, thanks to David Mora for the talks about NoSQL).

Does the cloud  speak any language?: The language of the Cloud

This might not be a critical point. It’s important to notice that depending of the cloud you would like to use, this might define a set of tools (or languages)  to be used for development in your application. For example Google application engine is currently targeting Java (www.java.com/)  and python (www.python.org/). Even though it normal to think that both languages should be equivalent, they’re not!.  So, Googlers are trying to keep both with the same capabilities, but from time to time you might be able to do things in one language easier than the other language.

While (true) {Print this.Read(CloudCollection)}

This so far represents some basic thoughts about the Cloud versus the traditional server-hosted applications. My best advice is to check the capabilities of each platform to see if it fits your needs (and budget 😉 ).

Regards,
Herberth