Sunday, October 26, 2008

Southwest Fox, Post-Conference

On Monday, Rick and Therese Schummer headed for Sedona for their annual "corporate retreat". I also planned to go to Sedona, but my wife Peggy and son Nick didn't arrive until Tuesday, so I spent Monday taking it easy: sleeping in, working on emails, and getting some exercise.

Before they left for home, Tamar, Marshal, and I went to the Desert Botanical Garden near the airport, where we had a great time seeing a lot of varieties of cactus and other desert plants. I picked up a car at the airport, went back to the resort, worked for a couple of hours, then drove Christof to the airport. When I returned, I hung out with Craig Boyd and Bo Durban for a while, who are here for a couple more days working on a project together, then worked for another hour or so before the three of us went out for Mexican.

Tuesday, I picked up Peggy and Nick and we drove to Sedona. Although I've been there several times on day trips, I've never stayed there, and Peggy and Nick have never been to Arizona at all, so we were all really looking forward to a few days there (it was my 50th birthday celebration). We stayed at A Sunset Chateau, a very nice bed and breakfast with a great view of the mountains. We met Rick and Therese and they took us sightseeing to some of their favorite spots around Sedona, then went to a Japanese restaurant for a great meal. Here are some photos of the area around Sedona:

Phoenix 2008 004

Phoenix 2008 005

Phoenix 2008 006

On Wednesday, we headed to the Grand Canyon. On the way out of Sedona, an engine light came on in the rental car, but it was for traction control, which I've had on my car from time-to-time, so I didn't think it was too serious. However, as soon as we got on the highway, I noticed that the engine was definitely lugging; I couldn't get the car to go over about 65 MPH even with the gas pedal floored. Since it was only about 40 miles to Flagstaff, I figured we'd get a replacement car there. Unfortunately, we didn't even make it that far: about 10 miles later, going up a steep hill and passing a slow-moving truck, the engine died and a message said that starting was disabled. It was a little scary trying to get the car off the side of the road with other cars zooming around us, and in fact I couldn't even get the car way all the way out of the right lane. I immediately told Peggy and Nick to get out of the car to be safe and flagged a couple of other cars over to help push it the rest of the way off the road. A nice couple on their way to Flagstaff gave us a ride to the Budget booth at the Flagstaff airport, where the folks there quickly got us going with another car. The rest of the way to the Grand Canyon was thankfully uneventful.

We had a great time at the Grand Canyon. It's one of those places that no matter how many times you go (this was my second visit), it's still awe-inspiring. We stopped at several viewpoints and spent several hours at the Grand Canyon Village. After a long drive back to Sedona, we finished with a very nice dinner at a gourmet pizza restaurant not far from our hotel. Here are some photos of the Grand Canyon. You can't really get a sense of the scale, especially in a photo, but the far side of the canyon is 11 miles away.

Phoenix 2008 010

Phoenix 2008 019

Phoenix 2008 024

We did some sightseeing Thursday, starting with Oak Creek Canyon and Slide Rock State Park. Slide Rock is a very cool place: a natural water slide you can have a lot of fun in. Unfortunately, it was a little too cool to go in the water, so we just enjoyed the vistas while Nick splashed around a bit. We then went to Tlaquepaque, a gorgeous Mexican-inspired village in Sedona full of art galleries and stores. After lunch, we did a bit of shopping on the main street in Sedona, then went on a Pink Jeep tour of Broken Arrow Canyon. Wow, that was amazing. The jeeps went places I didn't think any vehicle could go, including what seemed like nearly vertical inclines and declines. Highly recommended!

Phoenix 2008 037

Phoenix 2008 108

Phoenix 2008 112

We headed back to Phoenix on Friday and mostly took it easy: a couple of hours at Amazing Jake's riding go-karts and rock wall climbing (yes, even me), some pool time, a movie (Lakeview Terrace, with one of my favorite actors, Samuel Jackson), and then a very nice late dinner at Joe's Crab Shack.

Saturday's return home was uneventful, which is my favorite way to travel. All in all, a great family mini-vacation. Now it's time to catch up: it's been two weeks since I've been in the office and couldn't send emails since Tuesday (I had an Internet connection but my mail server would only let me receive, not send, emails).

Southwest Fox Ambassador Fund

At the keynote presentation for Southwest Fox 2008, we announced the Southwest Fox Ambassador Fund. (We actually called it the Worthy Developer Fund, but that name was just a placeholder until we came up with a better one. Thanks to Christof Wollenhaupt for the inspiration for the new name.)

Many VFP developers around the world are providing incredible contributions to the VFP community, such as working on VFPX projects, blogging about techniques and code to do cool things in VFP, or providing exemplary support in various VFP forums. However, for most of them, attending a conference such as Southwest Fox isn't feasible.

