Tuesday, March 29, 2011

Bug in CodePlex prevent publishing a release package

While I was completing my next CodePlex project, which will be published soon, I discovered a strange bug. There was some nasty JavaScript error which was preventing me from publishing a release. Initially I thought it is a specific browser issue, but I tried with every possible (not all of them, but major ones – FF, IE, GC, Opera) browser there is (for Windows) and the problem still was there. And now when I am really close to release I just wanted that release published.

At the end it appeared to be the DatePicker JS in the Release manager which was crashing under certain circumstances. That was preventing users from publishing a Release.
In order to reproduce the issue, set the "preferred languages" of your browser (any browser) to "Bulgarian, Bulgaria (bg-BG)" and remove all other languages. In that case the JavaScript correctly gets/sets the date format, which is "dd.mm.yyyy 'г.'", but that last 'г.' (which includes the single quotes) breaks the JavaScript for the page. Frankly I am not entirely sure whether the system locale settings also affect this behavior. All my machines are with system locale set to Bulgaria. However when I remove the "Bulgarian, Bulgaria (bg-BG)" from browser's preferred languages, and leave there only English everything works fine.

I reported this issue to the CodePlex team and hope that they will fix it soon Smile

Meanwhile, if you are e CodePlex enthusiast and have projects there, keep in mind that locale / language settings might affect your experience!

Sunday, March 27, 2011

SQL Azure: Enterprise Application Development reviewed

As I blogged earlier this year, there are two books on Windows Azure from Packt publishing. I was personally involved as technical reviewer with one of them, and now I am sharing my feedback on the second.
Microsft SQL AzureMicrosoft SQL Azure: Enterprise Application Development, is the second one from the "Azure" series. Published right after the "Microsoft Azure: Enterprise Application Development" the book is the perfect complement to it. Reading Microsoft SQL Azure, you will learn the basics of cloud services (i.e. what is a Cloud, what types of clouds are there and who are the big players). You will, of course catch up with Windows Azure, as it is briefly described, in case you missed the "Microsoft Azure" book.
Focusing on the SQL Azure service it self, the book covers all the steps required for you to leverage a cloud based RDMS. All the information you find there is well structured and accompanied with good number of screenshots and sample SQL statements. You will not miss any of the features delivered from SQL Azure. All the answers are there – what is the security model of SQL Azure; how to connect and execute queries against the cloud (how to use Sql Server Management Studio); how can you use Sql Server Integration Services (a.k.a. SSIS) and what are the limitations; how to sync your cloud data with on-premise data; what are the tools supported by SQL Azure; and more and more questions and answers. I could hardly find a question for SQL Azure that this book does not answer!
I would highly recommend this book as a complement to the "Microsoft Azure: Enterprise Application Development". These two books are the complete guide to develop application for the Microsoft's Cloud!

Thursday, March 24, 2011

Retrospective

Looking back in 2010 when I was a technical evangelist for Infragistics I can’t say that I regret for anything. Evangelism is not a job. Evangelism is belief! That’s my honest opinion. I was evangelist before I stepped officially into that role, and I continue to be evangelist now. I’m inspired by a presentation from Guy Kawasaki (The Art of the Start – a great session by the way, worth watching the full presentation!), where he states something like “You don’t hire evangelists, they find you”. You can read more of his great posts on his blog.

So, back to the subject, one of the projects I was involved in 2010 was the new MyWorldMaps reporting site. We went through a lot of changes during technical implementantion, but in the end it became a really neat Silverlight 4 application, that uses MVVM, Azure (my passion) and of course the amazing DataVisualistion suite from Infragistics.  I can only be proud to have been part of it. And now I see it is so liked by the original requester Brian Hitney from Microsoft.

I formed maybe the toughest part of it – Distribution Stats. It is based on the Motion Framework (officially announced here), which on the other hand is a result of hard working DataVisualization team. This type of statistics shows you multidimensional data. How many is multi? 4! Yes, four dimensions! X-axis will show you cumulative hits for given browser/region. The Y-axis shows you percentage each item occupy based on the total hits cumulated. Third dimension is obvious – time (data changes over time). And finally change in size of a bubble represents relative change of hits for given time point over the previous.  It is so great to see that it finally went LIVE. Good work all, and thanks Infragistics!

Wednesday, March 23, 2011

SQL Azure limitations

During my talks on SQL Azure, and the session I’ve been to (only locally in Bulgaria) we always listen limitations like “excessive resource usage”, “long running transactions”, “idle time”. But it is very hard to find out officially what are the exact numbers behind these statements. Now that I prepare for my session next week at Microsoft Developer Days 2011 I am hunting for a numbers. And here they are (keep in mind that these numbers are subject to change at any time without notification):

    • Excessive Memory Usage: When there is memory contention, sessions consuming greater than 16-megabyte (MB) for more than 20 seconds are terminated in the descending order of time the resource has been held, such as the oldest session is terminated first. Termination of sessions stops as soon as the required memory is available.When the connection is lost due to this reason, you will receive error code 40553.
    • Idle Connections: Connections to your SQL Azure database that are idle for 30 minutes or longer will be terminated. Since there is no active request, SQL Azure does not return any error.
    • Transaction Termination: SQL Azure kills all transactions after they run for 24 hours. If you lose a connection due to this reason, you will receive error code 40549.
    • Lock Consumption: Sessions consuming greater than one million locks are terminated. When this happens, you will receive error code 40550. You can query the sys.dm_tran_locks dynamic management view (DMV) to obtain information about the current state of locking in SQL Azure.
    • Log File Size: Transactions consuming excessive log resources are terminated. The maximum permitted log size for a single transaction is 1-gigabyte (GB). When the connection is lost due to this reason, you will receive error code 40552.

Full list of limitations and a very good reading: http://social.technet.microsoft.com/wiki/contents/articles/sql-azure-connection-management-in-sql-azure.aspx

Important note on Role recycling when you have IntelliTrace enabled

I was recently using Intellitrace to catch some crashes of a deployed to Azure service. I may say that I am astonished by the simplicity of using IntelliTrace. Although I have pretty good logging (apparently not that good, though Smile) my system was restarting and I couldn’t catch why. Once I enabled Intellitrace  it took me about (literally) 1 minute to catch the issue (including the time for downloading the InterlliTrace log). However I noticed that my role is not recycled after a crash. I wouldn’t connect both if I didn’t come across this post in the Windows Azure forums (the post is written by the Windows Azure Support guys):

When IntelliTrace is enabled on a role that is running in Windows Azure and that role crashes, the role is not restarted. This is to improve the information available to IntelliTrace. We do not recycle the role when it is collecting traces, instead it is put into the “Unresponsive” state.

For more information about IntelliTrace, see the following:
Blog Post: Using IntelliTrace to debug Windows Azure Cloud Services
MSDN Article: Debugging with IntelliTrace