Frequently Asked Questions

Is FoxInCloud really Web-based?

Users of your desktop application just need a browser and an Internet connection to use your application; nothing to install, nothing to learn, just the same application running within a Web/HTML user interface.

And this Web Application is fully competitive with any other Web application out there, and even better than many of them:

AJAX: all browser events (user actions) are sent to the Web Server using AJAX; the FoxInCloud Server sends back only the changes to the page, as opposed to the whole page; this means that: (1) the volume of data sent over the wire is much lower than with a traditional Web application, hence a benefit in response time (2) User experience is very smooth and similar to a common desktop experience;

Multiple Windows: as FoxInCloud supports multiple windows within the same HTML page, you can keep the sophisticated, user-friendly interface that you've built over the years; no technological break through that would oblige you to re-design your application; just capitalize on your accumulated knowledge and experience.

Consistent and familiar Architecture: one of the common pitfall in Web App. development is the profusion of names, ids and classes that each developer may choose his own way; FoxInCloud just reuses the classes and objects names that you have in your VFP application, and the name spaces provided by the containers (form, pages, containers, etc.)

What kind of HTML/CSS/JS does FoxInCloud generate?

FoxInCloud produces 100% standard HTML/CSS/JS, at the level providing the widest browser support, from IE8 to the most recent browser flavors and versions.

Like for any Web Application, you can override the standard HTML/CSS/JS that FoxInCloud generates from your VFP application with your own themes and preferences; this way you can - if you wish - keep your VFP desktop app user interface unchanged and adapt your VFP Web app to several target devices such as regular desktop browser, tablets and mobile phones.

You can also take advantage of all the advanced features provided by HTML5, CSS3 and JavaScript to enhance your GUI compared to VFP desktop: gradiants, shades, animations, widgets, etc.

What kind of Server code does FoxInCloud generate?

FoxInCloud just takes advantage of your existing VFP code and generates absolutely no server code. In other words, FoxInCloud Application Server runs just the VFP code that your desktop app. runs presently...
... and your application still runs on the desktop using the exact same code ...
... and you keep developing just like you've always done, in the same language, for the Desktop, ... and the Web.

What does 'adaptat my project' mean?

FoxInCloud does not require a migration or a conversion, just an adaptation of your code to make it compatible with the Web: your adapted code works exactly the same on the desktop, and can run on the Web within the FoxInCloud Application Server.

'Adaptation' does not mean writing Web code, or JavaScript or CSS, just using similar methods to do exactly the same, except that the same code can run either on the desktop as usual, or on the Web. It means that you maintain a single code base for both worlds.

'Adaptation' does not mean either that your Web Application is limited to what VFP can do; your Web Application not only benefits from all your accumulated experience, but you can also add layers to make your application perform better in the browser, just like you could do with any other Web development tool.

No license for deployment on a production server: Trial Edition can be used only on a development machine;

While adapting my project, FAA fails to locate some dlls, what should I do?

FAA's basic principle is to replace all VFP native classes (form, container, commandButton, etc.) in your project by a new set of classes providing the necessary properties and methods for the Web.

FAA adds 2 additional layers of classes to your project:

aw.vcx directly derived from the VFP native classes; aw.vcx is located in your path to VFP9\tools\ab\, and can be changed at any time by some FoxInCloud update; (for this reason you should never modify these classes code)

