This post originated from an RSS feed registered with .NET Buzz
by Scott Hanselman.
Original Post: Whew. What a week. Rediscovering the basics.
Feed Title: Scott Hanselman's ComputerZen.com
Feed URL: http://radio-weblogs.com/0106747/rss.xml
Feed Description: Scott Hanselman's ComputerZen.com is a .NET/WebServices/XML Weblog. I offer details of obscurities (internals of ASP.NET, WebServices, XML, etc) and best practices from real world scenarios.
Side Side Note: Seriously, drink this in. Picture this:
I was sitting in the Hilton Lobby with my new laptop. Wireless access available
in the ENTIRE hotel. Sitting at the CTRL-ALT-DEL login screen, hit the
sequence, and am greeted by a Cisco VPN software popup. "Would you like to log into
the Domain via VPN?" Oh, hell ya. So, wireless VPN into Corillian using Secure
Certificates (We have our own Cert Server), then Login again and am authenticated
(NOT a cached profile) by the Active Directory. All the Login Scripts run (they
don't when you are logged in with a cached profile, which happens when you're on the
road for weeks) and I'm set. I launch Outlook using cached Exchange Mode
and sync email the way it was MEANT to be synced. Meaning: My outbox actually
GOES OUT and my folders and calendars (and MSN
Direct Watch) all sync. (Only took 2003 versions, but OH they got
it right this time). Then I run a CVS Update
via the masterful Tortoise,
then checkin securely all my changes for Build 007 of the snazzy
bank I'm working on. I chat securely with my Windows Messenger that's integrated
with Exchange 2003 and the SIP
Server. Exchange a few files by dragging them onto the Messenger
Window. Logout. From a Hotel in Atlanta. Glorious, and beats
the pants off of Outlook Web Access from Kinkos. Thanks Microsoft and
Corillian IT.
Still hip deep in ASP.NET. I'm still excited about ASP.NET
1.1 and the power of abstraction. It's good that even though I've been
"in the game" for over 10 years that I'm still excitable about rediscovering the
basics. Finding the level right abstraction, the best name for function,
or a fantastic new function overload that makes all the pieces of a problem fall into
place like that perfect Tetris Piece you've been looking for - is such a rush.
Even if it's little stupid stuff.
Here's a stupid example of rediscovering the basics. I've (and
the team) have been using the HttpContext.Current.Items[] collection a
bit for stowing away things that you might need later in the same Http Request.
It's a little known (more now) storage area that lasts just for this Request.
It's NOT the session object, and you don't want to put a lot of stuff in there.
But, for example, I need to do a bunch of checks for various things and hash the result.
Turned out that was useful and it was being called WAY too often, even in one call.
But it wasn't changing the call, so I wanted to stow it somewhere. So I did this:
But that pattern appeared in like 5 other places. So, I did this:
string retVal = CacheHelper.RequestCachedItem("SomethingICareAboutForOnlyThisCall",
new ItemBuilderDelegate(BuildThisComplicatedStringAndTakeSomeTime));
(Of course the names of everything have been changed to protect the innocent.) So,
I pass into RequestCachedItem the key for the item and a Delegate
to build the item in case it's not cached. It's a common pattern for caching,
and served itself well here.
WARNINGS: Read Ron
JacobsFun with Caching stuff and remember that if you don't measure,
you may (and probably will) SLOW YOUR SYSTEM DOWN by arbitrarily adding caching.
In my example, I really need to know if its more expensive to make that object than
it is to cache it in the Request's Item Hashtable and pass delegates around.
In my case it is, in yours it may not. Measure twice, code once, unit test constantly.
:)
Anyway: That silly piece of code was the least effort of my week,
but it's those little joys that make stuff fun for me. A little Factory
Pattern that just makes things cleaner. Changing if/thens to a switch. Ya, I
know the underlying IL will compile the same, but the act of refactoring is cathartic.
C#
Refactory: This tool has been around a while, and I've been resisting
using it, probably because of the $99 price. (I'm more of a $29 guy) But,
I've given in. It's fabulous and I can't wait until Whidbey. Especially
nice is the cyclomatic
complexity (A measure of the number of linearly independent paths through
a program/function/class/etc.) calculator that
gives you an idea of where you might want to start your re-thinking. The Tidy
Imports feature is ALMOST worth the price of admission.