Friday, November 26, 2010

PEM Editor Blog

As you likely already know, Jim Nelson has created what’s probably the most important and time-saving utility for VFP ever: PEM Editor. PEM Editor, available from VFPX, is an incredible kitchen-sink of a tool. It started life as a replacement for the Edit Property/Method dialog but since then has mushroomed into a complete object editing tool. It can replace not only Edit Property/Method but also New Property/Method, the Properties window, the Document View window, the Beautify functionality, and so much more. It has customizable property editors, filters for the PEM list, and hundreds of other features. Jim did a presentation on PEM Editor at Southwest Fox 2009 and several user groups and Cathy Pountney did one at this year’s Southwest Fox as well as the German DevCon and several user groups.

Recently, Jim started a blog for all things related to PEM Editor. He’s posted release notes for new versions, tips and tricks, and other ways to get the most out of this tool. Highly recommended reading!

Tuesday, November 16, 2010

More 2010 Lifetime Achievement Award Recipients

Last week at the German DevCon, two more long-time VFP gurus were given Lifetime Achievement awards: J├╝rgen Wondzinski (aka wOOdy) and Christof Wollenhaupt. Congratulations to both! The FoxWiki page hasn’t been updated yet but hopefully will soon.

Tuesday, November 09, 2010

Southwest Fox 2010: Days 3 and 4

I woke up Sunday at 4:30 a.m. For reasons I still don’t understand, I was really nervous about the speeches I was to give about Lisa and Rick at the closing session. I had slides showing their bios and photos in the closing session (unbeknownst to Rick, I had slipped in his slide after he, Tamar, and I reviewed them) but wanted to say something personal about both of them, and figured it would work better if Tamar worked the slides while I spoke. It suddenly occurred to me that if Tamar went one slide too far while I was speaking about Lisa, Rick’s slide would appear and spoil the surprise. So, I added a “But wait … there’s more” slide as a buffer between Lisa’s and Rick’s. I think this gives you an idea of how much I was obsessing about this!

After what seemed like forever composing the speeches in my head, I went down for breakfast and my last presentation, the second instance of my Cool Controls session. I was chatting with people between sessions, so I was late coming into Cathy Pountney’s fxReports - Sharing Custom Report Features, but I’m glad I went. Cathy is working on some very cool stuff: a way for VFP developers to share custom reporting features, including reporting effects and custom Report Designer dialog pages. She’s releasing it as a new VFPX project in the next little while. This actually fits perfectly into work I’ve done with Stonefield Query and a new VFPX project I recently launched, FRXTabs. After the session, Cathy and I discussed some ways we can integrate the two.

I then went to Steve Ellenoff’s Integrating Windows 7 Taskbar Functionality into VFP Applications session. From its description, it was the session I was most looking forward to seeing because I want to add Windows 7 functionality to Stonefield Query and figured Steve could jumpstart my work. I wasn’t disappointed; as I told Steve afterward, this session paid for the conference for me. He showed how, using a library he’s created and released as a VFPX project, you can with just a few lines of code support Taskbar jumplists, progress bars, and much more. About every minute in his presentation, I came up with another idea of how to use this library to add new functionality to my apps.

Finally, it was time for the closing session. Rather than describing it in detail, I suggest you watch it and you can read Lisa’s and Rick’s blogs about it. Lisa’s video was great, even if it started on the wrong foot thanks to Windows Media Player changing its mind and deciding to play a comedy audio file on my system instead of Lisa’s video. It was also great seeing the huge ovation Lisa deservedly got, and I was very pleased that her husband Colin Nicholls could be there to watch her receive the award. But the best part was definitely Rick’s reaction to the award. He was literally speechless and quite choked up. I’m amazed he even managed to get through the next part of the session. Afterward, I saw his Mom come up to him and give him a hug; that was my favorite moment of the entire conference.

As usual, Sunday afternoon is pretty anti-climactic: tearing down projectors and stands, cleaning up the registration booth, a post-conference briefing with our main hotel contact Sharon, and a Geek Gatherings meeting to discuss 2011 (yes, we actually start planning for next year the day the conference ends). It’s kind of sad in a way, because we’ve had so much fun over the past several days, talking with friends we only see once a year, knowing that’s it’s over for another year.

However, there was still fun to be had. Shortly after our last meeting ended, we took the speakers out for dinner as a small way of saying thanks for all their hard work preparing and presenting their sessions. This year, we went to Gordon Biersch and had a great meal and some very tasty beer. Afterward, it was out to the poolside again, but I headed to bed about 11:00 exhausted.

