Virtual Fox Fest 2020

An online conference presenting the latest in Microsoft Visual FoxPro development techniques

October 15, 21, and 27, 2020


"Level" shows the expected level for attendees for a session. Click a speaker's name to see their bio.

A Modern Web Browser Control

Presenter: Christof Wollenhaupt
Level: Intermediate

Note: if you cannot access YouTube, you can watch the video here

For many years there was only one way to view web content in a Windows 32-bit desktop application: the IE based web browser control. The web browser control is difficult to tame and handle (unless you are Rick Strahl), particularly if you have no control over the content that should be displayed.

The situation has changed, though. Microsoft announced an embeddable version of Edge Chromium in 2018 which we will briefly cover in this session. Most of the session will focus on another control though. We will look at the Chromium Embedded Framework, an open source project for embedding a Chromium browser in an application. Chromium is the open source foundation on which Google Chrome, Microsoft Edge, and Opera are built on.

The cefsharp project makes CEF available as a .NET WinForm and WPF control which we can use in our Visual FoxPro applications. This session looks at how you embed cefsharp, how to view remote and local files, how to extend the control, how to interact with the web page from your VFP app, how to run code in VFP from your web control, how to exchange data with VFP, how to debug JavaScript code in your application and, of course, how to distribute cefsharp with your application.

You will learn:

  • How to use the cefsharp web browser control
  • How to deploy the cefsharp web browser control
  • Some of the drawbacks of the cefsharp web browser control and its alternatives

Prerequisites: Some knowledge of .NET, C#, HTML and JavaScript is helpful to follow the samples

Builders, Property Editors and Thor Boosting Productivity

Presenter: Rick Schummer
Level: All levels

Note: if you cannot access YouTube, you can watch the video here

Builders are a handy way to set one or more attributes on objects without opening up the Visual FoxPro Property Sheet or writing a line of code. How many times a day do you find yourself jumping to the Property Sheet, moving to the correct tab, and searching down the seemingly endless list to find that one property that you need to tweak? Dozens, hundreds, or does it just feel like a thousand? Builders are yet another shortcut to increasing your productivity in ways you may have not imagined. Right-click on the object, select Builder… from the menu, and let a builder do the work for you.

Builder technology has been around since Visual FoxPro 3.0, yet to this day when the topic of builders comes up in conversation amongst developers, it is usually met with blank stares. There are a number of native builders that ship with Visual FoxPro. Some are cool, some are okay, while others seem to be little more than useless. The most important part of this technology is not the alternative property sheet user interfaces that ship with Visual FoxPro, but the fact that they are extensible, even replaceable, and most of all easy to create.

Property editors were introduced in Visual FoxPro 9. They are not directly related to the builder technology, but they act and respond to properties in a similar fashion as a builder. They are often implemented using the same techniques as a builder, and are implemented via the IntelliSense table (FOXCODE.DBF). A Property Editor typically works with one property for a single object at a time, but this is not a limit of the implementation.

This session will demonstrate builder and property editor technology inside of Visual FoxPro, how to leverage the existing builders and property editors, and create and register your own builders (traditional and non-traditional ones). We will step through creating several builders from scratch, using the classic builder techniques, using BuilderB techniques, and finally showing how Thor can leverage any of the previous builder technology included in Visual FoxPro!

During the session I will be using an update to the core builder technology which fixes a bug and updates the user interface, and an updated editor to the various builder, wizards, and property editor metadata files.

You will learn:

  • What a VFP builder is and how it can increase your productivity
  • What VFP builders to use and which ones to avoid
  • How VFP builder technology is integrated into the development environment and how it can be exploited for your benefit
  • How to create and register your own builders.
  • How to leverage builder technology without creating a classic builder
  • What the Builder and BuilderX properties are and how they can be useful
  • What BuilderB technology is and how you can take advantage of it
  • What Property Editors are and how they are implemented
  • How to leverage Thor instead of builders

Prerequisites: None

Create Complex Graphs with GraphViz

Presenter: Tamar E. Granor
Level: Intermediate

Note: if you cannot access YouTube, you can watch the video here

GraphViz is an open-source tool that creates graphs in a variety of formats. It can be used for all kinds of networks, including organization charts, data structures, flow charts, family trees, and more. It offers a tremendous amount of customization.

In this session, we'll see how to take advantage of GraphViz from VFP, including wrapper classes to handle the messy parts.

You will learn:

  • What GraphViz is and what it can do
  • How to construct the data files needed for GraphViz
  • How to produce graphs in a variety of formats

Prerequisites: None

DataBinding for Xbase developers in .Net Using Windows.Forms and WPF

