Sunday, October 26, 2008

Southwest Fox, Day 2

After breakfast Saturday morning, I presented my Creating Explorer Interfaces in Visual FoxPro session. This was a fun session to do. I started by discussing the basic components of an explorer interface--a list of items at the left (typically implemented with a TreeView control), properties of the selected item at the right, a splitter control between the two, and a status bar. I then discussed the various problems with the Microsoft TreeView control and presented a class, SFTreeViewContainer, that works around all of those issues and adds additional functionality, such as "go back" behavior. I spent some time showing a data-driven subclass of SFTreeViewContainer called SFTreeViewCursor. The nice thing about that class is you only have to put code in three methods to display any hierarchy of data: FillTreeViewCursor, which fills a cursor with records representing the nodes to load, LoadImages, which loads the images used in the TreeView, and DisplayRecord, which tells the class what to do when a node is selected. From there, I showed additional classes, including SFExplorerFormTreeView, which encapsulates all the common behavior of explorer forms with just a TreeView at the left, and SFExplorerFormOutlook, which includes the Outlook bar control, part of the VFPX Themed Controls project. You can watch a video of how SFExplorerFormOutlook allows you to create a great looking UI for your applications.

I attended Christof Wollenhaupt's Optimizing and Debugging session. Christof explained that it was two sessions for the price of one because optimizing and debugging are often related. He started by discussing the importance of having the right attitude toward debugging. He suggested that unlike fiction novels, code should be boring, with no surprises or tricks. He then said the best line I heard at the whole conference: "If it's cool, fix it." He also presented what I thought was the best explanation for the process of debugging I've ever heard. Christof is definitely a "speaker's speaker"; there were more speakers in his session than any other session I attended. In fact, he showed a form that by simply moving SET EXCLUSIVE ON from the Init method to the Load method prevented the MESSAGEBOX() function from working. Not one of the speakers in the room could figure out how he did it (hint: it involves code in the DataEnvironment and the BINDEVENT() function).

My vendor session for Stonefield Query was in the next time slot. I had a pretty good turnout considering the quality of sessions I was up against (including Toni Feltman's Leveraging .NET using .NET Extender, which I really wanted to see) and had lots of great questions.

After lunch (which was a delicious Italian meal), I presented my Advantage Database Server for VFP Developers session again. Thanks to J.D. Mullin, R & D Manager for Advantage, who sat in on my first session, I had correct answers to a few obscure questions I missed the first time.

I spend the rest of the day catching up on email, blog reading, and chatting with other developers. As we pointed out in the keynote, skipping sessions at a conference is OK, especially if it's because you're talking with other attendees, getting energized with ideas that flow when you have those kinds of discussions.

Here's are photos of the mid-afternoon break:

Southwest Fox 2008 014

Southwest Fox 2008 015

Rick, Tamar, and I took the speakers to Omaha Steakhouse for a dinner to show our appreciation for all of their hard work. The food was much better than last year's dinner and we had a room all to ourselves so we didn't have the noisy environment like we did last year.

Then, the event we waited two years for: showdown at the F1 Race Factory. At the 2006 conference, Cathy narrowly beat Rick and I at indoor kart racing and has been rubbing our noses in it ever since. We tried to go last year but neglected to make a reservation so were turned away. This year, I made a reservation several weeks in advance to make sure we weren't disappointed again. Trash tasking was at an all-time high. Even the sign-up list for those wanting to race was a victim of tampering. Finally, it was time to race. Cathy's car was directly ahead of mine in the pit, so while we waited to start, I gave her a friendly little bump just so she knew I was there. When the smoke cleared 15 minutes later (tire smoke that is; you really squeal tires around the corners), I was the victor, with Rick closely behind me and Cathy a distant fifth, measured by fastest lap time. Measured by average lap time, Rick was first, so he and I took turns on the "first place" podium while Cathy sat hanging her head on the "third place" podium (which she really didn't deserve, but there was no podium for a finish as low as hers). We raced a second time, and Rick Strahl, Bo Durban, and Dave Hanna beat all of us. For overall races, Rick Strahl was first, Bo second, me third, and Rick Schummer fourth.

After we returned to the hotel, we hung out on the patio outside the bar, gloating and regaling the others with our racing stories. I called it a night about 1:00 a.m. because I had to present an 8:00 a.m. session.

No comments: