I haven’t written much for a long, long time. Work and family are all consuming BUT, during the day I find myself staring at my monitor as something builds, merges, downloads, etc. Usually I pop over to the news and read CNN for a few minutes but I figured I could do something more productive so I am going to start writing again.
First, I am alive :-) Second, you can see what I spend the bulk of my time working on here: http://www.forproject.com/. For our EVMS product, we are currently working on version 3.0 but I have also been spending a lot of time on Integrator for Project Server: http://www.forproject.com/index.php/integrator-forproject/
Nights and weekends (sparingly), I get to play on my pet projects which these days are mainly related to Microsoft’s Azure cloud platform. A new portal for Azure is in preview and if you have a subscription, I recommend taking a look. It is quite an improvement over the previous version.
Here is the home page, which is fully customizable depending on what services you are consuming. Lately I have been working on Azure Web Apps and Storage
Here is a shot of the management area for my storage account:
The Azure SDK has a TON of amazing tools and technologies to work with. Everything from classic .NET technologies to Ruby, Node.js, PHP, and Python. Plus, you can build a virtual machine running Oracle on Linux if you wanted to! Microsoft has finally broken out of the “only our stuff” mode. It’s a lot of fun to play around in Azure.
Azure includes a storage service (distinct from Azure SQL), which is really nice. The system includes blobs, tables, and queues. All three are pretty amazing. As an example, a queue (which basically stores messages that any app can access across the world with guaranteed availability), stores messages up to 64KB in size and as many as you want up to 500 TB (that’s terabytes!).
The first thing I built with Azure storage was a picture synchronization tool. The idea was that everybody on my family has tons of digital pictures and we would like to make the available to everyone and also maintain a backup of the images.
Every person who has this installed can sync our pictures from the cloud to their desktop and upload new photos to add to the collection.
In the process of creating the application, I created a wrapper around Azure’s storage API called CloudStorage:
The picture synchronization tool is surprisingly small at just over 600 lines of code, most of it UI related, because the cloud storage wrapper does the bulk of the work. For those of you familiar with mpFx (a wrapper over Microsoft’s Project Server API), would find CloudStorage easy to use.
Cloud Storage Emulator
Of course, Azure Storage is not free, but it is extremely affordable based on usage. That said, I didn’t want to be charged for my test data and the various experiments I was doing. Microsoft has an answer for that called the Cloud Storage Emulator, which ships with the Azure SDK. Essentially it is a local version of storage that exposes the exact API as the cloud version. Incidentally, the storage emulator is written in .NET so you can decompile it (for instructional purposes only!) using dotPeek to see how it works.
While developing the picture synchronization tool I accumulated a ton of pictures in the emulator. I thought, well, it would be really cool to be able to synchronize my emulator data to the cloud.
Meet Azure Manager, a work in progress…
The tool allows me to create/update/add/delete blogs, queues, and tables both in the cloud and in the emulator. Visual Studio ships with this functionality but you can’t learn an API by using at an existing tool so I reinvented the wheel on purpose. Now, what Visual Studio doesn’t have is the ability to synchronize data from your emulator to the cloud or cloud to emulator. I wanted that ability so I wrote a sync engine that would go both ways.
You can chose the source and target for sync. So, if you want to update the cloud with the data in your emulator, you choose Development as the source and Cloud as the target. Choose your options and which tables, queues, and blobs you want to sync and it does all of the work for you.
So, most of the time my Cloud usage is really low until I decide I want to sync to the cloud.
That’s it for now. Next time I will share a fully cloud based product update system (imagine Windows Update) for all of my pet projects.