Thursday, October 30, 2008

Alan Stevens - Manage Complexity with Agility

This session rocked!

Alan started out by pointing out that he is not an expert, just an enthusiast. His enthusiasm was self-evident and contagious.

He said that this session is about what has worked for him and encouraged us to avoid dogma and take what works for each of us.

The following are my key take-aways from Alan's session:

Iterations are about putting a heartbeat to your practice and about creating a constant velocity. (Don’t push out a whole bunch of stuff one month and nothing the next. ) These are great things to keep in mind. Here I am writing this weeks later realizing just how much I need to put this into practice.

Alan's Law
“Heroism is Failure” If you have to be a hero on a regular basis, something else is broken.

Short Horizon
If you're working with regular 2 or 4 week iterations, you have an emotional advantage: You know what you’re dealing with. If you're coding for months on end with no iterations, you can feel lost. Also, it gives you the chance for Frequent Course Corrections. Two to four weeks worth of “wrong work” is easier to correct than 6-9 months.

User Stories
Alan emphasized two points. First, user stories are Users' Goals in Users' Terms. They are not technical requirements. They are not about software or technology. They are the essence of the value they need us to deliver.

For developers, it is a reminder of a future conversation – a to-do list.

Alan also suggested the following user stories template:
As a : (Role)
I want (something)
So that (benefit)

User stories allow us to avoid BDUF – Big Design Up Front.

The Last Responsible Moment
Defer decisions until the last responsible moment because that is when we have the most information. Don’t pretend you know things you don’t.

The next portion of Alan's session covered testing and dependency injection and he showed FoxUnit and FoxMock. I saw Alan cover these topics in very good detail last year at Southwest Fox and FoxForward.

Alan started his discussion of refactoring by asking "if" we refactor and what we do when we refactor. It seemed that the audience had a pretty good handle on refactoring. Alan reviewed some common elements of refactoring such as Code Smells. (a hint that something might be wrong in the code)

Alan made the point that you should Enable Change – if you’re afraid to change a piece of code, that’s a smell.

I jotted down a few additional quotes that I thought were worth sharing:

Work on your business not just in your business. - Michael Gerber
Value Developer Cycles over CPU cycles
Eliminate Waste
Prevention is the best cure.
Avoid Complacency

Finally Alan recommended a couple books that I need to add to my reading list:
The Pragmatic Programmer – Andrew Hunt and Dave Thomas
The Goal – Eliyahu M. Goldratt and Jeff Cox

This was one of the best sessions at Southwest Fox this year. I mentioned to Alan that I didn't think he needed to show any code and he countered that it is really important to show people how to test - that talking about it isn't enough. He's probably right about that.

What this session did for me was to help me focus on the bigger picture of best practices. There was a communal enthusiasm in this session - we all wanted to go out and code better, immediately.

Labels: ,

Full Story

Sunday, October 19, 2008

Toni Feltman - Square Peg, Round Hole - Retrofitting Client Server Data Access into Legacy FoxPro Applications

Toni started by letting us know that this session was for people working with VFP apps (not 2.x apps) that need to move from a VFP back end to some other back-end, such as SQL Server, Oracle or any other back-end.

Toni pointed out that it is important to set goals. Up front, the team needs to agree on why you're changing back-ends, what you hope to achieve, and a timeline - taking into account things that are likely to cause you trouble.

Toni suggested that once you pick your data source (And It think maybe even as part of the decision making process) you should become well versed in the tools that you'll be able to use to manage and manipulate your new data source.

Related to that, Toni strongly suggested hiring an expert to get your new database up, running and properly configured. I think this is good advice as even after working with SQL Server for six years I know next to nothing about proper configuration or performance tweaking.

Next, Toni discussed the issue of actually moving the data. She discussed the various approaches of moving or converting the data such as VFP's Upsizing Wizard. (This was mentioned twice this week as being a good tool for moving data from VFP to SQL Server. Toni mentioned that several of the third party tools can convert data much faster than a custom-written VFP app. I didn't realize this and I hope I remember it on my next conversation. We've had several in the past that were very time consuming.

Toni also pointed out that this is the time to decide whether or not to redesign the database. She correctly points out that we rarely design a database correctly the first time, nor is it likely that changes applied to our databases have been done according the best practices. If you have a reasonable timeline, this should be considered an opportunity to redesign your database. If you're on a short timeline, you're likely to need to create an identical design in the new back-end.

Toni reviewed the different approaches we can take to access our new back end such as Remote Views, Cursor Adapters, SPT, and Stored Procedures. She walked us through code examples all but Stored Procedures.