xxx.vcx derived from aw.vcx (where 'xxx' is a 2 to 4 letter code that FAA prompts you for when starting the adaptation process; xxx.vcx's location is where you've decided when prompted by FAA), containing your set of subclasses where you can, if needed, add some custom Properties or Methods for your App (it currently your application has no layer of base classes, here you are, you've got them!)

aw.vcx contains several OLEcontrol classes based on OLEclasses; when attemping to open these classes, VFP tries to locate the corresponding OLEclass and the supporting dll. Some of these OLEcontrol classes are PDF viewers, that you would use whenever you want to display (in both desktop and web modes) a PDF within a form.
To accommodate for all possible developer preference, FoxInCloud comes with 3 free PDF viewers:

FoxInCloud's aw.vcx also comes with the 'standard' set of Microsoft activeX controls (MSComCtl*.*.2 OLE classes) such as:

Microsoft Internet Explorer - aw.vcx!awOLEIE

Microsoft Rich Text V6 (SP4) - aw.vcx!awOLErtf6

Microsoft TreeView Control V6 (SP4) - aw.vcx!awOLEtv6

Microsoft ListView Control V6 (SP4) - aw.vcx!awOLElv6

etc.

At some early point in the adaptation process, when attempting to sub-class these OLEcontrol classes, FAA tries to open them; if the OLE class is not installed in the current system, a system message box asks where the supporting dlls are located (which is legitimate as FAA runs within a development environment; so far we haven't found a way to prevent this message box from opening).
If ever this message box appears, you can just ignore it; it'll simply mean that you won't have a subclass of the corresponding OLEcontrol, which is not an issue for these 2 reasons:

The message relates to one of the above-mentioned PDF viewer classes: if your application already displays PDF in forms, you and your users probably have a viewer class already installed, and you/they don't need any other; if not, and you plan to displays PDF in forms (which is not mandatory for printing into PDF on the Web - you can also display printed PDFs within a new browser tab), you'll probably not need any custom code in your PDF viewer OLEclass and you can simply add aw.vcx!awOLEPDF* directly in your forms.

The message relates to some other OLEcontrol class: the same reasoning as for PDFs applies: if you already use this OLE class in your application, the sub-class will be created OK, otherwise you probably can use the corresponding aw.vcx!awOLE* directly.

FoxInCloud comes with the most recent versions of the various above-mentioned OLEclasses; note that you need to upgrade manually any older version of these OLEclass to the version that FoxInCloud provides.

After you've downloaded and installed the free Trial FoxInCloud Application Server, going through the a-z tutorial is highly recommendable as it'll provide you a hands-on experience on a typical business Web Application, right in your VFP IDE.

Please keep in mind some basics:

After you've downloaded and installed the free Trial FoxInCloud Application Server, start the VFP IDE using the 'FoxInCloud Web Application Studio' shortcut to either develop or run your Web application; using this shortcut installs all the necessary resources you need for that. PLEASE NO LONGER USE THE REGULAR VFP SHORTCUT.

As you develop your Web Application in the VFP IDE, you can use the debugging features at any time: suspend, set step on etc.

At any time you can run tutorial and demo applications in your VFP IDE using the 'FoxInCloud' menu pad in the VFP IDE. As you have the full source code and projects for these applications, you can read code, set break point anywhere you'd see fit to understand a specific point.

After you've gone through FAA's 'Publish' 3rd step, you have 2 new projects sitting next to your original desktop project: make sure to open any of these projects and see the files that FoxInCloud has added for you

To test your Web Application, make sure to run your Web Project's main program (just like you'd run your desktop project main program) before interacting with the browser

Both Web Projects and your desktop project share the same source files, except the main program having a different main server class, making sure they'll deploy different COM object signatures.

You need to compile your Web Project into an executable for Production only, and for testing before deploying to, or updating a production server. You deploy no source file (prg, vcx, scx, etc.) to your production server, just your compiled executable and companion dlls.

In which language is FoxInCloud developed?

FoxInCloud runs 2 main components: on the client (browser) and on the server.

Client: all client software is written in JavaScript: FoxInCloud uses both third-party JavaScript components such as Prototype.js, jQuery.js, ActiveWidgets.js, and a specific component, FoxInCloud.js (over 3,500 L.O.C. and 120 modules);

Though it's written for VFP9, most VFP8 applications car run FoxInCloud Application Server using SET ENGINEBEHAVIOR 80SET REPORTBEHAVIOR 80

Which skills do I need to adapt my application to FoxInCloud?

A fair practice of Visual FoxPro OOP is good enough in most cases; if you plan to enhance your application Web interface without sub-contracting to a Web designer, you might consider learning HTML, CSS and JavaScript (see below).

Another skill is being able to setup, tune and maintain your production Windows Server installation, particularly the IIS web server as a preferred choice to run a FoxInCloud Application Server. This involves a fair experience on NTFS security, impersonation and IIS basics. While FoxInCloud Adaptation Assistant automatically sets up your development web server, you might prefer to sub-contract your production server set-up to a specialized hosting company.

Can I develop and test my FoxInCloud Application in my usual dev environment?

Both Trial (free) or Production (licensed) versions of FoxInCloud Application Server run within your VFP IDE; like with any regular application, you can set breakpoints, watch expressions, use DEBUGOUT, and jump to debugger at any time.

As FoxInCloud uses the West-Wind Web Connect layer between Web Server and VFP code, development environment is exactly the same as for any other West-Wind Web Connect project: you can run your application within the IDE as a .prg, .app or .exe, outside the IDE (runtime) as a .exe or COM object.

I wish to get acquainted to HTML / CSS development, where can I start from?

Basics are: HTML tags:<tag>…</tag> where to use tags in an HTML document:<head>, <body>, etc. ‘id’, ‘class’ and ‘style’ attributes and CSS selectors used for mapping document elements to CSS styles definitions.

What do I need to develop in JavaScript?How difficult is it?

Developing in JavaScript is fully optional with FoxInCloud; you may find it useful to:

Mimic the behavior of a specific visual component such as an activeX control.

JavaScript language has the same fundamentals as Visual FoxPro: loosely typed and interpreted; being 100% object oriented, JavaScript is far more efficient for handling array and writing lean code.

For a Visual FoxPro developer, the best JavaScript tool is any of the 'developer tool' included in a standard browser; eg the ‘Firebug’ extension to the FireFox browser; These tools are very similar to the VFP IDE: command window, trace, output and locals windows, plain and conditional break points, and more. Just like in VFP, you can type one or several instructions in the command window, execute them and see the result right away!

FoxInCloud mostly relies on Prototype and Scriptaculous JavaScript libraries;can I use another frameWork such as jQuery?

Yes, of course; FoxInCloud Application Server comes with the latest version of jQuery, you can write jQuery code right away, provided you only use $() in a self executing function such as (function($){$(whatever);})(jQuery);

Which database does FoxInCloud support?

Acting as a wrapper around your application, FoxInCloud is agnostic about the type of database your application works with: free tables, VFP database, or SQL database.

I'm using a Visual FoxPro database, do I need to migrate to a SQL database?

Moving your application to the Web can save you a migration from a VFP database because running a VFP database on a Web server overcomes 'by design' most of its usual flaws (except the 2GB/file limitation):

Response time: as VFP application and tables live on the same box, there is no more delay for transmitting indexes or data over the wire;

Security: you can restrict access to the folder holding DBFs to the account under which your Web application executes; as your FoxInCloud Application Server always uses the same account - which can be any account, not necessarily a user account - you no longer need to grant read-write access to all users of your application.

Reliability: No more index corruption due to unexpected workstation stoppage.

If you use a VFP database or free tables, FoxInCloud includes a data synchronization class that both ways synchronizes the changes between the Web and the Desktop Applications.

FoxInCloud maintains a single instance of each form for all users; How is each user’s state maintained between requests?

... and restores these user-specific structures before executing next request for the same user so that the VFP environment, the form and its datasession are in the exact same state as at the end of previous request.As FoxInCloud Application Server saves these structures on disk (in a VFP table stored in .\Temp\), a given user request can be served by any available FAS (up to 32 concurrent FAS can operate at the same time).

Does FoxInCloud support concurrent updates?

Of course, several users can work on the same table/view/cursor at the same time, revert changes and save whenever they want.

As of current support, the only behavior change compared to your desktop application is that TableUpdate() on views executes as if you used the 'force' option, overriding changes that other users might have done on the same data since current user first loaded the dataset.

Support for detecting changes by other users is planned in a next release.

Where can I host my FoxInCloud Application?Must I host my FoxInCloud Application on your Server?

Absolutely not! You are free to host your FoxInCloud Application application wherever you want: inside your LAN with or without Internet access, by a dedicated hosting company with web access and maybe a LAN access through a VPN, etc. You can just choose the configuration that best suits your security and access needs.

If you choose to host your Web application on your LAN with a Web access, you can probably setup a demilitarized zone (DMZ) on your LAN that will open a Web access to your server without allowing any further access to your LAN.

If ever you choose a configuration with 2 completely separated Web and LAN Servers, and your application uses a VFP database, you can take advantage of the VFP database synchronization class supplied with FoxInCloud to synchronize both ways the data updates on your LAN and Web databases; this class can be packaged as an executable that you schedule to execute every 2-3 minutes so that Web and LAN users see the same data. If your application uses a SQL database such as SQLserver or PostGreSQL, you can either setup your Web application to access your LAN database through a fast secured connection (or the other way round), or take advantage of the built-in synchronization mechanisms.

Any constraint or recommendation about production server hosting?

As FoxInCloud uses the West-Wind Web Connect layer between Web Server and VFP code, hosting conditions are exactly the same as for any wConnect application: you can use any Windows Server flavor (e.g. Web Edition) on any machine hosted internally or externally. For a typical installation, you need administrator privilege over the server to setup NTFS permissions, register you VFP COM server and adjust 'run-as' impersonation.
You will find a complete server specification, and more about hosting, in the West-Wind Web Connect on-line documentation.

To operate as a production Server, your application needs a FoxInCloud license, and being able to issue http requests to our server (foxincloud.com). Please refer to "FoxInCloud pricing, licensing and FAQ" for detailed information.

Can I use Foxincloud with Apache Web Server or is IIS needed?

As Foxincloud relies on West-Wind Web Connect as the interface to the Web server, it depends on its requirements and features.

As West-Wind Web Connect applications run VFP code, VFP was designed and licensed to run on Windows, IIS comes for free with all versions of Windows, and IIS is easily scriptable in the Windows environment, West-Wind has naturally put an emphasis on IIS support.

As any system-related feature, IIS obviously requires some knowledge and experience to be used efficiently; FoxInCloud recognizes IIS as a fair Web server platform.

However, West-Wind Web Connect also supports Apache for Windows 2.2 and later; we at FoxInCloud can hardly see any benefit using Apache instead of IIS, except maybe in scenarios where other OS could be involved, such as running VFP from within Wise (in which case licensing issues should be analyzed with great care).

How much costs the hosting for a FoxInCloud Application Server?

The main cost factor for hosting a FoxInCloud Application Server is how much CPU it'll require.

Low memory footprint: thanks to FoxInCloud's unique feature of holding a single instance of each form for all users, memory requirements are very low: e.g. an instance of a 60-form, 45-report FoxInCloud Application Server requires no more than 50-60 MB of RAM.

The amount of CPU your application will require depends on how intensive your application and users are: decision makers will probably fall in the 'low intensity' category while administrative staff will probably fall on the 'high intensity' category.

A fair rule of thumb is to set one CPU for 10 intensive concurrent users. If your application needs more intensive users, you can run more instances of your FoxInCloud Application Server on more CPUs.

FoxInCloud supports up to 32 instances of the given FoxInCloud Application Server. With 2 instances per CPU (West-Wind recommendation), your FoxInCloud Application Server can serve up to 160 concurrent users on a single Windows Server installation.

Of course, you can host more simultaneous users on the same server if yours users and/or your application are less intensive than what this very conservative calculation above is based on. Running a SQL database on a separate machine will increase the number of simultaneous users your FoxInCloud Application Server can serve.

You can easily get an on-line quote from a hosting company

FoxInCloud maintains a single instance of each form for all users; How is each user’s state maintained between requests?

... and restores these user-specific structures before executing next request for the same user so that the VFP environment, the form and its datasession are in the exact same state as at the end of previous request.As FoxInCloud Application Server saves these structures on disk (in a VFP table stored in .\Temp\), a given user request can be served by any available FAS (up to 32 concurrent FAS can operate at the same time).

What version of VFP does FoxInCloud support?

Being written for VFP9, FoxInCloud requires that your application also supports VFP9.

Does FoxInCloud support all VFP classes and events?

FoxInCloud has no limitation on supporting VFP features; even if HTML event model and/or rendering capabilities may suffer some limitation compared to VFP, there is always a workaround with CSS, JavaScript and even VFP tweaking to obtain the exact same behavior as in your original VFP application.

Even if FoxInCloud does not, at a given point in time, implement all VFP features you might expect, this will happen over time; just browse through FoxInCloud Roadmap to get a grasp on when support evolves over time.

How can I make sure if FoxInCloud supports my application's features?

With FoxInCloud, you don't need to read a manual or remember what is supported or not at a given point in time; just download, install and run FoxInCloud Adaptation Assistant (FAA) against your project and you will know:

Which pieces of code FAA will adapt automatically, and how this adaptation will be done;

Which pieces of code you need to manually adapt to the web, and how to do it;

Which features are not currently supported, and when support will be available per FoxInCloud roadmap;

A (conservative) estimate of the time you will need to get all your adaptations done.

Please keep in mind that you can adapt your application progressively: a typical scenario is to first adapt some parts of application dealing with third parties such as clients and suppliers. You just need to identify the necessary forms and dependencies (classes, procedures, ...) to get quickly started on the web and start building your own experience with FoxInCloud.

Absolutely not! Just keep your application the way it is, the only work you need to do are the adaptations that FoxInCloud Adaptation Assistant does not automate yet.

The reason why FoxInCloud adapts to any application architecture is that it acts as a wrapper around your application: by replacing VFP native classes by FoxInCloud classes beneath your application, FoxInCloud just wires user events from browser to the matching VFP event method, and detects how User Interface changes to reflect these changes in the browser.

In short, FoxInCloud just duplicates your application's behavior in the browser, just as if it had cloned its user interface into HTML/CSS/JS.

Can I improve my forms’ look and feel compared to Visual FoxPro?

Yes, you can use either of these 3 possibilities:

CSS: each HTML-generated object has the same classes as the Visual FoxPro object it was built upon, and ID reflecting its full address in form [built upon sys(1272)]; just change the .class definition in your CSS to update all matching objects, or modify object by object by overriding its #id selector.

Custom HTML: each Visual FoxPro object may generate its own HTML; you can fine tune its rendering, e.g. add another CSS class or define in-line <style>

Can my FoxInCloud application adapt to mobile devices?

Sure, a FoxInCloud application can adapt to any target device and resolution, including smartphones and tablets.

As of standard behavior, FoxInCloud generates HTML/CSS/JS as close as possible to your original VFP forms; this way, users who are accustomed to your desktop application can use your Web application with the exact same experience and knowledge.

FoxInCloud also gives you the ability to override standard, generated HTML/CSS/JS with your own; eg., using CSS3 @media directives, you can arrange your form's layout according to the target device resolution and/or orientation.

You can even go further by building an 'hybrid' application designed for a target mobile operating system such as iOS or Android. This application is just a shell hosting your web-based FoxInCloud application; one advantage of the hybrid approach is that your app can show up in the platform's app store and is granted a real app-class support from the OS.

Can I include several forms in a single HTML page?

The number of forms per page has no limitation; you just need to inject the HTML, CSS and JavaScript code produced by FoxInCloud at the desired location with an server-side include directive such as: (ASP syntax) <!-- #INCLUDE [FILE|VIRTUAL] = "Generated-by-FoxInCloud.htm" -->

What is the difference between FoxInCloud and other solutions such as Silverlight?

A HTML/CSS/JS solution like FoxInCloud is, from a user's point of view, much preferable to a Silverlight solution:

HTML/CSS/JS, in version HTML4 and of course in version HTML5, together with the fast improvements on browsers (FireFox 9+, Chrome, ...), have graphic capabilities very similar to Silverlight's

HTML/CSS/JS are standard languages supported by any browser installed on any operating system (Mac, Linux, etc.), on any device (iPod/Phone/Pad, Androïd, etc.). With FoxInCloud users can access your application anywhere with any device, without any technical constraint.

There remain at least 2 major differences:

FoxInCloud recycles your whole code, while with Silverlight as a front end you'll need to redevelop the client layer and isolate business and data code, convert your application to 3-tiered architecture.

Silverlight is a proprietary solution from Microsoft, actually supported by workstations, support on mobile device being very limited. As of October 2011, Microsoft announced that Siverlight evolution would stop to version 5.

How fast will my application run under FoxInCloud?

Maintaining user’s state takes an average .2 second per request. Meanwhile, having application and data on the same machine speeds up requests and application response time in most cases. With a recent browser, updating the HTML UI takes almost the same time as under Visual FoxPro.

How many simultaneous users can FoxInCloud support?

For a given machine, the number of simultaneous users is very similar to what can be achieved with a remote desktop software such as Terminal Server. The main factor is the CPU capacity: speed and number of CPUs available on the Web server. A practical concurrent users count for a comfortable application usage is 10-15 per CPU.

Memory requirements are very limited because FoxInCloud preserves user’s state on disc, and VFP consumes very little memory: a 50-form application typically uses 50 MB for 10 simultaneous users.

You can run up to 32 instances of your FoxInCloud Application Server (FAS) on a given machine (2 instances and 10 concurrent users per CPU), for a theoretical maximum of 160 concurrent users; fully stateless, any FAS instance can serve requests from any user at any time.

Can I optimize my application running in a FoxInCloud Application Server?

Light cursors: FoxInCloud Application Server (FAS) saves and restores form's data session upon each user action: aliases, buffered data, order(), relation(), etc.; while restoring a view's content only requires executing its SQL-select instruction, cursors must be saved and restored entirely. For very large cursors (# of rows * # of columns), this may cause a performance penalty; in this case, replacing the cursor by a view (either local or distant) is advisable.

Light updateable grids: similarly, when a grid is updateable (user can type directly in grid cells), FAS must compare the state of each grid cell before and after user action to determine changes - reducing the (# of rows * # of columns) brings a performance bonus

Light public variables and _Screen.properties: as FAS saves and restores global data upon each user action, reviewing public variables and _Screen.properties usage and, if possible, moving some of them to form-level properties improves performance.

Optimized view queries: as FAS executes the view queries much more often than during desktop operations (in a desktop application you typically execute the views when opening the form and after tableupdate(); FoxInCloud Application Server will additionally execute these queries upon form data session restoration, which might take place upon each user action on the form), make sure you take advantage of all the optimization opportunities brought by your database system (as a reminder, your VFP application can run in FAS using any kind or data back end: independent VFP tables, VFP database, SQL database such as Postgre-SQL, SQL-server, Oracle, etc., and any data access mechanism: xBase commands, SQL, CursorAdapter, etc.)

Can I monitor and optimize the performance of my production FoxInCloud Web Application?

Because response time is the key success factor of a Web application, you get all the necessary information to finely analyze the performance of your FoxInCloud Web Application:

FoxInCloud status page: your production Web Application includes a 'FoxInCloud Status' page (.../FoxInCloud-Status.xxx) where you can see how many users are currently using the application, how many forms are instantiated and all the aliases used in every data session; version 2.20 schedules additional details on this page such as: connected user history, performance per user action and form, and more.

Detailed response time: FoxInCloud Application Server logs each step of user actions in a table that you can download into your development environment at any time using a simple program; you can then finely analyze the bottlenecks and figure how to improve your Web Application performance.

* What is a 'Concurrent Active Session' (CAS)?

When a user connects to the application, he/she opens a Session. This session remains active as long as the user interacts with the application.

Sessions end automatically after a time-out, the duration of which (in minutes) can be set on-line through a simple parameter. Whenever this time out expires after the last activity of a given user, the session is closed. Whatever session duration you choose, FoxInCloud considers a session as 'inactive' when no activity has been recorded in the past hour; even if the session is still open because the time-out has not elapsed, FoxInCloud considers this session as inactive and thus doesn't add it to the CAS count.

The following screenshot of the secured 'FoxInCloud Status Dashboard', that any FoxInCloud application in production exposes, illustrates these principles:

How to estimate the number of Concurrent Active Sessions (CAS) from the number of Named Users?

Based on experience, 2 factors influence the number of concurrent users of a business applications operating on the Web using FoxInCloud:

Whether the users of the application are mainly employees and/or 3rd parties such as suppliers and clients (this second scenario is quite frequent as it's the primary goal of pushing an application to the Web)

Whether the application covers a large or small scope of the company's or a department's activities; eg., for a given company, billing could be considered as a small scope, an ERP would cover a larger scope.

Here are some CAS/named users ratios taken from FoxInCloud applications in production: