![]() |
![]() ![]()
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Essential Fox Conference presents Essential Fox 2003. This is your chance to rub shoulders with the gurus and hear it firsthand. Take your code to the next level, register today for the Essential Fox Conference. Ken Levy (Microsoft Visual FoxPro Product Manager), will deliver the keynote address to kick off the Essential Fox Conference with VFP 8.0! Kent Beck will discuss the latest in Extreme Programming!
Overview
by Michel Fournier
Welcome to our coverage of Essential Fox. This year, Mark McCasland and Robert Ohrstedt will be our main reporters. We will also have a contribution by Dave Aring who will cover the Round Table Discussion on Thursday night as a pre event to the conference. Have a great Essential Fox 2003 conference!
Round table discussion (Thursday, April 24)
by Dave Aring
If I may quote a song from Rogers & Hammerstein's "Oklahoma", "Everything's Up to Date in Kansas City". For you doubters on the East and Left Coasts, I offer, as evidence, the following facts. The streets are paved, there are no herds of cattle wandering down those streets, and my hotel room has a "gen-u-wine indoor turlet". However, the biggest chunk of evidence is that beginning on Friday, April 25th, the Essential Fox Conference 2003, featuring Microsoft's Visual FoxPro 8 (VFP), will begin. This is the first conference in North America to showcase this latest version of Microsoft's Visual FoxPro. The actual conference runs from Friday through the following Monday. However, VFP fanatics can actually spend more than a week in pre-conference, conference, and post-conference sessions. This past Tuesday, a group of "newbies" (and not-so-newbies) began an intense, concentrated, 3-day VFP "Boot Camp" to learn the fundamental capabilities of VFP 8. This past Wednesday evening, those "boot campers" had the opportunity to view a VFP-based framework in action. Last night (Thursday), the local users group, The Midwest FoxPro Users Group, presented a free panel discussion featuring many of the FoxPro community's "A-Team" speakers. This "Pocket Protector Pow Wow" was a very special event deftly moderated by Doug Carpenter, the current President of the user group. With speakers like Marcia Akins, Craig Berntson, Jim Booth, Marcus Egger, Doug Hennig, Whil Hentzen, Andy Kramek, Rick Schummer, and Drew Speedie, this group quickly established the fact that they had opinions and were not afraid to express them.
Doug Carpenter kept the questions and answers flowing and still allowed all of the panelists to express their opinions on a variety of topics. The questions that were presented to the panel were pre-determined by reviewing suggested questions submitted by current members of the users group and arriving at a final set of questions guaranteed to elicit provocative and thought-provoking answers. Doug Carpenter allowed panel members to introduce themselves and qualify their selection to the panel by briefly listing recent accomplishments. Fortunately, each one minimized their endeavors to leave time for more questions. To save time in the future, these panelists are just going to have to be LESS qualified. The panel was extremely knowledgeable (duh!) and entertaining. Not unlike watching Frank, Dean, Sammy, and Joey in the 60s. For one evening in Kansas City, we had access to our own entertaining version of the Rat Pack. Hey, I hereby dub the nine panelists, the "Essential Fox RAT(Pack)". While there is not enough space to give a complete transcript of the answers, there were enough pearls of wisdom that I feel compelled to mention as many highlights as space allows. Let's hear what they had to say, shall we? Oh yeah, one last thing. Panelists were allowed to "pass" if they didn't have an opinion or nothing else to add to what had already been said. What is your favorite and/or most dreaded feature/aspect/behavior of VFP and/or .Net and why? MA: I dread the C5 error. Actually, I love all of the aspects of VFP, but I guess that in VFP8, my favorite new feature is the Member Classes. CB: Structured error handling because it reduces the amount of code that needs to be written to trap for errors as well as providing for the better handling of errors. The cursor adapter is cool too because it allows for "plug and play" data sources. What are my least favorite features? The report writer and the menu designer. JB: I LIKE the C5 errors! It is not a bug, it's a feature. It's VFP's way to tell me that I have spent too much time working, so I take a break while I reboot. Oh yes, in VFP 8, the Collection Class has some exciting possibilities. WH: You may not believe this, but I really like the command window. It's makes testing code easy. Great interactive uses. I use it all the time. ME: I have to agree with Whil. I use the command window a lot to test code from other languages. I am always dragging it around. DS: What? You can DRAG the command window??? ME: Watch this. You can resize it too, Drew. DS: Amazing! ME: Another thing I like about VFP is you get very good productivity out of it. On the downside, I think the VFP compiler lets too many errors get through without being caught. This doesn't happen to ME, of course, but I have seen errors in OTHER developer's code. "Code" magazine is covering a lot of .NET stuff and .NET can do just about everything, but the same things that VFP can do, it does BETTER than .NET. AK: I like the improved SQL support. It still isn't fully ANSI92 compliant, but it is getting there. The most dreaded feature? No question; it's the Report Designer. RS: Simple! The puzzle's back! Like everyone else, the C5s aren't fun. I also like the flexibility of the IDE. The ability to build your own tools just makes life easier and that can't be a bad thing. I also like the fact that the Watch Window in the Debugger has IntelliSense. DS: Oh, it's my turn. Sorry, I'm listening to the hockey playoffs. Well, I guess that Try...Catch...Finally would be cool if my code ever had errors, but since it doesn't, I really don't have much use for it. I never use data, so cursor adapters are out. What I like best of VFP's new features is the VERY powerful BindEvent function. Of course, now that I know I can drag and resize the command window, that moves up the list. What is on your personal wish list for VFP 9 and what do you think the end users would want? RS: I would really like to preserve the case of custom members on the property sheet and in IntelliSense. I would also like to see some additional filtering and sorting capabilities in the property sheets. I use Project Hooks a lot so it would be nice to have something like being able to execute PRE/POST compile code. Oh yeah, I want to be able to encrypt the exes without worrying about someone ReFoxing it. MA: I really don't have a wish list because if I need to do something that VFP doesn't natively do, I usually build it. JB: I would love to see user-defined data types with the capability to limit possible values. This would go a long way to reduce the need for validation code. ME: I don't think it needs many new features, but what it does need is to fine tune many of the existing features. An editor with many of the .NET editor features like regions, outlining, etc. would certainly make life easier. Something as simple as cutting and pasting an IF statement from one section to another AND having it automatically indented properly would be nice. WH: I don't have a wish list. ??: Better support for the OS! ??: A new EULA! WH: I guess what I would really like to see is a change in the marketing. A specific example that would cost Microsoft NOTHING would be one where volunteers from the FoxPro community take a third party tool, Active-X control, etc. and fully document it with FoxPro examples. No cost to the vendor or Microsoft and the developers would be more willing to use the products. It's a win-win. DH: OOP Menus and OOP Reports. They are the only things that aren't oopified. DS: What? My turn? I was just moving the command window all over the place. Really cool. Well, let me see. I am going to open up this list... (reading from a file on his laptop)... RS: He's scrolling! At this point, Drew began to reel off a couple of dozen proposed enhancements too rapidly to write down and too numerous to mention here. If you really, really want a list of Drew's suggested improvements, e-mail him at: info@visionds.com. At this point, members of the audience started yelling out suggestions. Kelly Conway suggested the ability to debug stored procedures. Sue Cunningham wants the ability to set tab order and NOT have the buttons change when dragging. Moderator Doug Carpenter brought the discussion back on target, but it was one of the panelists who reminded and encouraged ALL developers to keep telling Microsoft what you want in the next version of VFP. THAT is precisely what happened with VFP 8. MANY of the new enhancements are a direct result of developer requests. Back to the questions. Is .NET catching on as fast as you had expected? How do you see this impacting VFP? MA: I had no pre-conceived expectations, so I can't really comment. JB: Not so far. Is .NET revolutionary? Yes. Does it hold promise? Yes. It is not moving as fast as I expected because there is no real need in the current market. Essentially, we have tools that can do anything that .NET can do so the clients do not see much benefit in converting old apps. Nevertheless, NOW is the time to be staying ahead of the users and learning .NET. Learn NOW for later use; NOT later when someone asks you to develop in .NET. AK: Isn't it funny how VFP, Access, and SQL Server are not included in .NET? One reason is that .NET is not particularly used for data-centric applications. Things are moving slowly because, one, the technology does not offer anything new; two, extensive (and expensive) hardware upgrades are required, and three, until the user MUST go to .NET, they won't. It is kind of a Catch-22 situation. DS: I am not well-versed enough in .NET, so I can't make a comment. CB: I think it is about on pace. Right now, it is mostly being used by developers who are learning to use it effectively. Version 1.1 was released today, but until version 2.0 comes out there will be no real push to migrate to .NET. WH: It is not being adopted as rapidly as many thought it would be. WROX publications has gone bankrupt and one of the main reasons is that they "bet the farm" on .NET books and those books just haven't sold at the rated they expected. The present economy probably has something to do with it. The willingness to purchase something that essentially is very similar to what is already available doesn't seem to make much sense. RS: I think it is catching on. Many developers are staying away from it because it is the "dreaded" 1.0 version. They also are working on current projects which are not using .NET. Lastly, the learning curve must be addressed. Fortunately, VFPers have one of the smallest curves because we are already familiar with OOP (among other things). What is the next "Big Thing"? MA: VFP running on Linux. JB: You want predictions? OK. Bigger hard drives. Faster computers. Bloated software. CB: Going out on a limb are we, Jim? DH: The future is almost here. Wireless access. CB: Based on previous product release cycles, I think VFP 9 will be out in 18 months. I agree with Doug. Wireless technology is on the way and technology advancements are not going to slow down. Companies want profits because their shareholders want profits. Answering to the shareholders has always been in the forefront and improving the product an afterthought. The companies that evolve are the companies that grow and are profitable. (Craig mentioned the name of the company he works for, but, personally, I feel I shouldn't mention their name) At any rate, this company (that almost everyone has heard of) is VERY profitable because they are adapting and producing products that weren't even in their inventory five years ago. ME: I think that technology will not slow down, but probably speed up. The "little things" will improve. I have been beta testing the next version of Office for the past three months and the other day I had to do something on a computer with the current version of Office. I felt out of place. I thought to myself, three months ago, we were living in a very primitive place. One thing I see for the future is that laptop screens, one of the heaviest parts of a laptop will be made lighter and brighter. AK: My hope for the future is that software manufacturers REALLY listen to the end users. They certainly aren't doing it now. This will require a different business model for most of these companies. Are they willing to change? Who knows? WH: To quote (someone's name which this reporter did not hear)... "The future is already here. It just isn't evenly distributed." I am predicting that something big and good is about to happen. From a developer's standpoint - AppDev on Linux. From the customer's/client's standpoint - universal access to data. RS: Just a minute. I am putting a call through to the psychic hotline. OK, I KNOW the future, but I am not telling you! At least, not until I make a couple of million bucks. I see a slowdown. It is a contest between technology and the ability to assimilate the new technology. The two are going to have to find a middle ground. DS: This moving of the command window all over the place is really cool. The future? I don't know. I spend most of my time working in version of software that are stable. I am usually one or two versions behind the most current just because I want the stability. What is the "coolest" thing you or someone else did in VFP? MA: Too many to mention. I am constantly amazed. CB: QBFBuilder. It is a software that, essentially, takes a data entry form and allows the user to enter search requirements into the fields and then searches to return the record whose values match the values that were typed into the field. JB: The thing that I remember impressing me is the first time I compiled some old code in FoxBase 1.0 and it immediately ran SEVEN times faster than it had been running. ME: I remember the first time I saw a scheduling module that a client wrote. It looked like an ActiveX control and had really good performance. It was written entirely in FoxPro. DH: The first "monster grid" I ever saw. It was for a financial application and contained information about individual securities. It contained "tons" of columns and was very flexible in it's ability to sort and filter. WH: A form that displayed a PDF file and the user had the ability to annotate the document similar to John Madden drawing on the screen. AK: What amazes me is all of the hoops we had to jump through in the "olden days" and how easily we can now accomplish the same effect with VFP. RS: No question. For me it was Brian Jones' J-Fast application. After seeing that application, I thought to myself, "What I do is pathetic." DS: I KNOW my code is pathetic and I don't have to see J-Fast. RS: One of my co-workers suggested that I use the J-Fast application as an inspiration instead of a reminder of how pathetic I (felt I) was. DS: Sue Cunningham showed me one of her applications that uses MaxFrame and it looked like nothing I had ever seen before. She was using my code, but the interface was totally different. Forms looked like a notepad. I was intrigued by the fact that she was able to come up with something that I had never even dreamed was possible. Who was one of your mentors/heroes in the VFP community? WH: No question. Doug Hennig and Tom Rettig. CB: All of the panelists. OK, except for Drew. ME: Well for me… Picture a poor Austrian boy sitting alone in the Alps… And now I am sitting here on a panel in Kansas City. I would not be here today if it weren't for Woody Wondzinski. He is the FoxPro god in Germany. I must add Steven Black to the list. He is the person who first invited me to "cross the pond" like Andy likes to say. Of course, Calvin Hsia. DH: Randy Wallin. He was the person who pushed me to complete Stonfield Database Toolkit. Also, Pete Olympia and Whil Hentzen. DS: Gordie Howe. George Goley IV of Microendeavors, Inc. George took me under his wing when no one else would. I have no college experience and dropped out of high school. Other than that I was qualified to work with him on the Mobile Oil Mariner project. A two-week trial period led to a two year job and eventually leader of the project. If I didn't think the $40 per hour fees he was charging me to do some custom software was outrageous, I might not have ever started programming. RS: In the early days, I hung out on Compuserve, read "FoxPro Advisor" and "FoxTalk", plus every book on FoxPro that I could get my hands on. There are lots of people but to name a few… George Goley, Doug Hennig, and Whil Hentzen. MA: First and foremost, my husband, Andy. Whil Hentzen for encouraging me to write and giving me the opportunity. I thank Whil for not saying "No" when I asked him if he wanted a sequel to "MegaFox". JB: Glenn Hart. I never met him, but we communicated often. Tom Rettig. Tom was knowledgeable and one of the kindest persons I ever knew. I can't leave out Andy Griebel. AK: Whil for letting me in on the fun of writing for "FoxTalk" and speaking at the Great Lakes Great Database Workshop. Get up on your soapbox and say anything to the FoxPro Community. RS: Have a passion for what you do. Not just on your job, but everywhere. Get involved in the VFP community. Your job does not end at 5:00 PM. You are (or rather should be) on your job all the time. Learn. Grow. WH: I went to a small all male college to become an engineer. Students had a passion. They would argue over which was better - differential calculus or integral calculus. Being in that environment was like being in a frat house. I have recently acquired a new passion and the excitement, for me, is back. I haven't been this excited about the possibilities like this in almost 10 years. ME: Keep going. Keep doing what you have been doing. Don't be afraid of approaching the speakers. They are not gods. They are normal people. OK, except maybe for Drew. Keep telling Microsoft how many applications you are writing in FoxPro. One last secret. We are up her on this side of the table, but I will tell you that all of you out there on the other side of the table are MUCH MORE knowledgeable than THIS side of the table. CB: Buy my book. Join a user group. If you do not have access to one, start one. If you can't do that, get on line and become a citizen of the FoxPro community electronically. MA: Buy our books. They make great Christmas gifts. JB: I can't tell you how many times I hear, "My boss won't pay for a conference or my boss won't buy a book." If that is the case, YOU buy the book. YOU pay for the conference. If you are going to let your boss control your opportunity to grow, learn, and advance in your job, you will never reach your full potential. DH: Microsoft looks at VFP from an economic standpoint. Upgrade to VFP 8. Buy a new version. Many developers did not upgrade to VFP 7 (from VFP 6) preferring to wait for VFP 8 and Microsoft noted that. They are keeping an even closer eye on the upgrades to VFP 8. This may have a profound affect on future versions. AK: I'm looking for work! On top of that, don't despair. FoxPro is a great tool. In fact, there are many places where VFP is the best tool for the job, but don't close your mind to other things. DS: Upgrade to VFP 8. Use it. I would also like to thank everyone who "puts up with me". Lastly, on GotDotNet, do an Internet search, there are templates for reporting case studies for apps written in FoxPro. The is one way to get FoxPro more publicity. WH: I want to add that I think that the FoxPro community is being marginalized by Microsoft. And on that note, the time scheduled for the meeting was reached. Besides applauding the efforts of the panelists, Doug Carpenter, the President of the MidWest FoxPro Users Group, was commended and applauded for the effort and energy that he put in to make this most special night happen. Already there was talk that this round table discussion might become an annual pre-conference event.
Friday, April 25
Opening Reception
by Mark McCasland The conference got off to a good start with a reception that included the usual cash bar. The event was held in the Trade Show ballroom where the liquids flowed freely [for the right price] as well as the networking and reaquainting of old and virtual friends. Every one was also treated to a cheese and fruit buffet. As an unadvertised bonus, our ballroom was next door to a Doctors' conference which was holding a party complete with a live band that provided excellent background music. Many in attendance were carrying their laptops because the event organizers are providing wireless internet access as well as high-speed ethernet access in the Cyber cafe for the entire conference. For a conference that is only in its second year, the accommodations and amenities are first rate and well organized.
Ken Levy's Keynote Address by Robert Ohrstedt with contributions from Mark McCasland
Approximately 250 dedicated Visual FoxPro developers gathered today in Kansas City, Missouri, to kick off the 2003 Essential Fox Conference, Sponsored by Vision Data Solutions, the event gathered developers from throughout the world, including Europe and Australia.
Developers will immediately find their productivity improved through such language enhancements as the Task pane and toolbox in the IDE, and the addition of an Empty Class, new AddProperty() and RemoveProperty() functions in the base classes, a new collection class, structured error handling, and event binding with BindEvent() and RaiseEvent(). Pointing to these new capabilities, Levy declared that the product now "Has a Lot of power that is untapped" and that Microsoft has a primary focus on developer productivity. He went on to announce that the VFP 8.0 runtime distribution files will be localized for German, Spanish, French, Russian, Korean and Chinese (same as VFP 7.0). The development version will still be offered only in English, but all help files and documentation will be translated. Certain VFP MVPs will be provided with a localization toolkit to allow them to localize VFP 8.0 in their communities' language. Also announced was a new, improved VFP OLE DB provider, which has been tweaked to overcome some initial problems in limited areas. The updated component will be available on the Microsoft VFP Web site in May. The new and improved VFP home page also will have available for download in May a new VFP 8 Evaluation Guide, new samples, slides and tutorials which can be used to introduce clients and developers to the power of the new language. The VFP home page will also sport a new look, with its style and feel consistent with all other .NET sites. The content of the site will also be updated with new whitepapers including "Inside the VFP 8 Task Pane Manager," "Inside the VFP 8 Toolbox," "Creating Mobile Solutions for VFP Developers," and "VFP 8 Applications for Tablet PC's". A template for case studies of VFP applications is available for download from the http://GotDotNet.com/team/vfp website, where developers can post their own case studies highlighting VFP success stories. Other new efforts to boost VFP include an announcement for new content on the http://GotDotNet.com/team/vfp website, and the feature on VFP 8.0 on Microsoft Press Pass at http://www.microsoft.com/presspass which targets journalists world-wide. Microsoft also helped sponsor the VFP 8 focus issue of CoDe Magazine. Levy mentioned in passing that VFP 8.0 had been placed on Microsoft's dedicated support list until at least the year 2010. Levy wrapped up his talk with a preview of the next version of VFP, code named Europa, which will offer many enhancements in user interface design, including dockable user forms, background compilation of the current line in editors and command window, anchor properties for controls for auto-resizing, word-wrap for checkbox captions, an array limit larger than 65K elements, command button picture spacing and positioning, intellisense available in memo fields (and possibly other places), SQL select statements that allow more than nine joins and multiple nested queries, more designer hooks for extensibility, and significant enhancements to the Report Writer!! Ken also encouraged developers to be more active in the FoxPro community, and repeated Microsoft's commitment to Visual FoxPro and the community.
Saturday, April 26
by Mark McCasland Rich Simpson's Mind's Eye Report Engine I started the first full day of the conference attending Rich Simpson's demonstration of his report engine tool. Earlier this year, I did some testing for Rich with this incredible tool, and since last Fall, I have been trying to attend one of his presentations, and this time I actually made it. For those of you not familiar with this tool, I encourage you to download his free evaluation version from his web site. For such a complex and feature rich tool, the incorporation of his report engine into any Visual FoxPro application requires as few as 4 lines of code. One to initialize a public, local or private variable [or an object property to hold a reference to the report engine object]. A second line to create the object, a third to pass a a VFP report file to the engine to render, and the fourth to display the results in his report engine window. If you have to use CREATEOBJECT() instead of NEWOBJECT(), then you would need a line if code to SET CLASSLIB TO Rich's class prior to creating the object. Of course, with all the features, you have complete control over the report since it is an object, there is no limit to the amount of code you can use to manipulate the report and its contents. The report engine can be used to fully automate the creation of reports without ever displaying any user interface. There is built in support for e-mailing reports, saving the report directly to a PDF without the need for any other software to do so. If you need to display the report, you can do so in a top level form, in the VFP screen or your application's top level form. No matter how you display it, you always have an object reference to it. Rich showed the graphical support build right into the report object that can be changed dynamically just by setting properties and calling custom methods. Graphs can also be added as needed through these same properties and methods. There is support for all the types of graphs including bar and pie charts. Next, he showed how he could create a 12 month calendar and dynamically add a picture just by drawing a box in the blank top half of each page [month] with the mouse. After drawing the box where the picture would go, a get picture dialogue popped up so the picture could be selected. While each report is its own object, so is each page in the report. Pages can be different sizes and orientations. FoxPro reports can be chained just by appending each subsequent report to the one already in the report engine. You can even add blank pages programmatically. Some of the page properties include a watermark, the orientation of the watermark and its properties like color, and what printer bin to use for its paper source. Some of us joke with Rich about he is the only vendor we know who is so responsive to developer requests to the point where he has issued multiple revisions (enhancements) to his product in one day. You have nothing to lose by trying out this product and nothing but eye-popping reporting capabilities to gain. Whil Hentzen's VFP/Linux Sessions This was the first of two sessions I attended today where Whil presented on Visual FoxPro and Linux. Part 1 was on the business case for using Linux, and Part 2 was on the technical issues. Whil made a very solid argument for the business case where we, as developers, whether it be with Visual FoxPro or not, have to start considering open source in general and Linux specifically. He pointed out that Fox opportunities on Windows platforms are dwindling while Linux application development is growing at a significant rate. Therefore, the FoxPro plus Linux combination equals opportunity.
Whil then went on to explain the Linux Operating System and what it is based on. He covered the different flavors, Red Hat, Mandrake, SuSE, and some about how open source works. Linux can be used for various business needs including web servers, file servers, desktops, workstations, laptops, mail servers and dedicated uses like print servers and firewalls. All of which usually come configurable and independently selectable on the same set of CDs [or downloaded files off the internet]. He explained how far Linux has come in just the last 6 to 18 months especially with the latest versions that are now very easy to install. This has opened up opportunities for developers. The impetus for this has come from several areas. One is publicity and news coverage. Another is schools and governments are starting to warm up to the idea of Linux to the point where it is now a viable option. In a poll this past spring, Linux is now on the radar screens of 60% of CIOs [Chief Information Officers]. Finally, because of its market penetration, OpenOffice.org is a serious competitor with Microsoft Office [except for e-mail]. Microsoft Office users who share files with OpenOffice users can not tell the files came from OpenOffice. There are many reasons people are migrating to Linux. Inexpensive and licening are probably the biggest. Linux is also perceived to be more secure and open source code is more appealing to proprietary data especially to governments outside the United States. Trust and dependability are also on the list as well as the maturation of the OS for desktops. Whil then gave a brief history about the evolution of open source ahd how it works. One of his examples was the development of GenScrnX which was a tool developed, ironically, by Ken Levy. However, it came with the source code, and developers provided feedback and enhancements which were incorporated into the tool. He also pointed out that one of the benefits of open source is that "with enough eyes, all bugs are shallow." In other words, with so many developers poring over the code, the detection and elimination of bugs is much easier [and likely]. As you may or may not know, Whil has started a new web site to chronicle the licensing issues regarding the distributables [runtime files, etc.] for FoxPro and his request for legal clarification from the Microsoft legal team. The response was posted in the Universal Thread news. For further developments, Whil asks that you continue to monitor http://www.LinuxTransfer.com. Cathy Pountney's Hidden Secrets of the Visual FoxPro IDE After sitting through such intense sessions like VFP/Linux and Rich's Report Engine, Cathy's session was a wonderful change of pace. Her objective was not to enlighten us with every one of her tips because we should already know about the majority of them. However, she hoped each of us would at least take away a few tidbits and experience a couple of "Ohhh! So that's how you do it" moments. Of course, she did accomplish her objective.
She then showed how to Ctrl and Alt drag-and-drop in the editor to either Copy & Paste or Cut & Paste blocked code without having to use Ctrl+C [or Ctrl+X] and Ctrl+V. One of the cool new features in VFP8 is how to use zdef and zloc to show #DEFINEs and local variables when you get ready to use them without having to retype them. Before VFP8, you could not INSERT INTO a table the values from an object created by SCATTER NAME oFields. Well, now you can -- INSERT INTO MyTable FROM NAME oFields. Now isn't that cool! Did you also know you can now get an object reference to a browse window? Try BROWSE NAME oBrowse then type oBrowse. in the command window. Intellisense will kick in and you can now control the browse window like any other object. Now, just for fun, open the Task Pane and play Minesweeper or type ACTIVATE WINDOW PUZZLE in the command window. Happy Hour
by Robert Ohrstedt Saturday dawned bright and cheerful at the Essential Fox conference in Kansas City, Missouri, with attendees breaking out into specialized sessions on various topics, ranging from traditional Visual FoxPro techniques to the newest ways of interoperating VFP with Visual Studio .NET applications. The mood of the conference was more upbeat than any this writer has seen, with a great deal more confidence in the future of VFP than there seems to have been in the past few years. The conference also includes a wide cross section of ages, from those in their late twenties to the 60+ gurus. Jim Booth started the day out on a strong note with his presentation on the variety of data structures now available in VFP. He led off by discussing the pros and cons of all three - arrays, cursors and the new collection object. His energetic style and a strong topic awakened a sleepy group, many of whom had been out too late the ni9ght before. Arrays, Booth pointed out, still have their place. But there are many limitations in using them: memory limits and the difficulty in naming columns. Their strongest advantage is the ability to store divergent data types at the same time, including object references. This is something cursors cannot accomplish, since they are actually temporary tables which VFP manages either in memory or on disk, as resources allow. And while the limitations imposed on cursors are less significant than those applied to arrays, their inability to handle multiple data types makes them difficult for many OOP centered designs. Thus, the introduction of the collection object marks a major departure for VFP developers, allowing the storage and manipulation of data without scattering global variables about, or losing scope on local variables without being aware of it (before the crash). The collection object, being an object, handles divergent data - including object references, with aplomb. Elements can be accessed by name or index, and there are no known limits on the amount of data which they can store. Default properties are name, items, tag and count; other properties can be added and removed on the fly with the new ADDPROPERTY() and REMOVEPROPERTY() functions. Unlike other classes, however, the collection object doesn't require properties to be defined for every piece of data. Information is stored in the collection object with one line of code: loCollection.add(some value, some key) Data can then be retrieved by referencing the item index or the key, as in lcVar=loCollection.item(7)or lnVar=loCollection(some key)Within the object, data can be ordered, added before or after other items (specified as a parameter). And since each item in the collection is an object, they can be manipulated much as other objects are. The possibilities are endless. Jim Duffy introduced SQL Server Administration, with an extensive discussion of security issues. Because SQL is a database server, users can (and should) be assigned permissions based on the groups they are members of; and since SQL Server can use Windows NT authentication services, this need not impose additional burdens on a well administered network. Demonstrating how users are created with the Enterprise Manger, Duffy suggested that the guest account be removed, and the System Administrator password be set to a series of random characters that would be impossible to remember, and nearly impossible to hack. Logs should be stored on a different disk, and a rigid backup regime scheduled to insure recoverability. As SQL server becomes more prevalent as a back-end data store for VFP applications, developers should acquaint themselves with Administration of the database server, if for no other reason than that will be able to understand and communicate with DBAs more effectively. Despite the mid-morning hour, Doug Hennig offered a "meat and potatoes" look at applying VFP 8.0 features in the real world. In his own energetic style, he offered pointers on applying many new features that quickly address issues developers have struggled to work around for years. These include the ability to visually subclass the pageframe and page classes, sot that pages added on the fly are based on the developer's classes instead of the VFP base classes. A more critical improvement, for many, is the new native ability to highlight a row on a grid, as well as the new autofit property that automatically sizes grid columns to their contents. Certainly no discussion of VFP 8.0 would be complete without mentioning the new try/catch structured error handling. With the introduction of this feature, VFP developers now have the tools for local, object and global error handling built into the language. Finally, Duffy waxed poetic on the new Dynamic Data Object, created with the SCATTER NAME command. Issuing the command results in the creation of an object with no properties or methods, except for properties representing the fields of the cursor from which a record is being scattered. This results in a very lightweight classed that can be passed to COM objects with a minimum of overhead. Andy Kramek offered some new perspectives on designing and using classes, emphasizing reusability and delegation to achieve the maximum usefulness from one's class structure. Repeating the mantra "must, could, should," he explained the importance of having a definite understanding of what each class must do before sitting down at the keyboard. With such an architectural overview in mind, one can quickly design and build class structures that speed development and enhance applications while at the same time maximizing reusability, that Holy Grail of object oriented programming. Recommending that class functionality be limited to what it must do, Kramek stated that proper delegation is the key to an effective class structure. While specialized behavior (what the class should do) is limited to the particular instance of its use, behavior beyond the basic (must) level should be encapsulated in a subclass and not in the root class. Near the end of the day, Rick Strahl provided some comic relief by kicking off his presentation on VFP/.NET interoperability with an announcement that his demo code was broken. Midway through the presentation, his laptop blue screened, giving him the opportunity to ad-lib while he recovered and got his demonstration back on track. And a fine demonstration it was. Showing how a VFP application can use a .NET object through COM, and .NET applications using the vigor of VFP though the same mechanism, Rick made the complex appear effortless and magical. One point he kept returning to was the question one must ask before applying both VFP and .NET technologies together on the same machine: the overhead is huge. The entire .NET framework and library must be loaded on the machine, along with VFP, and both runtimes must coexist in memory at the same time, straining all but the most muscular of machines. Strahl encouraged developers to assure themselves that there was simply no other way before mixing the two technologies. With Strahl's stature as a leading proponent of VFP as well as his enthusiasm about the .NET platform, this suggestion seemed to carry a great deal of weight with those in attendance. The day wrapped up with a cash bar and networking time, with many attendees looking forward to dinner and drinks at the end of an intense day of tech talk. Such schmoozing often becomes the place where developers talk out and begin to really understand the new information they've gleaned in the formal breakout sessions. Judging from the conversations I overhead during the networking time, there will be as much learning going on at the bar tonight as there was in the conference rooms today.
Sunday, April 27
by Mark McCasland The first half of today's conference events started off with a warm-up comedy act by John Kiernan followed by about a 1 1/2 hour keynote presentation by Kent Beck. Robert Ohrstedt will be providing the report on Kent's presentation. The day ended with the usual happy hour [OK, today it was almost 2 hours] in the trade show ballroom. Dave Aring gave a presentation on his VFP Etch-A-Sketch application which is a free download from the Essential Fox web site. The happy hour ended with the full comic routine of John Kiernan. John used to be a professional stand up comic in New York and got his start as a developer when his professional comic organization gave him a stack of member business cards, and he decided they needed to be computerized. The rest is history.
All of you know about Codd's rules about relational databases right? Well did you know when he died, his 3 children and 9 grandchildren also died? Here is one link to Codd's rules. Now onward to the sessions... Rick Schummer's Creating and Using Real World Builders - Made Easy I will admit right off, I did have a bit of self-interest in attending this session because I knew Rick had including my CursorAdapter VCX Builder in his presentation. However, because I have a vested interest in builders, I also wanted to learn more about them with respect to what is new in VFP 8. Rick's session covered the native VFP builders, how to create/register your own builders, non-traditional builders, BuilderB and BuilderD technology, examples and those that are freely available from 3rd parties. The purpose of builders is to make tedious and repetive tasks easier and to improve your productivity. For example, if you have a combobox that you routinely only need to change a common set of properties when it is dropped on a form, a custom builder will improve your productivity. He showed how we could create and use a custome builder that could be run when you dropped the control on the form so you could set only those properties you are interested in instead of having to hunt through all the PEMs on the property sheet just to set a few properties. A builder is really only a form called by the VFP builder app that is passed a reference to the object being built. There is very minimal code and the ControlSource of the controls on the builder are bound to the properties of the object bueing built. So any choices you make on the builder form are immediately reflected in the object being built. Builders not only can be used for setting properties, they can also be used to add/remove properties and methods, add/remove objects, and create, change or remove method code. They can get property expressions, get method code, create classes, write programs, generate tables and stored procedures, assemble reports and generate metadata. About the only thing a builder can not do directly is change properties like the BaseClass, Class, ClassLib and ParentClass because the objects are "live". There are 3 new native VFP builders introduced in version 8. They are the Cursor Adapter, Data Environment and XML Web Service builders. Overall, there are 43 baseclasses in VFP 8 and only 14 builders. As you can see, there are numerous opportunities for more builders. You are also not limited to only having one builder for any object. If more than one builder is available for an object, you will be prompted by VFP to select the particular builder you want to run. I thoroughly enjoyed Rick's session and really appreciated his inclusion of my CursorAdapter VCX builder. I now have additional valuable information that will serve to improve my skills in creating beter builders. Jim Booth's So you think you need a database Like all other speakers at this conference, Jim has two topics that he is presenting. His session on Arrays, Collections and Cursors is a minimal of Powerpoint slides and almost all VFP content. Conversely, his presention on this session was 100% Powerpoint slides. I must say, this was the most enjoyable session I have ever attended where there was no VFP demonstrations not to mention the fact that I ams just so glad Jim has rejoined the ranks of VFP conference speakers. The point of Jim's session was to walk us through the analysis of a project that will provide us with the information developer's need to make a decision on what tools are needed for the development of the application. We started with a typical summary of the parts of a database and the types of databases. The types include spreadsheets like Excel, self contained like MS Access, File Based like VFP and, finally, Database Server like SQL Server and Oracle. He then posed the question is VFP a relational database? Is SQL Server? Is Oracle? His answer was NO! There is no product anywhere that meets all 12 of Codd's Rules for a relational database. He then discussed the types of data, database rules [domain contraints], business rules and validation. Validation is the process of enforcing the rules. While database rules are enforced at the database level and business rules are enforced outside of the database, Jim discussed strategies and reasons for enforcing rules in more than one place including in the user interface or client/presentation level. Another important factor in determining what kind of database to use is the need for controlling access to the data. How secure does the data need to be? If not very, then a VFP database may be all that is needed. Keep in mind we still can not make this decission yet because there are other factors. The other extreme may be needed where users only have access to the data through stored procedures. This means they only have execute privileges on those stored procedures and have no privileges to view, update, insert or delete data directly. Other factors in the decision include data volume, transaction volume, the users, performance, resource consumption and cost. As for the resources component, this includes people/developer resources. For example, if all you have are VFP developers and an Oracle developer and no training budget, then you are probably now limited in your options. Maybe you have an Oracle developer but do not have the budget to afford Oracle but do have a training budget for a couple of weeks of SQL Server training. Your cost not only includes monetary cost, but also considers resource consumption and time. Now that you have completed this analysis, you can review all of the decisions made to this point. Review the requirements and cost considerations then make your selection. Just keep in mind that no selection is also an option if the cost exceeds the budget or what the customer can afford. Hector Correa's Try/Catch in VFP8 Structured exception [error] handling is a new feature in VFP8 and is on my top X list of favorite new features in this version. Right now, I can not define the value of X because there are so many new high impact features in this version. CursorAdapters, BindEvents and RaiseEvent also come to mind. How many times have you had a method where you knew there could be a potential problem under certain conditions and you needed a way to stop code execution if an eror occurs? In previous versions, you probably had to do numerous nested IF statements or some other convoluted way to work around this problem. Well no more because Try/Catch/Finally has come to our rescue. A simple example of this new feature can be found in the need for exclusive access to a table. In the past here is what we usually had to do:
LOCAL lcOldError, llError
lcOldError = ON("ERROR")
ON ERROR llError = .T.
USE MyTable Exclusive
IF NOT llError
PACK
USE
ELSE
* Handle error here
ENDIF
ON ERROR &lcOldError
Now all you have to do is this:
TRY
USE MyTable Exclusive
PACK
CATCH
* Handle error here
FINALLY
USE IN SELECT("MyTable")
ENDTRY
Hector had no fewer than a dozen examples of using Try/Catch including nested examples and in combination with the error method in a form and how that is affected. This feature alone can only help to clean up existing code and gives us powerful method of writing tighter and more efficient code. Thank you Hector for delving into this and providing us with numerous examples with which to learn and build from.
by Robert Ohrstedt Sunday was spring like in Kansas City as attendees at the Essential Fox conference once again gathered to exchange news, view and ideas. Kicking off the day was Ken Beck, who gave an extensive introduction to that constellation of ideas and concepts that are collectively called Extreme Programming. Take It To the Extreme Beck reminded the audience that software development is a business enterprise, which many of us tend to forget as we find ourselves wrapped deep in code and the newest technologies. Encouraging developers to consider their investments in software in the same way retailers consider inventory. Inventory items, according to Beck, include developer time, code, help files, documents and applications to be the inventory into which they have sunk their capital and are hoping to realize a return from. According to Beck, this can best be accomplished by looking at the software development process both holistically and realistically. A holistic understanding of the software development process, according to Beck, takes into account all facets of the process, from the statement of needs by executives to the burning of disks or delivery over the web, and everything in between. Discouraging the practice of seeing the Analysis and Design phase as a separate process, Beck advocated developers search for stories from users rather than a list of requirements that may or may not be accurate to the solution of the business problem. The story form more accurately states business needs and processes, and stories change and grow dynamically throughout the software process. Because of this, a more realistic understanding of how software is developed needs to be worked out. Beck advocated continual restatement of the stories that describe business needs and processes, and incremental design, construction and testing cycles so that applications more closely model the stories that users have told. This requires a shorter, quicker development cycle that can only be achieved with the methods of extreme programming: an iterative approach, a team mentality, inclusion of all stake holders and constant communication among all parties. Stating that cubicles should go, Beck encouraged everyone from data entry to Marketing, and all those touched by the application being developed to have a place at the table. Only by including everyone involved will the development process lead to usable applications that answer real business needs. Communication is best accomplished when people work side by side, a truth that leads to the strategy of programming by pairs of programmers (pair programming). This strategy allows quick interchange, swift testing and concurrent development processes that reduce the inventory investment being built up by the business as the application grows. Rather than dismissing scope creep, Beck said he encourages it, as that is the only way true business needs can be met. Shortened development times (as short as a week) for smaller components result in more testable and therefore stable components as an application is assembled. Secrets of the IDE Cathy Pountney presented a tip-filled session on the Hidden Secrets of the Visual FoxPro Interactive Development Environment. Rapidly traveling through each component of the IDE, Cathy reminded the audience of many keyboard shortcuts that have long been a part of the VFP package, and introduced those new ones which are incredibly useful. Among the new features in version 8.0, tabbing in design mode moves focus to the next control, and shift+tab moves to the previous control. Drilling down into containers in the form and class designers often requires laboriously repeated mouse clicks; but version 8.09 provides the control+click method for drilling into a container (and subsequent containers) or the control+shift+click to go directly to a contained control, even if it is enclosed in more than one container. Those who are keyboard conscious can invoke the property sheet for any control by pressing the Alt key and double-clicking on the control, while shift+uparrow and shit+downarrow cycle through the list of values for each property that has fixed values. Moving through items in the property sheet can be accomplished in a mouse-free manor by using control+pageup and control+pagedown. A developer can also go directly to a specific property by using control+alt+ the first letter of the property name. With the document view open, one can move directly to each procedure or method in a prg file by using control+pageup or control+pagedown. Highlighting a word, it can be quickly converted between upper and lower case by7 using control+U (lowercase) and control+shift+U (upper case). Pountney also explained the operator expansion capabilities of VFP, demonstrating the following keys and results, where var stands for a variable: Var++ expands to var = var + 1 Var-- expands to var = var - 1 Var+= expands to Var = Var + which works equally well with the multiplier and divide operators. Also, for those who are memory challenged like I am, Intellisense offers control+J to drop the list of values for an expression, and control+I gives the quick Info box. Pountney showcased the tools bundled with VFP, and showed the xsource folder, suggesting everyone ought to explore this treasure trove of programming. In passing, she mentioned the three major new tools: the Code References, Task Pane and Tool Box, and directed her audience to the individual session on those topics. Rounding out an impressive presentation, Pountney demonstrated that the semi-colon can now be used for line continuation in the command window, and demonstrated use of the _cliptext and _vfp.datatoclip resources to move code to the clipboard. Get Me the Tools! Tamar Granor provided a comprehensive introduction to the new Toolbox utility, and demonstrated the many ways it can be used and customized. Most people who have VFP 8.0 have explored the use of the toolbox, but Granor ran through an introduction to clicking and dragging controls onto classes and forms. Aftwards, she delved into customizing the toolbox by adding custom categories of any type. These include the General, Dynamic Folder, Registered ActiveX controls, text scraps, and XML Web Services. While any item can be put in any class, Granor pointed out that the General is used for VFP classes. Other types have their particular uses, such as the Dynamic folder, which will provide a list of files in any directory, and the text scraps. Pointing out that text scraps can use text merge to automate writing code, Granor also discussed at length the process of adding items to the ActiveX Controls and XML Web Services categories. Continuing to delve under the hood of this incredible tool, Granor showed how every category can be customized with tool tips, status bar text and help files; she also demonstrated how using Fox Script can result in dragging code into a designer or editor, with the code executed and result actually written into the editor. Drawing a parallel be3tween the toolbox and Intellisense, Granor said that the toolbox is good for mice people and Intellisense is good for keyboard people. They really are complimentary tools, and, while their functions overlap somewhat, having both makes for a powerful tool set. Building on the wealth of functionality that is apparent, Granor demonstrated how instance properties can be set on the fly with code or input windows, how file items (which are hyperlinks) can quickly move a developer through the directory structure, and how filtering can be applied for projects. She then demonstrated how to manage the categories in the options window, adding and removing categories, changing their display order, adding and removing items and controlling the display of items. Wrapping up, she showed the toolbox.dbf and toobox.app (referenced by the new _toolbox system variable and the oToolbox instance reference). She then referred her audience to articles in Visual FoxPro Advisor, by Cindy Weingarten, enlarging on those features (and more) that Granor was able to introduce. Inside the Task Pane Beth Massi, who played a prominent role in the development of the Task Pane (and the Toolbox) while at Microsoft, presented an interior view of this new tool. Showing how to customize task panes, she demonstrated how to rearrange pane contents, change the name, hotkeys and buttons on the task pane form, mark panes inactive and restore them, or remove them all together. Wowing her audience, Massi demonstrated how to create a pane for your own use or to distribute. Rich content can be applied to such panes either through sub classing the pane container class or overriding methods within the instance of your own pane. Rendering HTML and XML content is as simple as applying XSLT style sheets, defining the root content and display source. She then offered a detailed explanation of the Handler Code that drives the task pane, either with VFP code or Web Services and XML content. Task panes are not only easy to create, but can be easily distributed in one package file by using an XML file that describes all the pane properties. Running short on time, Massi then directed the audience to her white paper on the pane at MSDN or http://www.taskpane.com, where many custom panes can already be downloaded. Ah, Waiter! One Web Service Please. Doug Hennig presented a session on XML Web Services for Visual FoxPro Developers, in which he explained both the creation and use of XML Web Services. Most of the time was spent on consuming web services, as Hennig explained the mechanics of using SOAP to make function calls, pass parameters and receiving return values. He explored the registration of Web Services, and how to use them both visually and programmatically in an application. Pointing out that it is not strictly necessary to register web services, Hennig said that registration does making working with them easier to work with. Questioned on how to explore the various web services now listed on the UDDI, Hennig said the Web Services Pane of the new Task Pane tool offered the perfect way to find just the web service that is needed. Once a suitable service is found, utilizing it is a bit different in VFP 8.0 than it was in 7.0. In the newer version, a web service can be just dragged from the toolbox, or accessed with the new WSHandler Class. Demonstrating, he showed how dragging and dropping actually generates the code necessary for using the particular services, an easier alternative than working with the MSSoap.Soap client directly (also a way to use web services). Wrapping up, Hennig demonstrated how easy it is to publish a web service that can then be used to verify and activate application licenses. A Day of Weeks The many breakout sessions offered at Sunday's Essential Fox spanned the full array of tools and techniques for making the best use of the new VFP 8.0, the most powerful tool ever placed in developers' hands. Anyone who has had doubts about upgrading will quickly dispel all questions with a quick drive through the new language tools as today's sessions showed.
Monday, April 28
by Mark McCasland The final day of the conference always brings about mixed emotions. The mind and body are weary, and, although every one is looking forward to returning home, we are not quite ready to say goodbye to all our [mostly] long-distance friends. Plus there is still a full day of sessions remaining. For a change, my report for today's events will start with a review of the last session of the conference which ended shortly after 5:00pm. Drew Speedie's Practical Uses for BindEvent() For any one who has attended a conference, attendance dwindles to a trickle on the last day and as the last days winds down. The sessions the first 2 days had typical numbers in the audience. The final day, attendance starts to fall as people start to depart for home. Drew's sessions was a most notable exception relative to other sessions in this time slot, but not for a typical Drew session. Keep in mind also that each session is given twice, and the first edition of this session bookended all sessions - it was in the first time slot of the full first day of the conference. I think this says a lot about Drew's drawing and staying power over the years of being a conference speaker. As with many of the new VFP 8 features, I had played with the new BINDEVENT, UNBINDEVENTS and RAISEEVENT. Hmmm, why is it the BINDEVENT is singular while UNBINDEVENTS is plural? This was not part of Drew's session, so I leave it to you to read the VFP Help on UNBINDEVENTS to find out why. Drew's session was well orchestrated [as usual], fun, and of course fast paced. Over the years, I have been to at least 1 of his sessions at each conference I have attended. I once listened to Drew talk about his session evaluations a few years ago, and he mentioned almost all attendees comment on how fast he talks and the ratio of those who do and do not like it are usually equally split. Of course, there are always some comments on the evaluations with an obligatory joke about his rapid speaking and his last name. His sessions are fun and entertaining which at this point of the conference was definitely beneficial. The entertainment value comes from code and UI demonstrations that also illustrate user or [newbie] developer hostile tricks. Even though such tricks are fun, the do serve well to illustrate the point. My favorite was when he bound the click event of a command button to call a method to QUIT VFP. Since the bound method fires before any code in the click of the button, this "reature" is almost impossible to debug. Debugging Hint: read the VFP Help on the AEVENTS function. Drew, also kknown as "The King of Grids", demontrated one of the most practical uses of BINDEVENT and that was to better organize the code needed to make each column header clickable to where the RecordSource of the grid will be sorted alternatingly ascending and decending by the field of that column. Any one who has done this in previous versions knows this was a headache. Now it is sweet and simple. All you have to do is loop through the Columns collection of the grid and bind the click event of each header to a method to handle the sorting. Another interesting illustration of using BINDEVENT was to the TIMER event of a timer. His point was that a timer is usually used in conjunction with another object so you now have 2 objects that have to be aware [coupled] of each other. With BINDEVENT, a better way can be to just drop a timer on a form which can just be the VFP timer baseclass. Let's also say are implementing incremental searching in the grid which needs the timer to fire only when the KeyPress interval exceeds the double click time. At which point the seeking is done to find what the user just typed. Now the timer no longer needs to be aware of the grid, we just need its timer event to fire. Since its timer event has been found to an IncrementalSearch method in the grid, this method code now gets fired when the timer event fires. Cool, eh? Session over, the conference has come to an end, and so has our reporting responsibilities. Oops, I almost forgot. I started with the last session first... Ted Roche's Graphing with Visual FoxPro Ted's session covered graphing techniques using MS Graph and Excel. If you are like me, you don't really like having to deal with reports much less adding graphing capabilities. However, they are a necessary evil. Ted, however, made a terrific argument for graphs. The point is users usually can not get as good of a picture of what the data is telling them without some sort of graph. The counter-point was that graphs should not be used to deceive either. His example of egregious graphing techniques came from a USA Today article on grain shipments. They used little ship icons stacked on each other to indicate the volume of grain being shipped over a period of time. The problem was when the volume increased, they also gradually increased the size of the ships being stacked. This gave a false impression of grain shipment volumes increasing more than the data indicated. Ted's next illustration was with VFP Conference attendance over the last 10 or so years. First Ted put up the attendance bar graph for just the Advisor DevCons. As you will see the trend is a near perfect triangle with the little end on the right. Definitely a bad trend, at least for the Advisor DevCons. Now add all the available data for the other conferences and change the graph to a stacked bar graph. I believe there was a collective "Hmmm" emitted from the audience. One of the principals of a market based economy is competition tends to drive costs down without sacrificing quality [quality usually increases]. This is no different. It looks like VFP developers are still attending conferences at the rate they always have, they have just recognized the better values for the most part. Ted also presented an example of a Super graph that literally tells a great story all in a graph. You can find it here. The graph is titled, "Losses of the French Army in the Russian Campaign." This campaign was in the winter of 1812/1813. The following is a direct quote from the web site: Probably the best statistical graphic ever drawn, this map by Charles Joseph Minard portrays the losses suffered by Napoleon's army in the Russian campaign of 1812. Beginning at the Polish-Russian border, the thick band shows the size of the army at each position. The path of Napoleon's retreat from Moscow in the bitterly cold winter is depicted by the dark lower band, which is tied to temperature and time scales. This amazing graph is available as a poster for purchase on the web site. All I can say is, Wow! Since you may need to use the graphing capabilities of Excel, he demonstrated how to discover the constants needed and their values. First, open the object browser and click the Open Type Library button. If you do not see Word or Excel in the Recent History tab, just click the COM Libraries tab. After the list is populated, scroll down and check, for example, Microsoft Excel 10.0 Object Library then click the OK button. Expand the Excel node in the tree list. From the Command window, type modi comm excel.h and hit enter to open the code editor. Next, drag the Constants node from the Object Browser and drop in the code editor window. As Emeril would say, BAM! He followed up on this by showing how to get the parameter lists of Excel methods from the help [.CHM] file. However, this is not in the CHM file installed by default when you install MS Office. This is an optional install. IF you dao a search in the MS Office installation folder for VB*.CHM and do not find it, you have to install it from the Office CDs. These help files have a wealth of information about the exposed Word and Excel PEMs as well as the document object model. XML/.Net Sessions by Cathi Gero and Doug Hennig Because I am severely challenged when it comes to .Net, XML and Web Services, I attend 2 sessions today on these topics just hoping something will finally take root in my brain. Since it was the last day of the conference, I am not holding out much hope. This is certainly not a reflection on the speakers' abilities or content of these 2 session. Cathi has spoken on this topic at our User Group, and anyone who knows Doug and has attended one of his sessions on anything also knows he has great material. Many of the new features of VFP 8 is its enhanced ability to create, consume web services and handle XML data with the greatest of ease especially with the new XML Adapter.
Thankfully, Doug's session includes his easy to use VFP examples on creating a web service and how to create and use a VFP form to consume the services and handle the data provided by the service. Now, I at least knew how to register an existing web service in VFP. I learned how to do that in 7 and it has not changed in 8. There may be hope for me yet. Wrap it up and put a bow on it It's late and the conference has long been closed. Time to kick back and enjoy a little hockey playoff action. The Dallas Stars were playing on ESPN as I wrote this last day's report. They have actually won the game after losing the first 2 at home. Now the series is on. Hopefully we have provided you a window to this terrific conference and have gotten you excited about Visual FoxPro 8 to the point where you can't wait to upgrade if you have not already.
by Robert Ohrstedt Monday, the last day of the Essential Fox Conference in Kansas City, Missouri, the attendees show a little less energy but no less enthusiasm for a solid software development tool. Adapt! Cursor, Adapt! Chuck Urwiler started the day off with a fine real-world presentation of the usefulness of the new Cursor Adapter class. The native Fox equivalent to the ADO object, cursor adapters can be used on any data source: native Fox, XML and any other data source that can be addressed by ADO or ODBC - except faster and more efficiently. Urwiler first demonstrated using the cursor adapter by placing it in a data environment class (which can now be designed visually), and connecting it to an ODBC data source of native FoxPro tables. He pointed out that, when used in a Data Environment class, the cursor adapter acts much as a remote view, but without the need for a DBC, making management and access a great deal easier. Despite the absence of the DBC, one can still apply stored procedures within the methods of the Data Environment. Moving on, he then demonstrated using the cursor adapter with an ADO data source, something that can acce3ss any ODBC or (better) OLE DB accessible data store. In such an instance, the cursor adapter works with the ADO record set, command and connection objects. In the same way, Urwiler pointed out that the cursor adapter can be used to access XML data sources, thought this require the most code and a great deal of patience. Demonstrating its usage against an SQLXML data set, he showed how efficiently cursor adapters can used to move data between tiers of an application. In fact, Urwiler declared, cursor adapters really belong primarily in multi-tier applications, and assist in the making of abstract data classes. There are, however performance considerations to be taken into account, as there is a hit when ever passing through other mechanisms rather than accessing data directly. Just Ten Days David Blumenthal presented a different kind of track this year: one on business practices. While this writer was not able to attend all his sessions, I was impressed with the one I was able to take in, titled "Ten Days to Understanding and the Building of an Action Oriented Execution Program." What Blumenthal so neatly covered is belied by the awkward title, for he presented an excellent tutorial in managing and team-building to accomplish your company's strategic plan and goals. Executives, he said, are in the job of Executing, which is, making things happen. They do this by aligning operations and people with the strategic vision of the company and communicating that vision so that every employee can buy into it and contribute. Having done a lot of study of organizational behavior and the role of executives in an organization, his perspectives rang true and clear to me. Strategy is often misunderstood in organizations as an abstraction unrelated to the day to day operations of the organization. Just the opposite, in fact, is true. Everything the organization does must be aligned with and contributing to the fulfillment of the strategy that has been envisioned and shared. The basic goal of any strategy is three-fold: Win the customer's preference, create a sustainable competitive advantage, and provide a sufficient return to the owners. He summed up this idea by saying that "A strategy defines the business' direction and positions the business to move in that direction." Effective strategies, Blumenthal said, are those that define the strategic initiatives, allocate the resources (people, capital and equipment), and determine what is important today as a way of deciding what to accomplish now. While much of his presentation appeared to apply only to large organizations, it was apparent that digging deeper into these ideas will yield tangible benefits even for one-person shops (that is, most of us). Whether for ourselves or for our clients, strategy and execution are all about accomplishing the organization's goals. The way this is done is by empowering the operations team. This is done by mapping out a realistic path to completion of the goals that comprise the overarching strategy. A few radical ideas he quoted from Peter Drucker were penned in the 1950's and have yet to be widely adopted in American enterprises, though most small employers do it instinctively: the executive must take responsibility for placing employees and defining their jobs in such a way that they can succeed; the executive is also responsible for communicating the strategy and the goals, and for providing the resources the employee needs to complete the task. In this regard, team building is one of the most effective ways to link people and their activities to strategy. Teams are built by communication that allows people to make the strategy their own, and then by laying out a clear path of accomplishment. This includes clearly stating short, medium and long-term goals, identifying what criteria will be used to measure success, place the people to accomplish these tasks and providing whatever will give them the competitive edge. In this way, organizations move from a blaming to a problem solving stance and become much more effective. Blumenthal provided solid food for thought for all of us. Gone Fishing Rick Schummer presented a session on Fishing with a Project Hook, which was very enlightening to his audience. He explained what a project hook was and explored the Project and File objects in VFP. Demonstrating several custom project hooks he has assembled over the years, he said these bits of code attached to projects can ease repetitive tasks, used to enforce standards in a team environment, and enhance developer tools that access the project information. Going further, Schummer explained that the Project Hook class is automatically instantiated when a project is opened, and that developers can set both a global project hook and a specific project hook for each project. Some examples he used to illustrate their usefulness included changing the default directory to the project directory when opening the project; adjusting the customized path for specific projects; providing a field mapping utility for all tables in the project and cleaning out hard coded printer information in report forms. Other ideas included auditing projects by tracking activity, providing automatic backup for all file types, displaying compiler/build messages where you want them, and instantiating special toolbars or menus with tools specific to the project. He then explained that we all have access to the VFP Project and file objects, with the system variables _VFP.ActiveProject, _VFP.Projects[] collection, the Project object properties, events and methods, and the _VFP.ActiveProject.Files[] collection. He then suggested resources, and recommended this area as an excellent one for developer exploration, even if you don't use project hooks; for it will yield a great deal of insight into the structure of projects and the arrangement of files that make up the project. Are you A Good Host? Doug Carpenter presented a session on the Windows Script Host and how to incorporate its use into VFP code. I attended this session, because the Windows Scripting Language has always been something of a puzzle to me. What I learned is that incorporating calls to the Windows Script engines makes it easier to discover and manipulate machine information, printers, mapped drivers, folders, files and shortcuts. The windows script host also provides the ability to manipulate the registry in a more complex manner than simply writing or reading keys; write to the windows event log, and activate other applications. Delving into the MSDN library will yield an abundance of information about the Windows Script Host object model, syntax and calls necessary to use it. Scripting can be done as part of setup, error reporting, shutdown, and initialization routines. They can also be used to discover network resources, manipulate file system objects, provide remote control (for distributed installations?) and can be stored in XML format or assembled on the fly. Since it is easier to use than the Win32 API, yet still has all the power of the API, it is a natural resource for VFP developers. Where's Whil? To wrap up the conference, Whil Hentzen offered a presentation on the business logic of learning and using Linux. The maverick operating system is a powerful, stable, customizable operating system that does not yet have many applications written for it. Despite that, the recent stabilization of office-type suites, and the growth of Linux outside of the back room offer a ready opportunity that experienced developers can capitalize on. Making the case for VFP developers to look at Linux, Hentzen pointed out that there is, at present, a dearth of data centric applications, and that demand for these will grow as Linux reaches the desktop, as it already has in numerous organizations. Hentzen argued strongly that VFP developers really only have two choices, since the VFP market has been shrinking for a long time and continues to do so, by almost any measure. These choices are to learn .NET, and compete with thousands of VB programmers, or to move into the Linux arena to provide our specialized knowledge of handling and manipulating data. Since there are few already doing this in Linux, the market appears to be wide open. He continued by stating that simply from a purely business point of view, continuing to rely only upon VFP as the tool for our businesses does not make sense, because the user base has shrunk so radically in the last ten years. One may argue with Hentzen's facts, but no one can deny his sincerity and dedication to providing a way for the VFP community to leverage its knowledge for future business opportunities. Citing "Microsoft Bashers" as one of his sore points, he declared he is not out to bash the software giant, but is merely acknowledging the realities of the market place and trying to secure the future of his business. While the market for Linux applications is still emerging, Hentzen recommended developers install Linux and get to know it, to experiment with the many tools available, and to gain enough confidence that when the call comes, developers will be ready. He went on to outline several scenarios for how a knowledge of Linux will help developers. Among these were the VFP application accessing a data store on a Linux server, going against some flavor of SQL; Installing and supporting Linux workstations with some type of data centric applications; and recognizing that such workstations will no doubt live alongside Windows workstations and servers for many years to come. Broadening your knowledge and skill set is always a wise investment, and the strategic thought behind Hentzen's argument seems irrefutable.
Tuesday, April 29 - Bonus!
by Mark McCasland
by Michel Fournier I would like to thank Mark McCasland and Robert Ohrstedt who did an excellent job for the report. Mark and Robert worked until 2h00 am and sometimes up to 3h00 am to deliver the reports in the middle of the night. Mark and Robert teamed up to deliver great content. I appreciate the introduction of Robert to our team where he participated in his first reporting. I was impressed by all the work delivered. I also would like to thank Dave Aring who contributed in the pre-conference activity on the Round Table Discussion that occured on Thursday night. I also thank Ken Levy as well for this contribution in regards to the keynote part of this report.
62 Rue Doucet, Petit-Rocher, New Brunswick, E8J 1L3 Telephone: 1-506-783-9007 Email: mfournier@levelextreme.com |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||