Planet FoxPro

September 02, 2015

Rick Strahl's Web Log

Announcing West Wind Web Surge 1.0

About a year ago I introduced an easy to use URL and load testing tool called West Wind WebSurge. I created this tool out of a sense of frustration with existing stress testing tools that are either wickedly expensive, or a pain in the butt to use. I wanted an interactive tool that makes it easy to set up and test URLs either individually or under load. What started out as a requirement on a client project, quickly morphed into a custom load testing library and then eventually into a product that combines the load engine with an easy to use UI to make it easy to create the URLs and run the tests.

The end result of this was West Wind WebSurge which is a Windows based application that makes it very easy to enter and capture URLs and then play them back either individually for functionality testing of individual URLs or under heavy load for performing stress testing. WebSurge stores the test information in plain text files that can be shared easily in projects or source code repositories and can be easily generated by tools. The main goal of the front end piece is to make it super quick and easy to capture or create URLs for tests, store and save them so that you can easily create repeatable tests, that you will  actually run on a regular basis. Even starting from scratch you should be able to start running tests in a couple of minutes.

So, today I'm happy to announce that I've released version 1.0 of West Wind WebSurge after a lengthy beta period.

You can download and find out more about West Wind WebSurge from these links:

or take a peak at the functionality available in this YouTube walk-through video:


The easiest way to install West Wind WebSurge is through Chocolatey:

choco install westwindwebsurge

But you can also download the installer directly from the download link and then run the embedded installer exe.

WebSurge and Me

For me personally I've been using WebSurge in just about any Web project I've created in the last year and it's been especially useful in API projects. I use WebSurge for all my API testing to test individual URLs interactively. When building client centric Web applications almost everything becomes an API and since I prefer to design my APIs up front before there is any Application UI to test it, some sort of testing tool is required. WebSurge makes it easy to manually create the request trace and then test it against the server. Yes there are other tools for that like Postman, which is excellent and I've been using it for years. However, there are a number of things that make WebSurge more useful to me. I switch around servers quite a bit and Websurge makes it easy to transform test URLs to work against different domains/virtuals. So I can take a series of URLs created on an IIS Express test url and run it against a staging site just by changing the domain in an options setting. If necessary I can also run a quick search and replace on the actual HTTP trace text files used by WebSurge to modify URLs or headers or whatever else needs to be modified in a set of requests.

Once the URL tests exist the stress testing comes for free - I can just turn on the load testing parameters and I can fire a given number simultaneous connections to load those same URLs. For HTML based sites the capture tool lets me easily capture HTTP content including HTTPS requests and then use that for stress testing. Having the ability to easily create load tests I now routinely set up captured tests of server side applications right when I create them to check for performance issues early on. Because it's so easy to create and recall tests, I test for performance under load on a regular basis now as I build applications…

Anyway for me at least (I'm only slightly biased)WebSurge has become a very useful tool in the Web Development process.

How did I get here?

When I started out on this path, I wasn’t planning on building a tool like this myself – but I got frustrated enough looking at what’s out there to think that I can do better than what’s available for the most common simple load testing scenarios. My goal wasn't to build the end all load testing tool to replace super high end networked solutions. Rather I wanted to build a tool that can create and run local tests quickly and easily so that the job actually gets down. Having a user friendly UI that makes it easy to manage requests and run tests is key to that as well.

WebSurge can handle 10's of thousands of requests a second, but it's not meant to replace massive load generators that create a million requests a second. If you need that much performance, then you're probably a good candidate for those big bucks, high end tools that gave me sticker shock :-)  I've tested WebSurge on my i7 MacBook Pro under Bootcamp laptop capturing close to 50,000 reqs/sec against static content, just to give you an approximate measuring stick -so if you're testing apps that have higher request loads than that then WebSurge may not be for you. I suspect not many of you are working with apps that have 10's of thousands of requests a second, and if you are you are likely already using some other load testing solution anyway. For the rest of us who are happy to be dealing with thousands of requests a second, WebSurge works great.


West Wind Web Surge – Making Load Testing Quick and Easy

So I ended up creating West Wind WebSurge with the goal to make it drop dead simple to create load tests. It should only take a couple of minutes to fire up WebSurge, add a few URLs and test the URLs either individually or in bulk for a load test. Let's take a look and see what this looks like.

WebSurge works with Sessions of Urls. You create URLS either by manually entering them or by using the built in capture tool. While using WebSurge the most common view you'll see is the session view and here's what it looks like:


A session is a collection of URLs that runs when you run a load test.

When you click on a request the request info is automatically shown in the detail pane on the left where you can see the request trace.

But you can also test URLs individually and just one request at at time while poking around the user interface. You can right click for a host of options on a single request:


The Test button lets you run an individual request or Test All will run all requests that are active exactly once and show you the results pane with a list of each of the request. You can also make URLs inactive (Ctrl-i), so they are excluded from load tests and Test All, which is useful to hide certain requests from tests temporarily. For example, I occasionally have maintenance links I need to test individually, but not as part of a test run. I can just disable that request which excludes it from any test run, but lets me still test it individually. You can also make all but one request inactive if you want to load test a single request out of a session which is a common use case for me while I'm working on a particular request and trying to tune performance or find problem related to high load.

When running tests, WebSurge by default runs the URLs in the sequence shown in the session list. When loading up requests it runs each request in a session in serial, but runs many sessions simultaneously. This is useful in scenarios where you have dependencies on the order in which things happen for a given user and you can rearrange the order interactively.

WebSurge remembers the last Session that was open and automatically opens that session for you when you restart so you're typically ready to go. You can also load session that were previously saved to disk and restore sessions from there. Because these are simple text files these files are easy to save to disk and share and I typically store my WebSurge session files in application solution folders and check them in with source control so they are available to anybody working on the project. Sessions can also easily be shared on Dropbox or OneDrive. The text files files have a .websurge extension that is associated with WebSurge, so double clicking on the file opens the session in the WebSurge UI.

Creating Sessions of URLs

Before you can actually do any testing you need to capture the URLs and there are two ways to do this: Manually or using the Capture tool.

The most obvious way to create new requests is to use the request editor by pressing the New button in the Session window. Requests are simply a URL, an HTTP verb, headers and content and if you manually enter the content or edit it here's what it looks like:

Request Editor

If you add POST content, it's added as plain text and the request handler automatically adds the proper encoding. You can also capture and add binary data which is stored in base64 format and then converted back to binary when the data is sent out. Requests can also be named. If you are doing API testing you often end up with long very similar URLs, and being able to give descriptive names to requests can be easier to read. The POST editor pops up by double-clicking the window and the header and content panes are resizable.

Manual entering works great if you are working on an application and creating requests as you go. I personally tend to create my URL request here first, then create API endpoints to handle each request  in typical test first style.

Capturing Session Data

If you have an existing, running application you want to test, then using the capture tool makes life easier as you don't have to manually create the requests, can just capture them from the running application.

You can also capture output from Web Browsers, Windows Desktop applications or service applications. Basically any HTTP source that goes through the Windows HTTP stack (either Windows or .NET APIs) can be captured. In the following screen shot I'm simply capturing the API output from the running sample application on localhost:


With this tool you can capture any HTTP content including SSL requests and content from HTML pages, AJAX calls, JSON APIs, SOAP or REST services – again anything HTTP that uses Windows or .NET HTTP APIs. Requests are captured as raw text. You can edit the HTTP trace text in the editor here, or after you've saved it to file because the format is one and the same. WebSurge uses this format as input for its tests.

Notice that capture window also has a few options for filtering requests that are captured which is useful to avoid capturing a bunch of noise that you typically don't want to test. If you're using Chrome for driving a Web Application you might see a bunch of Chrome's navigation pre-fetching URLs. For HTML sites you might capture google analytics and social links that you are probably not interested in for a stress test. You can specify the domain that you want to capture URLs from which excludes content from all other domains. You can also filter out static file links for images, css and js files which also may not be of interest in your testing. Personally I like to set up tests to only hit the actual data links of an application, so this makes it easy to capture only the things that I'm interested in with minimal cleanup after the capture is complete.

Use it for single URL Testing

Although WebSurge's primary purpose was for Load testing, I've found it to be a great tool for individual URL testing. I use it for API testing when I create my APIs initially and to ensure my APIs are working the way they are intended. Because you can capture a single or many URLs and store them on disk, this also provides a nice HTTP playground where you can record URLs with their headers, and fire them one at a time or as a session and see results immediately. And because you can save the sessions you have created, you can restore them later for repeating the tests or for sharing the tests with others also working on your project. I like to store sessions in source control so the traces are easily shared and also serve as a simple way to demonstrate API behavior that can be easily tested by new users.

Overriding Cookies and Domains

Speaking of sharing Sessions – when running tests on multiple machines or different domains, you often run into issues with cookies, domains, authorization and query string values changing. Using the Session Options you can override these values for your specific environment.

For example, in order to change the domain of all test requests that were run on localhost to I can simply add the ReplaceDomain value. Now when a URL is accessed the orignal domain is replaced with the new value. You can use a domain name or domain plus virtual. Likewise if you have an authorization cookie in your captured content, that cookie may have expired and is no longer valid. You can use your browser to log on to your application and capture a valid cookie (using your favorite dev tools) and then replace either the cookie or an authorization header (for oAuth bearer tokens perhaps). Several people also requested ways to inject a query string value into requests.


There are a number of options here that allow you customize each request sent or how the entire test is managed.

Running Load Tests

Once you’ve created a Session you can specify the length of the test in seconds, and specify the number of simultaneous threads to run each session on. Sessions run through each of the URLs in the session sequentially by default. One option in the options list above is that you can also randomize the URLs so each thread runs requests in a different order. This avoids bunching up URLs initially when tests start as all threads run the same requests simultaneously which can sometimes skew the results of the first few minutes of a test.

While sessions run some progress information is displayed:


By default there’s a live view of requests displayed in a Console-like window. On the bottom of the window there’s a running total summary that displays where you’re at in the test, how many requests have been processed and what the requests per second count is currently for all requests.

Note that for tests that run tens of thousands of requests a second it’s a good idea to turn off the console display as the overhead of updating the screen starts affecting the performance of the test. There's a NoProgressEvent option in the Session options or your can use the button next to the thread count on the toolbar to disable the console display. The summary display continues to run however.

The summary display gives a running total of the test, and once an error occurs turns red.

Test Results

When the test is done you get a simple results display that lets you see what's happened at a glance:


On the right you get an overall summary as well as breakdown by each URL in the session. Both success and failures are highlighted so it’s easy to see what’s breaking in your load test. You can right click to open the the report in your default Web browser and save or print the HTML document from there.

The list on the left shows you a partial list of the URLs that were fired so you can look in detail at the request and response data. The list can be filtered by success and failure requests. Each item in the list can be clicked to see the full request and response data. Here's the view for a failed API request:


This particularly useful for errors so you can quickly see and copy what request data was used and in the case of a GET request you can also just click the link to quickly jump to the page. For non-GET requests you can find the URL in the Session list, and use the context menu to Test the URL as configured including any HTTP content data to send.

You get to see the full HTTP request and response as well as a link in the Request header to go visit the actual page which is useful for GET requests where you can see the error occurring in your browser. If the content data is in a format that WebSurge can syntax highlight (JSON, XML, HTML,CSS) the content will be displayed in highlighted format. In the sample above the result is JSON, and the formatted version is displayed. You can click on the Raw Format button to see the original raw response which doesn't include the pretty formatting.

You can also export the actual test result detail and the result summary to either XML, JSON or the WebSurge plain HTTP Trace format:


The result summary is output as JSON and is a nice way to keep a historical record of your tests. The summary basically exports what you see on the summary screen with the test summary for the overall test, and a summary for each of the URLs in the test. These exports can get very large if you ran long or very high volume tests…

Finally you can also get a few charts. The most useful one is probably the Request per Second chart which can be accessed from the Charts menu or shortcut. Here’s what it looks like:


Command Line Interface

WebSurge runs with a small core load engine and this engine is plugged into the front end application I’ve shown so far. There’s also a command line interface available to run WebSurge from the Windows command prompt. Using the command line you can run tests for either an individual URL or you can reference an existing session file.

Here's what the output from an indvidual url test looks like:


By default when it runs WebSurgeCli shows progress every second showing total request count, failures and the requests per second for the entire test. A silent option can turn off this progress display and display only the results.

Here are all the command line options available:

West Wind WebSurge v1.0
usage:   WebSurgeCli <SessionFile|Url> -sXX -tXX -dXX -r -yX

SessionFile     Filename to a WebSurge/Fiddler HTTP session file
Url             Single URL to to hit

-h | -?      This help display

Value Options:
-s          Number of seconds to run the test (10)
-t          Number of simultaneous threads to run (2)
-d          Delay in milliseconds after each request
               1-n  Milliseconds of delay between requests
               0   No delay, but give up cpu time slice
               -1   No delay, no time slice (very high cpu usage)
-y          Display mode for progress (1)
               0 - No progress, 1 - no request detail,
               2 - no progress summary, 3 - show all

-r          Randomize order of requests in Session file

--json       Return results as JSON

WebSurgeCli http://localhost/testpage/  -s20 -t8
WebSurgeCli c:\temp\LoadTest.txt  -s20 -t8
WebSurgeCli c:\temp\LoadTest.txt  -s20 -t8 --json

The command line interface can be useful for build integrations  that allow checking for failures perhaps, or hitting a specific requests per second count etc.

Version 1.0

I announced WebSurge about a year ago, and it's been a fun journey since. There've been a few challenges in using the .NET HTTP client for this and in the future I might have to switch something a bit more high performance capable. There's also been a lot of great feedback and suggestions that have since been integrated into the tool. Source code is now available on GitHub and the licensing has been adjusted so the tool is free for personal or open source use. Only commercial use requires a reasonably priced paid-for license.

There's lots more that I'd like to add to WebSurge  in the future, but in the meantime I think it's time to push an actual non-beta release version out and since the product has been in stable mode for the last couple of months and a half now seems a good time to make that release push. If you haven't tried it, I hope you give it a try, and if you have used it previously give it another look as lots of new features and perf improvements have been added since the early betas.

Get Involved

I’m definitely interested in feedback. If you run into issues or have suggestions for features or want to get involved, you can use GitHub Issues for the WebSurge project. For more general discussions or specific use case questions you can also post a message on the West Wind Message Board in the WebSurge secton.

Microsoft MVPs and Insiders get a free License

If you’re a Microsoft MVP or a Microsoft Insider you can get a full NFR license for free. Send me a link to your current, official Microsoft profile and I’ll send you a not-for resale license. Send any messages to


For more info on WebSurge and to download it, use the following links.

© Rick Strahl, West Wind Technologies, 2005-2015
Posted in Testing  Testing  

by Rick Strahl at September 02, 2015 05:22 PM



Editor comments: September--ToniFeltman
Starting in August 2008, we meet the second Tuesday of the month.

A user group for Visual FoxPro developers in the greater Philadelphia area, including New Jersey, Delaware and the Lehigh Valley. We meet the second Tuesday of each month at 7 PM.

Beginning with the April 2006 meeting, there is a $5 charge per meeting.

Beginning with the July 2011 meeting, we will meet in room 158 at DeVry University, 1140 Virginia Drive, Fort Washington, PA. Beginning with the October, 2014 meeting, we're moving to room 104 at DeVry.

Feel free to bring something to eat and arrive as early as 6:30.

 class= Check out our blog at
 class= We're on Twitter: @VFUGPhilly

If you'd like to speak at our group or join our email list, send a message to

September 02, 2015 04:26 PM


Editor comments: Philly September--ToniFeltman
A place to list upcoming Visual FoxPro events like conferences, meetings, user groups, open training sessions...
Closest at the top please, and please remove past events.

September 02, 2015 04:24 PM

FoxCentral News

Philadelphia VFP User Group--Tuesday, Sept. 8--Toni Feltman on SSRS

The Philadelphia Visual FoxPro User Group will meet on Tuesday, September 8 at 7:00 PM in room 104, DeVry University, 1140 Virginia Drive, Fort Washington, PA. Feel free to come as early as 6:30 for a pizza dinner (or bring your own). Please email Tamar Granor ( or Jim Connolly ( if you plan to eat pizza, so we can make sure there?s enough. Toni Feltman will do a Southwest Fox preview of her session ?SQL Server Reporting Services.? The session will be a three-hour precon at the conference; this meeting features a shortened version.

by Philadelphia Visual FoxPro User Group at September 02, 2015 03:29 PM

VFP Philly

September 8: Toni Feltman on SQL Server Reporting Services plus pizza!

Our next meeting will be on Tuesday, September 8. We'll be providing a pizza dinner (or bring your own). Please email Tamar Granor or Jim Connollyif you plan to eat pizza, so we can make sure there’s enough.

Toni Feltman will do a Southwest Fox preview of her session “SQL Server Reporting Services.” The session will be a three-hour precon at the conference; this meeting features a shortened version.

Abstract: SQL Server Reporting Services (SSRS) is the Microsoft answer to reporting tools like Crystal Reports. The really nice thing about SSRS is that a version is now included with SQL Server Express which is FREE. Free is good, right? SQL Server Reporting Services is a quick and inexpensive way for developers to create and deploy reports when using SQL Server as the database engine. It is not difficult to use and is similar to other reporting tools that may already be in your toolbox. There are benefits to having a language-agnostic reporting tool such as the ability to share reports between different applications and platforms. It also makes really good sense to have a reporting tool tightly coupled with the data used for reporting.

Desktop applications need reporting. These applications are being extended through other technologies such as the web and mobile. Even if your development environment has its own reporting engine, SQL Server Reporting Services is a great way to get query and reporting capabilities that are available on the desktop, web and mobile device all from one code base.

You will learn:
             Where to find and how to install SQL Server Express and SQL Server Reporting Services
             How to use Report Designer
             Ways to tie data to reports
             About the native Report Output Options
             Differences between SSRS "express" and paid versions
             Ways to "centralize" reporting services to be used by more than one type of client
             Ways to render SSRS reports in Visual FoxPro
             Methods for integrating existing report technology with SSRS reporting to create a common look and feel between reports

Also, be sure to mark your calendar for the return of Christof Wollenhaupt on October 13.

by Tamar E. Granor ( at September 02, 2015 03:21 PM

Alex Feldstein

FoxCentral News

West Wind WebSurge 1.0 Load Tester Released

 West Wind Technologies has released West Wind WebSurge v1.0. WebSurge is an easy to use Web request and load testing tool, that makes it easy to capture HTTP sessions and play them back either individually or under load. Capture HTML, AJAX, REST or SOAP Service requests from browsers or Windows applications using our built-in capture tool, or manually create HTTP Headers for request sessions. Easily test individual requests for API testing or fire off full sessions of requests under heavy load. WebSurge runs locally on Windows machines and works inside of your Firewall or VPN for internal and external Web load testing. WebSurge is free for personal and open source use, and licensed for commercial use.

by West Wind Technologies at September 02, 2015 04:40 AM

September 01, 2015

Rahul Desai's Blog

Microsoft Dynamics CRM 2015, 2013, and 2011 Updates: Release Dates, Build Numbers, and Collateral

Do you want to know if certain Service Packs or versions of a Microsoft product or technology are supported with Dynamics CRM?  If so, consult the Microsoft Dynamics CRM Compatibility List.  For example, you can use this KB to determine the latest Microsoft SQL Server major version and Service Pack that is supported. Microsoft will list new products like Internet Explorer 11 and Windows 8.1 as "TBD" until testing is complete; generally near General Availability (GA) of that product.

More information on updates, release dates, build numbers etc., at the link below:

by Rahul Desai at September 01, 2015 09:43 PM

Alex Feldstein

Calvin Hsia's WebLog

Create your own crash dumps

Sometimes programs will crash on your machine. Windows Error Reporting can send problem reports back to Microsoft. You can use the Windows Event log to see more detail about prior crashes. Some crashes will send crash dumps to Microsoft so that the crash...(read more)

by CalvinH at September 01, 2015 01:44 AM

August 31, 2015



There are several levels of validation, and it becomes very complicated for complete validation. Because of Mail Gateways and private system conventions, the only way to completely validate an email is to try to send to it and see if it bounces.

For reference, here are a couple of different, known to be valid, address forms:
A: mailbox@domain.tld
B: "Person's Name" < mailbox@domain.tld >
C: firstname.lastname@subdomain.domain.tld
D: mailbox+tag@domain.tld

However, here are the levels at which you can validate:
  1. Format: Make sure there is only one "@", that there is a "." to its right side, that no two symbols ("@", ".", or "#"... any others?) are next to each other, there are no spaces (unless you want to support format "B" in which case you have to get fancier).
     class= A valid email address does NOT require an "@". I'm running an internal SMTP server here and local mailboxes only require the account name for authentification and delivery, because it can't be anything than the server itself. Demanding an "@" is one of the things that drives me crazy in the Outlook 2003 Junk filter. - Christof Wollenhaupt

     class= You are not right - accoding to mail related RFCs, email address DOES require @ and domain part - even in case of same-domain transmittion (it can be hovever abbreveated in some cases, but not totally removed). So it will be better for your admin to adhere standards. BTW email address and "account name for authentification" (the one you use in mail clients) ARE different things - second one doesn't requite @ sign. -- Igor Korolyov
  2. Server Existence: Extract the domain name (including tld) and use a lookup to find the MX record associated with that domain, then ping the MX server. Pinging the domain is not good enough because it may not be associated with anything, though it still has a good MX record, and can therefore receive mail. I don't know offhand how to get the MX record, though.
  3. Mailbox Existence: Get the MX record, as above, then connect to the mail server, and use the VRFY command to verify that it will deliver to the provided mailbox.
  4. Delivery: Actually send the message, then wait to see if it gets bounced. Just because the VRFY command says the server CAN deliver to the mailbox doesn't mean that the server WILL deliver that particular message. Spam filters, etc, could cause the delivery to fail.

August 31, 2015 04:17 PM

Alex Feldstein

Photo of the Day

Least Bittern
Wakodahatchee Wetlands, Delray, Florida

by Alex Feldstein ( at August 31, 2015 05:00 AM

August 30, 2015

Alex Feldstein

August 29, 2015

Alex Feldstein

Photo of the Day

Dale Chihuly glass art at Miami's Fairchild Tropical Gardens

by Alex Feldstein ( at August 29, 2015 05:00 AM

August 28, 2015

Alex Feldstein

Photo of the Day

Dale Chihuly glass art at Miami's Fairchild Tropical Gardens

by Alex Feldstein ( at August 28, 2015 05:00 AM

Rahul Desai's Blog

Storyboard your ideas using PowerPoint

A great tool which can help you in all your ALM stages, more at the link below:

With storyboarding, you turn your ideas and goals into something visual. Your ideas are easier for other people to understand, so they can give you constructive feedback, sooner. You can bring your ideas to life with storyboard shapes, text, animation, and all the other features that PowerPoint Storyboarding provides.

Storyboard your ideas using PowerPoint

by Rahul Desai at August 28, 2015 01:12 AM

August 27, 2015

Alex Feldstein

Photo of the Day

Dale Chihuly glass art at Miami's Fairchild Tropical Gardens

by Alex Feldstein ( at August 27, 2015 05:00 AM

August 26, 2015

Shedding Some Light

Southwest Fox/Xbase++ 2015: Early-bird deadline

Simple, quick reminder: the Early-bird registration deadline is this Monday, August 31st. I would hate to see you lose out on the $50 discount.

If you still need to register, please head over to the registration Web site today:

Every registered attendee gets admission and white papers to all regular conference sessions. Don’t miss this chance to learn from the best and mix with your peers.

Hard to believe, but only 50 days until we gather in Gilbert.

by Rick Schummer at August 26, 2015 08:24 PM

FoxCentral News

Southwest Fox 2015: Early-bird Deadline Approaches

Simple, quick reminder: the Early-bird registration deadline is this Monday, August 31st. We would hate to see you lose out on the $50 discount. If you still need to register, please head over to the registration Web site today: Every registered attendee gets admission and white papers to all regular conference sessions. Don't miss this chance to learn from the best and mix with your peers. Only 50 days until we gather in Gilbert.

by Southwest Fox Conference at August 26, 2015 08:22 PM

Doug Hennig

Southwest Fox/Soutwest Xbase++ 2015 Deadline Approaches

Simple, quick reminder: the Early-bird registration deadline is this Monday, August 31st. We would hate to see you lose out on the $50 discount.

If you still need to register, please head over to the registration Web site today:

Every registered attendee gets admission and white papers to all regular conference sessions. Don't miss this chance to learn from the best and mix with your peers.

Only 50 days until we gather in Gilbert.

by Doug Hennig ( at August 26, 2015 06:31 PM

Rick Strahl's Web Log

The Rise of JavaScript Frameworks – Part 2: Tomorrow


frameworkIn Part 1 of this series I talked about the current state of JavaScript frameworks and how in many ways JavaScript frameworks have become the new baseline for developing client centric Web applications or Single Page Applications. Due to the complexities involved in building complex client side applications using JavaScript and HTML, frameworks have just about become a necessity to effectively building any non-trivial application. Frameworks are a huge help with organizing code, providing easy ways to bind data from models rather than binding data to the DOM manually with imperative code, providing tons of helper functionality for operations most applications need like view and nested view routing, form validation, http request management and tons of other features that every application needs but isn’t immediately obvious as a bullet point feature.

Version 1 of the major frameworks came about later than I would have expected them to, as there was a lot of pent up need to address the missing pieces. When these frameworks finally did arrive on the scene and got to a reasonably stable point, public interest took off like wild fire and adoption rates have gone through the roof since then. It’s not surprising – for me personally using both Angular and React I’ve seen myself being able to build complex front ends in a fraction of the time that it took previously.

Trouble in V1 Paradise

As much as the first round of frameworks have improved life for JavaScript developers everywhere, there are lots of warts in the V1 frameworks. Most of these frameworks started out as very experimental projects that  morphed into frameworks only after public interest inspired exploration of more general purpose functionality. Angular in particular evolved from a template HTML generator, into a what is now a full featured Angular 1 framework. Angular  had its start in 2009 which seems like a lifetime ago now in terms of new Web capabilities and developer practices. With the exception of some of the newer frameworks like React, the story is similar with other frameworks that had an early start.

The result is that a number of frameworks have quite a bit of old code that wasn’t designed for the purposes we use them for today. Even beyond that when these frameworks were originally built, the complexity of applications we are actually building today wasn’t imagined in those early days. The end result is that frameworks have been refactored from the outside in, resulting in a number of inconsistencies, overly complex APIs and sometimes funky behavior that requires detailed inside knowledge of how the framework works to work around issues.

Since those early days, framework developers have done an admirable job of patching up the existing frameworks, keep them relatively easy to use as well as providing the features that we as developers need to get our job done. As I mentioned in Part 1, it’s amazing what these frameworks have provided us in terms of a leap over your typical jQuery based application we built before it, both in terms of functionality as well as productivity. For me personally the productivity gains in building front end applications has skyrocketed after starting to use a framework (Angular in particular) because it freed me from having to build my own system level components and try to figure out project structure. It's been a huge win for me.

But… looking over how frameworks are working there are many things that are suboptimal. Again speaking from my Angular particular view there are tons of rough edges. In Angular the built-in routing system is terrible even though UI-Router provides some relief for that it's still a very messy way to handle routing. Directives have to be near the top of the list for awkward APIs with its multi-overloaded structure and naming standards (if you can call it that).  There are lots of quirks where binding can go terribly wrong if you bind circular references or when you need to do manual binding at the wrong time in the Digest cycle and you end up in an endless digest loop that eventually pops the execution stack. While these are all known and relatively minor issues that have workarounds, it shows the architectural choices from a bygone time catching up with frameworks that are trying to do so much more than they were originally designed for.


Starting Over with V2 Frameworks

The inclination to reimagine is very high in software development, and in the JavaScript world where major version cycles are measured in weeks instead of years this is especially true. But in the case of the existing JavaScript frameworks and their explosive growth and rate of change, it’s actually become quite clear that starting over and building for the current use cases that we’ve discovered and mostly standardized on for JavaScript framework based development is a good idea. Clear the slate so to say, and start over with focus on the performance and features that we are tasking those frameworks with today.

Not only are we dealing with new framework re-designs, at the same time we're also dealing with a bunch of new-ish technologies that are disrupting the way things have been done in the past. Among them are:

  • Components not Applications
  • JavaScript Changes
  • Platform Changes
  • Mobile Optimizations

I've been watching and playing around with Angular 2, Aurelia and Ember 2 for version 2 frameworks. Out of these three only Ember is shipping a production V2 version today while the others are still in alpha and beta state respectively and not looking like they are going to release anytime soon. This post mostly relates to these three frameworks since that's what I've looked at, but much of the content can be applied more broadly to other frameworks as well.

Components over Applications

One theme that all the frameworks are starting to embrace is that applications should be built out of smaller and simpler building blocks. So rather than building large modules or pages/controllers,  the idea is to create self-contained smaller components that can be patched together like legos into a larger document. Components have their root in the fledging Web Components standard that seems to have stalled out due too many problems and inconsistencies, but the overall concept of self contained components is still something that each of these frameworks is paying lip service to.  All the framework vendors claim some Web Components functionality but in reality it looks like the concept more than the actual implementation is what counts.

In Angular 2 for example, rather than having controllers and directives there will only be components. A component can take over the functionality of what directives and controllers used to do under a single component type. At a high level both do many of the same things - they both have models  and binding code to deal with.  Likewise services and factories are simply classes in Angular 2. The goal of much of the new functionality is to simplify and strip functionality down to its most essential features to limit the API surface of frameworks which results in simplification on many levels. Certainly angular 1 had a lot of duplicated concepts and in Angular 2 the object model will be much smaller and more concise which makes it easier to work with.

Besides the object model simplification, a component approach can have a profound impact on how you build applications. Rather than building large and complex controllers, you can break out pages into their individual components where sections of a form, or say a list live in their own components. By isolating each of these components and assigning their own logic and data to them they become easier to develop (less dependencies and smaller code base) as well as more easily testable. Angular, Aurelia and Ember all embrace this component style with nested customer HTML tags that describe the individual components in a page.

But having played with components over controller approach I have to admit I have to really force myself to think this way - it's hard to draw the line and not over fragment applications into a million little shards. There's a fine line between not enough and too much componentization. But the beauty of the model is that it's your choice. You can make your components as atomic or as monolithic as you choose.

Improved Databinding Syntax for Angular and Aurelia

Angular 2.0 is making a big break from Angular 1 with drastic changes to its markup syntax for data binding. In Angular you can bind any attribute, event or property through the markup interface using a funky CSS inspired syntax (# for objects/properties, [] for attributes and () for events) for example. While the syntax definitely is 'different', it does provide for a well thought out approach for data and event binding that is much more flexible than the old model. This model reduces the need for custom directives just to handle special bindings for each type of control or control attribute. This feature alone should cut down drastically the amount of directives needed in Angular.

Aurelia also has a beautiful, explicit data binding syntax model that uses descriptive prefixes like bind. or delegate. to actively describe the operations to perform for binding. It's very clear and descriptive although a little verbose. Like Angular Aurelia can bind to anything on an element which makes for more flexibility than V1 frameworks had. I'm a big fan of Aurelias binding and validation model. It's very clean and easy to work with in code.

The changes in these frameworks are very welcome as they provide much more flexibility than what was available in V1 frameworks. It also looks like performance of data binding will be much improved as a result of these changes.

JavaScript: On the Cusp of Big Change

The other major change that's happening in the V2 frameworks is that they are all focused on EcmaScript 6  (ES 2015) and beyond.  With that change comes a whole slew of other technologies that are required in order to make it all work because even modern browsers cannot run ES6 natively today.

This means new technologies you have to learn and work with:

  • EcmaScript 6 (ES 2015)
  • Transpilers
  • ES6 Module System and Loaders
  • Build system technologies

ES6/ES 2015

Some of the highlight features of ES6 are:

The built-in module system is probably the most notable feature as it greatly simplifies the alphabet soup of module systems that are in use today. Having a standard module system defined at the language level should - in the future - provide for a more consistent experience across libraries instead of the messy multi-module support most libraries have to support today. ES6's module system doesn't support all the use cases of other module systems (there's no dynamic module loading support for example), so we may still need a supporting module system for that, but at least at the application level the interface will be more consistent.

Classes are the other big feature for ES6 although not everybody is a fan of classes in JavaScript, as it sidesteps some of the traditional functional nature that many love in JavaScript. Realistically classes just add to existing features so the purists can go on using their prototypes and functional classes, but I think classes add a necessary construct that is needed in a general purpose language like JavaScript. Dissenting purist voices aside, classes will end up being the most popular choice for creating a data structure  and looking at how the V2 frameworks handle operations that's certainly validating this point. Function() based classes and Maps likely will be relegated to special use cases once ES6 takes hold broadly.

I might be biased coming from Object Oriented environments but to me classes make a lot more sense than the haphazard choices we've had in JavaScript thus far with their individually different behaviors. As a bonus classes finally maintain the scope of the .this pointer in method code, which is one of the most vexing problems that new JavaScript developers coming from OO often run into.

Another great feature are template strings which can be used to merge string and data content inline. This is great for code based output generation, but also useful for things like components which often need to be fully self contained and not ship with external HTML content. In this new word of components inline HTML may not be uncommon and template strings greatly facilitate embedding data into string content for rendering.

Promises are now included in ES6 as part of the base language which again provides a consistent baseline on which libraries can build. The built-in implementation doesn't support all the features a library like Q provides, but it provides the core implementation. Libraries can build ontop and provide the additional functionality. It's been frustrating to see different promise implementation that handle callbacks and error handling using differing syntax and by having a standard in the language at least we're bound to see standardization of the core syntax. All the new major frameworks are using the base ES6 promises and building extensions on top of it.

Arrow functions are like C# lambdas and make for less verbose function syntax.  Not exactly a big feature but I have noticed that it does make for more readable code as it cuts down on verbosity for anonymous functions. Unlike standard anonymous functions, arrow functions also guarantee that the parent scope's .this pointer is captured, rather than the active context's which is important when executing inside of the context of a class.

Finally there are a bunch of new language features in ES6 - the let keyword allows truly local scope variables in addition to the sometimes tricky block scoping. There are tons of new features via method extensions on the base JavaScript objects. Arrays in particular gain a ton of new functionality. There's also support of yield syntax using Generators so you can build IEnumerable style functions, and an implementation of iterators using the new .keys() and .values() and .next() functions that allow iterating over the internal members and values of an array. .find() and .findIndex() make it easier to find elements.  Many of these features have been available as part of third party libraries like underscore or lodash, but it's nice to have these common features available natively without a lib. It's a good idea to poke around in the list of new features in ES6 to see what other things you can use and might allow you to ditch an external library for. ES7 promises even more common language enhancements like async and await, object.observe() and more array and object extension functions which are useful for everyday scenarios.

None of the features are necessarily new - most you've been able to accomplish with third party libraries or other code workarounds. But having this stuff as part of the native JavaScript platform can reduce the amount of external libraries required and generally make functionality more consistent.

ES6 and (no) Browser Support

We can all agree that ES6 is nice and has many, many worthwhile enhancements. But the reality is that ES6 is not natively supported by any browser shipping today. Some browsers support some of the features, but no browser supports ES6 fully today.  if you take a look at this chart, you'll see a lot of red and the highest feature coverage of any browser is FireFox with 71%. It's actually quite surprising that full support isn't here yet especially given that most browsers (with the exception of Internet Explorer) are now evergreen browsers that are automatically updated with new features and standards and the ES6 standard has been more or less finished for nearly a year (although fully ratified only a few months ago). Yet full native support for ES6 looks like it will be off by quite some time yet. My guess is we won't see a full native implementation until early next year and probably a few more months before even all evergreen browsers will be there.

But even when evergreen browsers become capable to run native ES6, there's still the issue of older browsers that won't go away. Internet Explorer versions before 11 and Edge will never get upgraded, and there are literally  a billion old smartphones that have old browsers that also won't upgrade. The shift to ES6 with native browser support will take a long time before you can ensure that native ES code runs the way we expect ES5 code to run today.

ES6 requires Transplilation

Because this is all so much fun we had to invent a new word for running ES6 on browsers today: Transpilation. Transpilation is the process of converting JavaScript from one version to another - specifically from ES6/7 to ES5. For now, if you want to use ES6 the unfortunate truth is that you have to a transform ES6 code into ES5 somehow so that it can run on just about any browser. Transpilers take ES6 (and ES7) code and convert the code to ES5 code that can run in any browser.  Tools like Babel and Traceur come both in build time and runtime libraries that convert ES6 code into ES5.  The most common use case is to use a transpiler as part of the build process and statically 'compile' ES6 code into ES5 code, which is then loaded in the browser using a command line build tool or build tool like Gulp or Grunt.

There are a number of transpilers available today:

  • Traceur
  • Babel
  • Typescript (still requires traceur or shim transpiler at the moment)

Traceur by  Google is optimized for machine read code which essentially means it creates very terse and unreadable code. Babel is probably the most popular of the transpilers at the moment and creates reasonably readable ES5 code from ES6 or 7. The advantage of Babel is that it provides good debugging functionality and source mapping as well as smart exception handling that actually provides usable errors. Typescript is Microsoft's JavaScript enhancement language that provides new language features ontop of JavaScript and a type system for JavaScript. Typescript's features are mostly compatible with ES6 and ES7 syntax and provides additional features like variable and member typing, interfaces etc. Typescript comes natively with a compiler to turn typescript into JavaScript and there are options on the compiler to create either ES5 or ES6 code. Typescript is a super set of JavaScript, so plain JavaScript just works in Typescript. TypeScripts is shooting for full ES6 support, but it's not quite there yet. While Typescript can compile down to ES5 making it a transpiler of sorts, it still requires some additional module loader code to handle ES6 module loading completely.

Say Goodbye to Simplicity

Say what you will about the complexity of the V1 set of frameworks, one thing that is nice about them is you don't need much to get started. You can simply add a script reference to a page and you're off and running. The V2 frameworks are not going to be so easy to get started with.

With the ES6 recommendation of these new frameworks (Angular 2, Aurelia, Ember 2) that simplicity is gone as you *have to*  use a build process in order to transpile your code before you can execute it. Theorhetically you don't have to use ES6 as the frameworks pay lip service to supporting ES5, but it's clear that this is not the optimal use case. The new frameworks are designed for ES6 and when you look at the examples you are also not likely to want to use ES5 as it's much more verbose to write code with the same functionality.

But the complexity goes beyond just the transpilation. To get the transpilers set up you need a bunch of additional tooling. Aurelia requires jspm which is quite nice and meshes really well ES6's module system by using the same naming convention as modules. Angular uses Typescripts pacakage manager and Ember uses its CLI based loader. Everywhere you look tooling is required to get things loaded compiled modified and rearranged. Welcome to the simple JavaScript lifestyle.

Going to the home page and reading the getting started guide for any of the frameworks reads like a tutorial for a whole product of earlier libraries with discussion of installing package managers, transpilers, and running build agents that compile your code as soon as it's changed. There are usually a page or two of command line tools you get to run before you ever get to write a single line of JavaScript or HTML code. The move to ES6 might provide cleaner code, but the downside is that there is a lot more complexity involved in actually starting and building an application.

To be fair once you understand the basic steps involved this process of setting up a simple build environment won't take very long, but if you are a new developer starting from scratch and staring at the first time tutorials I'm not sure that I would stick with it. My first impression would likely be: "Are you fucking serious? You call this easier?"

I think in the big picture it will be easier to use these new tools and as much as it seems painful at first, a build process for JavaScript is becoming a necessity even if you are using an older framework. The main thing is that the getting started for a complete newbie learning curve has gotten significantly more complex. And that is not a good thing.

Even for seasoned developers comfortable with V1 frameworks there will be a learning curve, at the very least picking up ES6 and new module loading syntax and the new fraemwork syntax, but also to work with a whole new set of tools to build your application.

Dedicated CLIs

To help alleviate some of this setup, build and configuration pain the new frameworks come with dedicated CLIs that help manage project creation, build process and running watchers. These tools are geared towards easing the repetitive and tedious tasks that you have to go through especially at project creation. This goes a long way to making the process appear simpler as long as it all works.

But when it doesn't, things can get ugly because at this point you have hundreds of files and packaged dependencies created and very little in the way of hints where things went wrong. I ran into this with both Aurelia and Ember starter projects and in both cases the problem ended up being out of date package references which took a bit of time and searching to correct.

Regardless, tooling is going to be a vital part of this lifestyle if there is any hope of getting the unwashed masses to use this stuff or even try it out for that matter. I think it's going to be an uphill battle to get people weaned off the simplicity of the V1 frameworks and get over the AYFS moment. :-)

There's lots of room to improve here. The V2 frameworks are either in Alpha, Beta or just Released so they'll improve and get more reliable with time. Let's also hope that the build tooling and dependency trees can be whittled down over time to reduce the complexity of what is required just to get an application off the ground.

Mobile Development

Another important aspect of V2 frameworks is additional focus on mobile development. This comes mostly in the form of optimizations to make sure that frameworks are optimized for mobile devices to use less power and perform adequately. Existing V1 frameworks are notoriously CPU hungry and a lot of focus is going into V2 versions to optimize performance.

All of the new frameworks are using new approaches to deal with view rendering and data binding performance by overhauling their view and binding engines. The React framework seems to have had a massive effect on other frameworks in spurring better performance for rendering large amounts of data, so much so that some frameworks like Ember are emulating some of the React engines features for their own rendering. React's main selling point is that its blistering fast in rendering data, so much so that it doesn't use traditional bindings but rather just redraws the UI as needed from memory rendered buffers.  React's approach is more traditional in that it works like a view engine rather than a data binder with the view engine simply re-rendering the entire view rather than trying to update the DOM's existing state.

Angular and Aurelia on the other use data binding to update existing DOM nodes when data changes. In V2 new approaches are used to detect changes. MutationObservers and support for Object.observe() make it easier to detect changes on DOM elements and classes in a highly performant way and this translates into better overall data binding performance.

Additional mobile development features are geared to the animation features built into the frameworks, that are optimized for mobile deveices as much as possible. I haven't really checked this out, but there's quite a bit of hoopla around this aspect.

There are also efforts in making various frameworks to support multiple view engines that can be swapped out and actually render native controls in native applications. Again React started this with React Native which maps their JSX language markup to native controls. Telerik is also heavily pushing their NativeScript framework which is a more traditional component library approach to building applications, but using JavaScript.

Native development is definitely an important aspect. For me personally, the last 4 applications I've built have had major mobile components to them and while I prefer building Web based applications that work well on the Web, 2 of those apps needed to be wrapped up in Cordova to provide the functionality we needed. Native frameworks address this need. To me though it's not so much the development of the applications that is at issue though - it's the infrastructure and deployment/testing process that's the big issue. Building applications that can go easily between a Cordova solution and a native Web application require a bit of tweaking, and the entire process of rigging up and testing Cordova applications still feels very cumbersome. Again I think tooling in this space is going to potentially make this better and as far as it goes Telerik seems to have the right idea with their integrated Web and Visual Studio environments.

Mobile is definitely an interesting space - so much is changing and no matter what you use it seems by the time you get rolling with it something new and better shows up…

Two Steps forward One Step Back

twoforwardonebackIt's easy to get wrapped up in the hype around the V2 frameworks as they are clearly bringing many improvements and cleaner object models to framework Web development. But we're getting hit with a large amount of change, not just from the frameworks themselves but also the underlying JavaScript and build system changes that are essentially forcing a complete reoboot on how you build front end applications with these new frameworks. We're gaining easier to use code and new framework features at the cost of additional infrastructure overhead.

It's ironic to see JavaScript move in this direction because simplicity was always one of the biggest selling points of JavaScript. In the past it's been "Just add a script tag to an HTML page and you're in business" - well that's no longer the case if you want to take advantage of all of these new features. And just as ironic is that JavaScript now needs what essentially amounts to a compilation system that can compile a bunch of modules into a concatenated and compacted executable file. This is starting to look a lot like a .NET or Java project - without all the nice IDE build tool features that don't exist for JavaScript today.

Regardless, it'll be interesting to see where JavaScript frameworks will end up once they are actually releasing. Currently the biggest pain is that it's hard to see when some of these frameworks will actually ship. I've been really enjoying playing around with Aurelia and some parts of it feel really solid while others are clearly still under construction and wobbly. Neither Aurelia nor Angular are ready for any sort production work yet, so it's hurry up and wait. I'm not about to jump in for real before the frameworks are ready for anything but just playing and getting familiar with some of the new concepts. Make no mistake there's a lot to learn and it will take time, so getting a headstart on ES6 especially is probably a good idea.

I'm taking my two steps forward cautiously. For production use I'm continuing on with Angular 1.x for the time being - after all the V1 frameworks work today. I'm checking out the new frameworks and building a few simple sample apps with them but that's as far as I'm willing to commit for right now. I get questions from customers regularly asking whether they should wait for V2 of this framework or that, and my advice always is - go with what is available today. Don't wait for the new and shiny. Even if it shipped tomorrow you'd need some time for learning, and it's probably a good idea to wait for the first few point releases and see what issues crop up.

The future starts tomorrow. In the meantime get stuff done today…

© Rick Strahl, West Wind Technologies, 2005-2015
Posted in Opinion  JavaScript  Angular  

by Rick Strahl at August 26, 2015 09:32 AM

Alex Feldstein

Photo of the Day

Dale Chihuly glass art at Miami's Fairchild Tropical Gardens

by Alex Feldstein ( at August 26, 2015 05:00 AM

August 25, 2015

Alex Feldstein

Photo of the Day

Dale Chihuly glass art at Miami's Fairchild Tropical Gardens

by Alex Feldstein ( at August 25, 2015 05:00 AM

August 24, 2015

Rahul Desai's Blog

Announcing availability of SharePoint Server 2016 IT Preview and cloud hybrid search

You can download SharePoint Server 2016 IT Preview today via the Microsoft Download Center and share feedback directly with our engineering teams through the new SharePoint Server 2016 IT Preview forum. We also welcome feature requests and feedback via the SharePoint Server suggestion box on UserVoice, @SharePoint on Twitter, and in the comments below. We’re eager to hear your feedback and use it to make SharePoint Server 2016 the best experience for information workers, IT professionals and developers alike!

Announcing availability of SharePoint Server 2016 IT Preview and cloud hybrid search – Office Blogs

by Rahul Desai at August 24, 2015 08:43 PM



XFRX - Export VFP reports to PDF, Word, Excel and HTML

XFRX is a tool for transforming Visual Foxpro reports to PDF, MS Word and HTML documents.

XFRX is very fast and precise, the generated documents look the same as the original reports. It supports reports merging, interactive features - hyperlinks and bookmarks/outlines - in the output documents, text rotation in PDF, document encryption, font embedding (see manual and demo reports for more details).

XFRX also enables previewing the report output in a container object within your forms.
The PDF part doesn't require any special printer drivers or other third-party tools, the documents are generated directly from VFP.
To generate word documents, XFRX requires Word 2000 or higher to be installed.

From: - Documentation

Recently Added Features
  • Export to Excel Spreadsheets ~ using real Excel columns not pasted text boxes
  • Save A Report to a file for later report generation in any XFRX export format
  • The preview container now supports bookmarks and hyperlinks
  • XFRX 11.2 Just Released
  • XFRX 15.0 released March 2014
  • XFRX 15.6 released 21 August 2015
  • Now supports Open Office (OASIS) file type output.
  • Now supports MS Office 2007 file type output.
    XFRX Blog:
  • August 24, 2015 12:10 PM

    Alex Feldstein

    Photo of the Day

    Dale Chihuly glass art at Miami's Fairchild Tropical Gardens

    by Alex Feldstein ( at August 24, 2015 05:00 AM

    August 23, 2015

    Alex Feldstein

    Photo of the Day

    Homestead, Florida
    Homestead is a farming town south of Miami. It grows vegetables and palm trees to sell for landscaping

    by Alex Feldstein ( at August 23, 2015 05:00 AM

    August 22, 2015

    Alex Feldstein

    August 21, 2015

    Alex Feldstein

    August 20, 2015



    A worldwide Microsoft Technical Conference.

    From the official site of Tech Ed 2000:

    At Microsoft Tech - Ed 2000 you'll get an in-depth look at The Business Internet from four primary perspectives:

    • E-Commerce: Learn how to build practical, flexible channels to connect to customers and partners online. Sessions will discuss various products from Microsoft as well as new technology initiatives such as XML and Biz Talk that are currently redefining how business is done.
    • Knowledge Management: Get the details on powerful, easy, and familiar ways to empower knowledge workers with the right business intelligence so they can make fast, effective decisions.
    • Infrastructure: Attend sessions on how to architect a long-term, end-to-end platform to manage and ensure the return on the next generation of information technology investments.
    • Line of Business: Learn practical, open, and flexible ways to get the right solutions to address any specific business need. Sessions will detail key vertical and horizontal markets such as ERP and Manufacturing.
      See more at Microsoft Tech Ed site

    August 20, 2015 01:31 PM

    Alex Feldstein

    August 19, 2015

    Doug Hennig

    Changing Windows 10 Title Bar Colors

    In Windows versions prior to 10, the color of window title bars is determined by what theme you’re using. In Windows 10, most applications have a white title bar. It doesn’t matter to me much what color they are, but since I’ve upgraded to Windows 10 and I’m updating the documentation for Stonefield Query as we get ready to release version 5.2, the screen shots I’ve taken for updated forms don’t match the existing screen shots for forms that weren’t changed. I have a few choices:

    • Ignore it, because who else but me will notice? Unfortunately, I’m too anal to take this approach.
    • Redo all screen shots. A cool feature of the Stonefield Query SDK is that it automates the taking of screen shots for about 50% of the dialogs. The reason for that feature is that Stonefield Query is highly configurable and some of the configuration settings affect the appearance of many forms. To make the documentation for a customized version of Stonefield Query match what the user sees, we have a function that regenerates the help, including running the app and automatically taking shots of any such forms. Unfortunately, that still leaves 50% of the forms I’d have to do manually. Life is too short.
    • Somehow change the title bars of the updated forms to use the same color as the existing screen shots.

    I wasn’t sure the latter was possible but fortunately came across a blog post by Daniel Rubino that explains how to do it. One thing he doesn’t explain is how to select the desired color for the title bars. To do that, right-click the desktop, choose Personalize, select Colors, turn off Automatically pick an accent color from my background, and select the desired color from the palette that appears.

    by Doug Hennig ( at August 19, 2015 03:36 PM

    Andrew Coates ::: MSFT

    How cool is Azure Continuous Deployment‽

    I’ve been trying to learn Angular this week (see

    I started with (which, in turn, uses

    And then I tried writing some of my own stuff – ending up with a page that allows you to look up the current weather in any of 20,000 cities around the world.

    Great intro to a bunch of the tools and tech I haven’t used much and I’m really trying hard not to throw up my hands and go back to the nice, safe, easy, understandable smart client way of doing things (and don’t get me started on debugging JavaScript). npm is pretty cool, I’ve only scratched the surface with bower, bootstrap is pretty neat and angular itself is kind of fun to work with in a weird, masochistic kind of way.

    Along the way though, I remembered that Azure has continuous deployment from a number of sources, including github (and VSO and a couple of others), so now every time I push to the repo, it gets deployed automatically to

    Very cool.

    BTW, (Did you spot the interrobang?)

    by Andrew Coates [MSFT] at August 19, 2015 11:43 AM

    Alex Feldstein

    August 18, 2015



    The VfpDebugger can exist in one of two modes. If the debugger is in the Debug Frame, the debugger is a separate Windows application. If the debugger is in the FoxPro Frame, debug windows float around in the Visual FoxPro IDE.

    August 18, 2015 05:49 PM

    Alex Feldstein

    August 17, 2015



    Editor comments: Chicago FUDG meetings updated
    A place to list upcoming Visual FoxPro events like conferences, meetings, user groups, open training sessions...
    Closest at the top please, and please remove past events.

    August 17, 2015 09:47 PM

    FoxCentral News

    Chicago FUDG meeting - Monday 17 Aug 2015

     Chicago FUDG meets tonight! 5:30pm Our speaker is Phil Sherwood, and his topic is Software Marketing, a SWFox practice-preview. Info and RSVP at http://www.

    by Chicago FoxPro Users and Developers Group at August 17, 2015 09:11 PM

    Alex Feldstein

    The character of Julian Bond (1940-2015)

    The Atlantic published a good article on Julian Bond, who passed away this week.

    They praise his character, as do I, and how he was willing to risk life and freedom for his convictions. We need more people like him, to fight inequality, racism, and hatred.

    After the passage of the Voting Rights Act of 1965, Bond was one of 11 African Americans elected to the Georgia House. But when he arrived at the state capitol on January 10, 1966, the House refused to seat him, at the urging of Representative James “Sloppy” Floyd. SNCC had issued a statement opposing the war in Vietnam and expressing support for young men who refused induction into the military. America denied justice to black people at home, the statement argued; it was impossible to believe that its war would bring justice to the people of Asia. Asked about the statement on the radio, Bond had supported it. This meant, Sloppy Floyd said, that Bond could not take a legislator’s oath to support the Constitution.

    He sued and the Supreme Court ruled in Bond vs Floyd that he was right.

    Julian, you were one of the good guys. You will be remembered.

    (article at The Atlantic:

    by Alex Feldstein ( at August 17, 2015 11:31 AM



    TOC May 2014 - Number 38

    Deep Dive: Unit Testing Visual FoxPro Applications, Part 3
    Doug Hennig
    In the previous two articles in this series, I discussed what unit testing is and why its important. I created some simple unit tests to show how they work and then introduced the Fox Unit unit testing framework and discussed how it makes creating and running unit tests a lot easier. In this, the last article in this series, well look at how to simplify unit testing using mock objects and wind up with some final thoughts on unit testing.

    VFPX: ExcelXML
    Rick Schummer
    In the last issue of Fox RockX we discussed how Microsoft Excel is the centerpiece of Microsoft Office with respect to analyzing data in the corporate world, large and small businesses alike and how Foxy XLS is a terrific way to create Excel files without having Excel installed. ExcelXML is another such tool from VFPX to help Visual FoxPro developers create Excel files, but takes a different approach using the XML format Excel can open as a spreadsheet. ExcelXML also creates the output to mimic the look and feel of your Visual FoxPro grid found on a form in your application.

    Know How: Getting the Top N for each Group
    Tamar E. Granor, Ph.D.
    In my previous articles in this series, Ive explored several features in SQL Server that dont have analogues in VFP. These features make it much ­easier to solve certain problems. This article introduces another such feature that simplifies another common problem.

    Future: Integrating Visual FoxPro and MailChimp
    Whil Hentzen
    We've all written our own email applications. I finally decided to use an outside service to handle my emailing needs. Here's how I used VFP to integrate with the mailing service.

    TOC March 2014 - Number 37

    Deep Dive: Unit Testing Visual FoxPro Applications, Part 2
    Doug Hennig
    In the previous issue, I discussed what unit testing is and why its important, and created some simple unit tests to show how they work. In this article, Ill introduce the Fox Unit unit testing framework and discuss how it makes creating and running unit tests a lot easier.

    VFPX: Foxy XLS
    Rick Schummer
    Microsoft Excel is the centerpiece of Microsoft Office with respect to analyzing data in the corporate world, large and small businesses alike. So naturally applications written for these organizations are going to export data to Excel files so users can graph and analyze the data to their needs. There are many ways Visual FoxPro applications can work with Excel including exporting to XLS files directly or through automation code. But there are situations where the customer does not want to ­license Excel for the application use or more likely, Microsoft might not allow licensing of Excel in certain situations. Foxy XLS is one project from VFPX to help Visual FoxPro developers with the creation of Excel files.

    Know How: Handling hierarchical data
    Tamar E. Granor, Ph.D.
    In my last article, I showed how SQL Server makes combining data into a single field much easier than in VFP. This time, Ill show how handling hierarchical data that doesnt fit the standard parent-child-grandchild model is easier in SQL Server.

    Future: Data Munging with Python, Part 2/2
    Whil Hentzen
    Last issue, I introduced Python and showed you how to create and run the traditional Hello World script in several environments. This month, we're going to start building scripts that handle files.

    Future: Data Munging with Python, Part 3
    Whil Hentzen
    Last issue, I showed you how to build scripts that handled text files in a variety of ways. Being able to manipulate them is in and of itself not very useful unless you're doing basic statistical gathering. This time around, we're going to write the results of our manipulations back to disk, creating both text files as well as .DBFs.

    TOC January 2014 - Number 36

    Deep Dive: Unit Testing Visual FoxPro Applications, Part 1
    Doug Hennig
    Unit testing is a very important part of application development and yet it seems that few VFP developers use this important technique. Unit testing allows you to confirm that code has the functionality expected of it, and is especially important when refactoring or making other changes to your code. This three-part series introduces you to unit testing and the VFX Fox Unit project so you can be confident in your applications success before you deploy it.

    VFPX: Thors Finder
    Rick Schummer
    Finding files is something developers find themselves doing from time-to-time. You can search using Windows Explorer and hope the Windows file index locates for the elusive source code file name. What happens when you find the file in Windows Explorer and double-click it? It opens the file in a new instance of Visual FoxPro, not the current one you are using with the project open. Wouldnt it be nice if the file opened in the editor in the same instance? What happens when you are looking for a class name inside a VCX-based class library? This month Rick explains how Thors new Finder tool from Jim Nelson helps you, and has developed into a potential replacement for the Visual FoxPro Project Manager.

    Know How: Consolidate data from a field into a list
    Tamar E. Granor, Ph.D.
    Some SQL commands were added to FoxPro 2.0 and I fell in love with them as soon as I started playing around. Over the years, Visual FoxPros SQL subset has grown, but there are still some tasks that are hard or impossible to do in VFP, but a lot easier in other SQL dialects. In this series of articles, Ill take a look at some of these tasks, showing you how VFP requires a blend of SQL and Xbase code, but SQL Server allows them to be done with SQL code only.

    Future: Data Munging with Python, Part 2/1
    Whil Hentzen
    Last issue, I introduced Python and showed you how to create and run the traditional Hello World script in several environments. This month, we're going to start building scripts that handle files.

    TOC November 2013 - Number 35

    Deep Dive: Introduction to C# for VFP Developers, Part 5
    Doug Hennig
    This article is the last in a five-part series on the C# language.

    VFP: Ideal for Tools, Part 3
    Tamar E. Granor, Ph.D.
    The first two parts of this series looked at Visual FoxPro language elements for exploring data, and for working with classes and forms. This article looks at parts of VFP that let you work with programs and projects.

    Basics: A Bevy of Timers
    Whil Hentzen
    In this article, I'll explore several ways to have VFP time out an application as well as to time out a single form.

    Future: Data Munging with Python, Part 1
    Whil Hentzen
    In a previous article, I discussed the situation where an incoming data file exceeded VFP's 2 GB/.DBF ­capacity. We used SQLite to import a multi-gigabyte table. In this article, I'll introduce another tool that should be in your toolkit, and in subsequent articles, show you how to attack this type of problem.

    TOC September 2013 - Number 34

    Deep Dive: Introduction to C# for VFP Developers, Part 4
    Doug Hennig
    This article is the fourth in a five-part series on the C# language.

    VFP: Ideal for Tools, Part 2
    Tamar E. Granor, Ph.D.
    In my last article, I wrote about VFP language elements related to data that are useful for building developer tools. This time, Ill focus on language related to classes and forms.

    VFPX: FoxyPreviewer
    Rick Schummer
    The VFP 9 Report Writer preview screen was vastly improved in VFP 9, yet today there is an open source project called the FoxyPreviewer that ­improves upon it in many ways. In this article Rick addresses the advantages of the open source replacement and the functionality included that you do not get with the core VFP technology when previewing reports on the screen.

    TOC July 2013 - Number 33

    Deep Dive: Introduction to C# for VFP Developers, Part 3
    Doug Hennig
    This article is the third in a five-part series on the C# language.

    Case Study: Using SQLite to break the 2GB Barrier
    Whil Hentzen
    In previous articles, I've helped you dip your toe into the SQLite pool, in preparation for using it as an application backend. In this article, I'm going to take a different direction and show you how I used SQLite to help a customer deal with an external data source that, in its latest release, had become too big to import into a VFP table.

    VFP: Ideal for Tools, Part 1
    Tamar E. Granor, Ph.D.
    In my last few articles, I focused on Thor, a VFPX tool for managing developer tools. Thor and VFPX generally are part of a long history of developer tools for FoxPro written in FoxPro. In this series of articles, Ill look at the language elements that enable writing developer tools.

    VFP: Application Updater
    Rick Schummer
    Most modern applications come with a way to check if there is a newer version available and for it to optionally download and install the update. Writing code to do this is not all that complex, but if you are looking for something that is both powerful and flexible, and already written and tested, you can check out Craig Boyds App Updater tool. This month Rick explains how this tool works and what it takes to incorporate it into your application and the users environment so you look like a hero.

    TOC May 2013 - Number 32

    Deep Dive: Introduction to C# for VFP Developers, Part 2
    Doug Hennig
    This article is the second in a five-part series on the C# language.

    Know How: Give Thor Tools Options
    Tamar E. Granor, Ph.D.
    In my last article, I showed how to add your own tools to Thor. This time, I look at how you can provide options for Thor Tools, so that users can customize them.

    VFPX: Dynamic Forms
    Rick Schummer
    How many times in your career have you created a form as a one-time display of some details, collect some criteria, or message your users? How many times have you cheated and used the INPUTBOX() function to prompt the user to enter in some information to conditionally control the remaining code in the program because a full-fledged form seemed like overkill? This is a perfect situation for the new Dynamic Forms project available on VFPX.

    Basics: Setting up VFP 9
    Whil Hentzen
    Inertia is a powerful thing. I regularly hear from ­developers who haven't gotten around to upgrading to VFP 9, or haven't kept their VFP 9 installation up to date. Given that all the activity from Microsoft in the last 5 ot 6 years has come in the form streamed updates, it can be time-consuming as well as confusing to figure out how to get VFP 9 set up in tip-top shape. This article will provide a quick cookbook to get your copy of VFP up to date.

    TOC March 2013 - Number 31

    Deep Dive: Introduction to C# for VFP Developers, Part 1
    Doug Hennig
    Even if you're planning to continue development in VFP, learning another language like C# can be very useful. There are some things that are a lot easier and faster to do in .Net than in VFP (the reverse is also true). This article, the first in a five-part series, introduces the C# language, comparing it to constructs and syntax in VFP to shorten the learning curve.

    Know How: Make Thor Your Own
    Tamar E. Granor, Ph.D.
    In my last two articles, I wrote about some of the tools that come with the VFPX project, Thor. This month, I show you how to add existing tools to Thor, and how to take advantage of the code thats included with Thor.

    Future: The Business Case for Moving *Some* Applications to VFP in 2013, Part 2
    Whil Hentzen
    In the fall of 2012, I wrote a 4 page article outlining the business case for VFP in 2013, dispelling a few myths that are commonly trotted out when VFP is brought up, and reinforcing several benefits that we take for granted, but that others aren't aware of, have forgotten, or dismiss until they're explained. The response to that article was overwhelmingly good, and I've received many requests for more details. Since then, I've fleshed the business case to a in-depth 20 page discussion of the pros and cons of using Visual FoxPro in 2013 and beyond.

    VFPX: FoxBarcodeQR
    Rick Schummer
    In the May 2012 issue of Fox RockX, Ricks VFPX column focused on the Fox Barcode project. This month he expands it to a next dimension with coverage of the FoxBarCodeQR project. QR barcodes are two-dimensional, and just like barcode creation with Fox Barcode, very easy to use.

    TOC January 2013 - Number 30

    Deep Dive: Call .NET Code from VFP the Easy Way
    Doug Hennig
    Calling .NET components from VFP applications can be tricky or even impossible. A new open source project from Rick Strahl named wwDotNetBridge makes this easy.

    Know How: Try Thors Terrific Tools, Part 2
    Tamar E. Granor, Ph.D.
    In my last article, I showed a few of the tools that are included with Thor. This time, Ill look at some more of them, including a number that simplify refactoring.

    Deep Dive: Another Boring Article About Regular Expressions
    Whil Hentzen
    Regular expressions might be that tool that will allow you to fit 36 hours of work into a 24 hour day some time. So bear with me; in this article, I'll explain why you MIGHT want to have the ability to use regular expressions in your toolkit, and how to get started.

    Future: The Business Case for Moving *Some* Applications to VFP in 2013, Part 1
    Whil Hentzen
    In the fall of 2012, I wrote a 4 page article outlining the business case for VFP in 2013, dispelling a few myths that are commonly trotted out when VFP is brought up, and reinforcing several benefits that we take for granted, but that others aren't aware of, have forgotten, or dismiss until they're explained. The response to that article was overwhelmingly good, and I've received many requests for more details. Since then, I've fleshed the business case to a in-depth 20 page discussion of the pros and cons of using Visual FoxPro in 2013 and beyond.

    TOC November 2012 - Number 29

    Know How: Try Thors Terrific Tools, Part 1
    Tamar E. Granor, Ph.D.
    Thor provides dozens of great tools to make developing in VFP easier. In this series, Tamar takes a look at her favorites.

    Deep Dive: Creating ActiveX Controls for VFP using .Net, Part 4
    Doug Hennig
    Doug concludes his series on creating ActiveX controls using .Net by looking at another way to create ActiveX controls and how to deploy them to your users system.

    VFPX: Intellisense X
    Rick Schummer
    IntelliSense was introduced in Visual FoxPro 7. Many developers have extended it by creating scripts that are stored in the FoxCode.DBF table. Christof Wollenhaupt (with the help of many others) created a tool named ISX to extend IntelliSense without modification to the FoxCode table. Jim Nelson extends this excellent public domain utility, makes some of his own enhancements, and integrates it into Thor on VFPX.

    SQLite: Vive La Difference How SQLite varies from VFP SQL
    Whil Hentzen
    In this article, I'll alert you to some of the differences between SQLite and VFP's SQL implementation.

    TOC September 2012 - Number 28

    Editorial: The Business Case for Upgrading Apps to Visual FoxPro in 2013
    Whil Hentzen
    So 2013 is getting ready to stare us in the face, and it seems every week we're getting calls from customers who have FoxPro 1.x, 2.x or Visual FoxPro applications in production, wondering what to do with them. These customers have thousands, perhaps tens of thousands of hours invested in their applications, systems that in some cases run their entire company, but they're looking at potential problems as Windows goes through its 5th or 6th new release since their application was initially written.

    Know How: Using Assign methods
    Tamar E. Granor, Ph.D.
    In my last article, I introduced Access and Assign methods and showed some examples of Access methods. This time, Ill explore Assign methods, which fire when the corresponding property changes, essentially giving you a "property changed" event.

    Deep Dive: Creating ActiveX Controls for VFP using .Net, Part 3
    Doug Hennig
    Doug continues his series on creating ActiveX controls using .Net by adding additional classes to the library of controls hes been building.

    VFPX: Data Explorer 3
    Rick Schummer
    The release of Visual FoxPro 9 introduced a new Xbase tool called the Data Explorer. Microsoft released a new version in the Sedna release to correct the known bugs and introduce a handful of new features. This article explores some of the newest features added to the Data Explorer past the Sedna release and released on VFPX in a project known as Data Explorer 3.

    New Ways: OS Based Invisible Data Compression in VFP
    Pradip Acharya
    Data compression with external zipping utilities in VFP applications has been featured in more than one article in this forum over the past quarter century. XP onward, Windows has offered OS managed, behind the scene compression of data in folders and files via a single FILE_ATTRIBUTE control bit.

    TOC July 2012 - Number 27

    Editorial: Learn, Network, Be inspired
    Rick Schummer
    This editorial is for those who have not attended a conference, and for the leadership who consider sending people to conferences. My hope is that by the end of this article, you will commit to register yourself and/or the people who work for you for a conference each year.

    Know How: Put Access methods to work
    Tamar E. Granor, Ph.D.
    In my last two articles, I demonstrated BINDEVENT(), the VFP function that lets you set up a method to respond when an event fires. In this article and the next, I'll take a look at Access and Assign methods, another VFP approach to provide automatic behavior.

    Deep Dive: Creating ActiveX Controls for VFP using .Net, Part 2
    Doug Hennig
    Last issue, Doug showed how to create ActiveX controls from .Net components so we can take advantage of these controls without having to convert our applications to .Net. This month, he continues the discussion to show how to handle events.

    SQLite: Inserting Large Amounts of Data into SQLite
    Whil Hentzen
    In this article, I'll show you how to work with SQLite directly in order to quickly insert large amounts of data into a SQLite database, and then how to export data from SQLite into other data file formats.

    VFPX: VFP 9 SP2 Help File
    Rick Schummer
    Microsoft released two different Help files for VFP 9 Service Pack 2 (SP2) and both were flawed and considered unusable. I am not sure exactly what happened or how it transpired, but the cold hard fact is no one checked the final Help file Microsoft released during an update of VFP 9 SP2. Fortunately several people in the Fox Community took it upon themselves to attempt to fix it, but only Francis Faure was able to reassemble all the missing pieces and put it all together again. Microsoft Legal gave the final blessing and released it to the Fox Community on VFPX using a Creative Commons license.

    Silverlight: Creating Dependency Properties and Understanding DP-concepts
    Patrick Sch䲥r
    Anyone who has done some Silverlight or WPF has stumbled over the term Dependency Property and if he has done some research on it, he has probably found out that nearly all properties of visual ­objects shaped through XAML code are Dependency Properties, and that for them to work the containing object (such as UserControl or Window) must inherit from DependencyObject. He also might have discovered that this is the mechanism used to allow properties to depend on (or be determined by) the typical XAML-like mechanisms like styles, animations and Xaml-Bindings.

    Tips & Tricks: Cool tool for reporting problems
    Tamar E. Granor, Ph.D.
    Windows 7 introduced a cool tool that can help you understand your customers bug reports.

    TOC May 2012 - Number 26

    Know How: Put Event Binding to Work, Part 2
    Tamar E. Granor, Ph.D.
    In my last article, I gave an overview of the BINDEVENT() function and showed some of the ways I use it to improve my applications. In this article, we'll see some additional examples, including one that binds to a Windows event.

    Deep Dive: Creating ActiveX Controls for VFP using .Net, Part 1
    Doug Hennig
    ActiveX controls provide a way to add both functionality and a modern appearance to your VFP applications. Unfortunately, there are few new ActiveX controls these days. On the other hand, the .Net framework comes with many attractive looking controls, and theres an entire industry devoted to providing even more. This is the first in a series of articles discussing techniques for creating ActiveX controls from .Net components so we can take advantage of these controls without having to convert our applications to .Net.

    SQLite: SQLite Connection: Error Handling and Verification
    Whil Hentzen
    We need to get away from DBFs is a refrain I hear regularly from fellow developers. Be it due to perceived instability of the file format, the need for tables larger than 2 GB, or the result of political machinations, the result is the same a desire to move to a SQL database back-end. SQLite can be an excellent intermediate step and possibly the final word - in the process of restructuring your application to talk to a SQL back-end. In this article, I discuss how to deal with the usual spate of errors that can occur when connecting to SQLite from VFP, and then how to verify that the connection actually is working.

    VFPX: Fox Barcode
    Rick Schummer
    Barcoding data has been around for decades, and has become simpler over time. Yet developers struggle when they are first approached to include barcodes in their applications. The challenges include finding the appropriate barcode fonts, finding compatible ActiveX controls, and getting barcode readers to read the generated barcodes. This month, in our ongoing series on VFPX, Rick covers how barcoding is simplified for Visual FoxPro developers using Fox Barcode.

    TOC March 2012 - Number 25

    Know How: Put Event Binding to Work, Part 1
    Tamar E. Granor, Ph.D.
    At fi rst glance, the BINDEVENT() function may seem unnecessary. After all, why bind to an event when you can just write code in the event's method?

    Deep Dive: Make Your Menus Pop
    Doug Hennig
    Last issue, Doug discussed ctl32_ContextMenu, an object-oriented menu class thats part of the ctl32 library. This month, he looks at another OOP menu class, this time the VFPX PopMenu project.

    VFPX: Go Fish 4
    Rick Schummer
    Go Fish is a tool originally released in March 2001 by Peter Diotte and resurrected by Matt Slay in 2010. Go Fish revolutionizes search performance and gives Visual FoxPro developers a solid source code search and replace process. If you are a fan of Microsofts Code References tool or the enhanced VFPX version you certainly should take a look at the new and improved Go Fish. This month Rick shows you how this tool surpasses Code References in so many ways and points out a couple of the features where it is still a step behind.

    SQLite: Getting started with Client - Server with SQLite
    Whil Hentzen
    We need to get away from DBFs is a refrain I hear regularly from fellow developers. Be it due to perceived instability of the file format, the need for tables larger than 2 GB, or the result of political machinations, the result is the same a desire to move to a SQL database back-end. SQLite can be an excellent intermediate step and possibly the final word - in the process of restructuring your application to talk to a SQL back-end.

    TOC January 2012 - Number 24

    New Ways: Managing Properties as Virtual Table Fields
    Pradip Acharya
    In a distributed multi user application with a central shared database, its not easy to add new fields to a table or modify table structures at will. This may not even be practical. For example, when the Product table must support inventory for a several Business Models, there may be thousands of individual Product properties.

    Deep Dive: The ctl32 Library, Part 3
    Doug Hennig
    Carlos Alloatti has created an incredible library of controls you can use to give your applications a more modern interface. Doug finishes his look at the library with the last set of controls.

    Know How: Speed Up Your SQL Code
    Tamar E. Granor, Ph.D.
    In my last article, I talked about the two functionsin VFP that allow you to measure the optimization of SQL commands. This month, Ill look at what you can do to improve performance once you know that a query is sub-optimal.

    VFPX: Parallel Fox
    Rick Schummer
    Parallel processing is defined as the performance by a computer of two or more simultaneous operations divided among multiple processors. Parallel programming is spawning processes on two separate processors either on different computers or the same computer. This is becoming more and more important based on the engineering fact it is getting harder to get silicone-based processors to run faster with the reliability and stability we expect and require. So how do Visual FoxPro developers take advantage of this approach? Well thanks to Joel Leach and the Parallel Fox project on VFPX, it actually is quite straightforward.

    TOC November 2011 - Number 23

    New Ways: Foxparse C Library for Handling Strings, Properties and Windows
    Pradip Acharya
    A limited version of the Foxparse.fll C library was introduced in an earlier recent issue. This issue covers the full version featuring the complete set of advanced functions. The C API was created to expand the limited choices for string handling, formatting and parsing offered by VFP9.

    TOC September 2011 - Number 22

    Editorial: Totally Marshmallowed? Join us at SWFox DevCon for a refresher!
    Rainer Becker
    You should not miss the SWFox DevCon. It covers a lot of great topics, treated by great speakers! But maybe economics are harsh again in your region and maybe there is a problem with the funding concerning not only the money to spend, but also the time? Time of not being available at your desk for the perennially urgent development work, support and maintenance tasks?. Here come a few more reasons why you should circumnavigate all these obstacles somehow or why your boss should be won over, too.

    Deep Dive: The ctl32 Library, Part 2
    Doug Hennig
    Carlos Alloatti has created an incredible library of controls you can use to give your applications amore modern interface. Doug continues his look at the library withthe next set of controls.

    Know How: Make Your Queries Fly
    Tamar E. Granor, Ph.D.
    In the January, 2010 issue, I wrote about changes in VFP's SQL commands in VFP 8 and 9. But one of the key elements in using SQL commands is that they can be very fast. When they're not, you need to figure out why. Fortunately, VFP includes a couple of functions that help you do so.

    VFPX: Thor Adding Tools
    Rick Schummer
    Thor is designed to be the ultimate IDE extension and tool manager and is quickly maturing on VFPX. Last issue Rick briefly introduced you to the installation process and provided a brief overview of Thors user interface. This month Rick dives in to the core reason this tool was created in the first place by detailing how you can use Thor to manage various add-ons and tools you want integrated into the Visual FoxPro 9 IDE.

    Tips & Tricks: Schummer Tips and Tricks
    Rick Schummer
    ActiveX/IntelliSense tip Dragging the ActiveX controls from the Visual FoxPro Toolbox to an editor provides the syntax for CREATEOBJECT() code. The following code was created when I dropped the Adobe PDF Reader ActiveX Control in the program editor:

    Tips & Tricks: Report Writer
    Cathy Knight
    The VFP Report Writer has some very useful features hidden away. The first hidden feature is very helpful for concatenating data in a single field object on a report. The second hidden feature is helpful for browsing or hacking the FRX.

    Internationalization: Internationalize Your App, Part 1 Entering international characters
    Rainer Becker
    Numerous articles and publications describe how to use Unicode and such in Visual FoxPro applications to enable the input and display of international character sets. Visual FoxPro cannot process double byte character sets and a workaround is needed in all cases. The simple approach discussed here might be the quickest solution to internationalize the data input capabilities of your application, at least to some degree.

    TOC July 2011 - Number 21

    Editorial: It's show time again
    Rainer Becker
    Mark the date: October 26 - 29, 2011. The Southwest Fox 2011 will take place at the Legado Hotel, Gilbert, Arizona, USA and you should not miss this great event! All details including very interesting session descriptions and the speakers' biographies are available on-line at Registration is already open.

    Deep Dive: The ctl32 Library, Part 1
    Doug Hennig
    Want to add fresher, more modern-looking controls to your applications? Want to avoid ActiveX issues? Take a look at the ctl32 library.

    Know How: Talking to Microsoft Office
    Tamar E. Granor, Ph.D.
    While most Office Automation code moves smoothly from older versions to the latest, some changes in recent versions do have an impact on the process of automating the Office apps. One change in Office 2010 has major implications for applications that need to use Office's applications programmatically.

    Customerizing: Customizing Your Vertical Market Application, Part IV
    Cathy Pountney
    In the previous three installments of this four-part series, I introduced you to a customization methodology you can implement in your vertical market application to keep your standard code independent from your custom code, yet have the two code bases play nice together. I showed you how to lay the foundation and add hooks in your application. I showed you how to build the custom application and add basic functionality. I explained how to customize menus, forms, processes and even offer customized data. In this last article of the series, I show you how to customize my favorite part of an application; Reports.

    Silverlight: Applications and the local System
    Michael Niethammer
    As You saw this headline You might be wondering why it is necessary to write an article in Fox RockX about SL-applications and the system they are running on. But please remember: Silverlight is a web-technology, applications written this way are running on the local system in a sandbox, hosted by a web browser, without any access to the local machine. Thinking about business- applications it becomes very important to talk about ways to use the local file system, automate applications like Office or using the local hardware.

    VFPX: Thor Introduction
    Rick Schummer
    Thor is designed to be the ultimate IDE extension and tool manager and is relatively new to VFPX. Thor helps you manage hotkeys as shortcuts to your add-ons, allows you to create and manage a developer menu, and positions itself as a facilitator to add-ons and the ability to more easily share tools you create with other Visual FoxPro developers. This month Rick is going to give you a short introduction to this fluid project in hopes you will help test it out and provide some of your own add-ons to share with the Fox Community, and then next time dig deeper into some extensions samples.

    TOC May 2011 - Number 20

    Deep Dive: Email and File Transfer the Fast (and Cheap!) Way
    Doug Hennig
    In the previous two issues, Doug discusses free libraries generously provided by Craig Boyd to compress and decompress files and encrypt and decrypt strings and files. In this issue, he discussed two more libraries that add MAPI email and file upload and download capabilities to your applications.

    Know How: Build Your Own Project Tools
    Tamar E. Granor, Ph.D.
    While Visual FoxPro's Project Manager doesn't offer much in the way of tools to audit or manage projects, the ability to address the project as an object more than makes up for this deficiency.

    Customerizing: Customizing Your Vertical Market Application, Part III
    Cathy Pountney
    In the previous two installments of this four-part series, I introduced you to a customization methodology you can implement in your vertical market application to keep your standard code independent from your custom code, yet have the two code bases play nice together. I showed you how to lay the foundation and add hooks in your application. I showed you how to build the custom application, add basic functionality, and explained how to customize menus. In this article, Part 3, I take it a step further and show you how to customize forms, processes, and offer customized data to your clients.

    Tools: dFPUG.fll Version 3 - Zip, Scan and more
    Venelina Jordanova and Uwe Habermann and Erich Todt
    The dFPUG.fll has grown up. The little FLL with functions for compressing and decompressing files has become an ample collection of functions indispensable for many purposes. FoxPro developers are offered capabilites hitherto unknown.

    TOC March 2011 - Number 19

    Deep Dive: Encryption the Fast (and Cheap!) Way
    Doug Hennig
    In the previous issue, Doug discussed a free library generously provided by Craig Boyd to compress and decompress files using the ubiquitous ZIP format. This time, he examines another free library from Craig, one that encrypts and decrypts strings and files.

    Know How: Inside the Object Inspector
    Tamar E. Granor, Ph.D.
    In my last article, I demonstrated the Object and Collection Inspector, a new tool I built to overcome the VFP Debugger's weaknesses in working with collections. This time, I'll open the hood and cover some of the issues I encountered in building the tool.

    Customerizing: Customizing Your Vertical Market Application, Part II
    Cathy Pountney
    Part 1 of this four-part series introduced you to a customization methodology you can implement in your vertical market application to keep your standard code independent from your custom code, yet have the two code bases play nice together. This article, Part 2, dives into the code showing you how to lay the foundation and start building the custom application as well as how to add some customization to menus in your application.

    VFPX: Vista (and Windows 7) Dialogs via COMtool
    Rick Schummer
    Sedna was released on January 25, 2008, which is more than three years ago. Yet Rick still finds Visual FoxPro developers asking questions about Sedna, where to go get it, what is included, and how to install it. Microsoft open sourced the Sedna release package and source code, and made it so they could be available on VFPX. Now developers can extend them and have the ability to re-release them to the Fox Community. This month Rick is going to show you the VistaDialogs4COM, which is one of the components available in the Sedna package.

    TOC January 2011 - Number 18

    Deep Dive: Compression the Fast (and Cheap!) Way
    Doug Hennig
    Need a way to compress and decompress files in your applications? VFP guru Craig Boyd has created a free library to zip and unzip files quickly and easily.

    Know How: Introducing the Object and Collection Inspector
    Tamar E. Granor, Ph.D.
    For the last four years, I've been working on a project that has grown to include a complex object hierarchy with many embedded collections. While VFP's collection class is quite useful, the debugging tools for collections are weak. In particular, there's no support for drilling down into collections. So I finally created my own tool.

    Customerizing: Customizing Your Vertical Market Application, Part I
    Cathy Pountney
    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 often times 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 article, part 1 of a four-part series, introduces you to a customization methodology you can implement in your vertical market application to keep your standard code independent from your custom code, yet have the two code bases play nice together.

    Silverlight: Lightswitch - a first look at the Beta of the new RAD tool
    Michael Niethammer
    End of August this year Microsoft published the first Beta of their new product called Lightswitch (former internal name: KittyHawk). This product should fill a gap in the Visual Studio toolset for professional developers as well as for home users to create database applications as easy as possible. Without writing a line of code, Lightswitch enables the user to create CRUD applications for different datasources (locally or anywhere else) easily. Even though its somewhat a model-based application generator there are enough ways for enhancing the generated application to make the toolset a valuable thing for professionals. In this article I will give a brief overview of Lightswitch and its architecture.

    Tools: Application String Handling Made Easy with Foxparse C library
    Pradip Acharya
    In business applications (and in general), we are faced with complex string handling and parsing issues every day. Fulfilling this requirement with the rudimentary VFP functions SUBSTR, ATC and ALINES is a tedious task involving lengthy ad hoc coding with numerous chained function calls within VFP loops, slowing down development not to mention execution. In this introductory article, Pradip Acharya presents the broad outlines of the new Foxparse C library, its advantages, how its used and a few core functions with examples. In a forthcoming issue, the complete set of functions and the advanced options will be unveiled. Foxparse.fll included in this download is the curtailed version of the library.

    TOC November 2010 - Number 17

    Silverlight: Silverlight Business Applications
    Venelina Jordanova and Uwe Habermann
    You can create Silverlight 4 applications with any version of Visual Studio 2010. We are using the version Visual Web Developer 2010 Express which is available for download free of charge. Basically all Silverlight 4 applications can be developed with this free version of Visual Studio 2010. But the various commercial versions of Visual Studio offer an extended debugging, automatized testing capabilities, and the possibility of integrating them in a source code management system. However, the free Visual Web Developer 2010 Express is the right choice for beginners. And in many cases it will suffice for doing professional development work.

    Deep Dive: A More Flexible Report Designer
    Doug Hennig
    This month, Doug presents a way to make the VFP Report Designer more flexible, such as customizing the pages of the properties dialogs without having to change ReportDesigner.APP.

    Know How: Understanding Business Objects, Part III
    Tamar E. Granor, Ph.D.
    Once you have business objects, you need to connect them to the user interface. Plus changing the application is easier than when business logic and UI code are mingled

    TOC September 2010 - Number 16

    Editorial: Rescue in sight with Silverlight
    Rainer Becker
    Dear Fox RockX reader,the publisher of Fox RockX magazine, the FoxPro User group of German Language Inc., is happy to report good news: Our plans to offer a migration path for Visual FoxPro developers have taken big steps forward!
    Complete article available at

    VFPX: zProc IntelliSense
    Rick Schummer
    IntelliSense in Visual FoxPro is highly extensible and this is proven by the number of developers who create scripts over the years to assist themselves and other developers in writing source code quicker. This month Rick is going to dive into the relatively new "zProc, zVFP, and zCOM IntelliSense Scripts" project headed up by Jijo Pappachan to show you three new scripts which may or may not be useful for your development, and potentially can save you time.

    Deep Dive: Practical Uses for GDIPlusX, Part III
    Doug Hennig
    GDIPlusX is a VFPX project that exposes GDI+ to VFP applications as a set of VFP class libraries. GDIPlusX makes it easy to add new graphical abilities to your applications, allowing you to provide a fresher and more powerful user interface. This article is the last in a series that examines some practical uses for GDIPlusX.

    Know How: Understanding Business Objects, Part II
    Tamar E. Granor, Ph.D.
    In my last article, I explained what business objects are and why I had a hard time learning to use them. Then, I looked at a client application (called NMS) that brought the ideas home to me. In this issue, I'll begin to look at the details of using business objects.

    Silverlight: SL Data-Binding and Data-Validation
    Michael Niethammer
    Developing Silverlight applications is totally different from the way FoxPro developers did things for a long time. Most of them don't like to switch over to Visual Studio because of the DataBinding in old style Winforms Applications. Microsoft has released the Windows Presentation Foundation and Silverlight with a totally rewritten User-Interface. So let's take a closer look at it.

    TOC July 2010 - Number 15

    SilverLight: SilverLight for VFP Developers
    Venelina Jordanova and Uwe Habermann
    In the past most of VFP developers were in search of new development tools. Some of us switched to other development platforms like Java or .NET, but most VFP developers still looked for a development platform.
    Complete article available at

    VFPX: Code References
    Rick Schummer
    The Code Reference developer tool is one of those tools some developers find indispensible and other developers find less useful. Regardless of your opinion all Visual FoxPro developers have the need to do global searching of the different source code files included in their projects. Jim Nelson decided he wanted a few of his enhancements ideas implemented to make his searching more productive and is making Code References a little more powerful. This month Rick digs into the beta release of this product to show you what is new, and maybe even shed some light on some gotchas with the latest release.

    Deep Dive: Practical Uses for GDIPlusX, Part II
    Doug Hennig
    GDIPlusX is a VFPX project that exposes GDI+ to VFP applications as a set of VFP class libraries. GDIPlusX makes it easy to add new graphical abilities to your applications, allowing you to provide a fresher and more powerful user interface. This article is the second in a series that examines some practical uses for GDIPlusX.

    Know How: Understanding Business Objects, Part I
    Tamar E. Granor, Ph.D.
    I've been hearing about business objects since some time in the mid-1990's. Not long after VFP added object-orientation, people started recommending that business logic be encapsulated into a set of separate objects. Intellectually, I understood the idea, but the examples I saw never really seemed to deliver on the promise. The standard example involved a customer object with the customer data entry form calling on that business object to do things like calculate sales tax. While I could see how to build that kind of object, it didn't seem all that important.

    TOC May 2010 - Number 14

    Editorial: The Visual FoxPro Roadshow 2010
    Rainer Becker
    Dear Subscribers, thank you for your ongoing support of Fox RockX! And here comes our gift to you for supporting us: You are herewith invited to a free one-day workhop right after the South West DevCon in October!
    Complete editorial available at

    VFPX: OOP Menus
    Rick Schummer
    OOP menus are probably the second highest requested feature to be added to Visual FoxPro over the years. Microsoft never responded to this request for some reason (I am speculating it was most likely a resource issue). Doug Hennig wanted OOP menus and over the years implemented his own set of classes to accomplish this task and has posted the classes up on VFPX for others to use and help enhance.

    Deep Dive: Practical Uses for GDIPlusX, Part I
    Doug Hennig
    GDIPlusX is a VFPX project that exposes GDI+ to VFP applications as a set of VFP class libraries. GDIPlusX makes it easy to add new graphical abilities to your applications, allowing you to provide a fresher and more powerful user interface. This article is the first in a series that examines some practical uses for GDIPlusX.

    New Ways: Extending the Toolbox
    Tamar E. Granor, Ph.D.
    Several issues back, I wrote about the Toolbox, a cool tool added in VFP 8 that makes designing forms and classes much easier. Like many other VFP tools, the Toolbox was written with VFP and was designed with extension in mind. This month, I want to show you how simple some changes to the Toolbox are, so you can customize it for your needs.

    New Ways: Dating with DBI
    Toni Feltman
    In the last issue of Fox RockX I talked about three of the eight ActiveX controls that DBI Technologies have graciously provided Visual FoxPro 9.0 SP2 users for free. In this issue I am going to talk about two more controls that make working with dates a little more exciting.

    TOC March 2010 - Number 13

    Editorial: Visual FoxPro Stack Overflow
    Ken Levy
    In software, a stack overflow occurs when too much memory is used on the call stack, usually caused by programming errors, typically resulting in a program crash. In ideas, a stack overflow might occur when too many ideas, all with good intention, comprise a concept which is too far reaching and/ or unrealistic to reach its goals.
    Complete editorial available at

    VFPX: ProjectHookX
    Rick Schummer
    Projecthooks were introduced in Visual FoxPro 6, yet even today I know developers who have not implemented projecthooks in their development. Projecthooks allow you as a developer to write code that reacts to the different events of the Project Manager. One of the drawbacks of projecthooks is you only get one per project. Toni Feltman from F1 Technologies saw this limitation pain and designed one approach to working around it so developers can use more than one projecthook for any one project and calls this project ProjectHookX.

    Deep Dive: Introduction to GDIPlusX, Part III
    Doug Hennig
    GDIPlusX is a VFPX project that exposes GDI+ to VFP applications as a set of VFP class libraries. GDIPlusX makes it easy to add new graphical abilities to your applications, allowing you to provide a fresher and more powerful user interface. This article is the third in a series that provides an introduction to GDIPlusX, going through the basics of GDI+, looking at the classes in GDIPlusX, and going through various samples of how to use GDIPlusX in VFP applications.

    New Ways: OOP + Metadata = Flexibility
    Tamar E. Granor, Ph.D.
    Over the last few years, I've found many situations where data-driving code makes an application easier to maintain. But sometimes, data-driving alone can lead to repeated code and more difficult maintenance. In such cases, combining good objectoriented practices with data-driving may provide a better solution.

    New Ways: Paying it Forward
    Toni Feltman
    For years DBI Technologies,, has offered for sale ActiveX controls that could be used in various development languages and unlike many other third party vendors they had examples written in FoxPro. Now, DBI's support of the FoxPro community is even better. They have agreed to give away 8 of their active controls for free to users of VFP 9, SP2 in a bundle called the Sedna Components.

    TOC January 2010 - Number 12

    Editorial: Get on the VFPX Bandwagon
    Rick Schummer
    A group of VFPX developers/users held a bonus session during the Southwest Fox conference in October to discuss future direction of VFPX and what is needed to get the word out to other developers in the Fox Community. There were a number of good ideas shared, but there are three key details I believe need to be highlighted.
    Complete editorial available at

    VFPX: SCCText X
    Rick Schummer
    Source code control is an integral part of the development process for Visual FoxPro developers, but much of the source code elements in Visual FoxPro are stored in binary format (DBF files), which is not friendly to source code control repositories. The Alternate SCCText project and specifically the SCCText X program is the key ingredient to flattening the DBFs into text files so comparisons can be performed between versions, and merging of two changed versions can occur. Jurgen wOOdy Wondzinski leads the SCCText X project that contains what is considered the gold standard for the Visual FoxPro SCCText process.

    Deep Dive: Introduction to GDIPlusX, Part II
    Doug Hennig
    GDIPlusX is a VFPX project that exposes GDI+ to VFP applications as a set of VFP class libraries. GDIPlusX makes it easy to add new graphical abilities to your applications, allowing you to provide a fresher and more powerful user interface. This article is the second in a series that provides an introduction to GDIPlusX, going through the basics of GDI+, looking at the classes in GDIPlusX, and going through various samples of how to use GDIPlusX in VFP applications.

    New Ways: Take adventage of SQL improvements
    Tamar E. Granor, Ph.D.
    When SQL commands were added in FoxPro 2, it didn't take me long to see that they could make writing code easier. SQL SELECT, in particular, was very appealing since it made it possible to retrieve the data I needed by specifying what I wanted rather than how
    to find it.

    New Ways: Wheres the Beef?
    Jim Booth Offsite link to
    Many times I have found my self using onto a piece of software for one purpose only to find out that it has many other very valuable uses as well. It's like finding a free tool in my tool box. Well Fox RockX is just like that once you discover its web version. If you haven't yet visited please make it a point to visit there and spelunk around abit real soon. There are gems lying around that place worth their weight in gold.

    New Ways: String.Format for VFP
    Eric Selje
    If you havent used C#s String.Format() method, its a real treat. Theres nothing natively like it in VFP, but we can certainly roll our own equivalent. This will make our code easier to read and maintain. This article will show why you want to do that, and how to do it.

    VUProjectTools: Updating project files from the source control management
    Venelina Jordanova and Uwe Habermann
    To make our daily development work easier we have brought many useful little tools to life. In this article in two parts we would like to introduce two of our V and U Project Tools. This second part concerns how to update project files from the source control management.

    TOC November 2009 - Number 11

    Ken Levy
    Complete editorial available at

    VFPX: Control Renamer
    Rick Schummer
    The Control Renamer Builder project headed by long time Visual FoxPro guru Tamar Granor is relatively new to VFPX, but has been around a few years. This tool started out as a personal project to help Tamar rename controls in forms developed by other developers so the names of the controls have meaning and followed common programming standards. In this article I hope to show you how this sophisticated builder actually helps me refactor code that I have in forms and VCX-based classes.

    Deep Dive: Introduction to GDIPlusX, Part I
    Doug Hennig
    GDIPlusX is a VFPX project that exposes GDI+ to VFP applications as a set of VFP class libraries. GDIPlusX makes it easy to add new graphical abilities to your applications, allowing you to provide a fresher and more powerful user interface. This article is the first in a series that provides an introduction to GDIPlusX, going through the basics of GDI+, looking at the classes in GDIPlusX, and going through various samples of how to use GDIPlusX in VFP applications.

    New Ways: Collections instead of Arrays
    Tamar E. Granor, Ph.D.
    Every procedural programming language I used before FoxBase+ offered arrays as a way to hold an ordered collection of information. So when I started learning FoxBase+, its arrays made sense to me. Infact, the very first article I ever published in a Foxjournal was about arrays.

    Best Practices: Best Practices Part VI
    Jim Booth Offsite link to
    In this series of articles we have discussed a wide variety of issues related to the development of high quality software systems. We have investigated methods for achieving efficiency in our development efforts and attempting to reduce the risk for errors in our code.

    VUProjectTools: Beauty Studio
    Venelina Jordanova and Uwe Habermann
    To make our daily development work easier we have brought many useful little tools to life. In this article in two parts we would like to introduce two of our V and U Project Tools. The first part treats the so-called Beauty Studio.

    TOC September 2009 - Number 10

    Editorial: New kids on the block
    Rainer Becker
    And here they come: A new book about Visual FoxPro has been sent to the printer today, and printed copies will be available in September 2009. It is the rewritten version of the best-selling Visual FoxPro book of all time: Effective Techniques for Application development with Visual FoxPro 6.0 by Jim Booth and Steve Sawyer from Hentzenwerke Publishing. Jim Booth has reworked and updated it for Visual FoxPro 9.0, but it is still valid for all versions. And why do we say kids instead of kid? Because this book, Effective Application development with Visual FoxPro comes in two flavours, English and German at the same time!
    Complete editorial available at

    VFPX: Code Analyst
    Rick Schummer
    Code Analyst is a tool developed by Andrew MacNeill who is a long time Visual FoxPro guru and most recently famous for his The Fox Show podcasts ( Code Analyst is being developed to help Visual FoxPro developers recognize possible refactoring opportunities. If you are not familiar with refactoring then you need to know it is part of the development process when you recognize a smell of properly working code that could be written better. There are a number of refactoring patterns developers have detailed over the years and concepts we all recognize in our code and in other developers code. Code Analyst is here to help you find these opportunities faster.

    Deep Dive: Custom UI Controls:SFCombo Tree
    Doug Hennig
    Sometimes you need to display a list of items but don�t have much room to do so. While a combo box is usually used in this case, it doesnt display a hierarchical list or support checkboxes for items. SFComboTree fits this need nicely.

    New Ways: The Right Keys are Primary
    Tamar E. Granor, Ph.D.
    FoxPro is a relational database, that is, data is stored in multiple tables with fields that establish relationships between those tables. In order to establish those relationships, there must be a way to uniquely identify each record in a table. The field or fields that link one table to another are called keys. Over the years, the best practices for creating those keys have changed, as have the tools for doing so in VFP.

    New Ways: Test Driven Development, After the Fact, Part II
    Eric Selje
    In Part I, we reviewed what test-driven development (TDD) was, created some unit tests in Fox-Unit, and put together some trivial code to calculate a factorial to run the tests on. It�s easy stuff when youre starting with a blank slate, but how do you get started when youve already got a ton of legacy code? This article will show you how to make a couple of quick changes to Fox Unit to quickly get a suite of tests on existing code.

    New Ways: ActiveLabel Class - CmdButton Substitute for Forms with the New Look
    Pradip Acharya
    On the Web and in desktop applications, command buttons are a rare sight today. An action is launched via a highlighted or underlined text string. While VFP offers a HyperLink native class and a Click method for a label, neither a Hyper-Link nor a passive label fulfils the general need for a full featured ActiveLabel control with Set Focus, Keypress and TabStop functionality with builtin co-ordination of associated internal or external access keys, images(s), and supplementary descriptive label. Pradip Acharya presents an easy to use ActiveLabel class with rich capabilities which is not a container class. The class library in the download is self sufficient with no external dependencies. The class is also an excellent Toolbar alternative for simplicity, and can also serve as raised 3D buttons as seen in VFP task panes, with optional double line captions.

    TOC July 2009 - Number 9

    Editorial: All You Can Eat!
    Rainer Becker
    It's conference time again. This year's Prague DevCon took place, South West Fox and the FoxPro DevCon Germany and other events are coming soon. And lots of new topics and new stuff to learn for everyone. For 15+ years I have really tried to attend conferences and learn new things. And the FoxPro conferences I always enjoyed most as they are the best on earth from my perspective. I am really sorry about each one I missed for whatever reason. Surely the FoxPro DevCons are smaller nowadays, which is a pity as the number of topics you need to know about has increased each year. Therefore developers have to attend other conferences as well.
    Complete editorial available at

    VFPX: Tabbing Navigation
    Rick Schummer
    Rick covers the Tabbing Navigation project this month in his continuing series of articles on the open source project known as VFPX hosted on Codeplex. This project provides developers with a snappy dialog filled with the titles of the open windows as well as a list of standard Visual FoxPro windows available for selection. This enhancement to the Visual FoxPro Interactive Development Environment (IDE) is clean and a fast way to find a specific instance of an editor or designer window when you have numerous instances open.

    Deep Dive: Custom UI Controls:Splitter
    Doug Hennig
    Adding a splitter control to your forms gives them a more professional behavior and allows your users to decide the relative sizes of resizable controls.

    Best Practices: Best Practices Part V
    Jim Booth Offsite link to
    Last time we discussed some of the concepts that allow us to really exploit our object oriented approach to system development. This time we will pull back a bit and look at our work from a more distant perspective. We will look at the very big picture of our system design by focusing on the architectural structure of our systems.

    New Ways: Use the Toolbox!
    Tamar E. Granor, Ph.D.
    Until now, Ive focused this column on the FoxPro language, covering commands and functions. In this issue, I want to take a look at one of my favorite recent tools, the Toolbox, introduced in VFP 8.

    New Ways: Test Driven Development,After the Fact, Part I
    Eric Selje
    Test-Driven Development (TDD) is easiest when you do it right from the start. But once you�ve written a lot of code it may seem overwhelming to start testing it after the fact. But if you change any of that existing code, having tests is the best way to ensure that you don�t break any functionality. It may seem like a catch-22, but it is worthwhile to create tests on legacy code so you can use to make sure that doesnt happen.

    TOC May 2009 - Number 8

    Editorial: VFP 9 SP2 News
    Rick Schummer
    The perception and adoption of the Visual FoxPro 9 Service Pack 2 has been in a word, underwhelming. Reports of the Report Designer having some bugs and the Help file being a mess spread across the various forums and blogosphere extremely fast. Rick has good news on both fronts!
    Complete editorial available at

    VFPX: PEM-Editor
    Rick Schummer
    The PEM Editor is one of the fastest moving projects on VFPX and for this reason one of the hardest tools to write about in this continuing series. That said, this month Rick attempts to catch you up on all the development for the PEM Editor, show you some of the super cool features it has to help you be more productive, and expose some of the new functionality being developed for the fourth release of this powerful tool.

    Deep Dive: Creating Explorer Interfaces in Visual FoxPro, Part 3
    Doug Hennig
    The last article in this three-part series finishes examining a set of classes that provide Explorer-style interfaces to Visual FoxPro applications.

    Best Practices: Best Practices Part IV
    Jim Booth Offsite link to
    Last month we covered the introduction of object orientation and some of the key concepts of that programming paradigm. This month we will continue to look into the key concepts of object orientation and discover some additional mechanisms that are at our disposal within this conceptual programming approach. In addition to covering some more of the programming concepts of object orientation, this month we will introduce and discuss at some length the idea of application frameworks and see how they are constructed and what they can do for us. Obviously, in a single article we will not be building a complete application framework or even discussing a complete framework but we will cover enough about frameworks to give you a very good start on how to approach building your own and how to evaluate any of the many commercial application frameworks that are out there.

    New Ways: Handling Code that Changes at Runtime
    Tamar E. Granor, Ph.D.
    There are lots of places in VFP code where you dont know until the code is running exactly what you want it to do. Perhaps you want to let the user choose a file to operate on, or you want to run a report based on criteria specified by a user. VFP offers a number of different ways to handle code that isnt known until run-time. Knowing which one to use when affects the efficiency, accuracy, and reliability of your code, but many people stick with macros and dont use any of the other options. In this article, I'll look at each of the options and discuss where its appropriate.

    New Ways: Use FastNoData to drastically improve form load times
    Mike Yearwood
    Forms that take too long to load are a cause of frequent complaints. Heres a technique that can dramatically reduce form load times. Ive seen anywhere from 8 to 4375 times faster. My most complex form went from loading in a range of 8 to 10 seconds, down to a consistent 2.2 seconds.

    TOC March 2009 - Number 7

    Editorial: Thanks for the Memories (and all the code)!
    Doug Hennig
    As they discuss in this issues article, Andy Kramek and Marcia Akins have written their last Kitbox column. Doug offers a tribute to Andy and Marcia to celebrate their years of contribution to the FoxPro community.
    Complete editorial available at

    VFPX: Fox Tabs the VFP IDE
    Rick Schummer
    Fox Tabs is relatively new to VFPX, but has been in development for years. In October 2008 project manager Joel Leach dusted off the initial development started several years ago by Craig Bailey and Scott Scovell and began moving the tool forward. This month Rick will discuss this innovative approach to enhancing the VFP IDE and explain how he uses it to enhance his productivity.

    Deep Dive: Creating Explorer Interfaces in Visual FoxPro, Part 2
    Doug Hennig
    In the first part of this three-part series, Doug presented a set of classes that form the basis of an Explorer-style interface. This article looks at more of these classes.

    Kit Box: So Long and Thanks for all the Fish!
    Marcia Akins and Andy Kramek
    For more than 10 years Andy has been writing the Kitbox Column. He was first published, with co-author and long-time friend, Paul Maskens, in the April 1998 edition of Fox Talk. Andy and Paul wrote some 42 articles together in the three and a half years of their collaboration and the style of the column as an interchange between two peers began to gradually evolve. When Paul retired from the column in September 2001, Marcia jumped in and took over as Andys partner in the column, as she is in real life. Together they have written more than seventy articles together and, under their collaboration, the back-and-forth style of two real-life developers discussing a problem of mutual interest evolved further until it truly has become their unique signature. Andy and Marcias writings are instantly recognizable, and their style has even been imitated (the sincerest form of flattery even if it was not very successful). However, like all things, this too must come to an end and this is the final offering from Andy and Marcia.

    New Ways: The Scope of Things
    Tamar E. Granor, Ph.D.
    When I started using FoxBase+, there were two kinds of variables available: public and private. If you did nothing, any variables you used in code were private. Since that was the most restrictive scope available, it was easy to get into the habit of not declaring variables unless they were public.

    Best Practices: Best Practices Part III
    Jim Booth Offsite link to
    In the last article of this series we covered the concepts of encapsulation and cohesiveness to understand how to construct routines that have a solid internal structure and we discussed coupling to investigate the issues involved with constructing routines that play well with others. Our first venture into this best practices series covered what constitutes a routine and why we care about routines at all.

    TOC January 2009 - Number 6

    VFPS: Visual FoxPro Stack
    Ken Levy
    The evolution and next phase of Visual FoxPro has essentially been transferred from Microsoft to the FoxPro community. Visual FoxPro will evolve, but the results of its evolution depend on the efforts within the FoxPro community. VFPS (Visual FoxPro Stack) can become an important part in the future and perception of Visual FoxPro starting in 2009 and into the next decade.
    Complete editorial available at

    VFPX: Using Desktop Alerts
    Rick Schummer
    The Desktop Alerts provide you with another common mechanism to deliver informational messages to the users while your application is running. This month in Rick�s continuing series on VFPX deep dives, he takes a look at the Desktop Alert project on Codeplex, and demonstrates why this control might help you get rid of a few WAIT WINDOWS in your applications.

    Kit Box: Take it up with Management
    Marcia Akins and Andy Kramek
    All Visual FoxPro applications rely on data and in VFP we have various ways of handling sets of data. We may use tables directly, views, predefined cursors, or cursors generated on the fly by SQL queries. However, VFP doesnt have a command that will unconditionally create or open and make current a data set irrespective of the type. In this months column Andy and Marcia discuss the creation of a class that will do precisely that thing.

    New Ways: From Type to Type
    Tamar E. Granor, Ph.D.
    Changing data from one type to another is a common requirement. In older versions of VFP, you had to know a veritable cornucopia of functions to handle the various possibilities. A few recent additions make type conversion easier.

    Best Practices: Best Practices Part II
    Jim Booth Offsite link to
    Last month we started this series with a little history and some discussion of basic programming practices. We discovered the ideas of routines and modules in our application development and we discussed the impact of designing for expansion to be able to adapt to future requirements. This month we will be digging deeper into the construction of our code and the concepts that we need to understand to realize the benefits of well designed system development.

    Extend Excel with VFP!: Using a Visual FoxPro ComServer with Excel (and other VBA applications)
    Rainer Voemel
    Most programmers that use VBA are non-IT employees usually, with a marketing, finance, or logistics background trying to automate some reporting tasks. Usually this starts with an Excel spreadsheet and the use of ODBC. With ODBC the user can retrieve results from database queries and create some powerful reports. However, there might be some surprises that will make the user look for a different solution. In my case this was a bug in the VFP ODBC driver when I was using the default settings. The setting Fetch data in background caused the ODBC driver to hang after creating a lot of reports. In my case this was creating a personalized report for roughly 150 recipients. Sometimes after about report 92 the process would hang; at other times this would be around report 102, etc. This made me want to use a VFP ComServer instead of ODBC. After unchecking the ODBC setting Fetch data in the background, the problem vanished, but I now understood the potential benefits of using a ComServer. In addition, the ComServer now has all the SQL features of Visual FoxPro 9, whereas the ODBC driver has not been updated for several years. The ComServer I am using now has about 150 methods. This article describes how to use a Visual FoxPro Comserver with Microsoft Excel.

    TOC November 2008 - Number 5

    VFPX: Using the BalloonTip
    Rick Schummer
    The balloon tip control is a nice way to communicate information to the users while they are interacting with the user interface of the application. This month in Rick�s continuing series on VFPX deep dives, he takes a look at the ctl32_BalloonTip control found in the ctl32_StatusBar project up on Codeplex.

    Deep Dive: Creating Explorer Interfaces in Visual FoxPro, Part 1
    Doug Hennig
    Explorer-style user interfaces are among the most popular for today�s applications. However, working with and integrating the controls necessary to implement an explorer interface can be challenging. This first of a multi-part series presents a set of classes and techniques that makes short work of developing explorer interfaces for your applications.

    Kit Box: A Moving Experience
    Marcia Akins and Andy Kramek
    One question that seems to pop up again and again in various on-line forums is how to create a grid with mover bars that will allow the users to re-sequence the records in the same way that they can in a list box. This month Andy and Marcia discuss how to implement this.

    New Ways: Breaking Up is Not Hard to Do
    Tamar E. Granor, Ph.D.
    In my last article, I looked at techniques for reading and writing text files. Once you�ve read a text file into memory, or perhaps created a long string in some other way, its not unusual to need to break it up into lines, or words, or based on some other criteria. Prior to VFP 6, you had to use different approaches depending on the criteria for parsing. With the introduction of the ALINES() function, though, most simple parsing has been reduced to a single function call.

    Best Practices: Best Practices Part I
    Jim Booth Offsite link to
    Programming in Visual FoxPro is not really any different than programming in any other language. Programming languages all have differing syntaxes and the commands and functions vary from one to the other, but the underlying concepts of good programming are universal across all languages. These underlying concepts of good programming are referred to as the Best Practices. In this article series I will be discussing the Best Practices in programming with Visual FoxPro. The Best Practices are the same for all languages; consequently, the only thing that will make this series about Visual FoxPro will be the example code.

    TOC September 2008 - Number 4

    Intro: Career Investment 101 - How can I become a better developer?
    Rick Schummer
    Rick gets asked the question: how can I become a better developer? He explains how he attempts to stay at the top of his game in software development.
    Complete editorial available at

    VFPX: Putting the OutlookNavBar to use
    Rick Schummer
    The Microsoft Outlook user interface was all the rage a few years ago. The last two versions of Outlook include the navigation bar with separate panes for you to manage email, calendar, contacts, tasks, etc. Developers scrambled to duplicate this interface in VFP applications. Emerson Stanton Reed first created the Outlook2003Bar. This month Rick is going to show you how to implement the most current OutlookNavBar and demonstrate some new flexibility included in the July 2008 release.

    Deep Dive: Practical Uses for XML, Part 2
    Doug Hennig
    In part 1 of this two-part article, Doug examined the basics of XML: what it is, how its structured, how to create XML, and how to parse it. This article focuses on why XML is useful and shows some practical examples of how he�s used XML in various applications.

    Kit Box: A program is trying to automatically send e-mail
    Marcia Akins and Andy Kramek
    Sending E-mail from within an application is often more than a luxury, and there are many ways of doing it in Visual FoxPro. Outlook automation is a common approach and works well, but the version of Collaboration Data Objects that was introduced with Windows 2000 offers a more flexible and extensible approach that allows you to generate E-mail without needing a specific E-mail client installed, or even a work-around for the security patch introduced in Office 2000 SP2. In this months column Andy and Marcia show how to implement CDO in Visual FoxPro.

    New Ways: Working with text
    Tamar E. Granor, Ph.D.
    VFPs tools for working with text have improved as the importance of text files has grown. In a world where we need to parse and create HTML, XML, and other text formats, using the best VFP has to offer makes the job a lot easier.

    TimeFrame Class - Autoset Past or Future Date Range in Reports
    Pradip Acharya
    Many financial and forecasting reports require a start date and an end date to be entered in the Report Setup interface. This can be a past or a future time period. A sales summary for the last completed Quarter or a preventive maintenance forecast for the next month are typical examples. It�s not easy for the user to figure out the limiting dates in the first place and secondly, users in general are averse to typing in dates in the stipulated format. The TimeFrame class was created to make it easy to autoset a date range with a click. Select any past or future time period from a dropdown list and the two dates are filled in programmatically. The user can then override either date or select the Open Dates option to enter a date range of choice.

    TOC July 2008 - Number 3

    VFPX: ctl32_StatusBar Easy to Implement
    Rick Schummer
    The VFPX project is a set of replacement controls designed to improve the user interface experience of your applications. In this issue of Fox RockX, Rick shows you how simple it is to implement a modern replacement for the Visual FoxPro native status bar.

    Deep Dive: Practical Uses for XML, Part 1
    Doug Hennig
    XML can be a great way to store some types of data or transfer data from one application to another. In the first of a two-part article, Doug discusses what XML is and how to use it.

    New Ways: Working with work areas
    Tamar E. Granor, Ph.D.
    Although we have had techniques that let us ignore work area numbers and letters for many versions, some developers still write code that addresses work areas directly. This month, I will look at how to write code without worrying about work area letters or numbers, and how to depend as little as possible on the currently selected work area. The result is better code that is easier to write and maintain.

    Kit Box: Doing a PROPER job
    Marcia Akins and Andy Kramek
    Correctly formatting blocks of text is a problem that we all have to deal with from time to time. While VFP has functions for forcing text to either upper or lower case, its handling of mixed case text suffers from a number of shortcomings that make it essentially unusable in all but the simplest of circumstances. This month Andy and Marcia are discussing the issues surrounding the task of formatting text and come up with a class that does a better job of handling mixed case text.

    Vista: Displaying form borders in Windows Vista
    Uwe Habermann and Venelina Jordanova
    If you are running VFP 9 applications in Windows Vista, you will know the problem. Forms with a Border Style setting other than 3 sometimes appear without a form border. In principle this bug shall have been fixed with VFP 9 SP 2. But then why are the forms often displayed incorrectly?

    Events: The DevCon Germany 2007 from a visitors perspective
    Boudewijn Lutgerink
    While visiting the DevCon Germany last year I took the chance to listen to Steven Blacks sessions about niche markets and So fox is dead, now what?

    TOC May 2008 - Number 2

    New Ways: Use the right loop for the job
    Tamar E. Granor, Ph.D.
    Learning to use the right loop for the situation will make your code faster and more readable. Both of those goals are worth breaking old habits and building new ones. Happy looping!

    New Ways: Stroking the Keys
    Jim Booth Offsite link to
    The mouse is commonly used for many tasks in windows. In real heads down data entry operations it is often more efficient for the users to keep their fingers on the home row. To accomplish this, it is necessary to provide keystroke equivalents for mouse actions like selecting an item from a menu or clicking on a button, even access to functionality that may not be represented by any menu option or button.

    Deep Dive: A Generic Import Utility, Part 2
    Doug Hennig
    Part 1 of this two-part series presented a set of classes making up a generic import utility you can add to your applications to provide import capabilities from a variety of data sources. Part 2 focuses on the user interface components.

    Kit Box: All a matter of form
    Marcia Akins, Andy Kramek
    This month Andy and Marcia create a class to handle the creation of word documents from templates using named Bookmarks and Tables to indicate where data should be inserted. The class was originally designed for use with Office 2003, but will work without modification in Office XP and Office 2000. It will also work in Office 2007 but, in that version, creates the new ".docx" file type by default.

    VFPX: Property / Method Dialog Replacements
    Rick Schummer
    In the first issue of Fox RockX, Rick provided you an overview of VFPX and the Codeplex Web site where VFPX projects are established and maintained. In this issue he is starting a series of deepdives into the various projects of VFPX with the intent of exposing the productivity you can gain using VFPX tools, and enhance your applications using the various VFPX components. First up are two of the tools he uses numerous times a day: the New Property and Method dialog and the Edit Property/Method dialog replacements.

    TOC April 2008 - Free ADS issue

    Advantage Database Server for Visual FoxPro Developers
    Doug Hennig
    Advantage Database Server is a full-featured, high-performance client/server database engine. Interestingly, it can use Visual FoxPro DBF files as its data store and provides a number of benefits over accessing these files directly. This article introduces Advantage and discusses how to access it from VFP applications.

    TOC March 2008 - Number 1

    VFPX: Open Source Extensions
    Rick Schummer
    In 2007 I presented a session on VFPX at four Visual FoxPro Conferences in the United States and Europe. During each of the sessions I asked, How many of you have heard of VFPX? Approximately 10 to 15 percent of the people sitting in the room raised their hand. Since I believe VFPX is a significant part of the future of Visual FoxPro, this is a disturbing revelation. The goal of this series of articles is to introduce you to the VFPX open source project, and to do some high level overviews of the different tools and components, as well as some deepdives to show how they can be used in your day-to-day development of Visual FoxPro solutions. This article will describe VFPX, provide a short history of this project, show you where on the Internet you will find VFPX, and provide an overview of the Web site......

    Deep Dive: A Generic Import Utility, Part 1
    Doug Hennig
    Data entry forms arent the only way your users want to put data into their applications. Often, important data is stored in other applications, so you need a way to import that data into your application. This article, part 1 of a two-part series, presents a generic import utility you can add to your applications to provide import capabilities from a variety of data sources......

    New Ways: Parsing und Building File and Path Names
    Tamar E. Granor, Ph.D.
    I started using FoxBase+ nearly 20 years ago. In the evolution from that remarkably able product to Visual FoxPro 9, hundreds, perhaps thousands, of new elements have been added to the FoxPro programming language. Each new version has introduced not only new capabilities, but new ways to do old things.

    Kit Box: Managing Global Variables
    Marcia Akins, Andy Kramek
    The use of Public Variables in FoxPro Applications has long been regarded as poor design. However there are many situations in which a variable that can be accessed, or updated, from anywhere in the application is really the only feasible way of handling things. In this article, Andy and Marcia design a data driven "Variable Manager" class that can be either be instantiated directly, or can be attached to an application object, to manage variables that need to be globally available...

    Blog: Advantage Database Server V9.0, available soon
    Andy Kramek
    Sybase Anywhere have been working on a Visual FoxPro compatible version of the Advantage Database Server for some time and, just before Christmas, the long-awaited Version 9.0 was released in Beta. You can download the Beta version (time limited until mid of March, beta license expiring on March 28th) from here:....

    August 17, 2015 06:41 AM


    Straw Men that Deserve to be Torched

    This page lists some of the fallacious arguments that usually begin with the words "Microsoft will never seriously market Visual FoxPro because..." For your added convenience, there are bookmarks to each of the following numbered sections. For example, this link points to Bogus Argument #1.

    August 17, 2015 06:40 AM


    A place to list VFP apps you've written in various arenas of industry. Brag about it and give reference to yourself so others can get in touch with you.

    August 17, 2015 06:36 AM

    Alex Feldstein


    Documentation requires rights in SSRS - but who has them?

    Just as I found when I arrived in the school district, Dominican has made good use of SSRS self-service reporting before I got there.  The difference is that, this time, instead of hundreds of hand-me-down reports, I found over a thousand.

    Since a lot of my job is going to involve moving some databases around, I had to figure out where the dependencies on these databases might be buried -- and that included embedded SQL queries in a thousand production RDLs.

    The first step was obviously to document them and figure out what reports used what databases and tables.  I whipped out  xmlRSDocs, which includes a handy-dandy report and some fancy parsing of RDL command texts to handle just this requirement, and got to work.

    Everything was just perfect, until I set up an SSIS package to update XMLRSDocs' cached RDL information regularly.


    While I could run the DTSX locally, with my DBA privileges, the identity that needed to run the package on a schedule couldn't run it.  Why not?

    XMLRSDocs trolls through all the SSRS artifacts recursively, using the SSRS Web Service API, reads in every RDL and parses it into a useable form for extrapolating various kinds of information.  But the agent identity didn't have rights to every single RDL; various SSRS folders have been assigned to various departments and access has been appropriately limited to them.

    You might ask, "why not just assign the agent identity to an appropriate domain group, so that it will have rights to all the RDLs?"  Sigh.  In the past, IT folks seem to have done this by using the built in Administrators group.  There is no way I'm giving this identity membership in that group.

    Obviously, I'll be getting such a group set up, but the task of finding out what folders, data sources, reports, and other SSRS catalog types (hold that thought) have been explicitly needed so that the group needs to be assigned privileges to them, still remains.

    How can we do it?

    It's all very well to say "we'll use XMLRSDocs to find out", but that's just it.  XMLRSDocs can't find out anything about items to which it doesn't have permissions.

    In fact, I never worried much about how to document SSRS permissions before and never bothered to look at how I would do that.

    We're going low-level

    It's also all very well for the SSRS team -- much as I respect them -- to say that they don't document the Reporting Services base tables.  Somebody I respect incredibly highly, in fact, has stated that we shouldn't even think about catalog types from a database level; we should always be getting all this information from the SSRS web service API.

    That's nice, but when the problem is that my identity doesn't have rights to look at various objects I can't find out about their permissions.  I'm sure this is by design, but sometimes you've got to do what you've got to do.

    So I buckled down and took a look at some tables in the SSRS db that I'd never paid attention to, before.

    It didn't turn out to be too bad -- and actually you may find this useful, too -- so, here you go.  The relationships were not nearly as wacky and odd as they could have been.

    IF @HasPermissions = 1
       OR replace(ltrim(rtrim(@UserName)), '(any)', space(0)) = space(0)
    -- we're going to look at what permissions somebody, or everybody, has
       SELECT DISTINCT cat.Path
          ,cat.Type AS Type
             WHEN @IncludeRoles = 0
                THEN space(0)
             ELSE r.RoleName
             END AS RoleName
       FROM PolicyUserRole AS pur
       INNER JOIN Users AS u ON pur.UserID = u.UserID
       INNER JOIN Roles AS r ON pur.RoleID = r.RoleID
       LEFT JOIN CATALOG AS cat ON cat.PolicyID = pur.PolicyID
       WHERE (
             (@UserName = '(any)')
             OR (u.UserName LIKE '%' + LTRIM(RTRIM(@UserName)) + '%')
          AND (cat.Type IN (@CatalogTypes))
          AND (
             (@CatalogItemPath = '(any)')
             OR (cat.Path + cat.NAME LIKE '%' + LTRIM(RTRIM(@CatalogItemPath)) + '%')
       ORDER BY cat.Path
    ELSE -- we're going to look at permissions some set of folks DO NOT have... 
       SELECT DISTINCT cat.Path
          ,cat.Type AS Type
          ,NULL AS UserName
          ,NULL AS RoleName
       FROM PolicyUserRole AS pur
       INNER JOIN CATALOG AS cat ON cat.PolicyID = pur.PolicyID
       LEFT JOIN Users AS u ON pur.UserID = u.UserID
          AND (u.UserName LIKE '%' + LTRIM(RTRIM(@UserName)) + '%')
       WHERE (cat.Type IN (@CatalogTypes))
          AND (
             (@CatalogItemPath = '(any)')
             OR (cat.Path + cat.NAME LIKE '%' + LTRIM(RTRIM(@CatalogItemPath)) + '%')
          AND u.UserName IS NULL
       ORDER BY cat.Path


    We're going to run a report

    Big surprise, it's easier to analyze this stuff when you can see it, so I tarted up the query you see above with a couple of nice parameters.  You can ignore them if you're not interested in the same exact problem that I was, but basically I wanted to be able to see all objects to which somebody did, or did not, have access to, with the first usage being which objects the agent identity could not "see".

    SSRS Permissions report

    What's so important about catalog types?

    I'm figuring I'm going to run this report, or these queries, first for folder type SSRS artifacts only.  If we assign privileges to the new group just to those folders, chances are it will fix 90% of the objects of any type housed within them, which will inherit.  Then I can run the report again for all the other types and quickly clean up the stragglers.

    So, FWIW, the report has a second dataset for the picklist, which I also use in the report body via the Lookup function I talked about last time:

    SELECT 1 AS Value, 'Folder' AS Name UNION
    SELECT 2 , 'Report' UNION
    SELECT 3 , 'Resource' UNION
    SELECT 4 , 'Linked Report' UNION
    SELECT 5 , 'Data Source' UNION
    SELECT 6 , 'Report Model' UNION
    SELECT 9 , 'Report Part' UNION
    SELECT 8 , 'Shared Dataset' UNION
    SELECT NULL , 'System'

    Open Sesame...  

    What do you reckon?

    I'm thinking that's so crazy it just might work as some other people I respect very highly, and who are not on the reporting team, have always said.

    Hmm.  I hope HBO doesn't make any changes to that particular ethos.

    August 17, 2015 12:17 AM

    August 16, 2015

    Alex Feldstein

    How people come together and create a website for Bernie Sanders without being asked, or paid

    ​How More Than 100 Strangers Came Together to Launch a Viral Bernie Sanders Site

    From the site:
    The creators of are regular people who individually, and now collectively, are inspired by Bernie Sanders’ campaign for presidency of the United States. We span the socioeconomic and political spectrums, and are located across the country — and globe!
    We came together because we wanted to make clear his record on and plans to address the most important issues affecting our communities, nation, and planet. Bernie has an extensive record in public service, so this project turned into a rather monumental group effort that’s mobilized over 125 unpaid volunteers (and counting).

    You have to check out the site. It's very well done:

    (via Ole Olson)

    by Alex Feldstein ( at August 16, 2015 08:32 PM

    August 15, 2015



    Interesting that this topic has been here for years, yet there isn't one for Google Band Wagon. I think it's indicative of how many people see Microsoft as evil, seemingly willy-nilly killing off products, yet Google can do no harm.

    The topic being here for years is the point of a Wiki.
    Google killing products has as much relevance as Procter & Gamble killing products. None. Visual FoxPro is owned by Microsoft, not Google.
    This page is similar to VFP Version Property Concordance. It's just a list. Bill Anderson

    So, how is this list revlevant to VFP? Really, the death of Microsoft Bob, At Work, VisualJ++, MSN Music and almost everything on this list have nothing to do with VFP.

    If it's supposed to be relevant to VFP, then I it should contain only products that are relevant to VFP. What you're saying is the same as "I own a Chevy and now GM killed Saturn". They have no relation to each other. What does Bob, Ultimate TV, OneCare, Money, or others have to do with VFP? The first line that describes this pages says "The place where once highly touted technology goes to die." Google has had lots of "highly touted technology". VFP Version Property Concordance is relevant to VFP. But, I see someone has added a Google Band Wagon page. Kudos to that person.

    The Microsoft bandwagon graveyard
    The place once highly touted software technology goes to die.

    Sung to the tune of "Another One Bites the Dust" (Wyclef Jean / Queen)

    Sung to the tune of "Another One Bites the Dust" by Queen, covered by Wyclef Jean apparently. -- Alan Bourke

    Remember the busy part: "And another one's gone and another one's gone and another one bites the dust . . ." Great throughput, eh?

    August 15, 2015 10:44 AM


    This is the Y2K solution as of November 15, 1999 from Christof Lange.
       * The Y2K problem - Get it Done!
       * Many thanks to Norm Weil, Tom Rombouts,
       * Gerard O'Carroll, Brad Schulz and Peter
       * Harris for contributing to this solution.
       * You have been fantastic!
          #Define Y2K_ROLLOVER  1944
          #Define Y2K_INVDATE   "Invalid date."
          #Define Y2K_INVINPUT    "Invalid input"
          Set Talk off
          dDate1 = date()
          @ 1,1 Say "Here you can't enter 02/29/00: ";
             Get dDate1
          dDate2 = date()
          @ 3,1 Say "and here you can!            : ";
             Get dDate2 ;
             When Y2K_When() ;
             Message Y2K_Mess() ;
             Valid Y2K_Valid()
          Set Century on
          @ 7, 1 Say "You entered " + DToC(dDate2)
       * pass #1:
       * get the date that the user entered.
       Procedure Y2K_1

    August 15, 2015 10:43 AM


    An entity is "a real world thing that you model." -- Carl Karsten

    From Fleming and von Halle, "Handbook of Relational Database Design", Addison - Wesley ISBN: 0-201-11434-8 page 88, "These major objects are called entities. They may be real, tangible items (e.g. students) or more abstract concepts (e.g. a department)."

    From C.J.Date, "Relational Database Selected Writings", Addison - Wesley ISBN: 0-201-14196-5 page 424, "The term entity is used to mean any distinguishable object - where the object in question can be as concrete or abstract as we please."

    August 15, 2015 10:35 AM


    Polymorphism: definition #1 is a fundamental principle of Object Oriented Programming. Polymorphism comes from Greek, Poly meaning "many" and morph meaning "forms". One of the most compelling uses of the principle is when different classes use the same name for properties and methods that they each implement quite differently. Typical examples include:

    - application document types each having a Print() method
    - graphic components each having a Draw() method

    There are two types of polymorphism, Inherent and Ad Hoc. Inherent polymorphism addresses all subclases inheriting the same set of properties and methods from the respective superclass. Adit's Hoc polymorphism addresses different methods with different code but having the same method name.

    Polymorphism promotes the creation and adoption of software "standards". Think about UPS software and how it might work. First imagine a world where all application developers anticipate trouble, so they create functions in their API where they can be told that a power down event is pending, and they save files (without asking :)) and terminate cleanly. The only problem is that each application has its own API with different names. So now UPS vendors compete by seeing which one can compile the largest database of shutdown commands for every application known to personkind. Great. But wouldn't you rather have them compete on other attributes, like battery technology, perhaps?

    With Poly Morphism at the center, a solution to this problem is pretty obvious. You create a standard protocol for UPS services. Possibly this is even part of the operating system. For applications to be compliant, they must all respond to a standard set of API calls. UPS vendors don't have to know anything about what types of application software might be running.

    August 15, 2015 10:26 AM


    The ActiveX Control Showcase is a series of columns written in FoxPro Advisor since March 1998. They cover pretty much any and all ActiveX controls that developers might find interesting or useful. The column's author is Andrew MacNeill .

    August 15, 2015 10:22 AM


    West Wind Web Connection, made by West Wind Technologies, is a one-stop Web development tool for Visual FoxPro. This sophisticated tool can create powerful and scalable Web applications quickly and easily.

    Features include:
    • Powerful ISAPI or .NET managed extensions and server manager
    • Object Oriented Visual FoxPro server framework
    • Easy to use classes for managing server input and generating server output. Object interfaces and names compatible with ASP.
    • Raw HTTP output generation from code for most control and performance
    • Several frameworks to help generate HTML
    • Web Control Framework (ASP.NET like), Templating (MVC like), Scripting (PHP like)
    • All framework markup can use FoxPro code
    • AJAX and JSON service support for building REST services
    • XML support. Create POX services or WSDL based SOAP services
    • Client side tools to access Web Content over HTTP from VFP client applications.
    • Several client examples demonstrating building thin client XML applications talking to Fat Web Connection XML services.
    • Extensive remote server management features. Servers run as controlled COM objects in very efficient pool that is much faster than comparable VFP COM objects running in ASP. Pool is managed to allow online starting and stopping, adding of servers. You can even update code in real-time remotely without any server shutdowns simply by uploading new binaries. Crash recovery and timeout protection of servers make for bullet proof installations.
    • Extensive getting started guides, examples and fully searchable HTML Help File - the best in the business.
    • Full source code to message board application.
    • Online Web Store sample application available separately. Get your e-Commerce apps off the ground quickly.
    • Everything comes with Visual FoxPro source code to learn and extend the framework if necessary.
    Pricing: $399

    Web site and free demo:

    Message Board:

    August 15, 2015 10:19 AM

    Alex Feldstein

    August 14, 2015

    FoxCentral News

    Html Help Builder 5.0 Beta Available

     West Wind Technologies has released a beta of West Wind Html Help Builder 5.0. Help Builder is a documentation solution that makes it easy to create any kind of documentation for applications, FAQs, references and more. Version 5.0 is a major update that introduces a new editor and a much richer editing experience as well as-you-type spell checking. Help Builder also adds the popular Markdown format for quicker text input and the ability to share text more easily. There are also new, cleaner and simpler templates for output creation and an overall overhaul of the user interface. Help Builder is available as shareware, and registered users can upgrade to the new version.

    by West Wind Technologies at August 14, 2015 08:18 AM

    Alex Feldstein

    August 13, 2015

    Alex Feldstein

    August 12, 2015

    Alex Feldstein

    August 11, 2015

    Rick Strahl's Web Log

    Upgrading ASP.NET 5 Projects between Beta Versions

    Upgrading ASP.NET 5 projects from beta to beta has not been pretty. The beta 6 update has been one of the easier ones to work through, but still there's a process involved. In this post I describe the steps I tend to go through for each new beta release.

    by Rick Strahl at August 11, 2015 07:48 PM