# Saturday, June 14, 2003

New York, NY

Planning a Bike Ride

I hate Los Angles. I don't even know why. I think it is the urban sprawl. Yet I always have fun (sometimes way too much fun) when I go there, which is at least 2 times a year. This year was looking good until Microsoft announced that the Professional Develoeprs Conference or PDC will take place in LA. The PDC is not an annual event like TechEd or other shows, it just happens when it happens, or when new technology is around the corner, so it is special to attend. That said, I boycotted the last one in Fall 2001 since it was in LA and figured I'd do the same this year. But I had way too much fun with and learned too much from my fellow Microsoft Regional Directors in Dallas that I have to attend in LA.

So what does have to do with planning a bike ride you may ask? Well my good friend and fellow RD Ken Getz wants to ride bikes across the country next year. So Tom Howe had an idea to ride from Los Angles to San Diego after the PDC. What a great training and motivational ride for us and Ken. The plan currently is to do it in 2.5 days and take the train back. I want to push Ken to do it in 2 days, but will do whatever he wants in the end. I also plan to top it all off with a surfing lesson from Steve Hendricks when we arrive in La Jolla

posted on Saturday, June 14, 2003 5:07:43 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [11] Trackback
# Friday, June 13, 2003

New York, NY

Long Live TSQL

Why can I never remember the IsNull(foo,0) function in SQL Server. It is an ISNULL or NZ type of function that converts a null value to the item specified, which in this case is a zero. I don't know why I forget this code all the time is that I go back to my Access roots and try to do an NZ() or the Null to Zero function specific to the Access object model. (Old habits die hard!) Well I can usually IM my good friend Al for help, which I did today, but now here is an example of using IsNull in a TSQL string:

update tblSummaryByLocation_WebSublocation
set LocalNewsPaper=IsNUll(LocalNewsPaper1,0)+IsNUll(LocalNewsPaper2,0)+IsNUll(LocalNewsPaper3,0)
WHERE Weekending_ID= @Weekending_ID


I am also sick of using the CASE statement, this code requires me to know something about my data, can' t wait for the Yukon PIVOT keyword:

SELECT     dbo.tlkpWeekEnding.WeekEnding_ID, dbo.tlkpWeekEnding.WeekEnding_DT, dbo.tlkpLocation.Location_ID, dbo.tlkpLocation.Location_NM,
                      dbo.tblLocationSub_WebMapping.WebSublocation_DS,                       SUM(TotalListings) AS GrandTotal, SUM(CASE tlkpServiceProviders.Service_NM WHEN 'Hot Jobs' THEN TotalListings ELSE 0 END) AS HotJobsTotal,
                      SUM(CASE tlkpServiceProviders.Service_NM WHEN 'Monster' THEN TotalListings ELSE 0 END) AS MonsterTotal,
                      SUM(CASE tlkpServiceProviders.Service_NM WHEN 'Career Builder' THEN TotalListings ELSE 0 END) AS CareerBuilderTotal

FROM         dbo.tblData INNER JOIN
                      dbo.trelServiceURL ON dbo.tblData.URL_ID = dbo.trelServiceURL.URL_ID INNER JOIN
                      dbo.tlkpLocation ON dbo.trelServiceURL.Location_ID = dbo.tlkpLocation.Location_ID INNER JOIN
                      dbo.tlkpServiceProviders ON dbo.trelServiceURL.Service_ID = dbo.tlkpServiceProviders.Service_ID INNER JOIN
                      dbo.tlkpWeekEnding ON dbo.tblData.WeekEnding_ID = dbo.tlkpWeekEnding.WeekEnding_ID INNER JOIN
                      dbo.tblLocationSub_WebMapping ON dbo.tlkpLocation.Location_ID = dbo.tblLocationSub_WebMapping.Location_ID INNER JOIN
                      dbo.tblLocationSub_WebMapping_Detail ON
                      dbo.tblLocationSub_WebMapping.WebSublocation_ID = dbo.tblLocationSub_WebMapping_Detail.WebSublocation_ID INNER JOIN
                      dbo.tblLocationSub ON dbo.trelServiceURL.SubLocation_ID = dbo.tblLocationSub.SubLocation_ID AND
                      dbo.tlkpLocation.Location_ID = dbo.tblLocationSub.Location_ID AND
                      dbo.tblLocationSub_WebMapping_Detail.Sublocation_ID = dbo.tblLocationSub.SubLocation_ID

