Tuesday, October 23, 2007

Southwest Fox - wrap up

I had to get home for a cyber cafe at a conference in Dearborn, so I flew out at 6:00 AM and missed the Sunday sessions and closing sessions.

I did have some overall comments about the conference...

Conference Organizers

Rick, Doug and Tamar did a great job picking up where Bob left off. All three of them greeted us warmly and handed us our registration materials and goodies very quickly.

During one of the pre-cons on Sunday, it was discussed that there was no coffee available for the attendees during the 4-hour sessions. (Not a big deal to me, since I don't drink coffee.) Rumor has it that as soon as the three "walk-in" attendees paid their conference fee, the organizers turned around and ordered coffee stations! They could have easily kept this money in their pockets, but instead turned around and pushed the conference up one more notch.

Bo's Mustang

I had no idea such a thing existed. Bo Durban had rented a Shelby GT-H convertible from Hertz. This was a very cool car, but for some reason my favorite part was the chrome plated Hertz badges on the sides.

Good Service

Rick Strahl mentioned that he had remarkably good service at the hotel right up until he checked out. DJ and I had good service the whole time. The staff we encountered were courteous and friendly, always asking if there was anything they could do for us.

On our first morning there, DJ and I walked into the restaurant at about 9:50 and the hostess said that the breakfast buffet was open for another 10 minutes. After we both chose the buffet, they made sure we had everything we wanted before they tore it down. $9.95 was a good deal for a full buffet including an omelette station! The food was good and the staff was really attentive.


One of the often highlighted side-benefits of a conference like this is the opportunity to network with other developers. Some of them are experts and/or speakers. Others are just going through the same day-to-day process of learning all they can to be better developer. Some are brand-new to the whole thing. There is something to be learned from all of them. It is always interesting to find out what other people are doing. One day, we had lunch with a guy from Seattle (I think) that works on a vertical market application for health clubs. It was interesting to hear what they've developed and where they are going.

Perhaps the two best conversations I had were those that will impact Geeks and Gurus nearly immediately.

Alan Stevens and I talked about a .NET application we have inherited and discussed some of our stumbling blocks. The next day, DJ had the opportunity to talk with him and a light-bulb went off for Alan. He told us that our application sounded like it might be built on a well documented framework. If this is the case, we should be able to crank up our learning curve a little more effectively.

The second conversation was with Russ Swall about Agile methodologies and business in general. Russ always provides great insight and resources and I appreciate his sharing of his experiences.


I've been avoiding Vista. I loaded it on a spare machine while it was still in Beta and was really unimpressed with it. Several of my customers have purchased new machines (without asking me first!) and have had painful experiences with Vista and Office 2007.

One of the guys in our local users group spent an evening telling about all the paid he'd dealt with trying to get his vertical market application to play nicely with Vista. Several other people have complained about various issues related to developing on Vista.

So, I was quite surprised to see how many speakers were running on Vista. At very least, Christof Wollenhaupt, Rick Strahl, Toni Feltman, Cathy Pountney, Doug Hennig all presented on Vista - with no glitches that I noticed. I know that Doug and Rick have been blogging about Vista for some time, yet I was still surprised to see them working completely normally in their sessions.

So, maybe I'll be willing to give Vista a try sooner than I expected.

1200 Series New York Strip

When SW Fox was in Tempe, we always went to Grilled Expedition for dinner on a free night. They have this steak that is extremely good. Every time we go there, we have the same steak. (And somehow we always get the same table - near the bar and the TVs. I'm pretty sure we've been able to watch the Wings or the Tigers every time but this time.) On Saturday, DJ and I, Frank Perez, Bo Durban and 3 Stonefield guys all drove to Tempe. We got the same table and DJ, Frank and I had the same steak. I think it was best the first time, but it is still very good.

From the menu: Extra-thick cut strip rubbed with kosher salt and buried in our 1200 degree mesquite coals. served medium-rare

I can't wait for next year!

Labels: ,

Full Story

Saturday, October 20, 2007

Southwest Fox - Day 3, Session 4

Toni Feltman - Introduction to the DBI Controls Included in Sedna

As was the case in several other sessions, Toni had a Standing-Room only crowd.

Toni walked us through the 8 DBI controls that are available as part of Sedna. They are available now here. The 8 controls include ctTray, ctDEdit, ctContact, ctToolBar, ctListBar, ctDays, ctDropMenu, and ctFrame.

All of these controls allow us as VFP developers to give our applications a more modern look. Toni says they are all easy to work with and each come with working examples including VFP code.

Toni recommended that we don't use the Controls Builder for the most part. Instead we should set properties in code. At least some of the controls, though, let you save off the settings into XML. (And also support importing those same settings from XML.)

Labels: ,

Full Story

Southwest Fox - Day 3, Session 3

Cathy Pountney- Getting Your Head Around the VFP ReportListener

I was a late adopter of VFP 9.0, but have been attending sessions about ReportListeners since they were announced. I've never worked with them, so I thought this would be a good opportunity to get up to speed. I'm really glad I attended this session. We have two applications that could immediately benefit from what I've learned in Cathy's two sessions.

Cathy started out by telling us that the new functionality is turned off by default. Microsoft didn't want to break any existing reports, so instead they force you to turn the new functionality on by issuing a SET REPORTBEHAVIOR 90.

You can also use the 9.0 functionality on per report basis by modifying the REPORT FORM command with OBJECT TYPE n. Additionally, you can create a listener and issue the REPORT FORM xxx OBJECT oReportListener

Just like with any other base class, you want to subclass the report listener for your applications.

Cathy spent the rest of the session walking us through the key PEMs for report listeners which gave us a good overview of where we can interact during the reporting process.

Labels: ,

Full Story

Southwest Fox - Day 3, Session 2

Rick Strahl - Introduction to AJAX with Visual FoxPro

Rick started out by telling us what AJAX Asynchronous Javascript and XML (although very little of it uses XML)

In a traditional HTML page any time you need to go back to the database you need a complete redraw of the active page in the browser. AJAX attempts to update the active page without a complete redraw. Rick says AJAX is really Remote Scripting.

Google Maps really started the trend. Many of the web-mail clients use AJAX to display a more windows like interface.

If you have a postback type of page, you can take advantage of AJAX to pull a small piece of data within the context of the active page. One of the things I didn't realize, which is now obvious, is that you can use AJAX to make a plain HTML page dynamic.

In response to a question Rick said that it would be his recommendation to initialize the page with as much data as makes sense instead of for example sending a page with a bunch of empty combo boxes that use AJAX to get the data as the user works through the page.

AJAX is not a replacement for ActiveX or plug-in architectures like Flash. We still can't use AJAX to do things like accessing the local system or uploading files.

Rick mentioned that JavaScript libraries are very important. Rick rolled his own because there wasn't anything reliable when he started getting into this stuff. He mentioned that there are lots of libraries out now and he currently likes jQuery.

Rick then showed us an ASP.NET app that uses VFP COM to demonstrate these concepts. We looked at the HTML and JavaScript used in a simple example.

I had a lot of trouble with my tablet in this session so my motes aren't very complete. I came to this session to get a better understanding of AJAX. I've understood the general concept but didn't really understand how it is implemented. Although we don't have any immediate need to use AJAX with any of our VFP applications, we can probably use it in one of our ASP. NET applications in the very near future, making this session even more valuable.

As always, Rick gave a great session.

Labels: , , ,

Full Story

Friday, October 19, 2007

Southwest Fox - Day 2, Session 6

Whil Hentzen - So You've Inherited an Application. Now What?

Having recently inherited an application that has been in development for about two years, but not yet deployed, I had great interest in this session.Whil introduced the session by saying it would be a philosophy of how to take on someone else's app, not a recipe.

Whil stressed that (as with all projects) the most important aspect is communication: not just having conversations, but making sure all parties are really on the same page. One of the key elements in this conversation is to help them understand the potential difficulties. Whil elaborated that some of these might include the lack of test data, undocumented and inconsistent code, the lack of standards based code and stuff that just works by magic.

He also said that in that communication it is important to make sure that they customer is looking to buy what you're selling. Again, they may have different expectations and it is important to make sure you know what they are really looking for. (This tied into Steve Sawyer's comments about customers coming to you with a solution instead of the problem.)