The Southwest Fox Ambassador Fund is intended to raise money from the VFP community to allow one (or more, depending on how much is raised) developer to attend next year's conference as an ambassador for the developers in their country. This will give them the opportunity to meet and share experiences with developers attending Southwest Fox and give us the opportunity to learn about VFP development going on in their country.

Geek Gatherings, the organizers of Southwest Fox, are kicking off the fund by contributing the conference registration fee. Also, we held a silent auction at Southwest Fox to start the ball rolling. Between the silent auction and contributions from generous people at the conference, we've already raised over $1,100!

We urge you to consider donating any amount you see fit, small or large, to this fund. Contributions can be sent by check to:

Geek Gatherings, LLC
Ambassador Fund
42759 Flis Drive
Sterling Heights, MI 48314

100% of donated money will go to the travel costs for the ambassador. Not a single penny will be used to cover administrative costs. All time managing the fund and working through the selection process will be donated. No one will be paid for their time. So if you want to donate to the fund, please send a check or we can arrange non-credit card PayPal transaction so we don't have unnecessary discount fees.

Also, let us know if you want your contribution to be public or not. If so, we will include your name in the list of contributors announced at next year's conference.

Southwest Fox, Day 3

I started the last day of the conference by presenting the second instance of my Creating Explorer Interfaces in Visual FoxPro session.I really enjoy doing this session; I get a lot of positive feedback and a ton of appreciative comments afterward. I think this session really hit a sweet spot.

I then attended Rick Borup's Automating QuickBooks with QODBC session. Although I haven't done any work with QuickBooks (either as a user or a developer), there's a possibility I may in the future, so I wanted to see how the QODBC driver can be used to retrieve and update information using normal SQL statements. Once again, a great, thorough presentation by Rick.

I finished the regular sessions of the conference by watching Cathy Pountney present her Customizing Your Vertical Market Application session. Rick Schummer told me it was a don't-miss session for several reasons, and he was right. Cathy started by relaying the bad news (for her) of last night's racing results. She then discussed a strategy for customizing vertical market applications for specific customers that allows you to leave the core code alone (creating a custom EXE for each client would definitely be bad) yet satisfy almost every request for customization. The secret lies in creating hook points throughout your application and using a special customization manager class to handle customized (or new) forms, reports, menus, and other components. However, rather than showing how to customize the vertical market app she works on, she showed a simpler version: a core application with a simple menu, a few forms, and a couple of reports. She then showed customized versions of that application for Tamar, Rick, and I. Of course, part of the core application involved racing results. Since Tamar didn't race, those components were removed from the menu in her version but had customized forms in Rick's and my versions. Throughout the presentation, Cathy threw out little digs, making it clear she's already gearing up for next year's race.

After giving the conference center staff a few minutes to convert the smaller breakout rooms into one larger one, we started the closing session. We thanked the speakers, attendees, and conference center staff, announced the dates for Southwest Fox 2009 (October 15-18, 2009, once again at the Arizona Golf Resort), and gave away the rest of the raffle prizes. We then drew the names of three people who turned in their evaluation forms and awarded them MSDN Premium Subscriptions, each worth almost $11,000.

The last day of a conference is always bittersweet. I'm exhausted from all the work of putting on the conference (and averaging 4-5 hours sleep a night for the past week), energized from the cool sessions I saw and ideas they generated, happy to have spent time hanging out with people I like and respect but only see a couple of times a year, and glad to have met and chatted with some new folks.

After spending an hour or so tidying up the conference center, Rick, Tamar, Marshal, Therese, and I met with conference center staff for a debriefing. Things went very smoothly again this year thanks to the hard work and "get it done" attitude of every staff member. There were even fewer complaints than last year (one being that lunch was a little slow on Friday) and they immediately come up with ideas on how to take care of those for next year. Kudos once again to the Arizona Golf Resort for making us look good.

We then had a planning session of our own to discuss what things worked and what we need to tweak for next year. This meeting was a lot shorter than last year's because we have another year of experience under our belts. Most of what we discussed was fine-tuning little details. We were then going to hang out at the pool for an hour or so before dinner, but I found Craig Boyd, Bo Durban, and Jody Tooley hanging out on the patio for Toni and Mike Feltman's room, so I decided to hang out with them instead. Others showed up as well, including Christof Wollenhaupt and Alan Stevens.

A bunch of us went to the Cheesecake Factory for dinner (thanks, Joel) while others had a bratwurst cookout (there are BBQs set up between groups of rooms). When we returned, we went back to Toni and Mike's room/patio. By this time, a lot more people showed up. Toni told us later that was actually the highlight of the conference for her and suggested we consider doing something similar on a larger scale next year.

Thanks to everyone who made Southwest Fox 2008 one of the best conferences I've ever attended (and there have been a LOT of them over the past nearly twenty years). See you all next year!

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.

Tuesday, October 21, 2008

