HOME | SIGN UP | ACCOUNT | SUBSCRIBE | TROUBLESHOOTING | LOGIN
News · Meetings · Jobs · Downloads · Universal Thread articles · Web articles · Conference coverages · Consultants · Blogs · FAQ · User groups · Photos · Videos

Visual FoxPro DevCon, Praha 2003

Visual FoxPro DevCon, Praha 2003 is a conference organized by Microsoft and DAQUAS for developers who create applications using Visual FoxPro. The conference comprises of 30 sessions out of which 10 are presented in English by worldwide respected FoxPro experts. In the past 5 years average audience had been around 500 attendees and organizers expect similar number of visitors to Prague, Czech Republic, for the 6th year.

Date:June 24-26, 2003
Location:Prague, Czech Republic

This conference has 144 pictures. We display 12 randomly selected pictures here. You may click here to view the album thumbnails.

Visual FoxPro DevCon, Praha...
Visual FoxPro DevCon, Praha...
Visual FoxPro DevCon, Praha...
Visual FoxPro DevCon, Praha...
Visual FoxPro DevCon, Praha...
Visual FoxPro DevCon, Praha...
Visual FoxPro DevCon, Praha...
Visual FoxPro DevCon, Praha...
Visual FoxPro DevCon, Praha...
Visual FoxPro DevCon, Praha...
Visual FoxPro DevCon, Praha...
Visual FoxPro DevCon, Praha...

Day Zero

by Hans-Otto Lochmann and by Jan Vit

Hello! We are in Prague again, waiting for one of the biggest FoxPro DevCons to start. Like in the last we will start our reporting with a very short reference to the Czech Republic and to its capital, the City of Prague, where this event will take place.

The History of the Czech Republic.

The Czech Republic is located in the center of Europe; it is sometimes called the heart of Europe. Speaking strictly geographically this statement refers to the fact, that the distances to the North Sea, the Baltic Sea and the Mediterranean Sea are nearly the same. Speaking historically this statement refers to the fact that many events, which formed the European and Western political development, started in Czechia, especially in Prague (see last years report and more to that below). By the way: Here you find a great resource on historical developments (and not only about the Czech Republic).

The first state in this territory, inhabited by Slavonic tribes, was Samoa's Empire in the 7th century. Then the Great Moravian Empire followed. When the Great Moravian Empire was fully flourishing, in the region of Bohemia another state came into being. It was called the Czech Crown Kingdom. In the 9th century the power was taken by Premysl dynasty. When the Premysl dynasty died out by the sword, the Czech throne went by way of a dynastic wedding to the Luxembourg.

In the 14th century, now referred to as the Golden Age, king of Bohemia and Holy Roman Emperor Charles IV established Prague as the cultural capital of central Europe. The Czech language was promoted to be the official language in the country along with Latin and German, and the position of Bohemia became very strong. Charles IV had a significant influence on developing the city of Prague. Charles University, Charles Bridge and other monuments were built during his time. The Charles Bridge is now one of the landmarks of the city.

The Hussite Movement marked the first part of the 15th century. It is named after Jan Huss who, when he was rector of Charles University, tried to reform the Catholic Church. He was burnt at the stake as a heretic.

Another Czech King was Jirí of Podebrady. Living in a war torn Europe he was the first head of a state ever to make a bold proposal: he appealed to all other European kings to negotiate a treaty securing peace all through Europe. History tells us, that he was not very successful with his proposal, and after a short reign of the Jagiellonian dynasty the Czech throne was passed to Habsburg dynasty.

In 1526, the rule over Bohemia was overtaken by the Habsburg dynasty and the Czech language and culture were suppressed for centuries. Nevertheless, the reign of Rudolf II at the turn of the 17th century is sometimes called the Second Golden Age. Prague was promoted to the imperial seat of power, in preference to Vienna, and temporarily became the center of science. The court of Rudolf II attracted scientists from all over Europe, including astronomers Tycho de Brahe and Johannes Kepler.

After World War I Austria split into five states. One of them was the newly established Czechoslovak Republic. Its first president was Tomáš Garigue Masaryk. Progress of the Czechoslovak Republic was then interrupted by Germany occupation and it appeared again after World War II. But the power was taken over by the communists directed by the Soviet Union. In 1968 Czechoslovakia was oppressed by the invasion of the Soviet army until the "velvet revolution" in 1989. That resulted in the splitting of the republic and in 1993 two new states appeared – the Czech Republic and the Slovak Republic.

The Czech Republic of Today.

The Czech Republic now is a representative democratic state again with the usual separation of power into three branches: executive (government), legislative (parliament) and judicative (a supreme court and a system of lower courts). The president of the Czech Republic is now Václav Klaus.

The Czech Republic has nowadays a population of 10 million people and covers an area of about 80,000 sq. km. The by far the largest ethnic groups living in the Czech Republic are Czech and Moravian, but there are also minorities like Silesians, Romas, Poles, Germans, Ukrainians and Russians.

The Czech Republic now borders on Germany to the west, on Poland to the north and on Austria to the south. The new border on the east is now with the Slovak Republic since 1993. But these "borders" will soon change from separation lines to junctions. In a recently held referendum a great majority of the participants voted that the Czech Republic should join the EU in 2004. But this in not yet decided finally as opponents of the Czech Republic's EU entry have asked the Constitutional court to annul the recent referendum on EU accession. Radio Praha keeps you informed about contemporary and historical development in the Czech Republic.

The Czech Republic economy most heavily relies on engineering and production (machine tools, locomotives, tractors, and agricultural machines). Since the middle of the '90-ies there has been an ever growing investment of companies from Western Europe in production facilities. This not so much because of relatively low labor costs; it is mostly because of the great skills and flexibility of the Czech engineers and workers.

There are also some natural resources in the Czech Republic, consisting of substantial coal deposits and some minor supplies of iron ore, uranium and oil.

Of course there is a lot of agriculture industry with the most fertile soil in South Moravia. As everywhere in the world also here the farmers grow wonderful food but are really at odds with the economics of their business.

More about the economics in the Czech Republic is nicely compiled (even comprehensible for non-economists) by the Ministry of Foreign Affairs.

There are many spots of great natural beauty in the Czech Republic. The most beautiful natural places are the Czech Paradise, "rock town" in Prachov rocks, the Decín walls, Czech Switzerland, the Boubín virgin forests, Macocha abyss and so on. The Czech Republic has also some protected areas, and National parks. There are also many places associated with the history. Among the most beautiful historic towns belong Prague, Kutná Hora, Tábor, Telc, Olomouc, Kromeríž,... Also many castles, ruins and chateaux can be found in the Czech Republic. To the most interesting ones belong Karlštejn (picture below, THE major tourist attraction), Krivoklát, Bezdez, Hluboká, Zvíkov, Loket, Kuks, Lednice and of course the Prague castle. If you want to know what to do, ask the Czech Travel Guide. You can also book a travel through Prague and cross-country.

The City of Prague.

The capital of the Czech Republic is Prague. The first foundation of a fortified edifice, which later became the Prague Castle, took place around 885. A few years later another castle was founded on the other bank of the river and was later named Vyšehrad. The Prague Castle and Vyšehrad became two centers of power of the Premyslide dynasty.

At that time Prague did not exist. There were only small settlements between these two Castles, one of which was "connected" (probably not to the joy of its inhabitants) to the Castle in 1231, later called the Old Town (Staré Mesto). In 1257 another settlement, located below the Castle, was "connected", which then - surprise, surprise - called the New Town (Nové Mesto) - now Malá Strana. Before these movements about 4.000 people lived in this area. After the settlements had been brought together with the castles, commerce and other activities intensified substantially and within a few years the population grew tenfold.

Today, the historic center of Prague consists of the following five quarters: Hradcany (the Castle District), Staré Mesto (Old Town), Nové Mesto (New Town, founded by Charles IV in 1348), Malá Strana (Lesser Town/Little Quarter - the original New Town, renamed to Malá Strana after the foundation of Charles IV's New Town), and Josefov (the Jewish quarter). These quarters were once independent towns and four of them (except Josefov) were joined together in 1784 by Joseph II of Habsburg to create a historical center of Prague. Josefov was added in 1850. Below there is a contemporary view onto the Castle and its environment from one of the surrounding montains.

In last years report we had quite a few items about the city; also the Internet is full of information about Prague. So we can concentrate on a new topic: The Art Nouveau.

Prague and Art Nouveau.

Until 1918 Prague has been part of the Austro-Hungarian Empire. But in the 19-th century there have been a lot of independence movements. These movements not only concentrated on political autonomy but they also focused on cultural independence. One of the many outflows was a strong Czech contribution to the Art Nouveau influencing strongly the contemporary Czech architecture, paintings and other .pictorial arts.

There are many monuments and other memorabilia are left from the area und quite a few are still in use, mostly buildings and a great variety of pictures. Lets concentrate on only one person and one building.

There is Alphonse Mucha (1860 - 1939). He was born in Czechia and lived and worked mostly in Prague at the turn of the century, where he met the French actress Sarah Bernhardt, one of the greatest actresses at that time. He was strongly influenced by her (as well as others, men and women alike) and became to be one of the leading figures of the French Art Nouveau period. A considerable part of his work (theater announcements, stage decorations, graphics) was devoted to Sarah Bernhardt. Mucha also produced numerous advertisements, calendars and illustrations, which were usually made to order and were widely accessible to the public. The women of Mucha 's paintings are beautiful and elegant and are depicted in a natural style with an emphasis on sensuous and feminine form.

This Mucha masterpiece is perhaps the most elegant beer advertisement ever produced. It has all the hallmarks of his best work – circular design, a woman with ornate hair and adornments – plus some clever tricks as well. Along with the flowers in the woman's flowing hair, you'll also find all the ingredients needed to make a fine lager: barley, hops, and poppy flowers from the fields of France...

After many years in Paris Mucha went into the United States, but after some time he returned to Prague in 1913. He continued to paint pictures and posters and also participated in the decoration of several building before his death in 1939.

You want to learn more about Mucha? Even want to buy some prints of his many posters? Just click here.

The other item we want to report about is a building, the Obecni dum (Municipal House). During the Art Nouveau period, Czech Republic was part of the Austrian Hungarian empire. The dominant people in this empire was the Austrians and therefore in Bohemia there raised a strong will for independence. In Arts too, Czech people wanted to be at the top but with a "proper" way of doing it. These questions of modernity and national Art are shared across every Art Nouveau movement and the Obecni dum is one of the best examples for that.

This extraordinary building stands at Namesti Republiky 5. The architects are Antonin Balsanek and Osvald Polivka. It was built during 1903-1912. When it was opened in 1912 it was immediately THE center of interest. Some were annoyed over its extravagance (it went way over the budget). Non-Bohemian minorities decried it as plainly ugly. And the young arts in Prague, being fervent follower of newer styles of art like cubism, detested as typically bourgeois and overdone.

Nonetheless, it had been built and everbody came. Its restaurants, concert halls and salons quickly became THE meeting place of Prague's cafe society prior to World War II. After the war came a long period of decline as the communists, who also regarded it as bourgeois, relegated it to slow neglect. By the Velvet Revolution in 1989, it was a peeling, soot-filled mess.

The problems to be solved were daunting and, in fact, were too much for the first contractors hired in 1993. A shoddy renovation job was called off in a matter of months and the Czech government ordered a new renovation project costing about 60 million US-$. The project was completed on schedule to permit the Prague Symphony Orchestra to open the 1997 Prague Spring Music Festival in Obecni Dum's Smetana Hall in May.

The building is now in pristine condition, restored in excruciating detail: Salons follow after salons, each seeming more exquisite than the last. Of special interest are Smetana Concert Hall, Gregr Hall with its vast allegorical mural of war, the Mayor Hall with Alfons Mucha's patriotic frescoes and the curious black-tiled American Bar. The richly decorated below-street-level and ground floors of the building contain no fewer than four places to eat and drink. Few can resist the airy Kavarna immediately to the left of the main entrance, where you can have a draft Pilsner Urquell or a bottle of Czech Muller Thurgau to wash down a platter of Hungarian salami, Prague ham, spiced pork and sliced cucumbers, all the while enjoying the view through immense windows of pedestrians in the square. Interested? Just book a tour.

Oh! We nearly forgot: There is one sign for a brand, which nowadays every US citizen sees every day and knows well. All around the World everybody brings this sign into immediate connection to the USA. And it is purely Art Nouveau. Do you know? No? Click here!

"He who travels has a lot to talk about."

Reporting also should include all the small events, which sometimes are for those, who are involved, not at all that funny.

Drew Speedie, who travels with a Canadian passport, nearly got involved in a international dispute between two governments: Some time the Canadian government found out, that too many Czech Roma and Sinti, in Europe also known as gypsies, immigrated into Canada. Before that immigration could turn into an invasion, the Canadian government decided to request a Visa for each Czech citizen entering Canada. The Czech government said "Tit for Tat" and imposed also Visa restrictions on Canadian citizens.

Having to travel from Switzerland to Prague Drew used the opportunity to do it in a rented car and see a little bit of Switzerland and Germany in between. When he finally came to the German-Czech border, enjoying the ride, then all of a sudden the border guard transformed himself into an immigration officer: "These two can pass, but not you!" Well "these two" were Drew´s wife and son and they were not exactly in the mood to continue the journey alone.

And now the finely tuned DAQUAS organization showed its masterly art to resolve problems: With the help of a German friend in Prague and some Germans who run the gas station from which Drew sent his call for help, Igor Vit directed Drew to a photo shop to get photo for a visa. (Besides the stamps this is the most important part of the visa.) The next Czech consulate was in Munich, which was about a three hours ride away from that filling station. But only two and one half hour was left. So Drew learned by exercise, why it can be favorable to have only a few or no speed limits on the autobahns. As it also was Monday afternoon and as traffic is usually not that heavy on Mondays and as Drew was driving into the city, he finally managed to arrive exactly 2 minutes before the consulate closed in the building. You know, government paid personnel has to follow strict rules all over the world, especially as far as opening hours are concerned, and the Czech officials are no exception.

They only had not taken into account the vigor with which Igor pursued his goal: He wanted Drew in the conference on the next day. So Igor arranged for faxes from DAQUAS and from the Czech branch of Microsoft to the top representative of the Czech Republic in that consulate claiming that 500 attendees from the Czech Republic and 10 other countries could not commence the FoxPro DevCon without having Drew on board. So the officials prepared everything (except for the photo) in advance. By that they could handle everything - including the stamping stuff - within these 2 minutes left, before the rules forced them to go. Now Drew Speedie is not only by far the fastest speaker at Fox DevCons, he also holds a landmark record in getting a Czech visa and there are sound reasons to assume that he made one of the five fastest rides form Munich to Prague. Unfortunately Drew and his family declined to comment on the last item.

What else happened? Well, Ken Levy's suitcases decided to take their own route to Prague. They had Ken taking the flight from Switzerland to Prague by himself (he is old enough) and decided to stay in Amsterdam overnight. Though it is well known that Amsterdam has an exuberant nightlife, it is not known what the suitcases were looking for in Amsterdam. But next morning they arrived unharmed at Ken's hotel.

So much for today!

Tuesday, June 24

by Hans-Otto Lochmann and by Jan Vit

KeyNote by Ken Levy

Like the last year, the KeyNote was presented in two rooms. In the first room, there was Ken Levy "live and full in action". In the other room there was just a large screen displaying whatever was on the screen in the room below. DAQUAS selected this arrangement again because this has been the only event (besides the party of cause), where all attendees were present. As not all of the attendees were fluent in English Igor Vit acted as a (nearly) simultaneous translators. They worked as a "Speaker Queue", first Ken, then Igor, then Ken, then Igor and so forth. In order that everybody saw everything no only the computer screen was replicated but there was a video transmission of the Speaker Queue as well.

Ken Levy started the session a little bit unusually. He went to the auditorium and started to shake hands to the listeners. That was a good gesture to enhance the community feature. Ken also reminded that last year there was the 10th year anniversary of Microsoft owing the FoxPro. And Ken showed the video of the plane, which flew above the Microsoft building saying: "Thanks to Microsoft - 10 Years of FoxPro".

Ken dedicated most of the time to review the VFP 8.0 features, since this was the first conference in Prague from the time Microsoft released the VFP 8.0. Ken took great care to present the wealth of enhancements, which were incorporated into VFP 8.0, most of which were made in response to user requests. Ken also pointed out that these enhancements are a clear indication of the serious efforts that Microsoft puts into the product and into the future enhancements in the "Next Version" code named Europa.

The huge number of enhancements probably could easily be grouped into three sections:

  1. Improve even further the ability to build XML Web Services with VFP, as well on the "service side" as on the "client side".
  2. Improve the interoperability of VFP with .NET, be it ADO.NET and whatever .NET-breed is on its way.
  3. Improve the ease and productivity of developers to use VFP. The increase of productivity is so great, that - as Ken explained - the Fox Team at Microsoft thinks it can take the responsibility for providing two (not just one!) games to go with VFP 8.0, both Minesweeper written in FoxPro and the Puzzle is back.

As all these features have been explained by our reporter colleges from Palm Springs and will be reported in the session notes about the Europa session, I refrain from repeating all the items in this place.

Ken then demonstrated these features in very convincing demos. As ever it has been a big fun to watch Ken and the ease with which he went through these demos and showed the flexibility of VFP 8.0 combined with Visual Studio .NET 2003 with which it can be employed in web base applications to even on tablet PCs, mobile phones and the like.

All these demos and statements were nicely enriched by quite a few videos, ranging from a practical demonstration, that though the people around the world speak different languages, using XML employed by well-suited developer systems can facilitate a common communication.

In a video Ken played of Eric Rudder, Senior VP of Microsoft, discussing VFP 8.0, once again stressed the importance of VFP in the family of development tools provided by Microsoft.

The KeyNote closed with Ken's outlook and preview on what comes next: Europa, as VFP's next version is code named.

An Overview of What is New in VFP 8.0 by Michal Tvrdý

The purpose of this session was to give to the listeners a quick overview of what is new in VFP 8.0.

Every new feature was briefly mentioned and showed. Then, after the introduction of each feature, Michal referred the listeners to those sessions that focused more in depths on that particular feature.

I will here focus on the most important ones:

CursorAdapter:

I think, this is the most proclaimed new feature of VFP 8. It allows you to connect to almost any type of the data in a very easy fashion. It just creates a VFP cursor from the source data. The only thing you have to say to the CursorAdapter is, what is the source data (XML, ODBC, Native table, …) and how do you want to name the out coming cursor. There was another session on the CursorAdapter by Igor Vit in the afternoon. You can read the coverage hereafter.

Structured error handling:

This feature has been missing for a long time. The "Try & Catch" commands allow you to catch and handle errors while processing the code. It is very useful when you for example want to create a Word object, but you are not sure, if Word is installed. If you then get an error while instantiating, you can simply say to the user: "There is no Word installed, so"! Therefore the deveoper does not need tocall your main error handler, because this is not an "error" in the application, But, as this event is caused by a problem in the environment of the application, the user has to be informed accordingly.

AutoIncrement

This is a new data feature, similar to the one we know for example from the MS SQL server. If you inlcude an AutoIncrement field to the table structure, VFP will automatically generate a new ID whenever you add a new record. The AutoIncrement field is a read-only field.

Page, columns and DataEnvironment subclassing:

In VFP 8, we have now the possibility of subclassing members (sub-objects) of the native VFP controls. There is no longer need to copy lines of your code to each form's DE. Instead of that you can just create your own DE class and add it into the existing form by defining the new properties DEClass and DEClassLibrary.

At the end of the session, Michal revealed one more feature presented, which you won't find anywhere, not even in the VFP 8 help file! Michal wrote a RELEASE command into the command window and after that, FoxPro suddenly released the whole operating system :).

I thing this session gave developers a good start in orienting in these new VFP 8 features.

Methods for Building UI by Martin Klíma

Martin Klíma shows effective ways to design and build User Interfaces. Though computers and similar devices exist for quite some time, the design of User Interfaces has become an ever-growing issue. This is partly due to the fact, that more and more completely different devices are built which present their interface to human beings. Take for example the User Interfaces built for mobile phones, PDAs and other specialised devices. There are some important questions to solve:

  • For which kind of users will the UI be designed?
  • What do users need and what are theirs goals?
Martin said that the users never know what they really want.

In order to outline his point, he gave a short overview over the changes of the User Interfaces starting from the first computers, like the Eniac in 1943, the NLS/Augment hypermedia of 1968 and Microsoft Windows of 1985, etc.

Just to mention a few: As the first computers had only character oriented input/output devices. In 1963 Ivan Sutherland published the system Sketchpad. The display, a light pen, and a bank of switches were the interface on which Ivan based the first interactive computer graphics. In 1963, his Ph.D. thesis, "Sketchpad: A Man-machine Graphical Communications System," used the light pen to create engineering drawings directly on the CRT. In 1968, Douglas C. Engelbart, of the Stanford Research Institute, demonstrated his system of keyboard, keypad, mouse, and windows. In 1970 Engelbart received a patent for a "pointing device" with a wooden shell and two metal wheels.

After finishing his historical swing Martin spoke about testing the User Interfaces. He put a great emphasis on these tests. In order to design and build a User Interfaces there should be some decent tools. For example, he recommends using STD for modelling User Interfaces.

After that, Martin introduced his listeners to the project MUMMY. This project is coordinated within the European Union. Institutions in quite a few countries like Holland, Germany and the Czech Republic (the Charles University) are currently sharing their work on this project.

Using a layout model he demonstrated nicely at the end of his session the possibilities of the multimedia communication by using mobile phones and PDAs.

Security in FoxPro - Protecting Application and Data by Christof Lange

Everyone talks about security, but acting secure is an entirely different matter altogether.

From a developer's point of view, Visual FoxPro's flexibility is one of its greatest features; from a security point of view it's the biggest weaknesses.

As Christof outlined, Microsoft has a lot of experience and knowledge in developing secure applications and actually does so. You might think, that this sentence may sound like a failed attempt to be funny, but that sentence is surprisingly true. Microsoft spent hundred of millions dollars in the research of security, has got worldwide recognized security experts and is permanently challenged by tens of thousands of security experts and its competition.

As Christof's research showed most developers start from scratch with the security aspects when developing applications, i.e. they do not pay much consideration to security. As it is cumbersome to care for IT security is not the primary focus of software developers. Without hesitation, they demand administrator privileges for their application and implement their own login dialog to restrict access. They write their own encryption routines to encrypt single fields in a table. They spend a lot of effort to protect tables in case of power failures.

As Christof showed developers tend to behave this way in spite of the fact, that enough solutions are available that are – almost with certainty - superior to the homemade solutions. Using the login dialog and password check as an example Christof showed how easy it is to implement lots of security leaks into a Visual FoxPro application with ease. He choose the login dialog because it is "very simple" - and - as Christof showed - can be an easy gate to break into your application. Then - using a step by step approach - Christof showed how to avoid these security leaks.

Christof covered the weak parts of Visual FoxPro in this session. Christof introduced the perspective of an attacker, which represents a way of thinking that is unusual for most developers. By teaching his audience to think like an attacker, he provided the first essential steps for his listeners to discover how useless encryption of code and data is, if it's not part of a bigger security concept.

Christof finished with this statement, which has to be carefully considered when starting to design applications not only mission critical ones: "Security is a topic we all should think about more and we will be forced to think about security more in the future. A lot can be done with zero to nothing efforts if you consider security right from the beginning. Not only web applications are affected, but all kind of applications. Visual FoxPro makes it attackers very easy. A very high degree of security in a Visual FoxPro application is only possible with extremely high efforts and additional tools, if at all."

What Contributes VFP 8.0 to the xBase Language and What is Still Missing by Pavel Celba

Pavel gave in this session a complete summary of what is new in VFP 8 (at least as someone outside Microsoft can do it) seen from the view of a developer who bases his living on that programming system.

Pavel discussed a broad range of topics, among which were:

  • Does the VFP 8 really offer what we were expecting and what we wanted?
  • Is the new version faster or slower than the previous version?
  • What is missing, what still doesn't work and what all at a sudden does not work any more since the new version arrived :).

Anyone who knows Pavel could be again certain, that he presented all his topics with a fabulous sense of a very nice humour. So the attendees were equally well lectured as entertained.

Europa by Ken Levy

Europa, as everybody knows, is the fourth largest Moon of Jupiter. It also is a star which plays a major part in the movie 2010 by Stanley Kubrik.

And it is the code name of the next Version of Visual FoxPro. Instead of speaking about the Toolbox and TaskPane in Visual FoxPro 8.0, where excellent material is publicly available right now, Ken choose to invest all the time of this session into present a well selected assortment of feature of this upcoming new star.

When working on this new version the VFP team tries something like the square of the circle: Improving and enhancing FoxPro's abilities, having it even better coping with all the present and upcoming requirements of the Internet and Distributed computing, incorporating the contemporary views on designing User Interfaces, improving the productivity tools for the developer and at the same time maintaining backward compatibility to protect the investment of the developers. Many enhancements were based on the UT wish list and on customer feedback. The huge number of enhancements probably could easily be grouped into three sections:

As there is a wealth of sessions on Web Services and the use of XML and ADO.NET, Ken was wise enough to leave these topics to other sessions. Instead he concentrated on demonstrating improvements and enhancements, which developers can easily employ.

The topics he covered included PolyLine and PolyForm. With these new abilities to generate graphical output FoxPro could even be used to produce a new Visio. Anchors will substantially simplify the mechanisms used to enable resizing, the ICASE() function (works like an "immediate IF"), make the own forms dockable. In effect the SQL language incorporated into VFP will be made more compatible with ANSI 92 and even the good old Report Writer will get the long awaited boost. Our colleges reporting about the Palm Spring DevCon have a well detailed report on all of these features. The presently most complete list is probably found on the fox.wikis.

After reading this name in the conference report from Palm Springs I rushed to find out where this name came from. Well first of all the fourth moon got its name already in 1610 by an astronomer called Galileo Galilei, who used the most modern technology of this time to explore the skies. (Galileo Galilei is said to be the founder of modern science, because he was the first one to use real life experiments to prove an assumption). With a fine sense of humor, he gave the name Europa to the fourth moon of Jupiter.

This planet had got its name already from the Old Romans, because this planet is one of the brightest objects in the nightly sky. The Romans associated this star with their highest God Jupiter, who was the most powerful and mighty of all the gods. The (even older) Greek had called their highest and mightiest god Zeus and that is where the story with Europa (Latin version) or Europe (Greek version) begins.

Zeus not only was the most powerful god, governing storm, thunder and lightning, but he also was the biggest lover of all gods. So he eventually fell in love with the pretty daughter of Agenor called Europa. Zeus took the form of a beautiful white bull and encountered Europa at the seashore. By appearing to be very tame, he coaxed her to climb onto his back and then swam off with her across the sea to Crete. In Crete, Europa had three sons by Zeus -- Minos, Sarpedon, and Rhadamanthys. Zeus also gave her three gifts: the bronze man, Talos, to act as her guardian; a dog, Laelaps, which never failed of its quarry; and a javelin which never missed its mark. Europa afterwards married Asterius, the king of Crete. The picture on the right side is supposed to be Europa, but she is riding an allegorical animal (part horse, part fish), symbolizing her reign on Crete.

Now lets look forward: Europa was beloved by the mightiest god and the mother of many important persons: What a good sign!

What are CursorAdapters Good For by Igor Vít

This session about new ways of accessing data in VFP 8.0 was mainly a step by step introduction to the CursorAdapter and showed some basic functions of it.

As you have probably read in the previous sessions' reports, CursorAdapter is a very handy tool for managing data from different sources.

First part of the session showed how to get the data from the native DBF source or from the ODBC source. Igor showed both, the instantiation of the CursorAdapter by the CreateObject function and with help of the form's DataEnvironment's CursorAdapter builder. Both ways are really simple and intuitive.

The second part of the session showed how to update the source data based on the changes which were made to the local CursorAdapter cursor. With use of the CursorAdapter builder it is almost the same procedure as we already knew from the view designer.

The update is accomplished by a command, which is defined in the UpdateCmd property. Unfortunately, there is no mechanism to control whether the update was successful or not. The CursorAdapter just executes the UpdateCmd command on the source data.

There were also other things mentioned: How to refresh the local cursor or how to specify its data types.

Igor recommends using CursorAdapter when you are going to use non-fox data sources in your application or if you plan to use the remote data in your application – like the investment to the future.

Client/Server Step by Step by Petr Slavícek

If you ever had problems with connecting Visual FoxPro to Microsoft SQL Server, then this session would help you. Petr gave a lecture how to build client/server applications, how to set up primary keys in tables, how to convert data types, how to specify table structure, how to import VFP table or database into SQL Server and more.

He also showed that there are two ways of importing VFP table into the SQL Server:

  • Using DTS (Data Transformation Services)
  • Using Visual FoxPro

Petr also spoke about modifications of remote data. Modifications can be done by these ways:

  • SQL (update, insert)
  • Report view
  • CursorAdapter

He is using views for updating the data to the SQL server.

Practical Uses for BINDEVENT() by Drew Speedie

Drew, in his usual casual manner, tackles this topic with ease, though this topic comprises of definitely much more than can be covered in a single session. By stating this quite clearly at the beginning Drew at the same time set the purpose of this session straight: It is not a primer (nor a primeur) it is a kind of an appetizer, so that each member of the collection "DevCon.Speedie.Audience" would not only get a good flavor of the use of BINDEVENT(), but also a fundamental understanding of how BINDEVENT() works and some ideas for using it in his/her next applications.

In order to do so Drew had chosen some examples to demonstrate a number of techniques. These techniques can immediately be put to work. At the same time these examples should also inspire the imagination to go deeper into these techniques. So reading the help file on BINDEVENT() would be the natural choice for the next private session on this topic.

Before Drew started with these examples he gave an overview on the family of methods around BINDEVENT(). This family comprises of

  • BINDEVENT()
  • AEVENTS()
  • UNBINDEVENTS()
  • RAISEEVENT()

The BINDEVENT() function is very powerful, yet it isn't a simple function that does a single task in a standard way. The BINDEVENT() function allows you to bind one method or property of a "source" object to the method of a "delegate" object. Whenever the source method fires or the source property is accessed or assigned, the delegate method fires.

One important thing to keep in mind is that the BINDEVENT() function only works on VFP objects. Both the source and delegate objects must be VFP objects. COM and Automation objects can be bound in a similar fashion, but only by using the EVENTHANDLER() function. Drew's session only covered BINDEVENT(), not EVENTHANDLER().

Another important thing to keep in mind is that BINDEVENT() binds events not only to methods but to properties just as easily – associating code with the access and/or assignment of properties, what Drew sometimes calls "runtime Access and Assign methods."

Drew then brought this fascinating collection of examples

  • BINDEVENT() methods and BINDEVENT() property
  • Encapsulate form member resizing code, no code in the Form.ReSize
  • Objects report to application object without subclass code
  • "Pre-code" for potential composite members
  • No Refresh of the members when Refresh is the delegate
  • Set runtime behaviors so members can be any class (even VFP base class)
  • BINDEVENT() a base class Timer
  • Ensure object reference cleanup/garbage collection done by the beginning of Form.Destroy
  • Form controls "know" when Form.BindControls set to .T. - turn BindControls into a method
  • Alternative to embedded "logger" code that can only log methods
  • NODEFAULT and BINDEVENT() in combination
  • Bind property assignment twice, for both before and after logic
  • Demonstration of "double-Assign", plus a workaround

Drew also showed how easy it is to have BindEventAll() custom method, even further reducing the amount of code needed to bind event.

From a Developer's Experience by Milan Kosina

Milan is with the Fox since the very beginning and he worked on a great variety of jobs. So he not only is one of the cornerstones of the Czech Fox community, he also is a stable and reliable speaker at the Czech DevCon since many years.

As in the last years Milan had a bag full of some really good tips and tricks. Each of these tips and tricks will help you to build better, faster and more useful applications. His tips and tricks easily be employed in the daily business of every developer. For example Milan showed how to create ZIP files with FoxPro. He also invested a substantial portion of his presentation on how to work more effectively and faster with help of IntelliSence. Milan also showed how to make the View Designer to become a developer's best friend - at least for a while.

The session was really brightened up by the speaker's good mood and his humour. If you were lucky you could have won a nice T-Shirt.

Try & Catch - Structured Error Handling in VFP 8.0 by Štepán Burian

In this session Štepán compared the new handy VFP 8 Try & Catch feature with the long existing way of classical error handling via ON ERROR command.

Structured error handling (SEH) is known since its first appearance in C++ definition standard in 1989, but it was first implemented in 1992 by Hewlett-Packard.

The whole magic of the SEH is hidden in 5 new commands (TRY, CATCH, THROW, FINALLY and ENDTRY)

Among the advantages of the SEH we can see things like making the code very easy to read, ability of nesting TRY commands or the possibility to throw the error to the higher level by the THROW command.

Štepán then also mentioned the new exception class and highlighted its most important PEMs. Such as the Error event – there can be also an error in the error handler :)

