# Sunday, August 31, 2003

Bangkok Day 2

After sleeping in I got up and got a haircut for about $0.30 and did my laundry that piled up while in KL.

Spent the day seeing the sights I have not seen before, spent a lot of time in the National Museum. Waiting for Kevin Collins to arrive in from Tokyo tonight then one more night of fun before we head to Kathmandu tomorrow!

posted on Sunday, August 31, 2003 9:01:42 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [17] Trackback
# Saturday, August 30, 2003

I ain't goin' out like no punk-bitch


It seems that in KL they really like House of Pain’s Jump Around and the DJ at one club last night mixed it in with Kriss Kross’ Jump for an insane party. Add that to the almost local Panjabi, of course mixed with Jay-z. After an epic night of partying in KL with fellow speaker Chris Featherstone, it was time to say goodbye to KL.


So I have arrived in Bangkok and have to move from speaking/working mode to R&R mode for the weekend before moving into trekking to Everest mode on Monday. Bangkok is one of those places that I just seem addicted to and have to visit if I am in the region (Paris is another). Fun, cheap, and very friendly, Bangkok has lots to offer everyone including many Royal and Buddhist sights, awesome shopping (can you say custom clothing) and of course the wild and crazy nightlife. Now my third time to Bangkok in the last year and a half, I already know the cool places to party down at Pat Pung, so if any of you are down at Lucifers’ tonight or tomorrow, come dance with me to Indian Hip-Hop and a little old school Irish Rap (they like House of Pain here too)... And Tom, I am wearing my purple shirt that you hate so much…

posted on Saturday, August 30, 2003 10:40:56 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [9] Trackback
# Friday, August 29, 2003

The Malaysian Rainforest


Today a bunch of us speakers went on a trek for 8 hours in the Malaysian Rainforest where we did battle with malaria laden bugs, leaches and lots of natural obstacles. At times it was sweltering hot (to quote Tim) and we had to strip down and cool off.


This was a truly amazing experience. We used a machete to cut through the jungle and climbed through water, drank water out of roots and learned basic jungle survival (like how to cut a water bottle out of bamboo-I don’t think my bamboo water bottle is going to make it through Thai customs tomorrow).


The reward of the day was a phenomenal series of waterfalls and lots of wildlife. 



posted on Friday, August 29, 2003 2:14:17 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [18] Trackback
DEV315 Using Regular Expressions in .NET

The RegEx session went over very well. The crowd liked how my mom made my life difficult and helped me with this expression: Ste((v|ph)en|ve). They also found the flaw in this test for US Phone Numbers: 1-\(?\d{3}\)?-\d{3}-\d{4}

Code and slides avaliable here.

posted on Friday, August 29, 2003 12:23:26 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [10] Trackback
# Thursday, August 28, 2003

Top of the World-and TechEd

Last night we had dinner on the top of the world, in the world's tallest building, The Petronas Towers. I also found out I am the #1 ranked speaker so far at TechED, I am humbled.

posted on Thursday, August 28, 2003 2:09:00 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [4] Trackback
# Wednesday, August 27, 2003

Rozenshtein Comes to Asia...

Who said TSQL is not fun? Dr. Rozenshtein is now a popular man in KL. Code and slide download for DEV206 "Efficient and Secure Data Retrieval in Your Middle Tier Using Stored Procedures and ADO. NET " is available on gotdotnet here. Enjoy!

There is no code for EDM207 ".NET CF Database Development with SQL Server CE 2.0 ROI" since it is a case study.

posted on Wednesday, August 27, 2003 7:25:54 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [14] Trackback

Party KL Style

Ok, Clemens finally showed up and we did our usual routine: drink a lot, dance like wackos and have an awesome time at a local bar last night with some other speakers and local MS folkes. Too bad for Clemens that he had an early session, mine is not until 4pm. :)

posted on Wednesday, August 27, 2003 3:59:06 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [2] Trackback
# Tuesday, August 26, 2003

DEV203 ASP .NET DataGrid Drill Down


Since Commnet and Wireless are down this is for those of you who attended DEV203 today, here is the code and slides download, examples in both VB and C#.

posted on Tuesday, August 26, 2003 6:41:42 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [13] Trackback

To Query String or Not to Query String


That is the question before Adam Cogan and I at breakfast this morning. He loves them. I hate them. He likes to make an HTMLa report and then use query strings to save the parameters and then email the URL to other people so that they can see the same thing. I’d rather save a view (parameters, etc) and let someone click on that. Or use postbacks. I don’t like Query Strings for a two main reasons reasons:

  1. The user can change the query string and possibly see data they are not allowed to see, or you have to write code to prevent that.
  2. Query Strings leave you wide open to SQL Injection Attacks and Denial of Service attacks (especially when you use sloppy code by concatenation of a SQL statement-something that you should NEVER do.) So you will have to write some RegEx expressions to validate the query strings.


Adam says that since you can code the responses to #1 and #2 query strings are useful and worth it. I tend to disagree and only use Query Strings when absolutely necessary. Who is right? We both are. It all depends on how much time and energy you are willing to spend, Adam wants particular functionality and is willing to pay (write validation code) for it, I am willing to pay (write functionality code) in different ways.



posted on Tuesday, August 26, 2003 6:30:01 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [3] Trackback
# Monday, August 25, 2003

Today Scott Case, fellow RD Tim Huckaby, and I went to Kuala Gandah Elephant Conservation Centre in central Malaysia. This facility, run by the Malaysian Government, takes elephants that are endangered and relocates them to the protected natural rainforest where they roam just about free. The centre also looks after orphan elephants. We got to spend the day with some of the relocated elephants that have not entered the general population yet. I am talking up close in nature with some serious elephants-at times it was quite intimidating like when we had to run out of their way! That said this was one of the most amazing things that I have ever done in my life.


First we got to hang out with an orphan baby female elephant. She was very tame and really enjoyed having us pet her and play with her. She especially liked when we would put our hands in her mouth. At 20 months old she was already over 1,000 pounds!


Then we went into the preserve and hung out with five adults and a child elephant. This was a totally wild experience. After that we got the chance to bathe and hand feed the elephants. After washing and feeding them, they treated us to rides, on land in the river. While in the river the elephants liked to throw us overboard, we were told it was a sign of affection by our guide Razali-who was a very cool dude.


When we were all done, we visited another preserve and saw a nearly extinct bear (who loved me) and some deer and other cool animals. This was quite a unique experience.


What a great day to spend my off day at TechEd. Well it is back to work tomorrow, five sessions in 3 days!!


posted on Monday, August 25, 2003 2:25:43 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [10] Trackback
# Sunday, August 24, 2003

Where in the world is Clemens Vasters?

Clearly not in KL like he is suppose to be. I think Pat told me they are in Bangkok and that they do not get into KL until Tuesday.

Anyway get your asses here, we need to get drunk. Sicne June Clemens and I have gotten drunk together in North America, Africa and Europe. We need to add Asia to that list. Plus we have to get Scott Hanselman to party some too.

posted on Sunday, August 24, 2003 7:06:30 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [13] Trackback

A Malaysian Brick-With an Australian


Adam Cogan who thinks that blogs are stupid and thinks that personal posts are even stupider did a brick with me today-we ran 5km and swam. (Well the swim was not as intense, but we went through the motions since we weight trained too after the run.)


While Adam can kick my ass in tennis as I learned the hard way back in 1998, he has no advantage over me while running. J

Meanwhile back in the good old USA, teammates Tom Halligan and Andy Catlin banged out 71.6 miles in the park Saturday as I learned when Tom called me to wake me up to tell me.

posted on Sunday, August 24, 2003 6:57:25 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [14] Trackback
# Saturday, August 23, 2003

TechED Malaysia

Just arrived in Kuala Lumpur for TechED Malaysia. High speed internet in the hotel room, lots of RDs here and tons of technical sessions this week, what else could a geek want? Well maybe a shorter plane flight! :)

Off to dinner with Adam Cogan and then we have a day of fun tomorrow.

High speed internet just rocks, I am IMing with my lead developer and using remote desktop to push his changes up to stage, all in Asia and the dev and server are in New York.What did we do before IM, broadband, and Remote Desktop? Suffer I guess. :)

posted on Saturday, August 23, 2003 8:18:05 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0] Trackback
# Friday, August 22, 2003


Back when VSLive was in town and I was walking around with some speakers from around the world, they were suprised at the police and national guard presence in New York. I said that while the world has gotten back to normal after 9/11, New York has not.

Well getting off the plane in Hong Kong a while ago reminded me that SARS is still a problem. Had to take a body temp test and fill out medial forms, and I am just a transfer passanger.

posted on Friday, August 22, 2003 11:41:17 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0] Trackback
# Thursday, August 21, 2003

Off to TechEd (and other Adventures)


I am off at 11pm tonight to TechED in Kuala Lumpur , Malaysia. I get into KL at 2pm on Saturday due to the international date line. Nothing like a 20+ hour flight to catch up on some sleep, watch some movies, and do some work. I am now doing 5 sessions in KL, was drafted to do a chalk talk:

CHK9 Chalk Talk: Developing Mobile Applications wit NET Compaq Framework & SQL Server CE 2.0

DATE/TIME: 8/28/2003 14:45


My other 4 sessions are:


DEV203 ASP .NET DataGrid Drill Down

DATE/TIME: 8/26/2003 12:00


EDM207 .NET CF Database Development with SQL Server CE 2.0 ROI

DATE/TIME: 8/27/2003 16:00


DEV206 Efficient and Secure Data Retrieval in Your Middle Tier Using Stored Procedures and ADO. NET.

DATE/TIME: 8/27/2003 17:30


DEV315 Using Regular Expressions in Windows Forms and ASP .NET

DATE/TIME: 8/28/2003 10:30


Looking forward to seeing my fellow RDs:


Adam Cogan (Australia)

Tim Huckaby (US-San Diego)

Clemens Vasters (Germany)

Scott Hanselman (US-Portland)

posted on Thursday, August 21, 2003 5:17:29 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [3] Trackback
# Wednesday, August 20, 2003

802.11b WEP Encryption Sucks


Today is moving day. Right now the movers are doing their thing and I am sitting in my new apartment and my roommate Linda has WiFi with a LinkSys router. A bunch of us were here partying last night after rock climbing and when Shay and Linda were busy with Friendster.com I was worrying about getting my laptop to work here today (not to do work, but to blog of course). Last night Jack and Justin told me that they enabled WAP security on the router since “WEP security is better than no security.” I was concerned since Jack did not remember the WEP KEY or the admin password (Jack set up the WiFi for Linda). I said I will just hack the router.  Teammate Tom Halligan did not toss me under the bus for the first time in history and said “Forte can hack that in like 30 seconds."


Well more like 68 seconds. Will someone call the IEEE or whoever and let them know that WEP Encryption just sucks. I am not telling you what I did, but I did not want to reset the router and update the firmware since I don’t want anything to go wrong when I leave for Asia for 5 weeks tomorrow.

posted on Wednesday, August 20, 2003 4:22:36 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [15] Trackback

Brotherly Love

Today I move from W57th Street to E51st Street. Moving is not cool.

Then later on, I get on a train to speak at the Philly.NET Users Group. Can't wait, user groups are so much fun.

I'll be doing a quick session about RegEx then the main session on Web Data Binding (samples are not all here, but this is a link to the DataGrid Tech*Ed Session). I leave for Tech*ED in KL tomorrow and do both of these sessions, so it should be lots of fun. See you all there.


posted on Wednesday, August 20, 2003 12:22:04 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0] Trackback
# Tuesday, August 19, 2003

Arrest this Man: NYS License Plate # ROBB (T & LC)


A copy of my email to the New York City Taxi & Limousine Commissioner:


Today something unthinkable happened during our training bike ride in Central Park. On the last leg of the 40km ride a crazy livery cab started harassing us. (This is not that uncommon.) The harassment turned ugly when the car drove across two lanes of traffic and intentionally drove straight into teammate Tom Halligan (and clipping my right elbow at the same time). Tom was not thrown off the bike, but immediately a chase was on (lead by teammate Andy Catlin) and the car was swerving in and out of traffic to escape the park. Several bikers and other cars came to our aid.

We chased the car outside of the park and he was stopped at a red light. I yelled for him to “get out of the fucking car now” as another biker who came to our aid rode to the left of the car and I was on the right, all on Central Park West and about 95th street. Then the car turned over the double yellow line and hit the second biker and drove down to Columbus avenue! That is the second intentional hitting of a pedestrian and leaving the scene of the accident. A few more bikers were behind me chancing the car down Columbus, and even pumping the fastest I have ever went (about 40mph on flat) we lost him around 72nd street as the car drove on the wrong side of the road and went up a one way street to escape down the West Side Highway. Even down at 72nd cars were pulling over offering his license plate and any other assistance possible.

Please arrest this man and never let him drive again in the State of New York.


posted on Tuesday, August 19, 2003 11:55:42 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0] Trackback
# Monday, August 18, 2003

They call this FUD

Stephen Forte’s Testimony to the New York City Council, April 29, 2003

Thank you all today for taking time to hear my testimony. My name is Stephen Forte, I was born and raised in New York City and am 31 years old. At the age of 23 I founded a high-tech consulting firm called The Aurora Development Group, which was sold 5 years later. I also served as the Chief Technology Officer of Zagat Survey here in New York from late 1999 until January 2002. Last April I co-founded Corzen, based up at Union Square where I currently serve as Chief Technology Officer.

I have had to do the economic and technical analysis of whether to use Open Source in my operations twice, once at Zagat where we had a 5 million dollar technology budget but not enough time and money to meet our deadlines for an IPO and second when I founded Corzen last year with only $300,000 of initial investment. Time to market and saving money was very important at Corzen epically since I did not get a paycheck until December 2002.

As a small business owner and resident of the City of New York for over 31 years, I appreciate the magnitude of the current budget shortfall. It may be tempting to make a blanket policy stating that the City must only use Open Source software to save money. On the surface Microsoft Windows, for a typical server machine configuration costs approximately $6,000. Linux costs nothing. Surely Linux is cheaper. Isn't it?

On the surface it appears that way. But once you dive into the details you will see that Open Source is not free and that while it may have a place in your organization as well as mine when the technology deems fit, there should be no blanket “Open Source” only policy. This is a policy I would strongly urge the council not to spend any taxpayer time considering. Here is why.

A benchmark recently performed by the non-profit TMC (www.tmc.org) compared a Linux machine running IBM’s middle tier software WebLogic/ WebSphere compared to a Windows Server machine running Microsoft middle tier software .NET. At this moment in time there is no viable open source “middle tier” component to compete with the IBM or Microsoft offerings. Just a technical note, the middle tier is what makes your custom applications work: the web server, the application server, the runtime environments and the programming languages.

The TMC broke down the cost of the server machine into three components: the hardware, the operating system (Windows or Linux), and the infrastructure (.NET, WebLogic, or WebSphere). Since the hardware was the same in all benchmarks, the differentiating costs were due to the operating system and the infrastructure.

It turns out that the cost of the operating system is relatively insignificant in the overall server costs. Of the total WebLogic server cost of $76,990, only $5,990  was attributable to Windows. Of the total WebSphere server cost of $84,990, again, only $5,990 was for Windows. In neither case was the cost of Windows more than 8% of the total server cost.