Where tlkpWeekEnding.weekending_id= @Weekending_ID

GROUP BY dbo.tlkpWeekEnding.WeekEnding_ID, dbo.tlkpWeekEnding.WeekEnding_DT, dbo.tlkpLocation.Location_ID, dbo.tlkpLocation.Location_NM,
                      dbo.tblLocationSub_WebMapping.WebSublocation_ID, dbo.tblLocationSub_WebMapping.WebSublocation_DS, dbo.tblLocationSub.SubLocation_ID,



posted on Friday, June 13, 2003 3:25:20 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [14] Trackback
# Thursday, June 12, 2003

New York, NY


MCP Certification Rant


To get certified or not certified, that is the question. An attendee in my C# class on Tuesday at Advisor DevCon asked me as an employer how I feel about Microsoft certifications. In the past I poo-pooed certifications, but the more that I think about it, the more that I think that it is a benefit. Not that studying and passing a test impresses me, but the process of studying for the exams is a great experience. You have to put in a lot of time and effort studying and that says something to me.


So what route do you take? Do you get a lot of letters after you name like Patrick Hynds. As what point do you get no value from MC*.* as Scott Hanselman puts it?


Well I would suggest to developers to take the Microsoft Certified Solution Developer (MCSD) for Microsoft .NET route. It gives you exposure to WinForms, Web, Web Service and Requirements/Architecture exposure. Along with the elective (I suggest SQL Server), that is a great study course.

posted on Thursday, June 12, 2003 9:17:39 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0] Trackback
# Wednesday, June 11, 2003

St. Louis, MO

DevCon is over but it was a success. The past few DevCons have had very low attendance. Not this one. Attendance is on an upswing. Maybe it is an indication of the market. Despite the recent dip in unemployment, I have been sensing a small resurgence in the tech market. While we are not going to return to the go-go 90s .com mania, a lot of jobs have been coming in to the User Group's listserver. This makes me happy since so many friends and colleagues have been struggling for work. I know some really talented developers who have been out of work for over a year. Another indicator is that TechEd last week was a huge amount of people, about 10,000.

“Biking Cross Country”

Ken Getz spoke about potentially riding bikes across the United States. We knew that Tom Howe would also want to do it, so we asked him and now we have a team. We are looking to potentially do this ride next fall (Fall of 2004). This will be great training for me doing this ride to prepare for the Marathon in Antarctica in 2005 and the IronMan triathlon in Hawaii, at some point in my life.

"Its Not What You Know..."

One thing that I realize everything that I speak at a conference is the great friendships that I have with the other speakers. This also extends beyond just enjoying spending time with each other, usually when I need a code example or business advice I call or email a fellow speaker. Usually when one of us has a gig we can't do we call a fellow speaker to pinch hit. This is a great circle of friends and a great resource. It is a very strong and close group, we all trust each other and can work with each other quite well. Last night Ken Getz said that it is very refreshing to spend time with each other besides what I wrote above because we are all very much self-aware of who we are and what we want. I think that this plays into our helping each other, we are all black and white.




posted on Wednesday, June 11, 2003 1:59:15 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [17] Trackback
# Tuesday, June 10, 2003

Las Vegas, Nevada (Speaking at Advisor DevCon)

DevCon is over! As fast as it started, it ended. I did two great sessions today, a repeat of my ADB302: DataGrid session and ADB206: C# for Visual Basic Developers. I had a lot of fun doing these sessions and the evaluations were great so far. I have really moved to C# and it is great to explain C# to other people who are considering moving to C#.

"Confessions of a C# from VB Convert"

I have been programming in VB for about 8 years, so it took a lot for me to mentally make the switch-but once I did, I honestly felt that C# is a more natural language for me. I don't regret all the years I spent in VB, the language treated me very well. But now that I am using C# (and have been for almost a year), I can’t ever see going back. Part of it is ego-you feel like a better programmer since you are using a more “advanced” language, and the perception in the marketplace is that C# developers are more valuable, a recent survey said that C# developers make and average of  $26,000 a year than VB developers. But the other part is the strictness of the language. I am a anal-retentive control freak and C# is an anal- retentive control freak language. That is why I love it so. I use to mock C# and say it was not a good language, but I was WRONG. Sorry to Patrick O’Toole and Conrad Frix who are still the die hard VB holdouts and feel betrayed by my conversion. (The evil Al Cadalzo had to tell them!)