Whil suggested something I'd never thought of: If you take their source code "as is" can you build and EXE that is the same size as the EXE in production. If not, there is a good chance that the source code they've provided is different than that which was used to generate the production EXE.

Whil recommended looking at Ted Roche's site for tools for analyzing applications. http://www.tedroche.com/

Whil also pointed out that VFP has several tools that will help when working with someone else's application such as the Documenting Wizard, Code References and DEBUGOUT.

Labels: ,

Full Story

Southwest Fox - Day 2, Session 5

Cathy Pountney - OutFox the VFP Report Writer: Printing on My Terms

I missed this session at DAFUG where it received great accolades. So here I am with great expectations.

Cathy gave us a great illustration of how the reporting pieces work together. She showed that the report engine is still out of our control, but the report listener, preview container and extension handler are all in our control.

Cathy started out showing us several really desirable reporting output options like 2-up or 4-up, shrink-to-fit, booklets, portrait or landscape with a single FRX... wow, I'm pretty excited. She says she's going to show us how to do all this with no changes to our reports. I can't wait.

OK, now she says we're going to do this all with API calls - and wait for it - it is easy? We'll see. :)

Wow, this is very impressive stuff. Cathy has written a fair amount of code (that the attendees get) that really does make this easy. She's done all the heavy lifting and has written methods that basically trick (repeatedly) the report engine into thinking the paper is one size or another to get the report generated the way she wants and then sets everything back after the report is generated and before it is actually sent to the printer. Sometimes she's playing with orientation, sometimes page size, sometimes the order of the pages, sometimes some other magic.