However the use of Linux does have one dramatic cost consequence. It eliminates the possibility of using .NET as the application server infrastructure. Since Linux does not have a comparable infrastructure, the use of Linux thus dictates the use of either WebSphere or WebLogic. While you are paying for Windows Server, the middle tier is built right into it so the costs of the middle tier are quite low when factored in as part of the cost of the Operating System.

While the cost of the operating system is relatively insignificant in the overall server cost equation, the cost of the infrastructure is not at all insignificant. WebLogic costs $40,000. WebSphere costs $48,000. This is as much as the server hardware! .NET, in contrast, cost nothing. It is part of the Windows operating system. The bottom line is that in order to save $5,990 of operating system costs, one must lock oneself into a "free" operating system that will require an additional $40-48,000 for server infrastructure!

TMC did not include the cost of the database in their benchmark cost analysis. This was a rather odd decision, given that the database is just as critical to this benchmark as is the operating system or the infrastructure. Had TMC included the cost of the database, the cost analysis would have further favored .NET, given that Microsoft SQLServer is much less expensive than either Oracle or DB2.

I am not advocating the use of Microsoft .NET over IBM or Windows over Linux, what I am saying is that the cost of open source software is not free, and for enterprise wide applications not even less expensive then a comparable non-open source platform.

When I was the CTO of Zagat Survey I had to do similar analysis. Preparing for an IPO, we were not scalable in our web site costs. Meaning that as the total amount of users went up, the cost per user was not going down. I was being pressured by the Board of Directors, one of which was the founder of Sun Microsystems to use the Linix/Java/J2EE approach on our Web Site. When I came in as CTO I inherited a site running on the open source platform using the Java platform. The site had cost us $650,000. The problem with the site was that for what we paid for we got only the “bare bones”, the vendor told us to increase traffic a factor of 10X, we would have to spend an additional 5 million dollars. My own analysis supported this view as did the Venture Capitalists who invested 34 million dollars in the company. In addition the total cost per user would go UP, not down!

I concluded after months of research that I can increase traffic by 20x and decrease the total cost per user by 1000% by not using open source technology. In a meeting on June 13th, 2000 with the board of directors I justified my approach based on my open source analysis:


“Everybody knows that we must have scalability if we are to build a web site that we can go public with. Surprisingly, very few people have any idea what scalability actually means. I consider a system to be "scalable" if we can add more workload to the system without increasing the cost of the system per unit of workload. The common unit of workload for a web site system is a transaction. If the commerce system is an on-line store, then the transaction equates to an actual sale. If the commerce system is a bank, then the transaction equates to a banking transaction. In the case of Zagat.com a transaction is a pure database read, which is almost each and every page.”

I went on to conclude that the June 2000 version of our web site which cost $650,000 broke down after 300 concurrent users (nobody denied this, this was the reason why I was before the BOD.) I proposed a “Microsoft” solution for 1.2 million dollars, not the 5 million. William Ford of General Atlantic Partners said to me, never have I offered a CTO 5 million dollars and he came back ask said he only wanted 1.2.

I got permission to build the site and as development took place from July to December 2000, Zagat’s needs grew, so we had to add capacity. We spent only $300,000 over our budget of 1.2 million (compared to 5 million) and achieved 20x user base and 1000% decrease in cost per customer. In December 2000 the site launched and has not been “down” since. That is 2.5 years of uptime for a real cheap price tag.

Exhibit 1. Total Cost Per User at Zagat.com

Total Cost Per Customer






June 2000 (Java)


December 2000

Future Plans











Human Resources










Total System Cost (Annual)





Max Simultaneous Customers





Total Cost Per Customer






The Open Source community is dynamic and exciting. There are pieces of my architecture both at Zagat and at Corzen where I use Open Source products (SendMail for instance). I would like to conclude with a warning. Unix was plagued by different “flavors” and “distributions” that dramatically increased TCO. This fragmentation is now occurring in the Linux space. Take a look at this quote:

"’Enterprises now realize that they are writing to a distribution, not to Linux in general. What works on Red Hat Advanced Server will not work on SuSE Linux,’ Schwartz [Sun's executive vice president of software] said. ... There is little doubt that the notion of ‘Linux and free have gone away. Red Hat's pricing model now makes that clear,’ he said.”

-          Sun Drops Its Linux Distribution, in eWeek, March 28, 2003By Peter Galli http://www.eweek.com/article2/0,3959,981455,00.asp

I would like to thank the council for taking the time to hear my testimony today.




posted on Monday, August 18, 2003 12:10:55 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [4] Trackback
# Sunday, August 17, 2003

The Big E

So many people have asked many different types of questions about my trek up Mt. Everest (starting after TechEd on August 30th) that I decided to do a brain dump here. Ken Getz's sister asked two important questions here:

* How do people go to the bathroom when tied down to sleep on the mountain?

* How do people cook stuff up there? Like how do they boil water for coffee? Is there like a platform to cook on?


My answer:

Well you are not actually tied down, the tent is “tied in” to an anchor so if there is an avalanche or massive wind, the tent doesn’t blow away. So here are the options: 

  1. There is the notion of a “pee bottle”, I can leave it at that. J
  2. If you have to do the other, you can just go outside and risk it, but if the wind is strong and there is a really high grade of steepness, you can put on your harness and rope on in to an anchor.  

Cooking is always a challenge at high elevation. At the lower elevations you use portable camping propane stoves that porters or sherpas carry. At higher elevations, it gets really hard to cook with propane over 18,000 feet (the magic elevation for a lot of reasons since at 18,000 there is exactly ½ the oxygen in the air then at sea level. This is why most major base camps for major mountains are at  <18, 000, Everest is at 17,600 for example.)  So you don’t cook much over 18,000 feet, but at the same time you also don’t spend that much time at that elevation, you really use base camp as a “base” not because it is on the base of the mountain. You eat a lot of packaged foods and energy bars. Usually for coffee/tea at higher elevations, you use a thermos. We have some thermoses that can keep coffee/tea hot for 24 hours. 

I bet you also want to know how to shower and clean our clothes. Clothes are simple, we boil water and then when it cools wash our clothes in a bowl each night and hang it do dry, we wear the “quick dry” athletic gear so it dries overnight. Showers just don’t happen, so we wash also with those bowls and at lower elevations set up a little “wash area” like in the military and shower under a watering can type of thing.  

What is funny is that a lot of people walk around base camps in their underwear and flip flops during the day-because they are doing laundry, I know I always do. If you hike fast and get there in the afternoon, it is warm and your clothes are sweaty. If you want to sleep in clean clothes (no time for laundry in the AM before hike), you have to wash in the afternoon and hang all afternoon. So a lot of people wash everything they have dirty, including the clothes on their back.

Also, Kevin and I are going with Wally Berg, super famous Everest dude (see his world famous NatGeo photos here. He is also getting married on the trek at Namche Bizarre, look for my photos and bolog entries after the trek.) Wally has summited about 6 or 7 times and was the guy who took the GPS up in 1989 and they reevaluated Everest's height based on his readings. Wally's recomedation gear list besides the ice axes and crampons type stuff for us to bring are:



q       Running Shoes  - for travel & easy walking

q       Hiking Boots - leather with sturdy mid-sole and a vibram sole. ½ or ¾ shank, boots should be warm and fit well over light and heavy sock combination.  Fit is much more important than brand.  Take time to select a pair that fits, and break them in well. (Asolo, Merrill, Scarpa Delta M-3, Sportiva TRK)

q       Gaiters – Short, simple gaiters are best (Outdoor Research Rocky Mt. Low) Gore-Tex gaitors are not necessary.

