May 2004 Blog Posts

Brad recently blogged about all the new moves people have been making and tomorrow I start my new life.

A few months ago, I interviewed for a consulting position at Microsoft in the UK and gladly accepted when they made me an offer, so over the last few weeks I've been wrapping up my outstanding work commitments.

For most of the last 8 years I've been my own boss taking on the projects I wanted and working in my own way. Transitioning to working for the largest software company in the world poses great challenges and also presents huge opportunities and I can't wait to get my teeth into it. I've met many great people who work at Microsoft over the last few years and especially at last year's PDC and I'm looking forward to working as part of a great team.

I will be continuing to maintain my blog as time allows and in the coming weeks will transfer over to a new domain name. Of course, I now have to include the obligatory disclaimer for my posts:

The posts on this weblog are provided "AS IS" with no warranties, and confer no rights. The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.

In The Quest for ASP.NET Scalability, Michèle Leroux Bustamante looks at some of the architectural and design decisions that may affect ASP.NET application scalability. In addition, she looks at how you can use Enterprise Services and MSMQ to reduce the effect of those scalability problems.

This article gives a useful overview of the areas you need to consider when looking at web application scalability. It covers the threading models for ASP.NET running with IIS 5 or IIS 6 and looks at physically scaling the application tiers.

The only comment I would take issue with is this (emphasis mine):

An enterprise solution should at least have two tiers. In a two-tier scenario, the Web server tier could host...well...the Web server (usually IIS), the Web application, and possibly business and database access components. The database server tier allows you to offload the heavy lifting of the database engine to another, usually more powerful piece of equipment. In reality, two tiers is rarely enough for an enterprise solution that takes a beating. Chances are there will be some business processing that puts greater demand on system resources, such as file I/O operations, heavy number crunching, and integrated system calls. So, there will traditionally be at least three tiers allowing the Web server to focus on simpler requests, delegating business component interactions to a distributed application tier.

During the processing of these business operations, what exactly is the web server tier doing? Dealing with all these simpler requests isn't usually very taxing. I wonder if tradition might have more to do with it than initially appears. Because we were introduced to 3-tier application design as a solution to the internet-scale problems of client-server systems, it was natural to think that this logical architecture applied in the physical realm too. I remember thinking that that was somehow automatically the case.

Today, though, I believe it is normally better to keep the business logic on the web tier and scale horizontally at that level unless there are good architectural (not specifically scalability) reasons for doing otherwise (this has been discussed before and I've mentioned security and service orientation as possible reasons).

Daniel Cazzulino has written a comparison between the Enterprise Instrumentation Framework (EIF) and log4net.

I was anticipating using EIF on a recent project but it turned out that log4net was so easy to implement and deploy that it was a perfect fit for our requirements. The only thing I am slightly wary about is that 1.2 of log4net seems to have been at beta8 for the better part of a year and the move to the Apache Software Foundation (ASF) doesn't seem to have achieved much.

Boost for Visual C++ Developers: Use the C++ libraries developed by the Boost community, and get functionality beyond what's in the C++ Standard Library.

  • Keyboard Scan Codes
    This page provides an introduction to keyboard scan codes and explains how escaped scan codes work.
  • Scan Code Mapper for Windows
    Windows 2000 and Windows XP include a new Scan Code Mapper, which provides a method that allows for mapping of keyboard scan codes without having to go through the "tedious process" of writing a kernel-level filter driver that can sometimes lead to severe problems if errors exist in the driver.
  • Keyboard Scan Codes and Windows
  • Scancode Mapper is a GUI tool for setting the Scan Code Mapper for Windows Registry settings for Win2K+.
  • Ctrl2cap is a kernel-mode device driver that filters the system's keyboard class driver in order to convert caps-lock characters into control characters. Source code is provided.
  • The Microsoft Keyboard Layout Creator allows users to create or modify keyboard layouts.

Microsoft File Checksum Integrity Verifier is a command line utility that computes and verifies hashes of files.

It computes a MD5 or SHA1 cryptographic hash of the content of the file. If the file is modified, the hash is different.

With FCIV, you can compute hashes of all your sensitive files. When you suspect that your system has been compromised, you can run a verification to determine which files have been modified. You can also schedule verifications regularily.

Keith Brown sent out this interesting tip:

You can delete autocomplete items in Office and IE by holding the mouse down on the item that's getting in the way while the autocomplete listbox is down (you can force it to drop down in an empty field by clicking that field a couple times if necessary) and pressing DEL.
I'm loving this feature - I just used it to delete some old addresses from my TO: autocomplete in Outlook.

[via Craig]

10 months ago, I wrote about the expected divergence between C# and VB.NET. I think we're starting to see the beginning of this:

Paul Vick: Roy raises the question as to whether divergence between the languages like this is a good thing or a bad thing. While I'm sympathetic to his point about increased difficulties moving between two languages, it does raise the question: what's the point of having two separate languages if they have exactly the same set of features? Case insensitivity vs. case sensitvity, for example, is not reason enough alone for Microsoft to invest all the money that it does building both products.

I have mixed feelings now about my view back then that this would reduce the arguments between choosing C# or VB.NET. Maybe I was too optimistic. However, I still think that the potential is there to change the debate from a religious one into something more sophisticated dealing with the features present or missing in each.

Today I finally got fed up with writing all those repeated properties for XML serialization and data binding. I decided that I couldn't wait for code expansions in Whidbey:

QuickCode .NET is a Visual Studio add-in that allows you to type short phrases like prop int test and press Alt+Q to expand this into a getter/setter property. It is completely configurable so that you can modify the built-in expansions to your coding style and create new snippets as you like.

It is only US$29 and with today's exchange rate that makes it pretty darned cheap in my book.

I mentioned a couple of weeks ago that, in common with others in the blog community, I was trying out David Allen's GTD methodology.

With a few days left on the trial version, I've parted with the cash to buy the GTD add-in for Outlook. It has made a real difference ensuring that I keep a consistent view of all my outstanding tasks and making it easy to turn e-mail messages into appropriate tasks.

After two weeks, I can still see my desk, the floor surrounding my desk, and I don't have half-read mail scattered around the house: everything is either done with or sitting in my pending tray with an associated Outlook task. I've long been a proponent of the phrase "you gotta have a system" but, until this, I hadn't found a workable system.

I may be speaking too soon (I've only been following this regime for a short time) but I'm hoping it will stick. I already feel more organised!

  • OpenSSH is a FREE version of the SSH protocol suite of network connectivity tools that increasing numbers of people on the Internet are coming to rely on. Many users of telnet, rlogin, ftp, and other such programs might not realize that their password is transmitted across the Internet unencrypted, but it is. OpenSSH encrypts all traffic (including passwords) to effectively eliminate eavesdropping, connection hijacking, and other network-level attacks. Additionally, OpenSSH provides a myriad of secure tunneling capabilities, as well as a variety of authentication methods.
  • OpenSSH for Windows is a free package that installs a minimal OpenSSH server and client utilities in the Cygwin package without needing the full Cygwin installation.
  • ProxyTunnel is a program that connects stdin and stdout to a server somewhere on the network, through a standard HTTPS proxy. It is mostly used to tunnel SSH sessions through HTTP(S) proxies.
  • SSH Proxy Command -- connect.c is the simple relaying command to make network connection via SOCKS and https proxy. It is mainly intended to be used as proxy command of OpenSSH.