Presenter: Robert van der Hulst
Level: All levels

Note: if you cannot access YouTube, you can watch the video here

Whether you have moved your Visual FoxPro application to .Net using X# or you have started new development in .Net using C#, Visual Basic, or X#, you have to learn how .Net binds data from various data sources to its UI elements, such as forms and controls. This mechanism looks a bit like the way FoxPro does it, but is also very different.

In this session, Robert will demonstrate how the various controls and forms in both Windows.Forms and WPF applications can be bound to data in such as way that forms display the data and changes on these controls and forms are written back to the data sources. Some of the topics covered during this session are the mechanism that is used to bind controls and forms to data sources, the requirements for a data source to be "bindable" to controls and forms, and how changes are synchronized between the data source and the UI elements.

The session will look examples of data sources such as:

  • DataTables and DataViews;
  • Generic List of Objects;
  • Classes that implement IList, IBindingList;
  • DbDataTable() and DbDataSource().

The examples in this session will use X# as the programming language and data in cursors from DBF files, cursors returned from SqlSelect(), and data retrieved directly with the Ado.Net SQL classes. For the UI both Windows.Forms and WPF will be used.

You will learn:

  • Basics of data binding in .Net with both Windows.Forms and WPF
  • How to create bound data sources based on DBF cursors
  • How to create bound data sources based on Ado.Net data collections
  • How to create bound data sources based on Lists of data objects
  • How to bind these data sources to controls, forms and grids in .Net

Prerequisites: None

Getting Comfortable with Git

Presenter: Rick Borup
Level: All levels

Note: if you cannot access YouTube, you can watch the video here

Have you started using Git but don't feel totally comfortable with it? Are you thinking about getting started with Git but are reluctant to jump in because it looks complicated and scary? Or are you an experienced Git user who feels there are still areas of Git you'd like to know more about? If any of these describe you, this session is for you. Together we'll explore the ins and outs of Git along with some tips and tricks so you'll be able to use Git effectively in your own work.

You will learn:

  • How Git sees the world
  • About command line Git and Git GUI's
  • About various branching strategies in Git
  • How to research and track revision history in Git
  • About 'hunky' development
  • What's new in the latest releases of Git

Prerequisites: Some experience with Git is helpful but not required

How to Virtualize Your FoxPro Application

Presenter: G.N. Shah
Level: All levels

Note: if you cannot access YouTube, you can watch the video here

Right now we are definitely navigating through uncharted territory. We know that business needs to continue and has to support applications while practicing social distancing to flatten the curve. It's become more and more important for companies to work remotely. Due to the nature of FoxPro as desktop application, it becomes a challenge to move to a desktop based application on cloud, enabling users work from home. In this session, we will explore the options available and how easily we can move existing FoxPro applications on cloud, without making too many changes. We will discuss the different types of legacy infrastructure and their equivalent cloud solutions along with the pricing structure. This session will enable developers to deploy legacy FoxPro applications into a virtual cloud with multi-user access.

You will learn:

  • About application virtualization and available cloud services
  • How to plan for VFP application virtualization
  • How to setup an AWS account
  • How to add AppStream Service or WorkSpace to your AWS account
  • How to upload and configure your Visual FoxPro application
  • How to upload and connect to a VFP database with your VFP AppStream Service for multi-user access
  • How to setup authentication and launch your VFP application using AppStream Service

Prerequisites: None

Inheritance: Excellent or Evil?

Presenter: Joel Leach
Level: All levels

Note: if you cannot access YouTube, you can watch the video here

"Favor composition over inheritance" is the mantra of the modern developer. Some avoid it entirely...perhaps without even understanding why. But, can one of the three pillars of OOP be all that bad? Is inheritance really something to be avoided or is it one of the best parts of OOP? Let's examine that question in detail in this session.

You will learn:

  • What inheritance is and the original philosophy behind it
  • The pitfalls associated with inheritance and how to avoid them
  • How inheritance can remain part of your OOP design arsenal

Prerequisites: Familiarity with VFP and object-oriented design

Introduction to Harbour, an Open Source Alternative to VFP

Presenter: Eric Lendvai
Level: All levels

Note: if you cannot access YouTube, you can watch the video here

Harbour is a compiler which generates pure C code from xBase-like programs, but unlike other compilers, you can still use macros (evals) and do dynamic linking. If you want to develop with a language that is very similar to VFP, is open source, and can still access VFP tables and SQL backends, Harbour is the solution. With Harbour, we have access to its source code, we don't have to be worried about a single vendor controlling its future, and it is 100% free. Harbour was in development since before 1999, as a Clipper clone. Now it is incredibly stable and it can allow you to create apps that can run not only on Windows, but also on Unix, Mac, and Android. You can even create 64-bit apps! Break the 2Gb file size limit, even for DBFs (256 TB). You can also create multi-threaded apps if you want.

You will learn:

  • The similarities and differences between VFP and Harbour
  • Using VSCODE to edit and debug programs
  • Resource for learning about Harbour
  • GUI development on Windows, Unix, Mac
  • Interop between Harbour and VFP

Prerequisites: None

Macrosoft Exhibitor Session

Level: All levels

Modernize Your Applications Using DBI Controls

Presenter: Doug Hennig
Level: All levels

Note: if you cannot access YouTube, you can watch the video here

DBI Technologies is the only ActiveX control vendor that actively supports VFP developers. Their Studio Controls for COM suite provides 88 controls that allow you to modernize the user interface of your applications so they look more like Microsoft Office. This session looks at several of the controls in this suite, showing you how to implement them to freshen and extend the life of your applications.

You will learn:

  • How ctxTreeView can replace the Microsoft TreeView control and give both better performance and a more customizable and attractive control
  • How ctxDropMenu and ctxToolbar can replace VFP's system and shortcut menus to provide both object-oriented and modern looking menus and toolbars
  • How controls such as ctxCombo, ctxTips, and ctGroup provide modern alternatives to native VFP controls

Prerequisites: General knowledge of VFP

Node.js for Fox Developers

Presenter: Ajit Abraham
Level: Beginner

Note: if you cannot access YouTube, you can watch the video here

In the past couple of decades, Fox development shops or individual Fox developers have put in considerable amount of time and effort in developing amazing desktop applications in FoxPro for their clients.

In most of these cases, the clients (especially smaller clients) are less concerned about the technology used for development of their apps. They are not ready to migrate their desktop applications to "modern" languages / platforms, mainly due to cost implications and/or the idea as to why to change if the application is working flawlessly.

The best way forward to enhance such clients is to allow them to continue using the Fox desktop application, while at the same time exposing their Fox data to the web, on browsers or mobiles.

Many Fox Gurus have already successfully demonstrated cool ways of exposing FoxPro to the Web world.

This session is yet another attempt to access FoxPro data and reports from the web world, via a free backend Nodejs Server. The contents of this session is targeted mainly for developers who have built applications for smaller clients.

You will learn:

  • A basic introduction to JavaScript
  • What NodeJS is
  • Installation of NodeJS on Windows
  • What is npm and how to install necessary modules required for this session
  • What synchronous and asynchronous code is
  • Difference between FoxPro and JavaScript's call stack
  • What are blocking and non-blocking codes and how to overcome blocking code issues
  • Steps to access FoxPro data and reports through NodeJS
  • Why this approach is suited only for smaller clients

Prerequisites: A general understanding of JavaScript will be helpful and working knowledge of VFP 9

Quasar and JSON: A Full Stack Experience for the DB Developer

Presenter: Andrew Ross MacNeill
Level: Beginner

Note: if you cannot access YouTube, you can watch the video here

Quasar is a development tool that leverages Vue (and JavaScript) to build not just web apps but desktop applications as well. Much like VFP application tools, it makes creating an application easy. So why is this important? Combining Quasar with strategies for migrating small and large applications with JSON (whether standalone or web-based), VFP developers can have a lot of fun going through the code and creating some VERY cool interfaces.

The session is broken into two key areas:

Data: The first part shows how you can take your existing complex databases into the JSON environment whether by using web services or local strategies.

App Development: It then uses Quasar to access this data and make app development fun again. Quasar uses Vue but the session covers the basics so developers will be able to quickly develop and showcase their work.

You will learn:

  • Strategies for using JSON either as a go-between for SQL databases or a single file format (via zip docs)
  • Benefits of using Quasar for desktop and web development deployments
  • How Quasar helps teach Vue concepts while focusing on delivering great applications

Prerequisites: Some awareness of JavaScript

SQL Server 2019: Implementing Security with Users, Schemas, and Roles

Presenter: Jody L. Meyer
Level: All levels

Note: if you cannot access YouTube, you can watch the video here

You would think that implementing SQL Server database security should be a simple topic. All you want to do is to grant a specific login a specific capability. For example, you want to setup a user with the ability to update some tables' content in a specific database. For another, you want to just allow the user to view content of some tables in a specific database. However, with SQL Server, setting up security can get complicated very quickly. There are many different scenarios and situations which create a staggering number of considerations for a final implementation. And, as time goes on, new demands of the industry are always popping up and with each new release of SQL Server the options available to us can be mind boggling. We now have 248 unique SQL Server permissions with SQL Server 2019. Seriously, all you want to do is insure that each user only has access to the data that is specific to their need and nothing else. So, how can we do that in such a way that is both manageable yet effective? Well, that's what this session is all about. Jody will discuss and demonstrate a simple baseline understanding of how SQL Server manages security.

You will learn:

  • How SQL Server manages security
  • What principles, securables and scope are in the context of SQL Server
  • What Users and Logins are and how to create them
  • What Roles are and how to create them
  • How to establish permissions and privileges
  • How to model schemas to support security best practices

Prerequisites: SQL Server – All levels

SQL Server Spatial Data: Visual Mapping

Presenter: Tuvia Vinitsky
Level: Intermediate, Advanced

Note: if you cannot access YouTube, you can watch the video here

SQL Server gives us a type of data we never had before: spatial data. Each record in a table can have a geometric description, so a simple SQL select statement draws a visual map of your data! Number of trucks per zip code? Show it on a shaded zip code map automatically. This session will demonstrate how to design and enter spatial data, how to index it, and how to retrieve it for display.

You will learn:

  • What spatial data is
  • Its uses and limitations
  • Geometric design records: how SQL Server stores 3 dimensional data
  • How to enter spatial data into tables: two new data types
  • How to index spatial data
  • How to use SQL select statements to display spatial data

Prerequisites: SQL Server development experience

Visual FoxPro Advanced and VFP C++ Compiler: a New Lease of Life for VFP

Presenter: John Ryan
Level: All levels

Note: if you cannot access YouTube, you can watch the video here

Visual FoxPro Advanced (VFPA) is a third-party enhancement for Microsoft's VFP 9 product. VFPA remedies over 100 bugs and incompatibilities in VFP 9 and introduces new features to enhance modern development. VFPA also offers an x64 (64-bit) version that ensures VFP viability if customers or developers are concerned that Windows 32-bit compatibility may one day be deprecated. This session demonstrates the x64 version in use, identifying some of the important "gotchas" in x64 development and also covers some of the VFPA enhancements and bug fixes that risked VFP's long-term viability before they were remedied.

VFP C++ Compiler builds on VFPA, allowing developers to literally compile their VFPA work into a C++ DLL accessed via a skeleton EXE. Benefits include the ability to "in-line" Assembly or C++ code in your VFP programs—such as for zipping or AES encryption—with the combination compiled into the C++ DLL with no need for additional FLLs or library declarations. Both the EXE and DLL can be compressed and encrypted allowing developers to distribute efficient and highly secure product that aces hack/penetration testing by customers.

You will learn:

  • Details of VFPA: who wrote it and why more developers are switching to it
  • Details of some of the show-stopper bugs remedied in VFPA
  • Details of x64 development in VFPA including some of the gotchas of x64 development
  • Examples of VFP C++ Compiler usage including AES in-lined in a VFP prg and elimination of the VFP runtime

Prerequisites: None

Why React is the Perfect Medium for Rewriting FoxPro Applications

Presenter: Les F. Pinter
Level: All levels

Note: if you cannot access YouTube, you can watch the video here

React, the FaceBook JavaScript framework, allows developers to create an application with performance similar to that of an executable, but entirely delivered over the Internet. It permits creation of a single, monolithic JavaScript file that, together with a single corresponding CSS file, places the entire application in memory, so that moving from page to page is instantaneous. Data is held in JSON (JavaScript Object Notation) format in memory as well. As a result, the user experience is similar to that of an executable. And if you use FoxPro for the API to supply data, whether from SQL or from DBFs, data management differs little or not at all. And it's almost as much fun as FoxPro!

You will learn:

  • How to install React and the VS CODE editor
  • How to install Node and Node Program Manager (NPM)
  • How to structure the application code folder
  • How to write components
  • How to retrieve data and post inserts, updates and deletes
  • How to build your app and install it on a web server

Prerequisites: None

X# Exhibitor Session

Level: All levels

X# from Scratch

Presenter: Eric J. Selje
Level: Beginner

Note: if you cannot access YouTube, you can watch the video here

X# is on your radar but you're a little unsure how to get started? This session will demonstrate how to build your first X# application, the classic To-Do list, from nothing. We'll use DBF tables to show how X# handles those effortlessly, and transfer our existing VFP know-how to X#'s paradigms.

You will learn:

  • How to take your first steps with X#
  • How to access DBF files in X#
  • How to create classes, forms, and reports in X#

Prerequisites: We won't go through how to download and install X#, so if you're going to follow along, have X# and Visual Studio Community already installed.

Platinum Sponsors
Diamond Sponsors
Gold Sponsors