q       Sport Sandals – Excellent in camp during evenings when worn over wool socks, Perfect for living in tea shops, Sherpa lodges and for visiting monasteries.  (Teva)

q       Down or synthetic camp booties - optional luxury, any brand with thick foam soles

q       Lightweight Socks - 3 pairs Synthetic/Wool Blend (Bridgedale, Patagonia, Wigwam, Fox River)

q       Heavy Socks - 3 pairs Synthetic/Wool Blend (Smartwool, Bridgedale, Wigwam, Fox River)




q       Lightweight Pants - 2 pair (any brand Supplex or “stretch woven” pants).

q       Lightweight Long Underwear Top  - (Patagonia Capilene, REI, Mountain Equipment Co-op)

q       Midweight Long Underwear Top - Zip T- neck design is good. Light colors are better for tops because they are cooler when hiking in direct sunlight and just as warm as dark colors when worn underneath other layers.  (Patagonia Capilene, North Face, Mountain Hardware). 

q       Lightweight Long Underwear Bottom  - dark colors are preferable. Patagonia Capilene, REI, Mountain Equipment Co-op.

q       Midweight Underwear Bottom - dark colors are preferable because they do not show dirt (Patagonia Capilene, REI, Mountain Equipment Co-op). 

q       Briefs - 4 pairs synthetic or cotton.  Running shorts also work well for underwear.

q       Short-Sleeved Shirts - 2 synthetic; most nylon running shirts or athletic shirts work.  (North Face Tek Ware, Patagonia Tech Dri, or any brand of PowerDry).

q       Fleece Pullover or Full Zip Jacket-  (Patagonia, Mountain Hardwear, ArcTeryx).

q       Fleece Pants -  Polartec 100 or 200  A good alternative for fuzzy fleece for this layer is Mountain Hardware Chugach Pants.  (Patagonia, Mountain Hardwear, ArcTeryx). 

q       Down Insulated Jacket - Medium Weight, Hood Recommended. (Marmot, North Face, Mountain Hardwear).

q       Waterproof/Breathable Jacket & Pants - jacket must have hood, pants must have full-length side zips (ArcTeryx, Marmot, Mountain Equipment Co-op).




q       Liner Gloves—Lightweight Synthetic (Patagonia Capilene or any brand of PowerStretch).

q       Windstopper Fleece Gloves – (any brand of Windstopper fleece).

q       Mittens w/ pile liners - Outdoor Research

q       Bandanna -Traditional Cotton, 2 or 3.  Very important item, large size is best.

q       Sun Hat - any lightweight hat with a good brim or visor

q       Wool or Fleece Hat - any brand of warm hat that can go over ears

q       Balaclava – Should fit underneath your wool or fleece hat or be thick enough to be worn alone. 




q       Sunglasses -1 pair High quality 100% UV 100%IR.  For general use, travel and lower elevations

q       Glacier Glasses - 1 pair High quality 100% UV 100%IR min 80% light reduction, side shields are optional, but size and shape of lens should offer maximum protection from bright light on snow.

q       Headlamp w/ spare bulb - AA or AAA battery powered (Petzl or Black Diamond)

q       Spare Batteries – bring plenty for reading in tents at night




q       Backpack - 2500 cubic inches or more, internal frame. Top opening mountaineer’s rucksack style is best.  Avoid large zipper openings and excessive outside pockets.  Larger packs are better than smaller, because they are easier to pack with cold hands and they distribute loads more effectively. ( Dana, Arc’Teryx,  Gregory)   

q       Sleeping Bag – 0 to negative 10 degree Down 700 fill minimum (Marmot, Mtn Hardwear, Moonstone)

q       Water Bottles - two 1 quart, leak-proof wide-mouth (Nalgene Poly or Lexan bottles) 

q       Pee Bottle – Optional. One 1 quart, leak-proof wide-mouth (Nalgene Poly or Lexan bottles)

q       Pee Funnel for Women Optional (Freshette)

q       Pack Towel - Small or Medium size (PackTowl).  Do not bring “terrycloth”, Bandanas work in a pinch

q       Trekking Poles – Recommended. Useful for going up and down trails of the Khumbu.  (Leki 3-section)

q       Swiss Army Knife - Remember not to leave in carry on bags for any international or domestic flight




q       Sunscreen - SPF 30 or higher, non-oily (Dermatone or Terrapin)

q       LipscreenSPF 30 or higher, any brand

q       Toiletry Kit—t.brush, t.paste, lotion, alcohol-based anti-bacterial hand sanitizer, anti-bacterial soap, comb/brush, shave kit, lighter, small long-burning candle, needle/thread, throat lozenges (bring travel size bottles to keep you kit small)

q       First Aid Kit - ibuprofen/aspirin, assorted band-aids, moleskin, little of hydrogen peroxide, Neosporin-type suave, Nu-skin spray, small gauze pad, roll of adhesive tape, tweezers, safety pins, small bottle of water purification tablets. Include any prescription travel meds that might be prescribed by your doctor. (Antibiotics, diamox, malaria meds, sleep aids)

q       Large Trash Compactor Bags For waterproofing some items inside your duffel.

q       Zip-loc bags  - always useful

q       Baby wipes

q       Earplugs  - Very useful for sleeping in tent and lodges. Available in most hardware stores.




q       Expedition Duffel Bag – Important.  Large one with strong zippers.  Wild Things “Burro Bag” North Face, Eagle Creek, Patagonia Black Hole.

q       Small Travel Bag – or second duffel bag.  For storing travel clothes and personal items at the Hotel in Kathmandu

q       Nylon Stuff Sacks – 2 or 3, for organizing, light colors preferable for labeling

q       Clothes for Kathmandu and International Travel 2 –3 three changes depending Comfortable simple travel clothes.  Evening in Kathmandu can be slightly cool in autumn and spring.  Bangkok is very hot.

q       Work-out clothes and/or bathing suit simple and versatile, for hotels

q       Passport Belt/Pouch

q       Small Padlocks - for locking duffel bag(s)

q       Book(s)

q       Journal

q       Camera

q       Film Be sure to keep in your carry on luggage, in clear zip- lock bags so that it can be inspected.



posted on Sunday, August 17, 2003 3:45:23 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [4] Trackback
# Saturday, August 16, 2003

I am sitting in my office at Corzen in Union Square, having just brought the servers back up. It has been a long 40 hours or so.


Thursday 4:11 pm. Corzen’s Office @ Union Square


I am oddly sitting in the server room working on a staging server when all the Uninterruptible Power Supplies (UPSes) start to chirp. I know that only badness will follow. About 30 seconds later, the power goes. Everyone is calm since we are in a very old and has a power outage every once in a while. So my business partner and Corzen’s CEO, Bruce Murray and I decide to go and get a few beers at the local bar to wait it out.


Thursday 5:00pm. Park Bar @ Union Square

As more people start to filter on in the bar, we realize that this is bigger than we thought. At first we thought it was just local to our building, then our general area, but then we heard about Canada and such. We immediately thought terrorism (we are New Yorkers) and ran back to the office and plugged a TV into a UPS and saw some CNN. We decide to all walk home, Bruce and Bob Plummer (our director of Indicator Services) both live in Brooklyn, so they left for a 5.5 mile walk over the Brooklyn Bridge.


Thursday 6:30pm. West 57th Street

I finally get home. Being the CTO, I was the last to leave the office and it only took about 45 minutes to walk home. Since it was mobbed with people and about 94 and humid, I was drenched. (I also had tix for a bway show that night, so I was dressed not in my typical shorts and tee shirt.) I peeled off my clothes and showered with all the windows open in my apartment for light. After my shower I was making some phone calls to my teammate Tom Halligan (who was in Long Island WITH power) and his wife stuck home on 11th Avenue without power and my buddy Richard Campbell in Canada for information. I get hungry around 8pm and go out to look for some food.