I cannot resist mentioning the 4 good rules of the SEH developer:

  • If I am able to fix the error, I will do so.
  • If I am not able to fix the error, I will throw it.
  • If I don't want to fix the error, I will throw it.
  • If I am lazy to fix the error, I will throw it. :)

At the end of the session, Štepán pointed out, that ON ERROR handling is still very useful in a global view, but SEH can be used on a lot of places in the application.

Internet Enabling Visual FoxPro Desktop Applications By Rick Strahl

With his convincing smile and his engaging attitude to bring "his stuff" over to the audience, which is so typical for Rick, he ventured into showing that to integrate Internet content into applications not necessarily requires an "own" Web server.

Many features to use the Internet are already available to the desktop. Rick showed that by using ShellExecute, Web Browser Control, etc. it is possible to connect directly to remote machines via file access and via DCOM and to pull data from Web Servers into local applications easily. Rick further then showed how to add Internet Content to existing apps, how to display this Internet content, how to integrate data provided from the Internet into the application and how to use Internet Services like email. Rick finally showed how to use the Internet as a network to access data over TCP/IP and HTTP and - by using this technique - how to build distributed applications with VFP both on client and server side.

Rick showed, that using Shell Extensions means using what Windows provides. ShellExecute allows execution of any "mapped" type, i.e. registered extensions (.doc, .txt, .htm etc.) including monikers like http://, ftp://, mailto: etc. It is very easy to use in a single API call for instance if it is wrapped into a Fox function. Rick then gave ample examples for its many, many possible uses.

Another useful component of windows, which comes with Windows, is the Internet Explorer Application. It allows more control than the ShellExecute and can directly be used from Visual FoxPro because it allows Automation. Rick showed how to do it. One major advantage is, that events can be captured with the EVENTHANDLER() function.

Nearly incidentally Rick pointed out that the Web Browser Control is quite something useful: It can be embedded into Visual FoxPro forms and gives a very professional look and feel to the application. It not only has a rich event model it also works great for complex changing lists that don't work well with grids. So don't use it just for Internet content!

A the last of the many useful possibilities, which Rick showed, only one shall be mentioned here: ending eMail can be done easily by using MAPI (Messaging Application Programming Interface) which comes for free as it is built-in with Win2k and newer. It requires some sort of mail client (OE, Outlook). But beware: There might be security issues with XP! There are also quite a few very good third party tools available to provide raw SMTP access. They work without any client side requirements and require only access to a mail server. Available tools include West Wind Internet Protocols (VFP + DLL), Mabry (ActiveX), EasyMail Objects (COM), SMTP SendMail (wwIPStuff), just to mention a few.

So much for today!

Wednesday, June 25

by Hans-Otto Lochmann and by Jan Vit

How to Use an OLAP from Visual FoxPro by Miroslav Krejcí

Data warehousing has emerged as a distinct discipline in the database design. The purpose of this session was to try to help the Visual FoxPro developers to understand the fundamentals of data warehousing and to get an idea, when and where this technology might be applicable. Also this session gave some ideas to a Visual FoxPro developer what to consider when a user wants to interrogate a database with varying queries and different evaluations.