Southwest Fox, Day 1

Friday got an early start because there were still people arriving and several new folks registered. I planned to attend Bo Durban's VFP 9 and SP2 Reporting Component Basics session, but was busy helping with registration and chatting with people. I figured that since he's doing that session again at the German DevCon next month, I can check it out there. In fact, for that reason, I skipped all of his, Tamar's, and Rick Schummer's sessions here so I could take in more of the other sessions. Rob Eisler and Chris Wolf, who both work for me, attended Bo's session and it gave them lots of good ideas for new features to implement in Stonefield Query.

I went to Bo's Moxie Report Objects session in the next time slot. Bo has a very cool tool that extends the VFP reporting engine, providing capabilities such as outputting RTF and HTML content on reports, rendering ActiveX controls on reports, and allowing you to gradient fill columns. I'm planning on implementing Moxie Report Objects in the next release of Stonefield Query.

I then presented my Advantage Database Server for VFP Developers session. Advantage Database Server (ADS) is a high-performance client-server database engine from Sybase iAnywhere. There are several things that make ADS an excellent back-end for VFP applications. One is that ADS concepts are very similar to those in VFP, such as "Advantage optimized filters", which in my opinion are identical to Rushmore, so there isn't as much of a learning curve for VFP developers as there is for other client-server engines. Another reason for using ADS are very cool features such as table encryption, online backup, and lightning-fast full text search (if you missed this session, you can watch my video of full text search). However, the best reason is that ADS can use VFP DBF files as a data store. That's right: your existing tables can be accessed by ADS, giving you the best of both worlds: direct access in VFP or client-server access (and all of the benefits that brings) through ADS. I discussed how an application migration strategy might work: if you want to move your application to a client-server back-end, you can migrate one module at a time (updated modules access the table via ADS while existing modules continue to use the DBF files directly) rather than having to rewrite the entire application before deploying it.

After a delicious lunch, I went to Alan Steven's Ignorance is Bliss session. Alan presented a strategy for storing application data that provides great flexibility to your application. It consists of several layers and uses XML as the transport mechanism between layers. Like many in the audience, I thought MSXML was slow for large XML documents, but Alan pointed out that in fact it was very fast but the VFP XMLTOCURSOR() function is slow. So, he showed how to use XMLAdapter to break the XML into 500-node chunks to great increase performance.

Next up was Christof Wollenhaupt's Creating Owner Drawn Controls in VFP. He discussed the pitfalls of creating your own controls by combining various controls and how the VFPX GDIPlusX project provides the same kind of functionality Microsoft uses internally to draw Windows controls. Although this is a complex subject, Christof did a good job of covering all of the things you need to be aware of when creating attractive, powerful controls.