Thursday 9:45pm. East 89th Street

So my quest for food brings me to the east side where I actually hook up with my running partner and walk her home (she was walking home alone and I had a flashlight.) After I drop her off I walk down 5th avenue, all along Museum Mile and to my disbelief, I see stars! Yes total constellations, like I was in the woods. I can hear the crickets in Central Park. It was so strange just walking home in such darkness. When I mean pitch black, I mean pitch black. When I get home to my building there was a little party going on, cheese and wine set up, and chairs. Talked about my Everest trip with my building owners (who are Everest junkies and climbers themselves) and I helped a bunch of people up the stairs with my flashlight (good Everest training.) When I was done, I climbed the 14 flights to my apartment and went to bed.


Friday 4:14am. West 57th Street

I was awaken by the sounds of the power turning on! I turned on my AC and thought that the worst was over.


Friday 6:00am. Engineers Gate, Central Park

My running partner arrives and she is still without power. The whole east side of Manhattan is still without power. We run and it is nice and cool. When I get home I realize that just about 75% of the city is still without power. My phone goes out and the cell phone is spotty, very spotty. Bruce calls me and said that power is still not back in Union Square, don’t even think of coming in until it is. So I do laundry, clean my apartment and pack my bags for my Everest trip in the comfort of my air conditioning (I feel very guilty, but it was HOT).


Friday 4:00pm. Central Park South

I just completed a 30km circuit in 57:04 on my OLD bike. This was by far the best time I have ever had. Some friends come on over (who STILL don’t have power) and a good time is had by all. Total power is restored to the city by late evening. The subways still don’t work.

Saturday 12:00pm Corzen’s Office @ Union Square

The subways are open and I get down to the office and brought the servers back up. Life is back to normal.

posted on Saturday, August 16, 2003 7:46:54 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [1] Trackback
# Thursday, August 14, 2003

You can go home again…


Tonight was a major homecoming, for many reasons. I was born in Flushing, Queens and spent the first 18 years of my life four miles from Shea Stadium, home of the New York Mets. My late Grandfather took me to my first Mets game in May of 1977 (a loss against the San Diego Padres, I still have the ticket.) I also worked for the Mets as a stadium vendor from 1987 to 1994. So I have been to at least one Mets game every year since 1977, and from ’87 to ’94 I must have worked over 500. Tonight was my first and only game of this season. So as my pal Kyle and I traveled on the 7 train to Shea tonight to watch the Mets take on Barry Bonds and the San Francisco Giants it was a bit of a homecoming for me.


But despite what my teammate Tom Halligan says, this blog is not all about me. Tonight was a very special Mets game for Mets fans. Superstar Mike Piazza officially came off the disabled list after missing the last three months of the season. So tonight was Mike’s homecoming and first game as a Met since early May.


Let’s just say that this game was one of the best games ever. I have never seen Mike Piazza hit a home run and most of the games I go to the Mets lose. Not tonight. Mike hit a 2 run home run and two singles for 5 RBIs in his first game back. The place went wild.


In addition to killing the first place SF Giants 9-2 tonight, there was insult added to injury. Pitcher Steve Trachsel hit an RBI double! That never happens non-baseball fans. Steve also pitched 7 2/3 solid innings.


But wait there’s more. Smart ass Barry Bonds (how dare he compare himself to Babe Ruth) had a horrible night. He actually got a hit but was tossed out trying to stretch it to a double. Then in the 8th inning, they pinch hit for him! I think that the last time someone pinch hit for Barry was in 1986.


The only bad point of the game was at the 7th inning stretch when RD Mom Eileen Crain called to tell me that Scott Hanselman and myself are in trouble due to some emails we sent on a private alias. I told her that she should chill out (which made her more mad) and had to call Scott to tell him the deal and then he called her and then I called her when I got home. We all love each other again, but I think it is kind of funny that news can travel so fast, from Redmond, to Flushing to Portland in a matter of 2 minutes without the aid of a computer.


Homecoming was fun and congratz again Mike.

posted on Thursday, August 14, 2003 3:40:28 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [1] Trackback
# Wednesday, August 13, 2003

Ready for Tech*ED Malaysia


Next Friday I leave for Tech·Ed Malaysia held in Kuala Lumpur. This is the last major conference (and last TechEd) of the year for me.


We have a bunch of Regional Directors speaking:


Adam Cogan (Australia)

Tim Huckaby (US-San Diego)

Clemens Vasters (Germany)

Scott Hanselman (US-Portland)


Looking forward to some geek talk and time in KL with some of the other speakers and RDs. Looking forward to catching up with my buddy Adam Cogan, haven’t seen him since Dallas, far too long. I will get Scott Hanselman to do some drinking this time, no more lame crap from you Scott. Also looking forward to hacking some das Blog with Clemens while in KL (We will party too and his girlfriend, Pat, owes me a favor!)


I just got my machine all ready to go. Here are my sessions, the Stored Procedure session is the last time I talk about The Rozenshtein Method this year (and maybe forever if they let me talk about Yukon next year):

ASP .NET DataGrid Drill Down
Track: Developer Tools & Technologies   Code: DEV203
Room: Tun Dr Ismail A   Time Slot:
Tue, August 26 12:00 PM-1:15 PM
Stephen Forte
The ASP.NET DataGrid is an incredibly powerful and timesaving server control. Compared to "classic" ASP, with just a few lines of code you can load it with data from any data source. Formatting is accomplished by setting just a few properties. Gone are the days where you had to write lots of complex code to filter, sort and page through your data. In-place editing is also a breeze. This session will show you how easy it is to use the ASP .NET DataGrid and accomplish powerful .NET grids without sacrificing any flexibility and functionality.
.NET CF Database Development with SQL Server CE 2.0 ROI

Track: Enterprise Data Management   Code: EDM207
Room: Tun Hussien Onn A   Time Slot: Wed, August 27 4:00 PM-5:15 PM
Speakers: Stephen Forte
The decision to build an embedded application has been made. In today's environment, Return on Investment (ROI) so important that it is now a main decision making factor in deciding what platform to use. Choosing the platform that your developers can leverage their existing skills and code to build something on time and on budget is more important than a cool new language or feature. We will look at a case study of a .NET CF PocketPC application build for Professional NFL Scouts using SQL Server CE 2.0. See the ROI decisions for justifying the development effort, training the developers, leveraging current ADO code and libraries and maintenance decisions along with lines of code comparison to the other embedded tools.

Efficient and Secure Data Retrieval in Your Middle Tier Using Stored Procedures and ADO. NET.

Track: Developer Tools & Technologies   Code: DEV206
Room: Tun Dr Ismail A   Time Slot: Wed, August 27 5:30 PM-6:45 PM
Speakers: Stephen Forte
Using Stored Procedures is more efficient, secure, and easier to maintain than using in-line SQL in your application's middle tier. In this session we will look how to optimize using Stored Procedures for efficient and secure data retrieval in the middle tier of your web, windows, mobile and web services applications.

Using Regular Expressions in Windows Forms and ASP .NET

Track: Developer Tools & Technologies   Code: DEV315
Room: Tun Hussien Onn A   Time Slot: Thu, August 28 10:30 AM-11:45 AM
Speakers: Stephen Forte
Regular expressions, although popular in Perl and other UNIX/C-like languages, are unintelligible to those not familiar with them. Regular Expressions provide an incredibly powerful and compact way of matching and replacing text. Once you become serious about .NET, you'll find Regular Expressions staring you square in the face. They're there and they are very important, but the .NET documentation doesn't help much in learning about Regular Expressions and how to work with them in .NET. This session will introduce you to RegEx, using RegEx as data validation and manipulation.

