Windows Azure Geo-Location shipped
Around six-seven months ago, my manager called me into his office and asked "Hey - do you want to the Program Manager on this geo stuff?" At that time, I really didn't have any idea what I was getting into. Thankfully several smarter people on the team had been working on this for some time so I got to jump onto a moving train.
Through the holidays and the first half of the year, we worked through several technical challenges and I'm proud of the team and what we have accomplished. It was a *big* deal to get this out there and I'm very happy to have been a part of it.
For the official post and a semi-tutorial, see here.
CLR Binder internals
Understanding the CLR Binder
What I've been working on - a book on Windows Azure
Facts about the book
- We're targeting the book for a release in January next year. Now, I'm a Microsoft employee and you know how good we are at meeting dates <grin/>. Seriously though, the goal is to launch the book a month or so after PDC 2009 which is in November this time. All this depends on one person - me. But more on that later.
- We don't have a final title yet. I expect it would be called 'Programming Windows Azure' or something along those lines. Decisions on that and what is very important to me - the animal on the cover will be taken a lot later in the process
- This will be a comprehensive look at Windows Azure - all the pieces and technologies that make up the platform along with tips on how to use it effectively, patterns, etc. If you're new to cloud computing, you should be able to pick up this book and come out of it with a good understanding of what in blazes Azure actually is. My personal goal is to do a book which doesn't get outdated very son.
How do you do that with a platform which ships features every month? Well, take a look at people like Jeffrey Richter or Mark Russinovich or Charles Petzold in the Microsoft world. Or look at the Camel book or the High Performance MySQL book or Cal Handerson's scaling book. Some books are just so darn good that they are relevant even when you look at them years later. If my book is even a quarter as good as those books, I'll be satisfied. In fact, I keep these and other classics around me when I write to remind myself of what makes a good book great - All the proceeds from this book will be going to charity. In specific, they'll be going to Asha. So when you buy your copy (and I'm sure you will :-) ), you'll be helping with lending small amounts of money to people who really need it.
Where are we now?
Well, right now, its very early going. I've just sent in two chapters for review and trust me, writing is very hard. I've a long , long way to go. Thankfully, I've an awesome team to help me out. The O'Reilly folks have been great and Brian Jepson, my editor, has been very tolerant with all my goof-ups to date (thanks Brian!). We also have a great team of reviewers set up. I'll keep this blog updated with progress on the book.How can I help?/ When can I read it?
I would love to know what you guys expect in a book on Windows Azure. Feel free to leave a comment or mail me at mail@sriramkrishnan.com. I'm trying to make it as useful as possible. Examples? Have a lot of them. Sections on what design/architectural patterns to use? They're in there too. Sections on when NOT to use the cloud? Yes, I wrote a lot about that. Silly jokes and Battlestar Galactica references? Have them too.As for when you can get the book, we plan on making it available over Safari (O'Reilly online book service) as a preview at some time but a lot of details need to be worked out (and frankly, I just need to write more). Of course, once the book is done, I'll be linking to the Amazon page.
Update: Updated charity information
Labels: windowsazure
Erlang bindings for Windows Azure
Background
I'm a procrastinator. Where others see an obstacle to surmount, I see an opportunity to put something away for later. Which is exactly what I did for my Erlang wrapper around the Windows Azure a few days ago. I discovered that Erlang didn't support SHA 256 out of the box, necessary for the HMAC-SHA256 needed for authenticating storage requests, I threw up my hands in a mediocre blog post, filed away my code for a later date when either Erlang added SHA 256 support to the crypto module (likely) or when I got around to implementing SHA 256 myself (not likely).
However, my procrastination this time was short lived. Steve Vinoski showed up in the comments and to my astonishment, whipped together a SHA-256 implementation. Having run out of excuses, I spent some time and finished up my client. Along the way, I wrote a HMAC-SHA256 module in Erlang which was an interesting exercise as well. You can find the GitHub project here. It's in its infancy and can only deal with blobs at the moment. But I am taking feature requests so holler if you need something.
Sample
I'm still unsure of the right idiomatic way to do most things in Erlang. I've created it using the gen_server OTP framework though in retrospect, a simple module would have sufficed. Here's some sample test code which accesses storage (the key and account for the local development storage which runs on my machine).
-module(winazuretest).
-export([test/0]).
test() ->
winazure:start({"devstoreaccount1",
"Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==",
true}),
winazure:create_container("test",true),
winazure:put_blob("test","blob1","Hello!","text/plain"),
"Hello!" = winazure:get_blob("test","blob1"),
winazure:delete_blob("test","blob1"),
winazure:delete_container("test").
Observations
- I'm still learning the 'Erlang way' to do things. This is evident in my HMAC implementation and in my storage client. In some places, I have some ugly unspeakable hacks because I couldn't figure out 'the right way' to do it. I would love some feedback on how to 'Erlang-ize' my code.
- When implementing HMAC based on Wikipedia pseudocode, don't assume 'block size' is 256 just because your hash algorithm is 'SHA-256'. An assumption like could just lead to you staring at random strings of numbers for long periods of time on New Year's eve.
- There is some issue with either Erlang's HTTP 1.1 support or Windows Azure's HTTP 1.1 support or the combination of the two. The client keeps dying after a few calls. I couldn't figure it out so I switched to using HTTP 1.0.
- Erlang's bit syntax seems to be the equivalent of cryptic Perl one-liners. Something that a seasoned programmer can crank out with elan but a newbie scratches their head at. My 'bit-syntax-fu' is as weak as my 'regex-fu' and my nightmares now have double angle brackets in them.
- Distel and Erlang's emacs mode are the best way to code Erlang right now. I tried using TextMate's Erlang bundle for a few days but hitting "C-c C-k' to compile the current buffer and be thrown into a Erlang buffer is too good to give up.
- I now need to find some meaty project to do in Erlang which would need me to make use of Erlang's concurrency support.
Archives
November 2004 January 2006 June 2006 July 2006 August 2006 September 2006 October 2006 November 2006 December 2006 January 2007 February 2007 March 2007 April 2007 May 2007 June 2007 July 2007 August 2007 September 2007 October 2007 December 2007 January 2008 February 2008 March 2008 April 2008 May 2008 June 2008 July 2008 August 2008 September 2008 October 2008 November 2008 December 2008 January 2009 April 2009 May 2009