Relational database usage falls primarily into two main categories: on-line transaction processing systems (OLTP) and on-line analytical systems (OLAP). Both approaches to database design are equally sound from a theoretical construct point of view. Thus your selection of one or the other design should be determined by the functional requirements of the system.

Transaction processing systems are used both to record and view information in real-time. Such systems are typically optimized for supporting a specific set of business processes. Although historical data is available in such systems, the main design goal is to support the needs of the people who run the daily operations.

If the data of a company has to be queried over a longer period of time, say 5 years, for example to make a marketing analysis, then the importance of the speed of transaction processing diminishes drastically behind such question as to which timeframe some data belong, how they are interrelated to each other and so on. Hopefully the company has not changed its organization, its line of products, its markets, etc. in the last five years... otherwise the implications on the data has to be taken into consideration as well.

The heart of the data warehouse is the "dimensional" schema: a central fact table surrounded by "dimension tables" and "transform tables". The fact table depicts for instance the business process to be measured. The dimension tables will contain the selections and their attributes, which will be used to constrain the records in the fact table, as well as provide the values used for grouping and sorting the results. This dimensional schema is also known as star, snowflake or cube, because it is often visualized using these schemes.

As the difference between OLTP and OLAP is the design (an of course the usage it is designed for), any good tool with which an OLTP design can be implemented can also be used to implement an OLAP design. Miroslav showed how to do it with Visual FoxPro.

Steps for creating a data cube:

  • consider what data does the user want - what dimensions do we need to have
  • find the sources of the required data
  • put all these information into the OLAP with help of the builder
  • define the access rights
The only thing that must be done at the frontier is just to add some control for showing the data.

Miroslav then showed how easy it is to put the OLAP browser to the VFP form.

Application Security under the .NET Framework by Michael Jurek

In the past time, there were always two security difficulties with fat applications:

Applications were giving a big chunk of "trust" to the users. This was the main reason why

  • things like the "I love you" virus spread so quickly
  • Applications couldn't properly give the rights to the program's code

This session discussed the trustworthy computing, maintaining the code security, code access security (CAS), role-based security and cryptographic services.

At the end Michael again repeated that .NET Framework is ready for all the security issues, which are in use at these days, but without a good code, good administration and trained users, the security will never be anything.

XML Adapter and XML Web Services by Ken Levy

As usual with a "pure Ken Levy lecturing session" there were not bells and whistles, eh, Slides and Videos. He just started FoxPro and off he went.

Ken first concentrated on explaining the nature of a XML: An XML is not a data storage vehicle, but a mean to transport data. Of course, if an XML string is used to transport data, it does contain data, but this "data container" is of a fragile nature. Permanent data storage should be done in SQL Server or - of course in tables of our beloved FoxPro.

The data in XML strings have to be organized somehow. This leads us to the "definition" of XML. That expression stands for eXtensible Markup Language. It provides a mean to describe data and its structure. It is internationally standardized by the W3C workgroups.

The real strength of XML is, that it kept its definitions on a highly abstract level. This is achieved by separating the syntax from the semantics. XML only specifies the syntax. Semantics by the way denoted the meaning on a word or any kind of data. XML provides also means to describe the semantic of a string of data, to define the nature of the data elements, to define the structure of the data and so forth. Two items were stressed by Ken especially:

The DOM (Document Object Model) is a defined standard for programmatically accessing the structure and data contained in an XML document. It is based on an in-memory tree representation of the XML document. When an XML file is loaded into the processor, it must build an in-memory tree that correctly represents the document. The DOM also defines the programmatic interface (including the names of the methods and properties) that should be used to programmatically traverse an XML tree and manipulate the elements, values, and attributes.

A schema is basically a set of predefined rules that describe a given class of XML document. A schema defines the elements that can appear within a given XML document, along with the attributes that can be associated with a given element. It also defines structural information about the XML document, such as which elements are child elements of others, the sequence in which the child elements can appear, and the number of child elements. It can define whether an element is empty or can include text as well as default values for attributes. Document Type Definitions (DTDs) and XML-Data are both examples of specifications that outline how to describe XML document schemas.

Because XML is truly about interoperability and everyone is free to create their own XML vocabularies, everything would start to break down rather quickly if different developers chose identical element names to represent conceptually distinct entities. To safeguard against these potential conflicts, the concept of "namespaces" were introduced into the XML language. It provides a "space" in which a developer can use "his/her" name conventions, as he/she likes to do and being safe not to create any potential ambiguities.

Microsoft provides a set of standard COM interfaces in its XML parser (Msxml.dll), which can easily be invoked in FoxPro using the Create Object() function. Ken spent considerable time using an instance of this XML parser to demonstrate the various features of XML and the XML DOM. He also explained why it is necessary to set the property async of this instance to False and on this feature he explained the "inner working" of data transport via XML.

Finally Ken showed the use of FoxPro to generate and to consume XML data streams, which - invariably - resulted in "How to use Web Services".

There is a great wealth of information available on XML in various places in the internet, e.g. in MSDN.

What are Collections and how to use them in Visual FoxPro 8.0 by Hana Horová

This session discussed this new feature of Visual FoxPro collection in depth.

At the beginning of the session Hana reminded the audience, that collections are nothing new at all. We all are using them when we are writing applications, which incorporate Word or Excel automation. The Property “Columns” in the grid control is in fact a collection or Objects in Form, an OptionGroup and other container. And we were using them even in earlier versions of VFP.

But these collections came with the container, but there was no separate base class collection. Now this has changed: The new collection class in VFP 8 allows you to create your own collections.

Hana demonstrated the use of all the important PEMs, such as the Add, Remove or GetKey methods. With appropriate examples Hana showed the usage of this new class and explained the rules which FoxPro uses to assign the indexes to the collection's fields.

At the end she summarized that collections can be used as improved object arrays and that we all should start to use them.

Distributed Applications over the Web with XML by Rick Strahl

Rick devoted this session to lecture his audience how to find out how to share content between Web Servers and Fat Client VFP applications by utilizing the HTTP protocol and HTTP to shuttle data between the client and server.

Rick first explains what he defines to be a distributed application:

  • A smart client, which runs code or script and makes requests on server for data or logic.
  • A fat server, which provides business logic and data and runs standard Web backend software.
  • The communication between both goes over the Web using HTTP and XML.

Rick then explains carefully each item in his list to give an overview of how distributed applications work. Rick then describes 3 different approaches how this technology can be applied. These approaches include

  • Web/XML Service Wrapper Classes
  • Web Data Access
  • Object Marshalling

As ever, the explanations are illustrated by examples, which are freeware. Just examine Rick's Internet Site to learn more.

Why You need a good Injury Insurance when Moving from VFP to .NET by Petr Hojný

This session was all about what an expert VFP developer has to consider when migrating from VFP to the Visual Studio .NET.

In the center of this session there was an application, which comprised of only one form and some data. Petr explained this little application and then showed how the code would look like if it would be written in Visual FoxPro.

Everybody in the audience agreed, that an expert developer could write this in 15 minutes.

Petr then opened the Visual Studio .NET with a form looking exactly the same as the VFP form. But then there was no code in it! Then, for the rest of the session, he tried to implement all the functionality of the original VFP application to it. He did it very carefully, so everybody in the audience could get a really good understanding of the different way of thinking when developing in VFP or in .NET.

Petr did not recommend do not use .NET, his point was to demonstrate that that what looks easy might not be easy. So think carefully, what you are going to do whenever you leave the ground well known to you, and prepare for all the risks you might encounter.

Using FoxPro for building W@P applications by Petr Bauer

Some of us probably already tried to build some WEB pages. If you haven't or if you are bored with building ordinary WEB pages and if you really would like to try something absolutely new then this the session would have been the right one for you.

Petr directed the session to tell the audience how to use FoxPro for building W@P applications.

He explained the necessary basics of WML (Wireless Markup Language), demonstrated how to create forms and how to create links in WML. Then he also briefly discussed the structure of the WML file and demonstrated the configuration of the server and VFP.

This session gave the listeners a very good idea, how easy it is to create W@P applications with use of Visual FoxPro for the mobile phones if you dare to try it.

Getting The Most Out Of Your Visual FoxPro MetaData Source Files by Drew Speedie

Drew Speedie, a well-known speaker on many DevCons, uses Visual FoxPro since its version 3.0. At this stage Visual FoxPro already had many features and tools, which made it a superior application generation system just from its beginning.

If you know Drew then you will easily understand, that he quickly found out, that quite a few things could not be done as fast as he would like to do them. So he started to look for shortcuts.

FoxPro has always stored a large percentage of source code in meta data files like .SCXs, .VCXs, .FRXs, .LBXs etc. There is no magic involved in getting that information into the appropriate Designer; everything you see in the Form and Class Designers comes directly from these Meta Data files.

These Meta Data files are just VFP tables with a special extension. Also the structure of these tables had always been well published in the Help files. So once you know your way around these files, many tasks that are either time-consuming or impossible in the VFP IDE can be accomplished efficiently and quickly. You even can automate tedious maintenance chores if you know how to update those files programmatically.

In this session Drew firstly showed the basics in hacking these .SCX and .VCX files. He gave convincing demonstrations of several techniques you will find indispensable once you know how to use them.

But Drew stressed one caution measure in the beginning: AS all the methods, which he was going to demonstrate will irrevocably change these files, you should make a backup copy first!

Drew demonstrated how to modify objects without using the Designers. This included tasks like:

  • redefine the class on which a form or class is based;
  • retrieve lost method code and recover other deleted PEMs;
  • manipulate the properties of 'leaf' controls;
  • redefine members of a form or class;
  • redefine members on initial form creation;
  • re-sort classes alphabetically;
  • re-sort class methods for better arrangement in the VFP 7.0 Document View window;
  • specify the initial method on Dbl-Clicking the object surface;
  • rearrange the order of columns, pages;
  • cleanup pathing problems in the ClassLoc field;
  • merge two classes into one class;
  • runtime hack of SCX, .PRG, .EXE;

Finally he showed how to extend the VFP 7.0 EDITSOURCE() function, which in his opinion is well conceived, but its realization is just 2 % too short. Maybe that this enhancement will be included in Europa.

The History of Relational Databases - Jaroslav Pokorný

This session gave an overview of the SQL and Relational Databases Technologies.

The handling of redundant data was the problem, which was solved by the Relational Database Theory. In 1970 Dr. E. F. Codd published a paper entitled “A Relational Model of Data for Large Shared Data Banks”. In that paper, Dr. Codd introduced a set of rules intended to eliminate the need to store redundant data und thus introduced the world to the Relational Database Theory.

The paper of Dr. Codd not only set rules for storing the data, it also defined rules on how to retrieve data. When IBM developed their first system to realize Relational Databases (1974 System/R) these retrieval rules were cast into a formal language, which, because it used English command word, originally was called Structured English Query Language (SEQUEL). The name was later (1981) shortened to Structured Query Language (SQL).