The next day was the VFP to Silverlight workshop presented by Uwe Habermann and Venelina Jordanova. More than half of the attendees stayed for this workshop, which was great to see. Unfortunately, I had a couple of client issues I had to resolve so I didn’t pay as much attention to the presentations as I’d liked. Fortunately, Uwe and Venelina handed out memory sticks with all of the presentations, sample code, and even installers for Microsoft Visual Studio Express and the Silverlight tools, so I can go over the materials when I get a chance. One of the cool things that went on was the back channel of communication using Twitter by some of the attendees. We even picked a place for lunch (In ‘n’ Out Burger, which I hadn’t been to before) without saying a word. That night, a group of about 15 went back to the Mexican restaurant I’d been to Saturday night and we had another fun evening of food, friendship, and margaritas. After we got back to the hotel, a group of us had some drinks, checked out some hilarious but definitely NSFW t-shirts online (I was laughing so hard I almost couldn’t breathe), and checking out some places in Brazil Cesar Chalom showed us on Google Maps.

So, another year of Southwest Fox is over. Every year, the conference seems to get better and better. We had a few challenges this year—a new hotel at the last minute and finding a speaker to replace Craig Boyd late in the game, which Jody Meyer did an excellent job of—but it’s always fun and worth all of the effort we put into planning it. Stay tuned for an announcement about Southwest Fox 2011 and I hope to see you there next year!

Sunday, November 07, 2010

Southwest Fox: Day 2

As I hinted at in my previous blog post, sleeping was an issue for me at Southwest Fox this year. I woke up at 5:00 on Saturday, my head buzzing with what I wanted to say at the closing session on Sunday. I read for an hour or so to calm down.

I had the first timeslot of the day (moving it back from 8:00 to 8:30 last year was a very popular decision!) and presented my Cool Controls for Your Applications session. I was even more nervous about this than the ThemedControl session; again, I’d practiced it several times and had it down cold, but would attendees think the controls were as cool as the title promised? Fortunately, that turned out to be the case; the evals were even more positive than for the ThemedControls session and I’ve had several emails from folks afterward who told me they’ve already implemented some of the ideas presented in their applications.

I started by explaining that this session had the same theme as my ThemedControls session: there’s no excuse for creating boring-looking VFP apps. I presented each of the controls in this session in a similar manner: a demo of what it looks like, a brief discussion of how it works (with a detailed discussion in the white paper for those interested in looking under the hood), and a cookbook-like explanation of how to implement it.

The first was a simple control I wrote several years ago but is used in lots of places (not only my apps but also in the VFPX PEM Editor): a splitter that allows the user to adjust the relative sizes of the resizable controls (listboxes, editboxes, grids, etc.) in your forms. Next, I showed a control I call a “combotree” because it combines a combobox with a TreeView to provide a control you can use to display hierarchical data or a lot of checkboxes without taking up much screen real estate. This control is also used in PEM Editor and lots of places in my apps. I then showed the VFPX PopMenu project and how it can be used to create Microsoft Office-like menus in your apps. I spent some time showing how to use Paul Mrozowski’s RCSDateTimePicker as a replacement for the Microsoft DateTime Picker ActiveX control for date data entry, including some enhancements I added allowing you to select a range of dates. Next up was Ctl32_BalloonTip, one of the many controls in Carlos Alloatti’s definitely cool Ctl32 library. Ctl32_BalloonTip replaces plain old boring tooltips with attractive “balloon” tips that you also have more control over. I finished by showing how another of Carlos’s controls, Ctl32_ProgressBar, gives a Vista/Windows 7 appearance to progress bars in your apps. The images below show some of these controls in action:

Office PopMenu RCSDTPicker Balloon Tips testform1 Progress Bar

I ended up chatting with a few people so I missed a session in the next timeslot. As we told everyone in the keynote, that’s perfectly OK: you often get more out of a conference by the discussions with fellow developers than in the actual sessions, and every session has a white paper so you still have the content. I then presented my ThemedControls session for the second time in the slot before lunch.

After lunch, I went to watch Uwe Habermann and Venelina Jordanova present their Silverlight for Internet Applications session. I’ve known Uwe and Venelina for several years, having met them at conferences in Prague and Germany. I liked the way they presented this session: they took turns talking and led the other into the next topic by asking questions an attendee would ask. I didn’t know much about Silverlight but was planning on attending the post-conference VFP to Silverlight workshop, so this was a good overview of Silverlight and even went into details on creating your first project.

The next session was Tamar’s Collections: Managing Information the Object-Oriented Way. I’ve worked with collections for years, but I saw Tamar’s session on business objects last year and this session was “part 2” of that, plus I enjoy Tamar’s take on things and figured I could pick up a few tips. During the session, I played a trick on Rick Schummer, who was right behind me. He had to leave the room for a couple of minutes, so he left his laptop on the seat and his bag on the floor. As soon as he walked out of the room, I quickly grabbed both and hid them under my chair. Even better, someone came in a moment later and sat on his now abandoned chair. When Rick came in, he looked panic-stricken: he thought the other person was sitting on his laptop, and looked all around for his stuff. I didn’t let him suffer for too long, and he let out a very relieved laugh when I handed him his laptop and bag. Hmm, I hope he doesn’t go all “Boyd” on me for this prank. As for Tamar, she did a nice job explaining the basics of collections and then showed a strong practical example of their use: a VFP version of the popular Sudoku game that uses several collection to manage cells, blocks, rows, columns, and the game itself.

The last session of the day I attended was Toni Feltman’s The Pomodoro Technique session. I was looking forward to seeing this; Steve Bodnar had mentioned Pomodoro to me a couple of years ago so I was interested in learning what it was about. Toni discussed the problems of concentration and focus in a world of email, Twitter, Facebook, telephone calls, and teammate interruptions. Pomodoro was designed to allow you to plan your day in advance and focus on a set of tasks in 25-minute intervals, followed by a 3 to 5 minute break to catch up or relax before starting the next one. The idea is to boost your productivity by not letting distractions pull your concentration away from the tasks you need to get done without eliminating them completely. I know several attendees and speakers who’ve started using Pomodoro since seeing Toni’s presentation. I haven’t yet but hope to once I return from the German DevCon next week.

Rick, his wife Therese, his parents, and I went to a Mexican restaurant at the SanTan mall for an excellent dinner. I had something I’ve never tasted before: a chile relleno enchilada, which was REALLY good. However, the main event of the night was up next: racing at the F1 Race Factory. As usual, a good-sized crowd of Southwest Fox folk showed up for fun and competition. You can see photos from F1 taken by Venelina and Therese on the Southwest Fox photo page. For the past several years, Cathy Pountney, Rick, and I have had a friendly competition at F1 (“friendly” meaning there’s no exchange of gunfire). Cathy actually started it in 2006 by trashing Rick and I to all who’d listen after she beat us that year. Once again, the competition was fierce. None of us actually came in first (Rick Strahl is the perennial winner, followed this year by Cathy’s boyfriend Jim Knight), but we don’t care: it’s a race within a race for us. I had the fastest lap this year, followed by Rick and then Cathy. Because the F1 printer was down, we couldn’t see who had the fastest average lap (another measurement we use), so we assumed it was Rick since that’s a title he usually wins.

Afterward, we headed back to the hotel pool to regale the others with our stories: who took who into the wall, who cut off who in the corner, and so on. I called it a night a little after midnight.

Southwest Fox 2010: Day 1

I had an early start Friday, waking up at 5:30 a.m., partly because I was still on Central time and partly because I was going over in my mind the speeches I was to give at Sunday’s closing session for the FoxPro Lifetime Achievement Award presentations. Unfortunately, today was like sleeping in compared to the next two days.

The first session I attended was Paul Mrozowski’s jQuery for VFP Developers. Although I’ve seen a couple of introductory sessions on jQuery before, I have yet to do anything with it, which I hope to change soon. Paul’s session started by discussing the basics of JavaScript, then quickly moved into the jQuery library. He showed basic jQuery syntax, then discussed more complex uses, and finished the session showing some of the cool add-ons available for jQuery, including date-time controls and grids. This was a very inspiring session and made me wonder why I’ve waited so long to get started with jQuery.

Next I went to Extending VFP using the Web Browser Control, presented by Bo Durban. Although I’ve used the Web Browser ActiveX control in my apps for several years, I’m always looking for new ideas, and definitely got some in this session. Bo showed a subclass of the control he’s created that adds several behaviors, including disabling the shortcut menu so the user can’t do things like View Source. I got several great tips from this session and have already implemented them in my apps.

The last session of the morning was Eric Selje's The Amazing VFP2C32 Library. I wanted to see this session for two reasons: Eric was one of our new speakers and although I’ve had a little exposure to VFP2C32 (it’s used in Carlos Alloatti’s excellent Ctl32 library), I didn’t know much about it. Eric started by showing the complexities of calling some Windows API functions in VFP, and then showed how VFP2C32 makes it very easy because it simplifies the calls to those functions through an easy-to-use VFP wrapper. Because he was a little nervous, Eric stumbled on saying “VFP2C32” a couple of times, so he decided to call it “Fred” for the rest of the session. I liked that idea so much that when I mentioned VFP2C32 in my Themed Controls session (because Themed Controls uses Ctl32, which uses VFP2C32) and also stumbled saying it, I called it “Fred” too. Eric classified the various “Fred” functions by functionality and spent the rest of the session showing how it satisfies various needs in typical VFP applications. Eric’s white paper is an excellent resource for “Fred” because he’s documented the library in great detail. I definitely intend to replace some of my ugly Windows API calls with VFP2C32 functions since VFP2C32 is already included in my apps due to my use of Ctl32. Even cooler is thanks to prompting by Eric, the author of VFP2C32, Christian Ehlscheid, has now released it as a VFPX project.

