Saturday, June 27, 2009

Real time web analytics

Recently I came across Clicky [], a very useful web analytics tracker. Unlike Google Analytics that takes 24 hrs to update. Clicky updates stats in real time. It has a well designed dashboard and a website for IPhone.

Friday, January 9, 2009

Amazon releases web based console for EC2

Today Amazon released EC2 management console. It looks very easy to use and will make
maintaining EC2 instance much more easier.

Repcached - Replicated memcached

Replicated version of memcached can be downloaded from the following For now it only works on linux. Hopefully, Win32 version
will follow soon.

Thursday, December 25, 2008

Time Zone ability for SQL Server 2005 and 2008

Few months ago we needed Time Zone functionality for one of our projects. This project is implemented using .NET 2.0 and SQL Server 2005. And as we know, there is no time zone functionality in either of the them. After doing some search, one of my developers  stumpled across this article on code project This article describes how to use Windows built in timezone functionality. We used this approch to implement timezone functionality. Next we needed the same functionality in SQL Server. Luckily SQL Server 2005 and up supports .NET CLR. We used the same classes and created .NET CLR functions ( As this approch makes use of unsafe code, assembly needs to be attached using the unsafe option. By default, this option will not work. SQL Server Database has to be set trusworthy inorder to attach an unsafe assembly.

Hope this helps.

Saturday, October 18, 2008

Database scripts and contiguous integration

Few weeks ago, one of our projects went online for beta testing. Its a SaaS app and follows the one database per customer model. To standardize the process of creating a new customer we decided to use the new SQL Server power shell (sqlps) script. This shell is free can be obtained by downloading SQL Server Management Studio 2008 Express.

We kept our database scripts in database projects. Idea is to create the database with sql scripts everytime before running the unit tests. This way we can detect any mistakes in the sql server scripts. We wrote two power shell scripts. First one to combine all the sql scripts together into a file and the other one to drop and create the database. Integration with was done using the Executable Task in

Friday, October 10, 2008

Cloud for Windows

Recently Amazon made an announcement that they will be introducing Windows Server and SQL Server in cloud. However, they are not first ones to do that. There is already a cloud service called Go Grid. It been around since March and not many people know about. For our latest project we decided to give it a try and found it to very useful. Few advantages Go Grid have right now over EC2
· 24/7 technical support that comes with the account at no extra change.
· Nice interface for creating and deleting servers.
· Licensed Win 2003, Win 2008 and SQL Server 2005.
· Have prepaid plans.
· Free F5 load balancers.
· They have a $50 trial plan.

Few disadvantages compare to EC2
· Right now they don’t have a cloud storage service. (According to Go Grid blog this feature will be made available very soon).
· They don’t have a backup solution. To backup one has to use some third party solution as or S3.
· No support for custom OS images for now.
· Will get charged for server resources even if the server is shutdown. Only way to not incur charges is to delete the server.
· Currently their instances are limited to 2GB of RAM. However, this month they are supposed to be introducing 4GB and 8GB instances. (Can’t wait for that.)

Overall, my experience with the service is good except some initial setup issues. I would recommend anyone who is interested in hosting their application in a cloud give Go Grid a try.

Sunday, October 5, 2008

Memcached 1.2.6 for Windows

Memcached 1.2.6 for Windows can be downloaded from the following link

It has quite a few bugs and crash fixes.

Sunday, September 7, 2008

Improve response time

-         View State

o       Reduce the use of view state as much as possible.

o       If need to store objects in view state consider using type convertors.

o       Move view state to the bottom of the page.

o   Compress View State.

-         Java Script and CSS

o       Try to use ToolkitScriptManager instead of ScriptManager if using AJAX Control Toolkit. It has the ability to combine Toolkit scripts together to reduce number of request.

o       Use release mode in production for ToolkitScriptManager to get already compact AJAX Control Toolkit script files.

o       Combine custom java script and CSS files into one file.

o       Cache CSS and Java Script in the browser.

o       Compact Java Script and CSS to reduce size.

-         Images

o       Cache Images in browser.

-         Cache

o       Cache data and page output. (Note: cache is not a distributed cache and will not work in a Web farm. Consider using memcached and memcached providers.)

Saturday, September 6, 2008

Creating an Alert System with NHibernate, WCF and MSMQ

For a project that I am working on we needed to create an alert system. This system alerts the user about certain changes in the database via email or text. When I started googling for an alert system, nothing relevant came up. But then trying to solve another problem I came across two very interesting posts.

- Manuel Abadia's ASP.NET stuff - NHibernate and calculated properties
- SOA'izing MSMQ with WCF (and Why It's Worth It)

Using these two posts we were able to create a subscriber based alert system. For our solution we created a marker interface IAlert and have all domain objects we needed to alert on inherit from this interface. Instead of using the FindDirty method as mentioned in the first post, we used OnSave [for Insert], OnFlushDirty [for Update] and OnDelete [for delete]. In these functions we place a check if the object is of type IAlert we converted its current and previous state if any into an xml packet. Then that packet was saved on the HttpContext.Current.Items collection. The reason for saving it on the Items collection is that transaction could fail and we don’t want to generate alerts for failed transactions. Then in the PostFlush method in the interceptor we called the WCF service that places that xml packet on to the MSMQ queue. This operation is asynchronous and does not add time to the transaction. On the other side we wrote a WCF service that processes that packet. This way, alert was sent asynchronously and transaction time was not effected. Another advantage of using this approach is processing WCF service has all the information needed to process that alert in the xml packet and only needs to hit that database when it needs to gets that list of subscribers to send messages.