This is all very slick.

All these examples went straight the printer (or in this case, the PDF generator on Cathy's machine.) So next she showed us how to see these results in the Preview using an Extension Handler.

She spent some time showing us some of the properties of the PreviewForm like AllowPrintFromPreview which when set to .f. doesn't allow the user to print from the preview window.

This session really rocked! If you're not here - get your user group to get Cathy to come do this session. If you are here - make sure you see this the next time around.

Oh, and by the way- Cathy said this was all easy right? Well it will be for us because she's worked through all the really hard stuff.

Labels: ,

Full Story

Southwest Fox - Day 2, Session 4

Steve Sawyer - Basic Marketing for Custom Business Software Services

I was particularly interested in this session to see what Steve has learned since his time at Geeks and Gurus.

Steve started out by describing the problem that we faced (and still do) as a small software development shop: How of you market yourself? How do you get in front of the people that need your services.

To illustrate the problem, Steve created the scenario where two people meet and after briefly discussing their occupations, one would say to the other "So I'd call you when..." For example, if one as a patent attorney, the other would say "I'd call you when I'm ready to patent my invention" Other examples would be doctors or plumbers where you could easily say "I'd call you when..."

For us as software developers, that is a really hard sentence for someone to finish. When would someone call us? Most people wouldn't know when they need us. Even if they have a problem that customer software could solve, they might not know it.

Even harder than that, is to be in the right place at the right time when someone does realize that they need us.

In terms of Marketing, Steve suggested a couple key requirements. First in terms of a message: Achieve Clarity. Be able to quickly define what it is you do.

Among other things, Steve suggested identifying your core competency. What do you do specifically that provides your customers benefits? What do you do that is hard for your competitors to imitate? What do you do that can be leveraged widely to many products and markets?

For the end of the session we had some open discussion (which is always as good or better than a scripted session) where we all shared some of our individual experiences.

Doug Hennig, Russ Swall and others recommended a couple books as well: Duct Tape Marketing and one that had Rain Making in the title, but I didn't right down the author and I can't be sure which of the book on Amazon is the right one. (I'll have to get the right name before the conference is over.)

Labels: ,

Full Story

Southwest Fox - Day 2, Session 3

Christof Wollenhaupt - Introduction to COM

I decided to come to this session because of a new project we have taken on. I thought I might be able to use COM to get some data exposed to .NET more easily than the approach currently in place in the application. After seeing Rick's session on VFP and .NET, I'm not sure I'd really pursue that path, but I thought I'd sit through this session because it has been a long time since I've done anything with COM and a long time since I've seen one of Christof's sessions. I was a little concerned that this session would be over my head, and although I did understand most of what Christof discussed, I haven't found myself needing to know this much detail about COM. (A comment about my lack of sophistication as a developer, not a comment about the session!)

Christof mentioned that when COM came out, it was great because it was a language-independent standard that could be used with multiple development platforms.

I never thought about whether or not GUIDs were a Microsoft thing or if they came from somewhere else. Christof told us that there was a standards group overseeing these issues: http://www.opengroup.org/ He showed the difference between UUIDs and GUIDs Level 1 is based on MAC addresses and level 4 is not. (I didn't even know there were levels.)

Christof gave a very detailed and thorough explanation of how COM works and I couldn't even begin to paraphrase or summarize these concepts.

In the end, this session proved valuable because it taught me that there some things I just shouldn't do - there are other people who are far more capable. If I find myself needing to get this deep into COM, I'd hire someone else to deal with it.

Labels: ,

Full Story

Southwest Fox - Day 2, Session 2

Rick Strahl - ASP.NET COM Interop with Visual Foxpro

Rick started by giving a general overview of the issues related to developing concurrently in VFP and ASP.NET and an illustration of how applications interact with each other when using ASP.NET and VFP COM components. He pointed out that this is "gateway" technology, not a strategic technology. He thinks that this approach is a way of bridging the gap until such time as an application is completely rewritten. He said that it wasn't his purpose to recommend one or the other, but to recommend that you use only one - VFP or .NET

Rick created a simple Hello World demo just to show us how to create a basic COM object. He then showed us how to create a VS project that will consume our little com object. He pointed out that we want to create an ASP.NET web application.

One of the little tidbits I really appreciated was the OS command "IISRESET" which can be used to - what else? - reset IIS? Rick mentioned this because you need to reset IIS to release you COM component as you're developing it and creating new iterations.

Rick talked about how the Session object creates a good environment for COM components -except that it causes trouble sometimes when dealing with data. So instead he creates an ASPBASE class based on CUSTOM and then marks as protected most of the VFP members that have no meaning in this context.

He then showed how to use COMATTRIB to create a property and give it strong typing for the type library. Oh, yeah, he also pointed out this this only works with VFP 9, SP2.

Rick pointed out something that might not be obvious, but when you're developing applications in this fashion, you have to realize that it is a multiuser application and you have to be aware of that as you're writing code. His simple example was just a little incrementer, but he explicitly made sure he could lock the record before he changed the data.

Rick went into a good level of detail showing us different ways to interact with VFP COM from ASP.NET and showed us a couple different ways to get data into ASP.NET web pages.

I frequently got so wrapped up in paying attention to Rick that I forgot to take notes to share here. As always, Rick gave a great session.

Labels: , ,

Full Story

Steve Sawyer - Project Management

Steve Sawyer presented a session on how as Developers we might have the skills and strengths to make good project managers.

Steve explained how there are so many opportunities for Project Management - internal software systems, shrink wrap software development, reselling and customizing 3rd party systems like SAP, Great Plains, etc, companies outsourcing development, any project with multiple stake holders.

Steve mentioned that there can be good "politics" in business organizations which is something I had never thought of. We so often talk about the politics being a problem within an organization.

Project mangers are not, by formal definition, an active participant in the software development process. Steve says that in the real world it doesn't always work out that way. In any case, he says Project Managers must be engaged with an element of the process to influence that process.

While Steve was talking about various stakeholders her reminded me of something that we've discussed before: Often the client tries to specify a solution rather than describing the problem.

When talking about the creative and technical staff, Steve talked about another thing that really rings true and of which I'm often guilty: We base our estimates on "ideal programming days" which never happen. It is so hard to remember this when talking with customer s or even internally regarding timelines and budgets.

Good Project managers should:

  • Keep the client focused on the need and away from the solution
  • Don't make commitments to deadlines while in front of the client
  • Identify factors driving the deadlines
  • Insist on frequent milestones (very much in line with the Agile way of thinking)
  • State and Restate project scope issues

Tamar Granor mentioned a recent article by Phillip G. Armour in the Communications of the ACM where he talks about how we often assume perfect case scenarios to shorten timelines (in order to please the customer, or perhaps driven by the customer.) It looks like he has several articles relating to project management, estimating and agile development.

Steve talked about the differences between Developers and Programmers, where Developers are responsible for every aspect of a project - including project management - and Programmers are more like "order takers"

Steve mentioned that a good project manager has to have the ability to form alliances with all the stakeholders and the ability to do this with Diplomacy.

You can learn more about project management and certification here: http://www.pmi.org/

Overall Steve presented a great session about the possibility of a developer leveraging existing strenghts and skills for a new career as a Project Manager.

Labels: ,

Full Story

Thursday, October 18, 2007

Soutwest Fox - Key Note

Southwest Fox 2007, Mesa, AZ, October 18 - 21, 2007

148 attendees
16 speakers

By a show of hands, it looks like about 15 0r 20% of the attendees were at their first-ever VFP conference. About 1/2 of the attendees were at their first Southwest Fox conference.

Rick spent some time talking about SP2 explaining that this release has bug fixes and report designer enhancements. He also pointed out that Microsoft released 2 versions of SP2 because the first one didn't quite have the right splash screen. Doug then mentioned that if you have SP1 installed, you should uninstall VFP9 and then install SP2.

Rick then explained that Sedna is different and separate from SP2 and detailed the components of Sedna. Microsoft still hasn't announced a release date for Sedna. It will be released on CodePlex.


Christof Wollenhaupt first demoed a little VFP application he wrote to learn foreign languages and talked about how it would be cool if VFP could be used to build and deploy applications to other platforms such as pocket pc's and Linux Devices. Then he showed how to use his Guineu application to deploy VFP apps to other platforms. He demoed this language app on the Pocket PC, Linux, SQL Server stored procedures. Check out http://www.guineu.net/ for information.

Then Toni Feltman showed tools from eTecnologia: .Net Extender and .NET Compiler for VFP. In the first example she showed a VFP form then when run used .NET controls on the VFP form. In design mode, all you really see is a place holder, but you have access to the full functionality of the .NET controls. Toni then talked about the Compiler which is also still a work in progress, but shows great potential. See http://www.etecnologia.net/ for more information

I'm sure I have this next part all wrong:

Next up were Alan Stevens and Craig Boyd to talk about a Super Secret Project. Alan mentioned again that "Your code is not obsolete" his mantra for the weekend. Alan and Craig are working with Ken Levy on a way to build applications out of Visual Studio! Craig, in his typical way, raced through his explanations with passion and then showed us something called "VFP Studio 2008" He talked about "isolated shell projects" in Visual Studio. Craig showed a VS "New Project" dialog and said we'll be able to create VFP projects in VS. Craig and Alan stressed that this is based on technology that they just received from Microsoft on Monday. They said that this new technology, the isolated shell, is separate from Visual Studio and doesn't require a license to Visual Studio.

This lead into them talking about Click Once technology - for VFP! They also talked about "reg free COM" and how we can use VFP to create applications that work with Vista's new security issues.

The Keynote finished with the following calls to action:

  • Download SP2 and Sedna
  • Join VFPX
  • Start a Blog
  • Something else that I didn't see before Doug moved slides!

Labels: ,

Full Story

Southwest Fox - PreCon

I've been looking forward to Alan Stevens' session on TDD from months - and my anticipation was not for naught.

Alan had 4 hours to give us a really great session on TDD. I have tons of notes, but I don't want to give away all of Alan's session. Instead I thought I'd share some of the elements that hit me the most.

Alan spent a good hour giving us an abstract and philisophical introduction to TDD, what it could mean to us and how we develop.

One of the things Alan mentioned was that he wants to show us how to use TDD against existing code - which is something I thought we wouldn't be able to do at Geeks and Gurus. We've always talked about using TDD on the next big project, not applying it retroactively to something we're already working on. I missed about 10 minutes of the session in the middle. Customer phone call on a break took longer than expected) but I don't think he actually covered this in any detail. (I missed the part where he talked about something called FoxMock) At the very end of the session Alan put up a slide "What is Legacy Code?" His answer: Code without unit tests. He made the point that you could have written legacy code this morning. He made points about how refactoring old code is the opportunity to implement TDD and build seams in the application. "Get the class you are modifying under test." I still have a ways to go in figuring out how when and where we'll implement TDD, but I'm more convinced than ever that we need to start as soon as possible.

So, back to the key points. Alan explained that TDD (Test Driven Development) is not really about testing or development, but about example driven design. Later in the session he was able to illustrate this with simple examples.

Something that I've always had in my head was that Vagueness is the enemy of developers. He later made the statement "The hardest thing in software design is to know what to build" This rings so true to me. We're in the middle of one project where the spec is basically "we need reports" Uh, ok, we'll get right on that.

Alan talking about Fowler's concept of Avoiding Debt - "Go ahead and implement it now and we'll fix it later" is Design Debt. He stressed that we should "pay cash" and "pay as you go"

One of the great things he showed us was a diagram: The Great Pyramid of Agile from http://www.processwave.com/. This helped me crystalize an agile concept that I've had a hard time "seeing" in the real world. I now understand how to illustrate the concept of starting with the smallest deployable set of features and adding new features in future iterations.

TDD is a process. FoxUnit is a tool that is part of that process. Alan tweaked FoxUnit and VisionPace was kind enough to post this "unofficial" version for the conference.

Test Sequence: Setup, Exercise, Verify, Teardown

Alan then walked us through FoxUnit showing us the core elements of a test.

I'm running out of time - I'll post more later, but this was a really great session.

Labels: , ,

Full Story

Wednesday, October 17, 2007

Off to Southwest Fox

Southwest Fox 2007, Mesa, AZ, October 18 - 21, 2007

I haven't been this excited to go to a conference since the early days of DevCon. DJ and I leave tonight. I'm really looking forward to Alan Stevens' pre-con on Test Driven Development and the rest of the conference.

I talked to Rick yesterday and he didn't sound too frazzled yet. (It was his first day on-site, though. And, he'd only made the first of his 4 shceduled stops for the day.)

I downloaded some of the whitepapers today and the stuff I looked at looks really good.

(Even though this is a Fox conference, I am also looking forward to talking to some of the people that are doing .NET. DJ and I inherited (hmm, I should see whil's session) a pretty big .NET app and we're struggling through just fine - except when it comes to figuring out where the heck the data comes from. I think I finally understand why for years people have said .NET "isn't there yet" when it comes to talking to data - at least from a VFP developers point of view. Man, we have it easy.)

I plan on posting from the conference, hopefully with a little more detail than I provided from FoxForward.

See you there.

Labels: ,

Full Story