After lunch, I presented my A Deep Dive into the VFPX ThemedControls session. I was a little nervous about this session: I’d practiced it several times and had it down smooth, but I went over the time limit every time because, typical for me, I tried to jam too much information into the session. Sure enough, I had only five minutes left at the end and still had a couple of the themed controls to cover. Fortunately, because I was prepared for this, I left the ones I consider to be less useful for the end, so I quickly skipped through them. Sorry for anyone who wanted to spend more time on those controls; however, the white paper for the session has lots of details and samples you can play with.

Although I didn’t plan this, it turned out that both of my sessions this year had a common theme: there’s no excuse for creating boring looking VFP apps. Using colorful modern icons, attractive fonts like Segoe UI (the system font for Windows Vista and 7), and various VFPX projects like GDIPlusX and ThemedControls, you can create applications that are as great looking as anything written in .Net or any other environment. As its name suggests, this session focused on Emerson Reed’s ThemedControls project. ThemedControls allows you to create themed forms in your application that allow the user to change color schemes as easily as they do in Microsoft Outlook. The image below uses several ThemedControls, including ThemedOutlookNavBar (the Outlook-like control at the left) and ThemedTitlePageFrame (the container at the right doesn’t look like a pageframe but it is).


I went through the basics of the ThemedControls library: how to download and install it, how to add it to your applications, what to deploy to your users, and so on. I then went through each of the controls, starting from the simple ThemedForm and ThemedContainer to the complex ThemedOutlookNavBar and ThemedExplorerBar, blowing through the less useful (in my opinion) ThemedToolbox and ThemedZoomNavBar, and finishing with a demo of the unfinished Ribbon control. Based on the audience feedback during the session and the evals afterward (I love the new online evals Rick, Frank, and Paul implemented this year!), I thought the session went well.

Because I was chatting with folks after my session, I was late getting to Christof Wollenhaupt’s How the Fox is Different session. However, as usual, Christof blew me away with his incredibly deep knowledge of the internals of both VFP and .Net. (After the session, Bill Anderson said to me, “I’ve been working with FoxPro for 20 years. I know nothing.” and I felt as equally humbled.) Christof’s take-away point was that if you’re working in VFP, do it the VFP way, and if you’re working in .Net, do it the .Net way. He showed fundamental differences between VFP and .Net, not in terms of language and syntax, which are relatively easy to learn, but in philosophy, which takes much longer to understand. For example, VFP is object based (we do things with instances of classes) while .Net is class based (classes have a much bigger role than instances in .Net). In VFP, we’re used to using a framework and global objects such as an application object; in .Net, the “framework” is built in and there are no global objects in correctly written applications. This is one of these sessions where I’m going to have to read the white paper several times and think about what Christof has said before it truly sinks in.

The last session of the day was dedicated to “bonus” sessions. I went to the “Show Us Your Apps, Part 1” session and was amazed as everyone else at the cool things people have done using VFP. Among the highlights were Jim Nelson showing his relatively new Code References replacement VFPX project, Cesar Chalom showing his FoxyPreviewer replacement for the VFP report preview toolbar, and Bernard Bout showing some work he’s done recently integrating Silverlight into VFP apps.

The plan was to have a dinner party out on the veranda of the conference center, but some unusual Phoenix weather—a sandstorm with high winds—nixed that at literally the last minute. Fortunately, the SanTan/Elegante staff quickly pulled together and moved everything inside the ballroom at record speed, so the party only started a few minutes late. The food, as it was at other meals, was fabulous, including two kinds of lasagna and an excellent caprese salad.

More bonus sessions followed into the evening. I held a Stonefield Query Developer meeting and went over some of the new features in our 4.0 version, including the brand new interface for Stonefield Query Studio (using many of the controls I covered in my ThemedControls and Cool Controls sessions), application views, new output types including Microsoft Excel PivotTable, and so on. I then showed a couple of new features we’re planning for version 4.1, including drilldown charts, dashboards, and % change between columns in a cross-tab. These got a very enthusiastic response!

The session didn’t wind up until nearly 10:00 p.m., so I was pretty tired by now. I hung out by the pool (the replacement for the “grotto” of the Arizona Golf Resort that became the popular hang-out spot the last couple of years) for a while, but had to call it a night at about 11:30 because I had an 8:30 session.