It’s been a very busy week so far on the 30 day challenge with some products making good progress and authors posting all manner of screenshots. Although there has been a lot of progress being made on Software Monitor it is all behind the scenes. The biggest challenge has been building for scalability.
I have one fairly expensive dedicated server in place which is running the server at www.software-monitor.com. I need to be able to expand the reach of this service across multiple servers. My market research suggests that my customers are looking for a hosted and managed solution (in the same way that Google Analytics is hosted, maintained and upgraded without customer intervention) so it is important that I can take on new customers and expand the service across multiple servers, databases and geographic locations. I have a short term upgrade plan in place which basically involves adding extra web servers (Internet Information Server 6.0) and database servers (SQL Server 2005 Enterprise) to the cluster. If demand exceeds the capacity for my ISP, my architecture allows me to expand this service to other geographic locations. If successful I will be investing heavily in the infrastructure in order to support the customers on those servers, and the service has been built from the ground up to be scalable in this way. This is all transparent to the end user, who won’t notice which server they are physically present on. I’ve taken advantage of ASP.NET’s built in membership and profiling and have built this service directly into Software Monitor. It’s given me a leg-up and it’s one part of the website I don’t have to spend too much time on. You might have noticed you can already sign up with www.software-monitor.com although you can’t log in yet. This is intentional, since I don’t want unwanted third parties (pirates, hackers, miscreants) to get a preview of the software development before it’s in public beta.
I’ve also been working pretty damn hard on getting the class library which supports the application thoroughly tested using Visual Studio 2008’s new unit testing features, as well as automating the process for releasing the software to a test environment and the process for releasing live. This way, I can respond quickly to bugs reported throughout the upcoming beta test and release a stable product sooner. It also means I can stress test the service with hundreds of thousands of transactions. One of the things I noticed over the weekend was how poor ADO.NET datasets are for retrieving simple (i.e. scalar value) data from the database. Even for retrieving the contents of a small table, a dataset is slow. I’ve had to recode all the place I’m using a dataset with the more robust system.data.sqlclient.sqldatareader type (which is what ADO.NET uses when it wants to to fill the dataset quickly) in order to recover performance and memory. This is quite a difference to the WinForms paradigm of software development, where a DataSet is used for ‘almost’ everything.
I’ve also been studying AJAX, the technology for making partial page “refreshes” without reloading the page. This is a brilliant technology as it saves a lot of processing on the server and the client can get their pages quicker too. I’m implementing AJAX so that when the user loads a page which contains a DataGrid initially they only see the first three or so rows; the server works in the background to load the remaining data and pushes it to the client. The effect is the client gets a data-heavy page almost instantly and can see the additional rows of data appearing one at a time after the page has already been loaded. Pretty cool. I’m using AJAX to do some other timesaving features but I don’t want to give my whole game away in blog posts before the service has launched – so I’ll leave you guessing for a few more days.
The API is coming along well too, although I haven’t yet prepared any documentation for it. I had intended to start documenting the API earlier this week although a small bout of man-flu paid rest to that idea as it’s very difficult to think coherently when coughing and sneezing. For those new to www.software-monitor.com. The upcoming API itself will be:
Web Services (for .NET)
HTTP POST (for everyone on every platform)
Calling a custom component (for any Win32 compatible software)
Do you have any preferences or ideas that you would like to see in the API? Please contact me or leave a comment!
I have acquired some beta testers, which is great. Thank you to everyone who has expressed interest in this project. I’ll make sure that you are all creatively rewarded in some way. Anyone else who wishes to join the beta program, simply comment on my blog, send me an email or use the contact form on this blog.
I apologise to those beta testers who wanted to get started this week. Unfortunately (and mostly the fault of the man-flu) I’ve slipped a couple of days. I’m going to be having a very busy weekend getting back up to speed and hope to get the pre-release API and documentation out to you very soon.
It’s still not to late to join the beta program. If you’re interested, please get in touch.
Other than Software-Monitor related posts I’m planning a review of my new pet; The iRobot Roomba 530 robotic vacuum cleaner. And also the Logitech USB noise cancelling desktop microphone that I’ll be using for screencasting shortly and my new Akasa 3.5 external drive caddy (so I can read and re-use the disk from my destroyed Exchange 2003 server), and more…