posted on Wednesday, August 13, 2003 2:46:01 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0] Trackback
# Tuesday, August 12, 2003

Strategic Inflection Point


Andy Grove, in his bestselling book, Only the Paranoid Survive, describes the nightmare moment every leader dreads--when massive change occurs and a company must, virtually overnight, adapt or fall by the wayside-- a “Strategic Inflection Point.” The arrival of the Internet was one such Strategic Inflection Point in the tech industry. I think that we are at another.


The Strategic Inflection Point is for consulting firms today and the issue is outsourcing off shore. Large companies are outsourcing almost their entire development work offshore. JPMorgan Chase just announced 50% of its IT will now be offshore (that is oh about 4,000 development jobs). I am not going to make the case for or against outsourcing, since it is happening anyway, apparently if you have a convincing argument against is, nobody is listening to it. So why fight it, it is happening and the jobs are not coming back (at least not to New York). This is why I left consulting in July 1999.


But wait, there is still money to be made in the contractor role. First let’s say that you are running a consulting shop today and are feeling the pinch of outsourcing. Let’s look at the notion that it takes 30% of the development effort to design the application, 30% to code, 30% to test and 10% to physically implement.


I always say that the strategic advantage you bring to the table in the 30/30/30/10 universe is the design. That is the MOST important phase of any project-period.  (Don’t make me go Steve McConnell on you!) What if you set up shop to do the 30% design and 10% physically implement?  You can make the case to do the design locally and then work with the outsourcers offshore to code and test. Set up a strategic partnership with several off shore players. Or better yet set up a JV. You can then take on a project management, relationship management and architecture guidance role. I have worked with overseas outsourcing and they tend to follow specs to the letter, so if your potential customer has made the decision to outsource overseas, they will be more inclined to do the design work very seriously.


Just an idea…

posted on Tuesday, August 12, 2003 8:24:02 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0] Trackback

Mount Rainier called a threat

What were we thinking?


posted on Tuesday, August 12, 2003 2:20:22 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [16] Trackback
# Monday, August 11, 2003

The age old question. If you ever saw one of my TechEd sessions or WebCasts, you know that I am a big fan of using the DataReader, especially when you are doing Web DataBinding. I am all about the firehose, forward only cursor. Today I actually replaced a DataReader with a DataSet, so I think that I need to tell the world the story. J


So my app that runs each Sunday morning to get data over HTTP and regex out stuff was bogging down. What happens is that I have a DataReader on the client that grabs the URLs, RegEx patterns, etc from a table for the main application “loop” to process the URLs and save the data to the database. There are about 30,000 records stuffed into the datareader and the stored procedure that powers it has to do a join to the table I am adding data into on each iteration of the loop to make sure that if the process stops and restarts, I don’t reprocess any duplicate URLs.


So all of a sudden (this code has been in production for 15 months, and on .NET 1.1 for 4 months) I started to get timeouts when I read data from the DataReader. Randomly this would happen, maybe once ever few weeks. I never really tracked it down. So this week I would run the process and every 10th record would cause a timeout. It was a timeout when I tried to read data from the next row in the DataReader, on the 10 row. I start and stop and this happened a zillion times. I spent a few minutes playing with some settings, etc, but more of the same. Oddly enough, setting the command behavior of the command that filled the reader to SequentialAccess did not even let me read data from the first record, it returned an error saying that it can only look at data starting at the 10th row.


I have not discovered the problem here, but it must have something to do with the buffer, I must have been stuffing way too much data in there. So I said DUH, let’s use a DataSet. Well I never looped through a DataTable before, so here is how it goes:


Private void DataTableLoop (DataTable dt) {


   foreach (DataRow dr in dt.Rows) {

      foreach (DataColumn dc in dt.Columns) {

         Response.Write (dr[dc] +”





posted on Monday, August 11, 2003 3:54:28 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [4] Trackback


That was my triathlon time today! I am very happy. Teammate Andy Catlin got out of the water a few seconds before me (we both were at 15 minutes) and we had a hard transition (lots of rocks, and the bikes were far from the water). The bike was brutal (55 minutes). Almost all uphill, about 75% of the bike was uphill.  We had a 4 mile downhill at one point that was so super steep hill-I hit 47 miles per hour! That is almost as fast as a car… Transition from bike to run was not that bad. The run was hard, but ok, about 25-26 minutes. Andy finished about 5 minutes behind me, way to go dude…

posted on Monday, August 11, 2003 2:19:29 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0] Trackback
# Saturday, August 9, 2003

Radio Uninstalled

Radio is completely off my machine. This is good since it was slow and clunky.

This is a day of liberation for Clemens and I. We are now using our Radio subscriptions just to upstream our RSS feeds to the Userland cloud dasBlog. Very cool. So now all the folks who have not resubscribed can still see the feeds at Radio, but please please please subscribe to the new feed.

What is funny is the Clemens said he did not have enough time to document everything, but his documentation is much better than Radio's! Besides my forthcoming cache code contribution to dasBlog, I have to say that Clemens rocks the house, so buddy, I owe you a few beers when we are in KL next week speaking at Tech·Ed Malaysia.


posted on Saturday, August 9, 2003 11:17:06 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0] Trackback

Taper Day


Today I do nothing but sit at home, drink drink drink water and eat pasta. Tomorrow is the big race.

Last night I went out with some buds, including Rob Wlodarczyk who leaves for a job at the Evil Empire on Tuesday.

posted on Saturday, August 9, 2003 6:42:06 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [2] Trackback
# Friday, August 8, 2003

Overcome Parkinson's Law


Parkinson’s Law is taking over. The basic thesis of Parkinson is: ‘Work expands so as to fill the time available for its completion.’


So I have called a meeting to discuss 1 small bug, should take 5 minutes, but call the meeting for 30 minutes. The meeting will last 30 minutes!


Further explanation from Parkinson:


“General recognition of this fact is shown in the proverbial phrase 'It is the busiest man who has time to spare.' Thus, an elderly lady of leisure can spend the entire day in writing and dispatching a postcard to her niece at Bognor Regis. An hour will be spent finding the postcard, another in hunting for spectacles, half an hour in a search for the address, an hour and a quarter in composition, and twenty minutes in deciding whether or not to take an umbrella when going to the pillar box in the next street. The total effort that would occupy a busy man for three minutes all told may in this fashion leave another person prostrate after a day of doubt, anxiety, and toil.”


So this has a lot to do with being efficient. Overcoming Parkinson’s Law is one the most liberating things that you can ever do. A big problem I have with meetings today in corporate American. They last forever and never accomplish anything. I hate when someone calls a meeting and there is no clear reason for it and then says “Stephen why don’t you start off the meeting.” Argh. So I put an end to this. Now my new rules for meetings are (and if they don’t meet this criteria, I don’t attend the meeting, unless the person calling the meeting is “important” J):


1.         No meeting lasts more than 45 minutes

2.         All meetings are "stand-up" meetings, nobody sits down

3.         There are no meetings without an agenda

4.         No meetings should have any food or drink allowed in them

5.         No meetings at odd hours: 5pm, obvious lunch times, etc


When I was CTO over at Zagat, I also instituted a meeting free Friday, something that you may want to try at your place too. I got away with it by sending an all day meeting invite to my entire staff called “Staff Meeting” that had a recurrence on every Friday and then when other people used Outlook/Exchange to schedule a meeting, they were always booked on the Friday!!!


Even if you can’t control the 5 items above, you can always ask the meeting organizer to circulate an agenda before the meeting, this will get them thinking more efficiently!

posted on Friday, August 8, 2003 2:32:11 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [19] Trackback

Up with das Blog 1.1!

I am now up. If you are upgrading from 1.0 to 1.1, make sure you read the notes.

Time to work on the cache engine, Clemens has challenged me :)

[08:32] Peakbagger: :I am up now dude. :)
[08:32] Clemens (viel zu warm!): should work much better
[08:32] Peakbagger: looks pretty smooth
[08:33] Clemens (viel zu warm!): now... make it faster
[08:33] Clemens (viel zu warm!): ;)
[08:34] Peakbagger: that I can do