Mike Groh was one of the speakers who attended my session on C# today and he and I spoke at lunch about some of the points that I made in the session. He said that the arguments I made were sound. He likes how C# is so much more compact than VB and thinks that the demos that I have show illustrate that point. I tend to think that C# just forces you to create more tight code than VB. Not allowing implicit conversion and forcing you to use a variable really appeal to me. Some things in VB really piss me off, like OrElse or my #1 gripe using = for comparison as opposed to every other language using ==. An equals sign is for assignment not comparison, except in VB! Ok, enough about C# v VB, at the end of the day it is just a "lifestyle choice". 

"Tumi Bag Obsessions"

All of my speaker friends use Tumi bags. You know that we are silly people and geeking out if we spend about 20 minutes talking about the bags. Ken Getz gave us a demonstration on how to put the bag on, you put your arm through the strap, hold the top handle with your free hand and then pull it over your shoulder to pull the other arm through. At no point is the weight of the contents of the bag on the strap. See we are geeks. No wonder why girls don't hang out with us. :)

posted on Tuesday, June 10, 2003 9:44:07 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [1] Trackback
# Monday, June 9, 2003

Las Vegas, Nevada (Speaking at Advisor DevCon)

Arrived safe and sound in Las Vegas Saturday night. The Speaker Dinner was great at the Star Trek Experience. Sunday was a free day so Tom Howe, Richard Campbell and I took a helicopter tour of the Grand Canyon. It was one of the most incredible experiences of my life. Right up there with sky diving and other goodies.

After the tour we went to the hot tub and talked business. We came up with a few great ideas on how to work together and build value. Richard and Tom are some of my best friends, so I would love to get a chance to work with them. I now am fully convinced of the theory that you have to live outside of the normal parameters of life and put yourself in the situation to create your own opportunities-that is why speaking at these confrences are so important.

Thanks to all of you who came to my session ADB302: ASP .NET DataGrid Drilldown and having a lot of fun. I know I know it is strange that I did not wear shoes, but hey you have not lived until you delivered a session in barefoot. You can download the slides and code from gotdotnet.

posted on Monday, June 9, 2003 2:44:36 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [18] Trackback
# Saturday, June 7, 2003

Las Vegas, Nevada (Speaking at Advisor DevCon)

Wow I was only home for 24 hours. I got into New York in the afternoon yesterday: went to the office, went home to eat, do laundry and unpack and repack. I got up this morning (after sleeping for 10 hours- more than the last few days in Dallas combined) to ride a 40k bike training course with my teammate Tom Halligan. The next round of triathlons comes up in August. I need to get the ball rolling. The training today was good, we did 22 minute 10K splits, about 2 minutes off where I want to be. It was cold and raining (when did New York turn into Seattle?) and a woman's 10K run was also going on so they had to stop us a few times. That was good since I was not as strong as I should have been due to my leg injury last Saturday on the same course (Outer loop in Central Park). Also I did not sleep enough in Dallas, nor was my nutrition in order. I did not get enough calories (not anywhere near my 4000 a day minimum) and my carb to protein ratio was way off. 

Ok, let me address that here, since everyone who I meet asks. I eat 4000 calories a day, minimum. I am trying to gain weight. I am 5'8 and weigh 170 lbs. My body fat ratio is 10%. I want to put on another 10lbs of muscle. I have been working on this goal for over a year (since April 2002) with very slow progress (which is ok, too many people gain muscle too fast). What is happening is that I am gaining muscle and losing fat without any weight change, I went from about 15% body fat 18 months ago to 10% today. I basically lift for an hour a day 3 days a week. I also work on the swimming, biking and running between 6-10 hours a week, depending on my schedule. I am prehaps more obsessive about my climbing, triathlons and trekking than computers.

Ok, it is also time for me to rant about just how much American Airlines sucks. I have flown over 750,000 miles with American in the last 8 years and have well over a million frequent flyer miles in my account. I have so many issues with American, but this is the last straw. Having never written a letter to American in the past, here is a copy of the letter I wrote on the plane:

Saturday June 7th, 2003