By this point, I was getting a little tired (I'd been up since 4:00 a.m.) so I skipped the next session and instead hung out outside with Craig Boyd, Andrew Macneill, and Toni and Mike Feltman.

We added a new event at this year's conference: a dinner party Friday night. The food was excellent: steak, salmon, and grilled veggies. After everyone finished eating, we handed out some more raffle prizes, including a couple of MSDN Premium Subscriptions, each worth almost $11,000. Ken Levy also had some prizes to give away: copies of previous versions of VFP, including VFP for the PowerMac, that had been in his office at Microsoft. One of the winners, Boudewijn Lutgerink of the Netherlands, announced that he couldn't take his package home because it was too heavy (that was from the days when software used to come with manuals) and did a not-so-silent auction to raise money for our Worthy Developer Fund (which I haven't blogged about yet because we're going to rename it).

After dinner, we had five simultaneous bonus sessions and developer meetings. I really wanted to attend both the VFPX session (which you can watch on streaming video at and the "Show Us Your Apps" session, but I had a Stonefield Query Developer Meeting to preside. According to all reports, the "Show Us Your Apps" session was a big hit, so we're thinking about expanding it next year (and certainly having it in a larger room).

We wound up the evening in the resort bar, which is the usual meeting place for attendees once the sessions are over. I was a good boy and turned in about midnight because I had an 8:00 a.m. session to present the next day,

Southwest Fox: Pre-Conference

On Tuesday, Rick Schummer and his wife Therese, Tamar Granor and her husband Marshal, and Rob Eisler, Chris Wolf, and I (Rob and Chris work for me) arrived in beautiful Phoenix to get ready for Southwest Fox. I love Phoenix in October: it's warm and sunny and makes me forget the 6 inches of snow that fell at home two days before we left.

The resort was as beautiful and nicely laid out as last year.

Here are some shots of us putting together conference binders and bags on Wednesday:

Southwest Fox 2008
Therese and Tamar start organizing binders

Southwest Fox 2008 
Rob and Chris assembling binders

We ran into several attendees who arrived early, either because they were from far away (such as Tore Bleken from Norway) or because they were attending Rick Strahl's West Wind training (such as Peter Cortiel). It's always nice seeing familiar faces again.

Thursday things started cooking (and not just because it was 92F). There were four pre-conference sessions, presented by Menachem Bazian (returning as a VFP speaker after being away more than 10 years), Andy Kramek, and Cathy Pountney. Registration opened at 7:15 so we could get pre-con attendees registered before the sessions started. From the comments I heard, the sessions were well-received.

Attendees continued to arrive throughout the day. It's a lot of fun hanging out at the registration booth because you get to see old friends, meet new people, and finally put faces to names from the Universal Thread, Foxite, and other forums.

After a quick dinner, the keynote started at 7:00. I won't go over it here; you can watch it yourself at Having streaming video available for the keynote was very cool, especially for those interested in seeing the demo of VFP Studio that Craig Boyd and Bo Durban presented (or should I say "performed", given the magic show they put on). Several people, including Steve Black and Cesar Chalom, watched it live but you can also watch the archived version. We'll definitely do it again next year. Here are some photos taken just before the keynote started:

Southwest Fox 2008

Southwest Fox 2008

After the keynote, we held a reception in the trade show area. From an exhibitor perspective, it was great: I did a lot of demos of Stonefield Query and was well on my way to getting my usual raspy conference voice by the time everyone cleared out.

Once again, a great start to the best (and only) VFP conference in North America.

Monday, October 20, 2008

VFPX Administrator’s Outstanding Service Award

At the keynote presentation for Southwest Fox 2008, the administrators of VFPX (Craig Boyd, Rick Schummer, and I) presented Bo Durban with the first VFPX Administrator’s Outstanding Service Award. Bo has been one of the driving forces in GDIPlusX, a key project in VFPX that not only brings amazing graphics functionality to VFP but is also the foundation for several other very cool projects such as the Themed Controls project. Congratulations, Bo; very well deserved!

Sunday, October 12, 2008

Another Fund Raiser

Last month, we were at another fund raiser for Sofia House, a second stage shelter for women and children escaping domestic violence. This was a little more sedate than last year's fashion show, but my son Nick and I did have to get dressed up so we could be ushers. He was considerably more popular with the ladies than I.


This year's show raised over $10,000 for Sophia House. Since the organization gets no government funding (which is a crime considering that our provincial government is wallowing in cash right now due to high commodity and oil prices), everything they make comes from private donations, organizations like the United Way, and fund-raising efforts.

Friday, October 10, 2008

Heading to Phoenix

Tuesday morning I take off for Phoenix for Southwest Fox. Tuesday and Wednesday are setup days: picking up shipments of door prizes and printed materials, assembling binders and bags, setting up the registration table, hooking up wireless routers, ensuring the resort staff have everything in place, and so on. Registration starts at 7:15 Thursday morning for those attending pre-conference sessions and the full conference gets started Thursday at 7:00 p.m. with the keynote.

I'll blog about the conference, although not likely during given how hectic it'll be (four presentations, a vendor session, and a Stonefield Query developer meeting, plus being an organizer). If you're not attending, be sure to watch the streaming video of the keynote and VFPX bonus sessions and check The Fox Show for interviews right at the conference. Once you see how great the conference is for yourself, you'll definitely want to attend next year.

Friday, October 03, 2008

Fix for Installation of My in Sedna

If you've installed Sedna and tried to use My and found that it didn't work, here's the fix: open My.PJX, open InstallMy.PRG and change this line of code in the GetScriptCode function:

lcDirectory = sys(16)


lcDirectory = sys(16, 1)

Save and build My.APP, then DO My.APP. My should now work correctly for you.

I'll posted an updated version of My on VFPX when I get a chance (not likely until after Southwest Fox).

In case you're interested, the cause of the failure is that the cProxyClasslib property of the FoxCodeLoader class, which is defined in the DATA memo of the MyScript record in your IntelliSense table (FOXCODE.DBF), specifies the path for My.VCX so it can be found on your system. Due to the bug, the property's value is just "My.VCX", without a path, so VFP can't find the VCX. That's because SYS(16) doesn't return a path when called from within an APP while SYS(16, 1) does.

Streaming Video of Keynote and VFPX Session

Thanks to Steve Bodnar, we're providing streaming video of the Southwest Fox keynote (Thursday, October 16, 7:00 p.m. MST) and VFPX bonus session (Friday, October 17, 8:00 p.m. MST). You can watch both of these videos at

Wednesday, October 01, 2008

MVP Award

I am honored to be given the Microsoft Most Valuable Professional (MVP) award for 2008-2009. This is the fourteenth consecutive time I've been awarded, and I'm thankful each time! Congratulations to other award recipients; see for a complete list of VFP MVPs.

(I removed my previous post about not being re-awarded. I was sent the "sorry" email by mistake.)