posted on Friday, August 8, 2003 12:51:22 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [13] Trackback
# Thursday, August 7, 2003

I have to admit that I am totally hooked on the The Rozenshtein Method. My buddy, Richard Campbell showed it to me a year or two ago and I have been hooked ever since. I recently demoed it at TechED in Dallas, a recent WebCast, VSLive in New York and will be showing it off at TechEd in Malaysia next week. I have gotten lots of email and positive feedback so I decided to blog it here.


Here is how it works. You need a crosstab query.  You have to move rows into columns. You also need ANSI 92 SQL that will run in any database.Well there are several ways to do this, but the most generic and one of the most powerful ways is called the Rozenshtein Method, which was developed by the Russian mathematician David Rozenshtein. This technique was taken from his book: Optimizing Transact-SQL : Advanced Programming Techniques.


First let’s look at the desired results. We want to take the orders data from Northwind and pivot the sales date (aggregated by month) as columns with the sum of the total sales in the row grouped by customer. It would look something like this:


CompanyName TotalAmount Jan Feb Mar…(etc)

Company1        100              25 33   10

Company2           467                 76 62    87



The TSQL query to do this is, go ahead and run it in Northwind in SQL Server:


SELECT  CompanyName, SUM((UnitPrice*Quantity)) As TotalAmt,

  SUM((UnitPrice*Quantity)*(1-ABS(SIGN(DatePart(mm,OrderDate)-1)))) AS Jan,

  SUM((UnitPrice*Quantity)*(1-ABS(SIGN(DatePart(mm,OrderDate)-2)))) AS Feb,

  SUM((UnitPrice*Quantity)*(1-ABS(SIGN(DatePart(mm,OrderDate)-3)))) AS Mar,

  SUM((UnitPrice*Quantity)*(1-ABS(SIGN(DatePart(mm,OrderDate)-4)))) AS Apr,

  SUM((UnitPrice*Quantity)*(1-ABS(SIGN(DatePart(mm,OrderDate)-5)))) AS May,

  SUM((UnitPrice*Quantity)*(1-ABS(SIGN(DatePart(mm,OrderDate)-6)))) AS Jun,

  SUM((UnitPrice*Quantity)*(1-ABS(SIGN(DatePart(mm,OrderDate)-7)))) AS Jul,

  SUM((UnitPrice*Quantity)*(1-ABS(SIGN(DatePart(mm,OrderDate)-8)))) AS Aug,

  SUM((UnitPrice*Quantity)*(1-ABS(SIGN(DatePart(mm,OrderDate)-9)))) AS Sep,

  SUM((UnitPrice*Quantity)*(1-ABS(SIGN(DatePart(mm,OrderDate)-10)))) AS Oct,

  SUM((UnitPrice*Quantity)*(1-ABS(SIGN(DatePart(mm,OrderDate)-11)))) AS Nov,

  SUM((UnitPrice*Quantity)*(1-ABS(SIGN(DatePart(mm,OrderDate)-12)))) AS Dec

FROM         Customers INNER JOIN

                      Orders ON Customers.CustomerID = Orders.CustomerID INNER JOIN

                      [Order Details] ON Orders.OrderID = [Order Details].OrderID

Group By Customers.CompanyName


So how does this work?