To Whom It May Concern:


            I have been a loyal American Airlines top-tier customer for several years now. I am not the type of person to complain and this is the first letter of dissatisfaction I have ever written. A few months ago I received a letter in the mail saying that as a Platinum customer I am entitled to unlimited domestic upgrades when you purchase a coach ticket. With this new benefit in place, my profile on American says to always request an upgrade.

            Today I have a flight from Newark to St. Louis, connecting to my final destination, Las Vegas. I flew American Airlines over competitors who offer cheaper fairs like JetBlue because I can upgrade for free and utilize the AAdvantage program even though I have to connect and spend more money. I was notified that my upgrades went through. When I checked in for the flight, I was informed the fair I purchased on AA.com did not qualify for the free upgrade program and I would have to fly coach. While annoying, this was expected since I have flown domestically several times this year since the program went into effect and have never once had a ticket that qualified. Compare that to other airlines. A friend of mine has status on Northwest airlines and all domestic flights, regardless if they are a “y-class” code or not are automatically upgraded. While this misleading program is a problem, it is not the purpose of this letter.

            I happily move my ticket to coach for the Newark-St. Louis leg but I was told that I was not able to be checked in on the St. Louis to Las Vegas flight since the flight was oversold by 11 tickets in coach and the only way on the flight would be to purchase two upgrade stickers for $100 to keep my upgrade. When I was upgraded, my seat in coach was given away, not allowing me to move down to coach. I asked if there were any people in coach holding a ticket with an upgrade request to free a seat for me. I also asked that since I had Platinum status and have flown 10,000 miles with the airline in the last 2 weeks, would I be on the front of the standby line. This information was never provided to me and the agent said that she could not get it from the system. The check-in agent was in-effect powerless to help me and kept reminding me that this was my fault. When I told her that I have flown over 100,000 miles in the last 18 months and have been an Exec Platinum or Platinum cardholder since 1997, her response was that in order to get to Platinum, I know how the upgrade game works. 

            I find it totally unacceptable that a benefit program is so misleading and then in addition it causes me to have to pay $100 just to make my flight. I usually fly on other airlines a few times a year and have always have had better treatment. In addition, the fact that your agents are unable to help a top-tier customer is a sad state of affairs considering the economic situation of American Airlines. This action has driven me to search for another airline to do business with. I was not asking for a free upgrade (even though it should have been offered), I was more than willing to fly coach, but the system would not allow the agent to work with me, the only two options presented to me were to purchase an upgrade for $100 or be the 12th person on standby for coach.        

            For the most part I have been satisfied with American Airlines in the past, but this action just shows me how American treats a top-tier customer in a situation where it has the power to be a little flexible.



                                                                                    Stephen Forte


posted on Saturday, June 7, 2003 12:08:55 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [16] Trackback
# Friday, June 6, 2003

New York, New York

Looking for Tech*Ed slides and code? If you are one of the 700 people who attended DAT306: Efficient and Secure Data Retrieval in Your Middle Tier Using Stored Procedures and ADO. NET, thanks for the comments and rocking evals! I have read each and every comment, the good, the bad and the ugly. You can download the slides and code from gotdotnet.

Thanks to all who attended DAT233:  .NET CF Database Development with SQL Server CE 2.0 ROI, since this was a case study, there are no downloads. All of you who attended the 5pm session right before the party are troopers. Thanks again!

Tech*Ed's party on Thursday night rocked the house. Smash Mouth was totally awesome last night, they covered "Jump Around" by House of Pain, one of my all time favorite songs. At one point I was with Stan Leszynski, Clemens Vasters, Abdelmalek Kemmou, and Goksin Bakir watching the WallFlowers with a beer in one hand and a cigar in another hand and I said "This doesn't suck."

Back home in New York, for less than 24 hours-leaving for Las Vegas tomorrow for Advisor DevCon. Had to get up at 5am in Dallas to catch a 6:55 am flight. Went to work today and during lunch with my business partner we had a strategy about potential investment. Our goal is to get our valuation up higher with more revenue (which means more work on the product!) so we can make a 20% investment very attractive. We both agree that one of the most important potential investors is our current largest client. It will help us build a better product and understand the needs of our largest user base. All of our customers will benifit.

posted on Friday, June 6, 2003 8:39:40 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0] Trackback
# Thursday, June 5, 2003

Dallas, Texas (Speaking at Tech*Ed)

Tech*Ed is going great. My session had about 700 people in it and my evaluations were super. I have one more session today then party with Smash Mouth and the Wallflowers before I head home tomorrow.


I went off on a rant today about C# v VB. Will this stupid conversation just die? I am sick of it. Basically someone did a project and built the middle tier in C# and the front end in VB .NET and then failed code review at their client since they used VB .NET on the client and VB .NET was not part of their standards. He went off on why does VB get no respect. I wrote:

I am not going to start a C# v VB .NET thread, however, usually when you start on a project you have something called a requirements or design document that states what technology you are using like the OS, service packs, version of the framework, language and 3rd party components. To find out during code review that the client doesn’t want to use a certain language only shows the author’s inexperience as a consultant and his professional immaturity.


Lastly, if you built the middle tier in C#, what valid reasons did they have to do the client in VB .NET? Were these reasons (if they exist) given to the client up front, or were they just sprung it on them at code review (it appears that it was just sprung on them). Hey the client is paying the bills and if they want C#, they get C#. The client has to live with the application.



I will be sad to leave Tech*Ed tomorrow. Ok, ok, the Juval story. I stole the cutout of the cardboard Juval. The web site will have a where's Juval section soon. After some parties, tech sessions and long discussion with my colleagues, I have come to agree with Scott Hanselman’s comment that the colleagues on the speakers circuit and in the Regional Director program are like brothers in a frat-but just a high tech frat. I have had the pleasure to work with a lot of great people over the years, but the people who I have met on the speaking circuit over the last 6 years are some of my closet friends, even if I only see them a few times a year.



Ok and the parties are cool too. At the “bone” last night, I was slam dancing with Brian Randall (those of you won don’t know Brian, he has about 100 lbs on me) and dancing the blues with some good friends,  as Steve Lasker observed:


-----Original Message-----
From: Lasker, Steve [mailto:steve.lasker@immedient.com]
Sent: Thursday, June 05, 2003 2:14 PM
To: MSDN RD List


What else would you expect from Rock Stars? 


As witnessed at several parties around town, RD's Rock in more ways then just on stage presentations.  While the old motto still holds of "what happens on the road, stays on the road", suffice to stay, your fellow RD's are holding up their social presentation skills as well.  Let's just say a certain RD was seen dancing around the roof of a dog treat with many others watching in amusement, as well as jealousy of the attractive counter part.


I'm once again proud to be surrounded by such... well, fun loving people:)



posted on Thursday, June 5, 2003 2:58:20 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [9] Trackback
# Monday, June 2, 2003

Dallas, Texas. (Speaking at Tech*ED)

Recovering from the Regional Director party last night. Did way too much karaoke with Steve Lasker, Jon Box and Scott Stanfield. We had some good fun. I did decide that Scott Hanselman is not as cool as I thought, he backed out on some of my pranks. Clemens Vasters on the other hand is lots of fun and will party hard at Tech*ED in Europe and Asia as well as Africa.

Day 1 of TechED was good so far. Started with a morning run and then attended Adam Cogan's session on SQL Server and hung out and caught up in the speakers lounge. Proctered the SQL CE lab and then head off to a dinner with MSFT SR. VP Paul Flessner. I speak on Wedneday and Thursday, so I need to get my demos up and running!

I rewrote some examples. Here is some code to toggle the color of a cell in a DataGrid based on the data presented:

public void ToggleYellow(object sender, DataGridItemEventArgs e)


if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)


//get the data that is in the current record

if (e.Item.Cells[2].Text == "Sales Representative")


//make the cell yellow

e.Item.Cells[2].BackColor = System.Drawing.Color.Yellow;



Here is a custom sorting routine:

private void SortGrid(object source,DataGridSortCommandEventArgs e)


//SQL String that will be used

string strSQL = "Select * From Customers";

//the Order By

string strOrderBy = "ASC";

//See what the viewstate has for the sortfield and ASC/DESC

if (e.SortExpression.ToString() == ViewState["sortField"].ToString())


//a match, see if ASC or DESC

strOrderBy = ViewState["sortDirection"].ToString();

//now toggle the viewstate for later

switch (strOrderBy)


case "ASC":

ViewState["sortDirection"] = "DESC";


case "DESC":

ViewState["sortDirection"] = "ASC";






//New Field, so it will be ASC by default, so make DESC

ViewState["sortField"] = e.SortExpression.ToString();

ViewState["sortDirection"] = "DESC";


//SQL statement compelted

strSQL = strSQL + " " + " ORDER BY [" + e.SortExpression + "] " + strOrderBy;

//set the grid to the first page before you resort

DataGrid1.CurrentPageIndex = 0;

//call the FillGrid method to rebind the grid w/ new OrderBy



posted on Monday, June 2, 2003 5:40:45 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [11] Trackback