Toni suggested several approaches for getting reacquainted with our legacy code so that we can look for the things that will need to change for the new back end.

Perhaps one of the most important issues Toni raised was that you must have a reproducible process for data conversion. You're going to need to convert over and over as you retrofit your code. You'll need to be able to get clean, live, production data into your new back-end on a regular basis. This is something I also learned from working with Rick Schummer and Steve Sawyer and I couldn't agree more. Nearly every application we develop starts with writing a conversion routine.

Toni wisely instructed us to make sure you can completely disconnect from Production Data – hard coded paths and things like that can really bite you. Toni suggested setting up a virtual machine without a connection to the network drives.

Then, Toni suggesting reviewing you code for commands that are specific to you old style of data access such as USE and SET ORDER. (Using Andrew MacNeill's Code Analyst from VFPX will probably make this a breeze.)

Toni also discussed the very important issues relating to how different back-ends store data differently than VFP, particularly when dealing with NULLs, empty strings, logical, (and I'd offer dates, too.) I have to admit, that I've changed code to handle these issues instead of taking Toni's much smarter approach of creating a library of methods to handle this data once instead of each time you come across it in your code. (I think her approach would also make it easier for you to retrofit a vertical market app for multiple back-ends.)

Toni also mentioned that you should start testing right-away - as soon as you have something to test. This will help to uncover problems earlier in the process instead of later when it will be more costly to address.

She also suggested that you should really try to avoid new development during this process. Adding new features should be pushed off until after the migration is successful.

As usual, Toni gave a well prepared and well presented session with great ideas.

Southwest Fox 2008, Mesa, AZ, October 16 - 19, 2008

Labels: ,

Full Story

Friday, October 17, 2008

Soutwest Fox - Day 1

I've been taking detailed notes in each session and will be blogging soon about the sessions I've attended today. Overall, they have been top notch. I had hoped to have a little more of a live stream of posts, but the content has been pretty think so I've only had time to take notes, not make them web-ready.

So far the highlight for me has been Alan Stevens' session, Manage Complexity with Agility.

One overall positive comment: Each room has giant screens and each projector is set to use the full screen. I've been sitting in the back row for some sessions (to get power) and I've been able to see every line of code shown. This conference is doing this better than any conference I can remember in recent history. Because the screens are so large, some of the slides and windows have been down below the horizon of people in chairs. Usually the speakers remember to move thing up to the top.

Two more sessions to go and then perhaps some time to post some content-filled updates.

Labels: ,

Full Story

Thursday, October 16, 2008

On the way to Southwest Fox

I’m on a plane heading to Phoenix for Southwest Fox and I can’t wait to get there. I’ve been so busy lately that I haven’t even really had time to look at the session schedule let alone the downloadable materials.

There are so many promising sessions it will be hard to decide which session to see during some of the time slots.

I’m particularly interested in Doug Hennig’s session, Creating Exlporer Interfaces in Visual FoxPro. I had just starting playing with the DBI controls that came with Sedna the day before Doug posted his excellent teaser video for this session.. The video convinced me to stop playing around and wait for Doug’s session. This could be one of the many sessions that “pays for the conference” for me.

I’m also interested in several sessions that have received great reviews at DAFUG. Perhaps the thing I miss most from Michigan is DAFUG. I’ve missed rehearsals of at least three sessions that I want to see in Mesa.

Cathy Pountney’s Customizing your vertical market Application got great reviews and although I don’t currently have a vertical market app, there is potential and I’m really anxious to see this session.

I’ve also heard great things about Toni Feltman’s Square Peg, Round Hole – Retrofitting Client Server Data Access into Legacy FoxPro Applications. All the VFP apps I’m working on now have a SQL Server back end, but I’m expecting that there will be an increasing number of opportunities to retrofit legacy apps and I’d like to get as many tips and tricks into my arsenal to better prepare me for such opportunities.

I also want to see the session that Rick Schummer just rehearsed at DAFUG last week.

After seeing Alan Steven’s great session on TDD last year, I’m really looking forward to both Ignorance is Bliss: Why you don’t need to know where your data is stored and Manage Complexity with Agility. Following him on his blog and twitter over the last year has certainly shown that he is passionate about these issues.

There are also sessions by Rick Strahl, Rick Borup and Barbara Peisch, Craig Boyd, Andrew MacNeil and Mike Feltman.

There are also several sessions which are aimed at beginners and others that I’ve seen before (or seen something similar before) that I’d attend this time if I could squeeze them in. Watching Andy Kramek talk about Working with Objects in Visual FoxPro would certainly yield something new or clarifying for me. Barbara’s session on Understanding scope and Mike Feltman's session on Collections Arrays and Iteration would do the same.

I’m not sure how I’ll squeeze them all in, but I’m really looking forward to trying.
As a side note, this is the first flight I’ve taken with an MP3 player full of music. What a difference that makes! I downloaded several podcasts from and have listened to the first 3 (from 2004/2005) and have really enjoyed most of the music included.) I haven’t listened to a flight full of music since my walkman days in the 80’s. What a difference it makes on a longer flight!

I’m looking forward to getting on the ground and getting set up to stream the keynote tonight.
I’ll be posting here more as I work my way through the conference and I’ll likely be hitting twitter a bit throughout the conference as well.

Labels: , ,

Full Story

Tuesday, May 6, 2008

Southwest Fox - reasons to go

Southwest Fox 2008, Mesa, AZ, October 16 - 19, 2008

Although I'm certain that anyone that reads this blog and has interest in VFP already knows about the fabulous Southwest Fox conference, it is possible that they might not have seen the new brochure the organizers have posted.

They crafted this brochure to help would-be attendees convince decision makers that this conference is worth attending. (If the low cost and modest hotel prices weren't enough.)

I think they've done two great things in this brochure. First, they published the GLGDW style session abstracts which tell you exactly what you'll be getting out of the session. Instead of just reading the title "Introduction to Transact SQL" and having to guess for yourself whether you're ahead of or behind the session concepts, you can see exactly what the speaker is going to discuss.

There have been many times I've attended a session at a conference because the title sounded like something that might be of interest but turned out to be some other interpretation of those words that I hadn't imagined.

The other thing they've done is to post the speakers bios, which is fairly common, but demonstrates something that should be emphasized: Many of the speakers posted contact info right in the bios.

I think the brochure should have emphasized a couple things more strongly. One is that these speakers are all very accessible. I'm certain that nearly all, if not all, of the speakers will post their contact info during the session if they didn't do it in the bio. I've often heard - even at this conference - that the speakers seem to be "clique-y" (how the hell would you spell that word if it existed?) With some rare exceptions, this is far from the truth. I once might have even shared this opinion, but found that it was my perception that was wrong, not the speakers' attitudes. The fact that they all stand around in groups laughing with each other and talking about things both professional and personal demonstrates their inclusiveness and nothing else. Each of these people started out as some sort of attendee or "outsider" and got to know the others in person or online over time.

Any attendee should feel free to approach any of the speakers throughout the conference, whether it be around sessions, social events or the bar.

The second thing that should be enhanced is the value of networking. Some employers might see networking as an opportunity for an employee to find a better job. (And this is true.) The thing that the employer needs to recognize, though, is that this network gives a developer a peer group with which to bounce things around. There are countless shops that have a single developer or perhaps a pair. If these people aren't familiar with or don't have access to local user groups or online resources, they may be living in a vacuum. A developer really needs to be exposed to other ideas and procedures. (Also an argument for the conference.) Interacting with this peer group at the conference and after the conference can yield incalculable benefits for the employer in terms of better productivity, better code, and new resources that can save time and money down the road.

Finally, it might not happen to every developer, but I'm sure that it happens at least once per conference where an attendee feels that one session "paid" for the conference. This may sound ludicrous, but it does happen.

So, if you know someone who needs help getting approval, steer them towards the brochure and tell them to emphasize the openness and accessibility of the speakers and the long-term benefits of networking.

(Oh, the brochure is a PDF! It drives me nuts that the registration form is a Word Doc for the nth year in a row.)

Labels: ,

Full Story

Tuesday, March 18, 2008


I'm sure that pretty much everyone knows you can press ALT-TAB to move between open applications in Windows. I have often found myself trying to use ALT-TAB to move between open tabs or windows within applications such as Visual Studio and Visual FoxPro.

Some time ago, I was watching a video by Beth Massi on VB.NET's refactoring tools. In the video, I noticed that they were using CTRL-TAB to move between open tabs in Visual Studio. I didn't realize you could do that and thought it was pretty cool. When you do, you get a dialog like the one below and as you continue to press TAB the selection moves down the "Active Files" list until you let go of the CTRL key, just like ALT-TAB. This has already saved me a great deal of time and aggravation.


Not surprisingly, this also works in SQL Server Management Studio.


Just today, I decided to try CTRL-TAB in VFP. Guess what, it works! It doesn't bring up any sort of dialog but it does cycle through all the open windows. I'm sure all you veterans already knew this, but I just discovered it for the first time and I'm really happy to know it is there.

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.

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 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: 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:

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 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 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 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

Saturday, September 8, 2007

FoxForward - day 2, part 2

FoxForward 2007 - Alpharetta, GA USA - September 7th-9th

I had lunch with Tod McKenna, Michael Babcock and Paul Ray. I got the chance to ask Tod more about his session and his background. Tod has great ideas about Data Warehousing and what it means to VFP developers. As usual, the conversations outside of the sessions can be as valuable as the sessions themselves.

Subversion - Garrett Fitzgerald

Garrett gave us a soup to nuts session on Subversion.

I have to tell you, my initial reaction was "yuck." Although I've had my share of troubles with VSS, I'm not sure I'd ever chose a tool that required command line setup and configuration.

Garrett did a good job of explaining the differences in approach between VSS and Subversion in terms of check-in and check-out behind the scenes. He also talked about how the revision numbers are handled differently. (VSS: 1,2,3, Subversion doesn't need to be sequential.)

Ok, I can't take anymore - I'm a GUI kinda guy - Subversion is not for me. Hey, the guy in the front row just said "this could really use a GUI front end." Garret mentioned that there is an API so it could be done.

Between VSS and Source Off Site I'm happy. It was a one time investment and it pays off a little more often that it should!

Off to the last session of the day - and it's mine.

Labels: ,

Full Story

FoxForward - Day 2, Part 1

Did I mention I'm in Atlanta? Perhaps the best thing about this conference for me personally is that the hotel serves Coke, not Pepsi. :)

I got up on time and got set up for my 8:00 session without any trouble. There are two "big" rooms and one small room. I was in the small room. There are about 56 people here including speakers. I had 2 in the room at 8:00. (It was early, right?) Before I got started one of the attendees said that reason she was at this conference was to see my session. (No pressure there!) She's working on an international application where color-coding regions based on certain values would be beneficial. We looked at the MapPoint site and it doesn't look like MapPoint Europe fully supports Ireland so she might be out of luck.

A few minutes into the session I was up to 5 people.

The session went ok. My newly rebuilt tablet wasn't quite as snappy as I'd hoped for, but it did ok. (My impatience and double clicking slowed things down too) Everyone stayed until the end except for Kevin Cully who had to go get ready for his session or run the conference or something like that.

We had some great questions and discussion during the session and it helped me remember why I think MapPoint is such a cool, underrated tool.

Although I really just wanted to sleep, I went to see Brian Marquis' Fox Trails session which discussed his approach for VFP web development which is based on concepts from the Ruby on Rails framework.

For the third session this morning I went to Tod McKenna's Data Warehousing with VFP. Tod's session was great and targeted at people like me who have only heard of "Data Warehousing." Tod did a really good job of explaining the concepts behind data warehousing and showed several examples of VFP code that is used in the process. If you've never seen an "intro to Data Warehousing" session, I'd highly recommend Tod's session. (I'm also going to recommend that he get on DAFUG's agenda at some point in the future.)

Next up - lunch.

Labels: ,

Full Story

Friday, September 7, 2007

FoxForward - Day 1

I went down and picked up my name tag, conference book and various other goodies from Kevin Cully's wife, Kim, and joined the crowd for the "Get to know you session" over beer, cheese, crackers and cookies. I had a chance to chat with Dave Bernard, Michael Babcock, Ed Leafe, Kevin Ragsdale, Kevin Cully and others.

Kevin Ragsdale opened with part one of a two part "VFP 101 Crash Course" which I've heard was very good from at least one attendee. It was described as "how to be a 10-year veteran in 3 hours" by this attendee.

I'd seen Dave's session on "Instrumenting your application" so I took advantage of the time to practice my session a little more. I really needed the time because I rebuilt my machine from scratch late this week and hadn't actually tested every example. (I know, I broke a cardinal rule for speakers.)

So, I worked through my examples and everything was going great until I fired up one VFP form and the installer dialog popped up. I don't have any idea what I needed, but I'm sooo glad that I brought my MSDN disks with me.

I did come down to see Stein Goering's Web Connection Revisited. Stein did a great job of walking us through version 5. Some of the highlights include Rick's integration with Visual Studio's IDE for easier building of pages. Actually - it looks just as if you were working on a ASP.NET page with a C# or VB code behind page - except that the code behind page is a PRG! Way cool.

Stein walked through several aspects of Rick Strahl's framework including security. He also talked about Rick's "panels" which can be made visible or not through code. (In this case he showed how a user's details were not visible until after the proper credentials were supplied.)

Stein mentioned that the new framework is very backward compatible and indicated that he brought forward his entire code-base which he started in 1997. He said it only took him 2-3 hours to convert the entire application.

I couldn't count how many times Stein said "Rick makes this easy"

Late Evening Session

After the session we all walked across the parking lot to the Loafing Leprechaun that did a really great job of taking care of us - and even provided separate checks for everyone. There were at least 30 of us, maybe more and one waitress took care of the whole crowd. (I think, anyway)

The conversation was great - as it usually is at a VFP conference. I sat with Dave Bernard, Alan Stevens (whom I hadn't met before), Michael Babcock and Brandon Harker. I particularly enjoyed hearing Dave's ideas on the future of his company and some of his clients. I also enjoyed talking with Alan about his Unit Testing session, which unfortunately is scheduled opposite my session. (I thought i might get a chance to see it yet since he's added a second session to fill an opening created by a speaker that couldn't be here. Unfortunately - it is opposite me again!) Fortunately I'm already signed up to see him present it as a pre-conference session at Southwest Fox.

I left a bit earlier than some of the others so that I could walk through my sample code one last time.

Labels: ,

Full Story

FoxForward - getting here

Made it to the airport on time for my 7:09 AM departure. Whew.

Slept on the plane.

Landed, got my luggage, picked up my rental car. (Remind me never to get the cheapest no-name rental from Orbitz again.) The service was a bit slow and at one point the clerk asked where I worked and looked at the Geeks and Gurus logo on my shirt and asked If I could take a look at her computer, which was on the fritz. I told her I really write custom software and don't spend so much time fixing computers - which is mostly true these days. Anyway, got the hand-written paperwork (since the computer wasn't working) and followed her instructions to take a U-turn around the counter and cross the street and wait in the "orange" section. Fortunately a shuttle was there waiting and off we went.

The shuttle took me to the off-airport lot where my car was ready and waiting. I was told it was a purple Cobalt in space B5. I couldn't see any markings for the spaces, but I did see two Cobalts. One I'd call blue and one gray - no purple. The keys didn't work in the blue one so I tried the gray one and lo-and-behold it is actually purple in the right light. These cars we all so beat up I couldn't believe they'd rent them. Anyway, other than the fact that I was parked in I haven't had any problems with the car so far.

The hotel has been great so far. Very courteous help checking me in - keys were ready upon arrival. Took my stuff up and came back down to move the car - leaving the room keys in the room. The front desk kindly made me another set and told me to bring the first set down when I had a chance. A little while later I went across the hall to get a coke and discovered I took the old set of keys which didn't work any more! Back downstairs where they kindly made the original set work again.

So I'm here and need to spend some time reviewing my session. The conference starts today, but I don't present until tomorrow at 8:00 am.

Labels: , , ,

Full Story

Thursday, July 5, 2007

Someone is interested in VFP developers

I just got a letter from Servoy USA in Thousand Oaks, CA. This letter is specifically aimed at VFP developers and starts out like this:
Microsoft recently announced that they are discontinuing Visual FoxPro. To make things more confusing they are not offering you any serious alternatives; Microsoft would like you to move your products to their Dynamics platform: that way you will push more Microsoft licenses to your customers.

Their other platform .Net is great but will reduce the productivity of your developers so maybe it's time for you to have a serious look at your alternatives.

I find this letter interesting and not just for the poor grammar.

First: This is the first time I've seen the assertion that Microsoft wants us to move to Dynamics. The letter dismisses .NET which is what I think most VFP developers consider as Microsoft's "upgrade path."

Second: At least one company in California thinks of VFP developers as an untapped market for their product even though they seem to be fairly unfamiliar with what is going on in the VFP world.

I'm not trying to get into the whole future of VFP issue. I just thought that it was interesting to get this letter. I don't think the fact that I'm a VFP developer has put me on any one's mailing list in quite some time.


Full Story

Wednesday, April 25, 2007

Speaking again

It has been a few years since I've had the pleasure of speaking at a Developers Conference. I'm excited to be on the schedule for this year's FoxForward in Atlanta, September 07 -09.

I'll be presenting Map Your Data: Using MapPoint and Visual FoxPro Together, an updated version of the MapPoint and Visual FoxPro session that I presented at the GLGDW and FoxEssentials conferences in 2002 and 2003.

I'm looking forward to speaking again and I'm looking forward to some of the other sessions - particulary Alan Stevens' session on Test Driven Development and Tod McKenna's session on Data Warehousing. Some other interesting topics include VFP and MySQL and Subversion and VFP.

There are a couple other sessions that I've already seen that could alone justify attending this conference inluding sessions by Bo Durban, Dave Bernard and Ed Leafe.

I didn't make it to last year's inaugural FoxForward conference and I'm looking forward to checking it out.
If you can't make Georgia in September, there is always Southwest Fox in Mesa, AZ in October. I've attended this conference since it started and 2007 looks to carry on a fine tradition.


Full Story