Attendee question of the day:
A long running CPU and memory intensive piece of work needs to be done when requested by a user in an ASP.NET application and then reported back to the user when complete. How do you do it without placing too much load on the ASP.NET server?
A possible solution:
Start a new thread from the ASP.NET request. This new thread should not do the work itself but rather use Remoting to invoke the work on a remote server (that may be dedicated to the intensive work). But how do you get updates back to the user? You can either do it in a truly disconnected manner by sending an email to the user when the work is complete or you can have something on the user's browser poll back to the server for updates. Possibly looking in Cache for updates posted by the thread using the Remoting object. You could do this polling using a simple META REFRESH (ugly) or use something more elegant (and lightweight) such as Remote Scripting.
I implemented a very similar solution to kick off NAnt scripts and watch their output from an ASP.NET application. It used Remoting to a ScriptRunner object hosted by a Windows Service. All output was captured by the ScriptRunner and then retrieved using Remote Scripting calls to get the status update from the thread holding the reference to the Remoted object inside ASP.NET.
After much confusion and schedule changes, I was able to take over Steve Smith's session on TDD at TechEd today (Steve was unable to attend TechEd due to military service). Many thanks to Brian Marble for making the last minute arrangements!
The attending group was an adhoc bunch. Although TDD is certainly growing in popularity since the group was aware of the concepts and had experiences of using some of the tools! The session was very rushed taking just over an hour - the fastest ever for the slide deck and hands on material.
The following interesting questions were posed afterwards:
- How do you sell Pair Programming (PP) to management?
This paper states that PP only incurs a cost of 15% increased time. I would argue that this still assumes that two developers on their own are still 100% productive - whereas two people working together motivate each other and ensure that more productive hours are spent developing each day rather than being occupied by distractions - phonecalls, checking email, support issues, etc. This also says nothing of the improved quality of the code and reduced maintenance costs downstream that PP brings.
- If you have a large legacy system with many interconnected systems - how do you start with TDD?
Start with the next feature. Don't delay starting with TDD. Don't try to retrofit all your existing code with tests. Rather start with the next required feature and write a small test. Mock out any interconnected systems in the simplest way to write your test. I guess it comes down to HowDoYouEatAnElephant! :-)
I also met Mark Miller and Jason Fredrickson which resulted in a great discussion on the merits of Pair Programming! This resulted in the trading of war stories and my discovering of a new alternative to VNC for pairing - NetOp.
- How do you sell Pair Programming (PP) to management?
I will be in the Development Cabana in the “Sails” area of the San Diego Convention Center. I have been writing some articles, code, eating icecream and otherwise keeping busy. If you would like to come along and try some Test Driven Development first hand - I am open for pairing and general questions during the following times while I will be in the cabana.
Just ask the concierge for me by name or try to pick me out of the crowd.
- Monday 24th May - 8:30AM to 1:30PM
- Tuesday 25th May - 4:30PM to 9PM
- Wednesday 26th May - 12:30PM to 5PM
- Thursday 27th May - 8:30AM to 1:30PM
If you come along, you can expect to get some first hand experience with NUnit, NUnitAsp, NCover, C# and some Refactoring.
The first day: I arrived at the San Diego Convention Center around 10am via cab ($15 for 4 miles ... a little steeper than DC!). The building is very impressive ... it is huge with interesting architecture and unusual elevators. Registration was a breeze using the staff line and finding the development cabanas was easy enough with lots of helpful people and great planning.
The area for the cabanas and open PC access is enormous with plenty of available network plugins and wireless access. The strange part is that it is really bright, making it difficult to see any LCD screens. The roof has large canvas “sails“ but there doesn't appear to be any way to darken the room.
After hanging out at the cabana for a while, I wandered down for lunch and found an even larger room. The dining room seats 7800 people! (picture coming) It is hard to believe that anyone could cater for that many people and still keep the food hot. :-) But numbers aside, the food was superb ... I had halibut with zucchini, couscous and potatoes. It is hard to find vegetables cooked well, especially when cooked en masse.
Check back for more posts this week from TechEd's Cabana area or stop by and say “hi“ if you are here!
I will be presenting “Test Driven Development with ASP.NET” tonight at the WinProVienna .NET User Group in Virginia (near Tyson's Corner). This is going to be an updated ASP.NET version of my other TDD presentation which has a very heavy “hands on” approach by pairing with the audience. Some of the feedback that I have had in the past is that my TODO list (building a custom array/collection sorter using reflection in .NET) was a little tough to follow while seeing TDD for the first time. I chose the sorter since it felt like a real world problem and I didn't want to pick something too simple and have the comment “oh sure, TDD works on this easy stuff but what about ... “
The new TODO list tonight will be challenging in the time available as it involves starting the projects from scratch to build a simple database driven phone search for an ASP.NET application using a complete TDD approach. This will involve setting up the business layer project and business tests for NUnit, then the web project and its associated NUnitAsp test project while also setting up the database and initializing the data in the tests.
I also plan to give a high level overview of Giles Cope's fantastic NCover and then actually throw together a quick NAnt script using it to assess our coverage during the hands on TDD. - Here's hoping for 100% :-) (and not violating any of the TDD rules during the session as a new audience can make a naive pairing partner!)
If you get a chance stop on down, or post your thoughts here.
UPDATE: The meeting went very well although we didn't get 100% coverage :-( only 75% ... we missed a coverage point on a property getter that we added but shouldn't have. Old habits - hard to add a property with only a setter - I guess we should have just added the getter to a test. I think seeing NCover run against the hands on code was very powerful. Thanks to Jeff and his group for their hospitality!
I will be assisting other developers and meeting the community during Microsoft TechEd 2004 this year. The Developer Tools and Technologies Cabana lounge will be the place to meet developers, trainers and speakers from far and wide.
Get your questions answered on:
- Web Services
- Visual Studio .NET
If you haven't already signed up on the RIO Networking system for TechEd, do so now!
If you are a blogger who is attending or speaking at TechEd - sign up your blog on TechEdBloggers.