A week ago we released a new version of the West Wind Internet and Client Tools. The new version bumps the Client Tools to v6.10 which is the same version as Web Connection and with it brings all the improvements originally published in Web Connection to the Client Tools.
For those of you that don't know West Wind Client Tools, it's a general purpose library for Visual FoxPro that provides a large variety of utility functionality for FoxPro developers. There are a number of libraries for access Internet Functionality including a very rich native HTTP client (no COM), an capable SMTP client, FTP and SFTP classes. There are tools for data access like the wwSql class and the wwBusiness business object classes. There are a number of general purpose helper function libraries in wwUtils and wwAPI that provide a boat load of useful every day functions. There's a powerful JSON parser, a REST Service client, an XML Parser and much more.
To find out more:
New wwSFTP Class for SSH based FTP
There's a new wwSFTP class that provides secure FTP (SFTP only, not FTPS) to connect to SSH based SFTP servers. The class inherits from wwFTP so can be interchangeably with wwFtp based FTP code. This has been a commonly requested feature.
wwDotnetBridge::InvokeMethodAsync() and wwDotnetBridge::InvokeStaticMethodAysnc()
You can now execute any .NET methods both on an instance and static asynchronously which means the .NET calls happen in the background while your FoxPro code continues on the next line of code. The
InvokeMethodAsync()works the same as the synchronous
InvokeMethod()call, but adds an optional callback object parameter you can use to capture
OnError()callbacks that notify you of completion of the async operations. If no callback provided the method is essentially 'fire and forget'.
You can now create a new instance of wwHttp to be used in the wwJsonSerializer implementation when making service calls. You can create a new instance of wwHttp that is pre-configured with Authentication, headers etc. and pass it to this method before a service call.
wwEncryption::ComputeHash() adds HMAC Hash Algorithms
wwEncryption::ComputeHash() adds HMACSHA1, HMACSHA256, HMACSHA384 and HMACSHA512 algorithms. HMAC algorithms use complex salting cycles to add complexity and delay to generated hashes using an industry standard and repeatable algorithm.
Switch to Markdig Markdown Parser
The client tools include a Markdown parser using the simple Markdown() function or the MarkdownParser class. v6.10 switches the Markdown parser to use the MarkDig .NET Markdown parser which natively supports Github flavored markdown, automatic link expansion and many Markdown extensions, including support extra emphasis (strikeout, sub/superscript etc.), emojis, tables and more.
This new function generates unique string IDs based off a full or partial GUID value. Allows specification of a size that determines the size of the generated string between 15 and 32 characters where 32 is a full GUID. The id is spread out over the whole alphabet, uses upper and lower case characters to make it require less characters for uniqueness. The minimum 15 characters is usually enough for global uniqueness.
String utility like ALINES() to return a collection of strings that allows you to specify a length to break lines at. Uses ALINES to capture lines and splits lines longer than specified via MEMLINES(). Useful for any code parsing that needs to ensure string literals don't exceed 255 characters in length.
wwUtils GetWords() Function
Added a new function that parses a string of multi-word text into a collection of words.
Function that returns a human readable string date or time (English only) such as just now, 10 minutes ago, 3 hours ago, yesterday. Anything over a year is turned into a short date: May 1, 2015.
wwUtils::FormatValue and wwUtils::FormatString
Two methods that use .NET string formatting to allow you to use sophisticated string formatting in FoxPro. Easily create nicely formatted date strings, MIME or ISO date formats, non-padded number strings formatted to decimal places with automatic localized formatting.
wwDotnetBridge now supports TLS 1.2
wwDotnetBridge now sets the default HTTPS protocols settings to allow for SSL3, TLS1, TLS11 and TLS12. The default previously only allowed for SSL3 and TLS1. Overrides
ServicePointManager.SecurityProtocolon initial load of the .NET runtime. This affects any .NET API called that uses HTTP including Web service calls.
< %: expr % > for Templates and Scripts
Client Tools includes a script and template parser using ASP style syntax so you can load and evaluate scripts from disk using alligator tags. Scripts and templates can now use automatic HTML encoding by using
< %: expr % >instead of
< %= EncodeHtml(expr) % >(spacing added for rendering). This makes it much easier to create XSS safe string output without more verbose syntax.
Explicit function that can be used to compile a single ASP Script page using the same mechanism used to run the page.
Breaking Changes for v6.10
- Add Markdig.dll to your Distribution for Markdown Parsing
The new Markdig Markdown parser requires a new DLL to be used. If you're using the
MarkdownParserclass or the
Markdown()function, make sure to update to this DLL. You can remove
Lots of small, incremental changes
A lot of the new features in this version deal with small incremental improvements to the general purpose library that West Wind Client Tools represents.
There's a bit more of a shift to take advantage of .NET features in FoxPro, because these days .NET installation is no longer an issue as every machine since Windows 7 ships with a version of .NET 4.x. There are a lot of nice opportunities to provide helpers unobtrusively through .NET and that is likely to continue going forward.
A lot of the features that were added over the last few versions were primarily user feedback driven from requests collected here on the message board. So if you use the Client Tools or any other West Wind Product for that matter keep the feedback coming - we care and want to continue to improve these products and your participation on this forum via feedback and questions has a direct impact on that.
So keep the feedback coming,
+++ Rick ---