Virtual Fox Fest 2020

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

October 15, 21, and 27, 2020

Sessions

"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

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

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

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

Customizing Your Vertical Market Application

Presenter: Cathy Pountney
Level: All levels

Writing a vertical market application can be very rewarding. You write one application, sell it numerous times, and sit back while the money rolls in. Well, that's the theory anyway. The reality is that often new clients want to buy your software as long as you can change this one little thing. Managing custom code for various clients within your application can easily turn into a nightmare as your client base expands. This session shows you how to implement a customization methodology in your vertical market application that keeps your standard code independent from your custom code, yet have the two code bases play nice together.

You will learn:

  • How to provide custom menu options
  • How to implement companion tables for storing additional data
  • How to customize existing forms and controls
  • How to implement new forms and controls
  • How to implement custom reports

Prerequisites: None

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

Presenter: Robert van der Hulst
Level: All levels

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

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

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:

  • Virtual solutions available at AWS and Microsoft Azure Cloud
  • Selection of solution based on applications, requirements and available infrastructure
  • Evaluation of pricing structure of popular solutions based on AWS and Azure
  • Making effective plans to migrate to cloud
  • Setup FoxPro applications and mapping the database drive
  • User Authentication limitation and authorization

Prerequisites: None

Inheritance: Excellent or Evil?

Presenter: Joel Leach
Level: All levels

"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

Integration of Git into VFP's IDE

Presenter: Lutz Scheffler
Level: Intermediate

This session focuses on the use of Git with VFP9 SP 2. Starting with the general idea of version control, which is still not common to many, there will be a brief overview of Git. Pointing out the difficulties a language like VFP raises with VCS created for text-based coding, the session focus on how to circumvent this.

The session uses FoxBin2Prg to create text-based versions of the VFP table-based sources and shows how to set up a Git repository to manage the contents of the repository. Finally, it shows how to integrate the command-line-based transformation between the table-based VFP source code to it the file-based Git representation into VFP's IDE. Meaningful settings of both Git and FoxBin2Prg are explained.

No third party tools to Git except the ones that run in VFP are used.

You will learn:

  • About issues with VFP on Git
  • How to set up a system to effectively use Git with VFP
  • What tools are available to integrate
  • How to integrate Git into VFP IDE from VFPX

Prerequisites: Some experience with Git and insight of VFP source structure might be helpful, but is not required. A bit of knowledge of Linux and in particular of bash is helpful too.

Introduction to Harbour, an Open Source Alternative to VFP

Presenter: Eric Lendvai
Level: All levels

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

Modernize Your Applications Using DBI Controls

Presenter: Doug Hennig
Level: All levels

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

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, and those applications might be running successfully for many years with their clients.

In most of these cases, the clients (especially smaller clients) don't care about the technology used for development of their apps, and 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 successfully demonstrated amazing ways of exposing FoxPro to the Web world.

Contents of this session is targeted mainly for developers who have built applications for smaller clients.

This session is yet another attempt to access FoxPro from the web world, via a Node Server.

You will learn:

  • What node.js is
  • How to install node in Windows
  • What is npm and how to install necessary modules required for this session
  • What are synchronous and asynchronous methods.
  • 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 through node
  • Why this approach is suited only for smaller clients

Prerequisites: A general understanding of HTML, CSS, and JavaScript will be helpful, as is working knowledge of FoxPro

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

Presenter: Andrew Ross MacNeill
Level: Beginner

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, Groups and Roles

Presenter: Jody L. Meyer
Level: All levels

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

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

Why React is the Perfect Medium for Rewriting FoxPro Applications

Presenter: Les F. Pinter
Level: All levels

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# from Scratch

Presenter: Eric J. Selje
Level: Beginner

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