Just to give the audience an intuitive feeling what this is all about Jaroslav then explained how the inner working of a Relational Database could be envisioned using an everyday situation in a rather drastic example. Let's cite him literally: “Relational database would be thought to be very similar to a garage which would force you to disassemble your car to the smallest parts before you can park it inside.”

Though IBM's SQL had quite a few competitors, the sheer weight of the company made it a de facto standard, which - after everybody got used to it - resulted in "real" standardization. Some important dates:

  • 1986 - SQL 86 - first ANSI standardization
  • 1987 - ISO 87 - accepted by ISO, Data Definition Language (DDL)
  • 1992 - SQL 92 - new data types (= extension of the DDL), new connection types
  • 1998 - SQLJ - Java
  • 1999 - SQL:1999 - becoming object oriented
  • >2000 till today's SQLs - SQL4
  • s

Jaroslav then also pointed out some possible problems, which may occur when using these technologies and put emphasis on the fact that many of the technologies he mentioned are still in the development and thus not yet perfect.

The resulting relational model is a data model that represents data in the form of relations. A data model is a conceptual collection of the data, relationships, and constraints on the data. Therefore, it follows that the relational data model is a conceptual representation of the objects, events, and associations in a relational database system. What all that really means is that the relational data model requires that data be stored in relations.

A relation is represented by a table that stores information about an entity—a conceptual collection of one type of data. Each row corresponds to one tuple and a column corresponds to an attribute. In this context, an attribute is simply a named column in a relation. Each attribute is associated with a domain (i.e., the possible set of values for that attribute). For example, Table A lists the domains for a few attributes of a relation that stores data about books.

How FoxPro Works Internally by Christof Lange

The material, Christof was going to present in the session, is fascinating and difficult. At the same time is it essential for each developer to have at least a sound basic understanding of how FoxPro works internally.

Being a FoxPro developer by convinction does Christof nor prevent from stating: "Visual FoxPro is a lot: it's fast, productive, stable, amazing, surprising... but it certainly isn't logical and consistent." Christof showed that almost two decades of development with three fundamentally different programming concepts, with four operating systems and two different compilers left their traces in a product everybody in the audience and in the DevCon loves to employ and use. As Christof outlined, FoxPro is a high-level development tool. When someone wants to use it he/she can do so with ease and is not required to have a good knowledge of its internal working. It is - at leas in this respect - much easier to use than VB or .NET. But, as he outlined, it's quite helpful to know what is going on behind the scenes in order to have a good perception of what could have gone wrong if problems are encountered.

Christof then lectured on these topics:

  • the internal management of variables,
  • memory management,
  • handling of classes, objects and containers (and why those are the same, yet completely different),
  • the content of the system data session,
  • the impact of cache, buffers and transactions,
just to name only a few.

There is not enough space here to dig any deeper into these topics, because each of them requires a careful description of the underlying process or design feature. But Christof has written an excellent paper on this subject, unfortunately it only available in German (D-HALT.doc), but you should check his account in the German FoxPro user group, perhaps he will publish this in English.

There in one thing, which Christof made very clear, just from the beginning: The actual internals of FoxPro are the intellectual property of Microsoft and are not publicly disclosed. Everyone who really knows how Visual FoxPro works inside is prohibited to talk about this by signing a Non-Disclosure Agreement (NDA). Therefore Christof had to use public available sources, experiences from other developers and his own experience gained when using FoxPro. But all of this did not prevent him from presenting a clear picture of the internal operations of FoxPro at least as it was needed to follow his ideas and statements,

Transactions in Visual FoxPro and SQL Server by Milan Kosina

The goal of this session was to highlight, that transactions are one of the most important data features in Visual FoxPro and SQL Server.

Basic feature of transaction can easily be remembered by the code ACID

  • Atomicity: either all action are done or none at all
  • Consistency: the data must remain the same
  • Isolation: no one should be able to see only some data of the set - either none or all
  • Durability: once the changes are committed they cannot be revoked

After that Milan outlined the basic rules for using the transactions in applications:

  • Transactions can be used only on a table that belongs to the database
  • The table header is closed during the transaction (nobody can add new records at that time)
  • The highest level of nesting is 5 times
  • SET MULTILOCKS must be set to ON

Then Milan showed, how transactions are implemented into Visual FoxPro

  • Atomicity: is provided by the way transactions have been implemented.
  • Consistency: TABLEUPDATE() will return .F. if the integrity is violated or the data could not saved in one or more tables involved in the transaction for whatever reasons.
  • Isolation: VFP will lock the rows when it starts the transaction processing. During this time only then data ("old" data) can be seen by other users, which have been in the tables when the transaction started. Only if the transaction is "successful" (i.e. all changes can be committed), then this "change committing" will really happen, and the other users then will "see" the changed data.
  • Durability: is not implemented in such a way as Milan thinks it should have been.

The session then continued with lots of code examples showing how to effectively use the VFP or SQL transactions.

What You Should Do For Not Getting Into Trouble by Darina Vondrážková

Attendees who don't want to break the law benefited from this session the most.

The session explained, what the EULA and the software assurance is, how does the upgrade and downgrade work, how to make licenses for your own applications and so forth.

After leaving the session everyone was able to answer the most frequent questions about licensing, such as:

  • How can I prove the legal license?
  • How many licenses do I need when working at home and in the office?
  • Which software can be propagated and which cannot?
  • How many people can share one license?
  • What is the OEM (Original Equipment Manufacturer) license and what is so special about it?

This session definitely cut the software piracy in The Czech Republic to the world's minimum.

Visual FoxPro Tips and Tricks by Drew Speedie.

In this session, Drew presented a great variety of tips and tricks. Obviously he has been busy collecting these techniques, because he would rather run out of time than running of tips and tricks.

The items covered a broad spectrum of VFP development, from improving productivity to managing classes to working around VFP limitations and anomalies. These tips and tricks are of rather close to everyday application development experiences so that the audience should be able to put most of these techniques to work right away.

Drew has prepared a Visual FoxPro application, which includes all these techniques. When each of these tips and tricks is called in the application window, then the application "unpacks" the necessary code (if any exists) into the directory this application is located in, so this code can immediately be tested and - if found useful - it can be copied/pasted wherever you want it to be.

The examples, tips and tricks can mostly be used in all versions starting with Visual FoxPro 6 or bigger, a few only apply to Visual FoxPro 8.0 only.

So much for today!

 

Thursday, June 26

by Hans-Otto Lochmann and by Jan Vit

Active FoxPro Pages 3.0 by Jürgen Wondzinski and Christof Lange

This was by far the best session of this morning (mostly due to the lack of competing sessions - sorry for that, wOOdy and Christof, but we just could not resist...)

wOOdy, as he is known by all the insiders, presented this session in his usual manner: relaxed and concentrated to topics, congenially supported by Christof, also well known, among others from the FoxPro Advisor Magazine QßA section. So it was as well fun for the attendees to watch them handing the baton to each other flawlessly as it was a "e;serious seminar"e; with some very important lectures to learn and to use immediately.

Basically this session was a vendor session and a lecture session at the same time, both well done.

wOOdy and Christof firstly gave a brief overview of the history of Active FoxPro Pages (AFP) and explained its basic principles. AFP "connects" Visual FoxPro to web.

AFP is an internet server extension that processes program code inside an HTML page, like Microsoft's ASP technology. But AFP is also a script engine for FoxPro code that let's you dynamically present your data on the Internet. But since it does not require ODBC or ADO to access to your data AFP much faster. wOOdy and Christof's claim, that AFP might be by far the fastest system of this type, at least as far as data access is concerned. But this claim has not been challenged yet. Of course this confidence is based on the fact, that AFP is based on the world's fastest Database system: Visual FoxPro.

AFP features a built-in programming language with more than 400 commands and functions for any and all application purposes. It also provides for using most of VFP commands and functions in web programming. Most important: it comes with a framework, which in its design follows the design principles on which Visual FoxPro is build. Therefore the learning curve is dramatically reduced: A single-day jumpstart into AFP Framework is all you need to open your personal access into web development in your favourite FoxPro environment - at least that is what wOOdy and Christof maintain.

Also the AFP Framework designed as a Rapid Application Development tool for easy and fast development of web applications on Visual FoxPro platform. AFP Framework claims to be a powerful and productive tool. Among its features

  • AFP Framework is project-oriented. Inside the AFP Framework you can develop and maintain many independent web projects. All projects are separated in own directory structure (under c:\inetpub\wwwroot\) and have own dataset.
  • Every project has a data dictionary with definitions of project databases, tables, views, fields, formats and many other properties.
  • Based on a data dictionary, the AFP Framework knows how to generate many types of web forms and even web grids.
  • AFP Framework comes with WebObjects, which can be customized to a great level.
  • Skins are not only available on mp3 player right now anymore: Every WebObject can be generated in one of 12 predefined application visual skins. So you can totally change the look of your web application in a few minutes. And you can give this power to the user as well!
  • "Free" web pages usually have to be provided additionally in web applications besides the "data based" based just on plain text. All this can easily be done with the "FreeWebPage designer" - which is a real visual WYSIWYG html designer and web page generator inside the AFP Framework.

Building Applications with Visual MaxFrame Professional by Drew Speedie

This session was announced as a vendor session, but as with wOOdy's and Cristofs session, it was a great lecture as well.

Drew introduced Visual MaxFrame Professional (VMP). It is an object-oriented application development framework designed for Visual FoxPro and has the following features:

  • VMP consists of a set of class definitions in .VCX visual class libraries and procedural code libraries for use in creating an integrated set of application components providing basic features common to most Visual FoxPro applications.
  • VMP is intended for use by Visual FoxPro developers who have not yet developed their own applica-tion framework and want to take advantage of the features in Visual MaxFrame Professional.
  • VMP is not an "application generator" – it cannot be used to automatically create data-entry forms based on a data dictionary, etc. VMP is an application framework – the framework classes can be subclassed into the developers own customized framework objects.
  • VMP is not "pure OOP" - where appropriate, native VFP constructs will be used, procedural or other-wise to solve problems with the best available tool.
  • VMP allows you to develop applications using any of the following architectures:
    • 1-Tier (VFP code, VFP database)
    • 2-Tier (VFP code, remote database)
    • n-Tier (any presentation tier including a VMP desktop application, VMP business objects in the mid-dle tier, any database)
    • In fact, VMP even supports mixing any combination of the above architectures in a single application.
  • VMP has been designed with the average FoxPro developer in mind. We use VMP to develop Visual FoxPro applications, mostly mid-to-large business applications requiring a team of developers. Visual MaxFrame Professional is the tool we use to shorten the learning curve and get the team as productive as possible as soon as possible.

After having stated this, Drew then demonstrated the various features with well-suited examples. And to learn from these examples has been an adequate End of the DevCon

Other events and sessions of Thursday.

There were more session on the morning of this day, but these were repeat sessions. So there is no need to report about them.

The DevCon ended at lunchtime and everybody went home.

Thank you for reading so far!

 

Closing Words and Acknowledgements.

This has been the report about this year's DevCon in Prague. Including speakers more than 480 people attended this DevCon (485 to be exact). Excluding the speakers most of the attendees came from the Czech Republic, but there was a strong minority of people from 11 countries, one attendee even came from Israel.

If you look onto the trends of the recent years then as many people have attended this 6th DevCon as in the years before. This is in so far remarkable as the population of the Czech Republic is about 10 million people. And of course this rises the question, why this is so.

Well, let me, Hans-Otto Lochmann, tell you some of my ideas why this might be so. First of all this event is not just a Congress of Developers, it is also a kind of a family reunion. Attending this DevCon is somehow connected with some kind of a "coming home" feeling.

Then there is the location. It "only" takes place in one of the buildings of the Faculty of Electrical Engineering of the Czech Technical University (CTU). Though the DevCon always takes place when there are no lectures, that does not mean that life at the Faculty of Electrical Engineering had died out: Students come and go as well as professors and other people working in these buildings. The buildings themselves are as those buildings that you find in universities: rather functional, unemotional. There are message boards, covered with news to the students, but there are also instructional posters, explaining for instance, how the various protocols of the Internet are interrelated and other useful things.

I do not know, whether this really is important, but the atmosphere at CTU is very sober. Exactly the one you would expect from a place were you go to be instructed and lectured. And it is of course a place, which reminds you of the times when you yourself have been a student. And it is a sound foundation for the friendliness of the people from DAQUAS and all the attendees.

I know, one can see it differently - but why does anybody go (or is sent) to a DevCon? Certainly not to relax on the sides of a fancy swimming pool with a cool drink in his hands.

And of course there is ample space for fun and joy: Traditionally the evening of the first day is reserved to the developer party: It takes place somewhere downtown or in the vicinity of the city. For those who want to go by foot, this usually needs about 35 to 60 minutes of walking to go from the CTU to the place, where the party is going to be. For the other ones, there are subways, busses, trams, and taxis available to go to the hotel (Prague has an dense network of public traffic services), dump the luggage there, and then you either walk by foot to the developers' party or use public transportation to do so.

And finally there are the people of DAQUAS: A group of determined, always friendly, always helpful people, who always will find a way to resolve larger or smaller problems (see the story about Drew's visa). So you not only feel professionally serviced, you also feel welcomed and cared for.

And do you know, why DAQUAS does not need a Resort Hotel, to get enough attendees to the DevCon? Well the Resort is the city of Prague. People have been working for more than 1000 years to create it. Therefore a couple of days sight seeing won't do it. To "see it all" you can spend many many months travelling the city. As nobody has this much time available here is this proposal: Just add a few day to the DAQUAS DevCon and you have many reasons to visit Prague for many years to come.

So watch out for next year's DevCon - maybe this is the one for you!

At the end my new college, Jan Vit, and myself want to extend our thanks to everybody who helped us preparing this report.

  • First of all we want to thank the people of DAQUAS whose never-ending patience and resourcefulness were a great help.
  • Igor Vit - His persistence, creativity and never ending friendliness helped a great deal.
  • Michel Fournier - He enabled UT, he invented this type of reporting and, above all, showed remarkable patience with us because we constantly missed the deadlines.
  • Jan Král - He is Jan Vit's best friend, also 17 years old, and currently a high school student. Since 1999 he has been using Visual FoxPro versions 3, 6 and 7 and has been attending several conferences of DAQUAS. He served us well in collecting facts and information, taking pictures and delivering quite a lot of ready to use written drafts.
  • Brent Speedie (son of Drew and Irene Speedie) - Though 11 years young he voluntarily supported us and became our "assistant spell checker" - reading all the texts and finding tons of typos, wrong grammar and misused idioms - we wish our English would be as good as his.

Hans-Otto Lochmann, Dr. Lochmann Consulting Gmbh

Jan Vít, VitSoft, s.r.o.
My biggest hobby always was and no doubt still is information technology, software architecture and programming in particular. I have been pursuing this hobby for 17 years now. In the last years, I made my hobby a challenging job as well by starting a company called VitSoft, my own business in custom software development and consulting. In the beginning I was using Visual FoxPro for my software most of time. For the past few years I have been doing my development using the .NET platform, specifically using the C# language. Microsofft SQL Server usually takes care of my databases. Apart from several articles I regularly speak about my programming experience on the Visual FoxPro DevCon conferences held in Prague every year and occasionally also on small courses. I am also a frequent member of conference reporting teams, bringing on-line coverage from conferences home and abroad. Through my company I am now mostly developing software for pharmacies and providing consulting services.

Copyright © 1993 - 2014 Level Extreme Inc., All Rights Reserved · Telephone: 506-783-9007 Email: info@universalthread.com · Privacy & Security · Copyright · Terms & Conditions