This method uses Boolean aggregates, so that each column has a numeric expression that resolves each row as a zero or one and that value (0 or 1) is multiplied by your numeric expression (Like TotalSales or (UnitPrice*Quantity). That is all there is to it, quite simple. But wait, there’s more to explain:


We want to create columns for each Month in our data. To find a month use DatePart. But we need to subtract the DatePart value (1-12) from the amount you’re looking for (1 for Jan, 2 for Feb, etc) as shown here for January:



So that true = zero, false > 0 or < 0. For example if the month you were looking for was January and the DatePart was 1 and you subtract 1 from that value you get 0, which is true. If you are looking for March you would get -2 and that would be false.


Next you have to compute the sign of the expression and get the absolute value like so:



This will give us a positive value. Remember 0 is still true. Now subtract the value computed from 1 in order to get a 0 or 1 from the value of your expression (the Boolean aggregate). The code is:



For example if you had March return 3 from the Datepart, 3-1=2 and 1-2 =-1. The absolute value is 1. This will always return 0 or 1. If your expression was zero, the value is now one. If was one, the value is zero.


Last step. Taking the SUM of the Boolean values will give you a count of the values that qualify. So you can find out how many sales you made in Jan, Feb, etc. So now multiply the value by the price and quantity, but remember its now one = true. Take a look here:


SUM((UnitPrice*Quantity)*(1-ABS(SIGN(DatePart(mm,OrderDate)-1)))) AS Jan


If its zero, nothing gets added, if its one, you get the value of the sale. The sum of the total expression is the total of sales for the month. If you have a DatePart that is evaluated to 0 then ((UnitPrice*Quantity)*0) is 0 and those results are ignored in the SUM. If you have a month that matches your expression resolves to 1 and ((UnitPrice*Quantity)*1) is the value of the sale.


How easy!


But wait, there’s more! Suppose you wanted two values combined? Compute each value down to zero or one separately. Now you can use AND by multiplying, OR by adding (and reduce to 1 or 0 using SIGN).


Ok, have fun!!!

posted on Thursday, August 7, 2003 8:38:37 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [7] Trackback
# Wednesday, August 6, 2003

The Architect

I think everyone who wanted to see this movie has seen it and it is safe to post this now. I post this in honor of Jack, Kathleen, Jay and all the others last night that told me that they were still plugged into the Matrix:

The Architect - Hello, Neo.

Neo - Who are you?

The Architect - I am the Architect. I created the matrix. I've been waiting for you. You have many questions, and although the process has altered your consciousness, you remain irrevocably human. Ergo, some of my answers you will understand, and some of them you will not. Concordantly, while your first question may be the most pertinent, you may or may not realize it is
also irrelevant.

Neo - Why am I here?

The Architect - Your life is the sum of a remainder of an unbalanced
equation inherent to the programming of the matrix. You are the
eventuality of an anomaly, which despite my sincerest efforts I have been unable
to eliminate from what is otherwise a harmony of mathematical precision.
While it remains a burden to sedulously avoid it, it is not unexpected, and
thus not beyond a measure of control. Which has led you, inexorably, here.

Neo - You haven't answered my question.

The Architect - Quite right. Interesting. That was quicker than the

*The responses of the other Ones appear on the monitors: Others? What
others? How many? Answer me!'*

The Architect - The matrix is older than you know. I prefer counting
from the emergence of one integral anomaly to the emergence of the next, in
which case this is the sixth version.

*Again, the responses of the other Ones appear on the monitors: Five
versions? Three? I've been lied too. This is bullshit.*

Neo: There are only two possible explanations: either no one told me,
or no one knows.

The Architect - Precisely. As you are undoubtedly gathering, the
anomaly's systemic, creating fluctuations in even the most simplistic equations.

*Once again, the responses of the other Ones appear on the monitors:
You can't control me! Fuck you! I'm going to kill you! You can't make me
do anything!*

Neo - Choice. The problem is choice.

*The scene cuts to Trinity fighting an agent, and then back to the
Architects room*

The Architect - The first matrix I designed was quite naturally
perfect, it was a work of art, flawless, sublime. A triumph equaled only by its
monumental failure. The inevitability of its doom is as apparent to me
now as a consequence of the imperfection inherent in every human being,
thus I redesigned it based on your history to more accurately reflect the
varying grotesqueries of your nature. However, I was again frustrated by
failure. I have since come to understand that the answer eluded me because it
required a lesser mind, or perhaps a mind less bound by the parameters of
perfection. Thus, the answer was stumbled upon by another, an intuitive program,
initially created to investigate certain aspects of the human psyche.
If I am the father of the matrix, she would undoubtedly be its mother.

Neo - The Oracle.

The Architect - Please. As I was saying, she stumbled upon a solution
whereby nearly 99.9% of all test subjects accepted the program, as
long as they were given a choice, even if they were only aware of the choice
at a near unconscious level. While this answer functioned, it was obviously
fundamentally flawed, thus creating the otherwise contradictory
systemic anomaly, that if left unchecked might threaten the system itself.
Ergo, those that refused the program, while a minority, if unchecked, would
constitute an escalating probability of disaster.

Neo - This is about Zion.

The Architect - You are here because Zion is about to be destroyed.
Its every living inhabitant terminated, its entire existence eradicated.

Neo - Bullshit!

*The responses of the other Ones appear on the monitors: Bullshit!*

The Architect - Denial is the most predictable of all human responses.
But, rest assured, this will be the sixth time we have destroyed it, and we
have become exceedingly efficient at it.

*Scene cuts to Trinity fighting an agent, and then back to the

The Architect - The function of the One is now to return to the
source, allowing a temporary dissemination of the code you carry, reinserting
the prime program. After which you will be required to select from the
matrix 23 individuals, 16 female, 7 male, to rebuild Zion. Failure to comply
with this process will result in a cataclysmic system crash killing everyone
connected to the matrix, which coupled with the extermination of Zion will
ultimately result in the extinction of the entire human race.

Neo - You won't let it happen, you can't. You need human beings to

The Architect - There are levels of survival we are prepared to
accept. However, the relevant issue is whether or not you are ready to accept
the responsibility for the death of every human being in this world.

*The Architect presses a button on a pen that he is holding, and
images of people from all over the matrix appear on the monitors*

The Architect - It is interesting reading your reactions. Your five
predecessors were by design based on a similar predication, a
contingent affirmation that was meant to create a profound attachment to the rest
of your species, facilitating the function of the one. While the others
experienced this in a very general way, your experience is far more
specific. Vis-a-vis, love.

*Images of Trinity fighting the agent from Neos dream appear on the

Neo - Trinity.

The Architect - Apropos, she entered the matrix to save your life at
the cost of her own.

Neo - No!

The Architect - Which brings us at last to the moment of truth,
wherein the fundamental flaw is ultimately expressed, and the anomaly revealed as
both beginning, and end. There are two doors. The door to your right leads
to the source, and the salvation of Zion. The door to the left leads back to
the matrix, to her, and to the end of your species. As you adequately put,
the problem is choice. But we already know what you're going to do, don't
we? Already I can see the chain reaction, the chemical precursors that
signal the onset of emotion, designed specifically to overwhelm logic, and
reason. An emotion that is already blinding you from the simple, and obvious
truth: she is going to die, and there is nothing that you can do to stop it.

*Neo walks to the door on his left*

The Architect - Humph. Hope, it is the quintessential human delusion,
simultaneously the source of your greatest strength, and your greatest

Neo - If I were you, I would hope that we don't meet again.

The Architect - We won't.

posted on Wednesday, August 6, 2003 10:42:00 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [3] Trackback
# Tuesday, August 5, 2003

Yukon is in LA...

Up to my ears in coding and writing my MSDN Magazine article on Yukon. While NDAs are still in effect, I can let you know that Microsoft has made public the notion of writing a stored procedure in a CLR .NET Language. After hacking around most of the afternoon, I am marking this day down where I got my first CLR Stored Procedure working. Stay tunded to my MSDN Magazine feature story on Yukon that will be on the stands at the PDC.

posted on Tuesday, August 5, 2003 3:56:02 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [16] Trackback
# Monday, August 4, 2003

New mail has arrived...

When I got home today, my brand new custom made Torelli Brianza racing bike arrived at my door. Nohting beats hand made Italian frames. It arrived just in the nick of time since I have a major tri this weekend. Components are a Campagnolo Veloce/Mirage mix. This is a steel frame, I will have this forever. I am in a state of bliss. Now off to the bike shop tomorrow to pick out some nice clipless pedals, a cycle computer and new shoes.

posted on Monday, August 4, 2003 10:45:33 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [2] Trackback

Behind Every Great Man...

Is a great Editor. Just have to send some blog love to Melody Hendricks, my editor for the last 5 or 6 years. We have worked together on over a dozen conferences and maybe 50 magazine articles. Plus she puts up with all of my crap.

Thanks MelHen for making me sound smart in print. Want to edit my blog too???

posted on Monday, August 4, 2003 12:00:52 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [2] Trackback
# Sunday, August 3, 2003

Ready for Mount Everest....

A nice climb up Mt. Rainer (14,410'), this weekend via Paradise and Camp Muir. We are all systems go for Mt. Everest in a few weeks...The altitude was no problem.

Over 7,200' was all snow. And a lot of it. Some cool snowboarder chicks hiked all the way up to Muir at 10,000' to then went on down, I have to go back and do that.

Kevin and I ran up the hill. We covered the run from the snow line at 7,200' to Muir at 10,000' in about 3 hours. (Coming down was less than an hour, virtual skiing.)

I am now publically giving some credit to my running partner Kathleen. She meets me 3 days a week, rain or shine (and it seems to mostly rain), hung-over or not (even if I was the cause of her hangover the night before), and likes to run fast. She also motivates me or rather likes to yell at me when I am dogging it saying things like "How are you going to get up Everest if you can't make it around the loop!" Thanks, I owe you one..

Photos up soon...

(WiFi Internet Access in the Airport rocks!)


posted on Sunday, August 3, 2003 1:51:46 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [17] Trackback
# Friday, August 1, 2003

Preparing for Mount Everest


I am sitting at JFK airport waiting for my flight to Seattle. I have flown into Seattle at least 50 times since 1996 and each and every time I have went to Seattle in my life was to go do work or attend a meeting at Microsoft up in Redmond. Today is something new for me. I am going to Seattle not for Microsoft but for personal reasons. Ok, ok, I am going to drop by campus anyway and do lunch with the “RD Mom”, Eileen Crain, the PM for the Regional Director Program. (lunch doesn’t count) And after spending the week in New York at VSLive! with RDs Andrew Brust, Billy Hollis, Jackie Goldstein, Juval Lowy, and Ken Getz, this does feel like being summoned to the Mother Ship-but no, my visit to campus is completely voluntary. I am in Seattle for personal reasons.


In 29 days, I arrive in Kathmandu, Nepal to begin my trek to Mt. Everest with my pal Kevin Collins (who is the PM for SQL Server CE). Kevin and I are gong to do a high-altitude training run this weekend on Mt. Rainer (14,410'), outside of Seattle. Mt. Rainer is the second tallest mountain (by 54 feet!) in the lower 48. Ok, technically it is a Volcano (and an active one that is!). So it is the tallest Volcano in the continental United States! 


If you don’t hear from me soon, you know where to look for my body! No, don’t worry, while a few people die on Mt. Rainer each year, Joel Check (old Jet database engine Dev who is climbing with Kevin and I this weekend) and I have a tremendous amount of high altitude experience-and know our limits. Also, I can’t die, I have to be home for my teammate Tom Halligan’s birthday celebration on Tuesday. That is going to be a night of sin…

posted on Friday, August 1, 2003 4:57:01 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [3] Trackback