What's New - December 2015


December 26, 2015 - Happy New Year 2016!

Our best wishes to you and your family for the upcoming NEW YEAR 2016.


We're looking forward to serving you in 2016!


Gus Creces
The Clarion Handy Tools Page
December 26, 2015


December 25, 2015 - Merry Christmas!

Wishing you all the best for Chistmas 2015!


Will talk to you all next week.


Gus Creces
The Clarion Handy Tools Page
December 24, 2015


December 21, 2015

From Our Change Notes For Build 19D.02.00

Changed the SMTP configuration dialogs to conform more to the approach taken in the CHTSNAPSMTP.EXE situation via the HNDSNAPCALL Class. The config location (in the registry) of any pop-up dialog in HNDCONFIG.CLW consists of two parts.

For example: In HNDMAILSMTP.APP the first part is set by calling HNDCONFIG.SetDefaultConfigLocation() and the second part is a passed-in value to to the dialog via the "STRING xRegID" parameter. This then creates a Registry Location string such as the following: CURRENT_USER/Software/CHT/chtconfigzero/.

The "CHT" is set by calling HNDCONFIG.SetDefaultConfigLocation('CHT'). The "chtconfigzero" location is set via the passed in "STRING xRegID" value when calling the SMTP configuration dialog function, CONFIG.DisplayMailSystemAuthInterface() or CONFIG.GetMailSystemAuthDefaults() or CONFIG.SetMailSystemAuthDefaults().

The HNDSMTP class has a derived function called HNDSMTP.GetSmtpAuthDefaults() which takes no parameters. In this case the xRegID value is determined by a call to HNDSMTP.SetSmtpRegID(STRING xRegid).

This allows the HNDSMTP class to always configure to the correct location once the two parts of the Registry Location are determined by early calls to SetDefaultConfigLocation() and SetSMTPregID().

This app uses CHTSNPASMTP.EXE a C# "Snap-In" to send SMTP mail. CHTSNPASMTP.EXE configures to registry location "HKEY_CURRENT_USER/Software/cht/chtsnapsmtp and registration of CHTSNAPSMTP.EXE can be done using the HNDCONFIG class as is the case with HNDZIPNEMAIL.APP using function SNAP.SnapConfigSmtp() from the HNDSNAPCALL class, or it can be done passing on the DOS commandline CHTSNAPSMTP.EXE the --config parameter. Both configuration dialogs store to the same location in the registry.

This app uses C# DLL HNDMAILNET.DLL (a COM-Registered DLL) which has its own internal dialog for SMTP setup. The location of this is determined by the SMTP.LoadSmtpParams("RegLocationHere") function.

These configurations are always written at "HKEY_CURRENT_USER/Software/cht/RegLocationHere" with the passed in configuration at the end as shown. HNDMAILSMTP.DLL was revised and set to Version (i.e. 2015 12th month).

Changed the email address lookup procedure to be more like the one in HNDBULKMAILBATCHER.APP. It doesn't write a batch file like that one, but it allows multiple email address file selection like that one.

This app has been experimentally re-colorized along the lines of scales of gray rather than CHT standard blue. Buttons have been moved to the tool bar so that a keyboard popping up in Win-10 touch, will not cover them.


We've asked WebupdaterC10 to copy CLARUNEXT.DLL into the /accessory/hnd/ directory where the precompiled version of HNDZIPNEMAIL.EXE so that any testers who try this app out of the box can use it without the delay of setting paths or relocating the DLL themselves.

The email configuration setup is modified along the same lines as HNDMAILSMTP.APP (see above)

The email configuration setup is modified along the same lines as HNDMAILSMTP.APP (see above)

The email configuration setup is modified along the same lines as HNDMAILSMTP.APP (see above)

We added an option to include a selected delay into the mail send batch files per the request of a CHT developer who finds that his SMTP server requires at least an 8 second delay between email sends to as a spam control measure.

This delay feature isn't meant to make you into a spammer, just to allow you to send multiple emails to your clients without the SMTP server getting in your face. We fixed a lookup problem in the email selection dialog. It was looking for the source XML file in the HTML directory. That now selects in the XML directory with a file filter searching for files ending with .XML

JumpStartHTTPClientPutFiles procedure modified to move the list box higher in the tab order. This worked fine in C7 but in Windows 10 with the same Clarion compiler, the window was throwing a threading error in the Clarion debugger.

While we were at it, the query control remembers the last query and pick-up directory used to upload files. We're using this app now to upload files to our new CHT Webserver and we have a server for this app installed at the server side to receive the files. This beats the heck out of FTP any old time.

This app was brought back from temporary retirement and has had its embedding updated. This now becomes again a full-fledged member of the other "HNDZIPNPOST" set of apps. This configures for either a Type 1, Type 3, Type 4 CHT server, or you can customize the security and acceptance or rejection of the upload file. This app has been experimentally re-colorized along the lines of scales of gray rather that CHT standard blue. Buttons have been moved to the tool bar so that a keyboard popping up in Win-10 touch, will not cover them.


Generated log files were not always placed in the correct directory. These now go into the directory where the app is located. That makes it possible to use apps with multiple paths in the HNDCMP.APP app list and still find everything in the right place. If your Clarion 10 uses a different /CONFIGDIR location, other than the default, it is essential that you configure HNDCMP.APP appropriately especially if there are no Clarion 10 configurations at the default Clarion 10 install location. A sensible alternate location for this /CONFIGDIR setting is in /bin/settings/ below your Clarion10 install directory. However where it's located is up to you when the /CONFIGDIR parameter is used to start Clarion10 and ClarionCL.EXE just so long as the conigurations are put where you say they are located.

The MultiplePostBuilds.Targets files are known to sometimes cause problems unless these are erased each time a new HNDCMP.APP batch set is created. We suggest you configure HNDCMP.EXE on the "Defaults" tab by checking the "Delete Targets?" checkbox. This is also where the "Use ConfigDir" option (discussed above) may be found.

Note that when compiling your apps using the combined generated batch file option available for HNDBATCHRUNNER.APP or from a desktop link, that HNDRUNBAT.EXE and HNDSTOPBACTH.EXE are assumed to be present in your /accessory/bin/ directory. Our WebupdaterC10 installer does put fresh copies of these executables in that directory when a full CHT install is performed.

All config windows have cancel and save buttons, but the window's default close button (X) is disabled.

This CHT template has had interfaces for all present SNAP-INS and BOTS roughed in. The ones showing there, presently all exist and will be fully wired as time progresses. A forum post was made about this on Dec 16, 2015.

This template is illustrated in new demo app HNDSLFCMDSNAPTEST.APP.


Emailed Announcement Re Build 19D.02.00
CHT Build 19D.02.00 Now Available


Gus Creces
The Clarion Handy Tools Page
December 21, 2015

December 19, 2015

The Latest CHT Update - 19D.02.00

CHT Build 19D.02.00 is now available for download/installation via Webupdater C10.

To update properly please exit Clarion 10 and navigate to your windows START Button area in the lower left corner of your screen. There under ALL PROGRAMS you'll find a menu item folder called "The Clarion Handy Tools C10".

When you open this folder and see the listed items, you'll see at the bottom of the list an item entitled:
CHT WEBUPDATER C10 (UPDATE-INSTALL) Click this item and you're on your way.

We'll inform you on the CHT forum, as well as here, on our What's New Page for December, and via HTML email some relevant changes and additions in this build.

December 5, 2015

What's the Best Programming Language to Learn in 2015?

The results of a Google search of this kind, vary considerably depending on who you ask but here is a set of results obtained from GitHub.

GitHub Results For Best Programming Language To Learn

#1 - Javascript
#2 - Java (nothing at all to do with Javascript)
#3 - Python
#4 - CSS
#5 - PHP
#6 - Ruby
#7 - C++
#8 - C
#9 - Shell (or Powershell which is just extended DOS batch language)
#10 - C#

The link given above, lists three other "Best" language sources, each with slightly different results.

The combined list which they call "Completely Unscientific Meta-Survey Ranking" is a combination of all four surveys listed in the article. That outcome looks like this:
#1 - Java
#2 - JavaScript (nothing at all to do with Java)
#3 - PHP
#4 - Python
#5 - C/C++
#6 - C# (i.e. C Sharp)
#7 - Objective-C
#8 - Ruby
#9 - Visual Basic


Finally, language use has an impact.

• 1 -- A single web site or application requires a myriad of technologies which possibly raises them above desktop languages.

• 2 -- You can create quick and dirty code examples in a few lines of CSS, JavaScript, PHP, Ruby, Python or shell (batch) script. That's not necessarily the case for languages such as C, C#, Objective-C and Java which tend to be used for fewer larger projects.


Comparing today's charts against historical 2014 data from RedMonk and Jobs Tractor, surprisingly little has changed. A few languages have gone up or down a place but there are no new entrants or large leaps into the top ten.

What Surveys Won't Tell You:

There is no "best" language.

Few developers have the luxury (or tedium?) of working with a single technology.

If you're considering client-side JavaScript, you won't get far without a solid understanding of HTML, CSS, image formats, tools and browser quirks. Server-side NodeJS, PHP, Ruby, .NET and Java developers normally require an understanding of web servers, HTTP, SQL/NoSQL databases and data-exchange formats such as XML and JSON. Even those writing a basic native mobile or desktop app on a single platform require web connectivity, data store, IDE and build tool experience.

The more technologies you know, the more you need to know.

OK, But What Should I Learn?

Surveys are interesting but don't bet your career on them. If you take nothing else from this article, remember:

Those who pick a language based on survey data or monetary prospects will fail.

There's one secret to becoming a great developer:

Just build stuff.

First, find a problem - especially one which has a personal interest or benefit to you. Perhaps that's creating a website, organizing your finances, automating your home or sending random tweets to your followers. Ensure the goals are achievable; even the best developers would shudder at the thought of creating a WordPress or Call of Duty clone.

Now choose an appropriate set of technologies. There may be several options but don't attempt to force a language on the solution. You may be able to create a native mobile app in Perl but resources are rare and it'll be a frustrating exercise.

Then create your solution. Google, code examples and fellow developers are helpful but don't expect them to provide all the answers. Your project is (or should be) unique and only one person can teach you to program: you.

Finally, don't expect to become a coding ninja overnight. Some people have a natural aptitude but they also spent many, many hours honing their skills and are continually learning new technologies and techniques. Even the most junior roles presume several years development experience. If you find you need a hand along the way, there are plenty of online resources, that can help.

In summary, choosing a language to learn for the sake of it is a boring academic exercise: few people succeed. It's better to learn a language which helps you solve a real problem. Don't worry if that technology is obsolete or outside the top ten - all languages are conceptually similar and your skills are transferable.

Don't worry about your choices: just build something.

So Why Are We Posting This On A Clarion Site?

Because I agree with the above conclusions:
# 1 - Those who pick a language based on survey data or monetary prospects will fail.
# 2 - There is no BEST language, the best language for you is the one that helps you to build the stuff you want to build.
# 3 - Don't attempt to force a language on a solution.
# 4 - It's better to learn a language which helps you solve a real problem.
# 5 - Don't worry if that technology is obsolete or outside the top ten. All languages are conceptually similar and your skills are transferable.
# 6 - One language cannot, solve every kind of problem.

Where Our Heads Are At...

We see Clarion as a great "Framework" or "WireFrame" on which to hang technological solutions to problems that Clarion itself will not, and probably will never, solve entirely on its own. Expecting it to do that is a daydream at best.

The template language doesn't do much more that generate code on demand. But it makes the Clarion IDE a "Code Factory" or second-to-non "Code Building Automation Tool". Nobody says it has to generate only "native" Clarion code. That expectation, while generally assumed by most Clarion developers, unnecessarily limits the product's usefulness.

The Clarion language, on it's own, is also pretty limited. If you compare the capabilities built into the Clarion language natively, as compared to what's natively in C#, for example, the ratio is maybe 1/100. But there is absolutely nothing standing in the way of "EXTENDING" the Clarion language with binary libraries built with C#, similar to those binary libraries that ship with Clarion out of the box. The binary entities that we create are hooked via classes and templates into the Clarion IDE such that you don't even know you're not creating and compiling native Clarion code.

That's what CHT is all about and what we've always been about: EXTENDING CLARION.

CHT takes the capabilities built into other languages (C++, C#, Javascript, CSS, HTML) and we engineer them to blend into Clarion by means of Clarion Classes and Clarion Templates, binary libraries and COM controls, that help you achieve with Clarion what Clarion out of the box can't ever hope to do.

But Clarion Isn't In the "Best" List!

The conclusions above, state that choosing a language based on a popularity contest is a sure way to invite failure, since no one language is the be-all-end-all.

So CHT chooses to push the native capabilities of Clarion by incorporating strengths and capabilites built-into other languages and technologies.

That doesn't absolve you of continuing to keep yourself relevant in a development world that's moving from Desktop Computing to Mobile Computing at a break-neck speed. But it gives you an opportunity to bridge over to newer development paradigms without being painted into a corner.

Move ahead or fall back - the choice is yours. We won't try and drag you kicking and screaming to some place you don't want to go!

But with CHT Tools, we can grease the wheels of your native creativity and your desire to create something great!

Clarion + CHT's EXTENSION technology + wise developer choices + endless learning + hard work will take you a long way.


Gus Creces
The Clarion Handy Tools Page
December 2, 2015

The Latest Docs

The latest template docs are here: CHT Template Docs

The latest demo application docs are here: CHT Application Docs

The latest utility application docs are here: CHT "Utility" App Docs

The latest "Batch Bot" application docs are here: CHT "Batch Bot" App Docs

The latest classes docs are here: CHT Classes Docs


Gus Creces
The Clarion Handy Tools Page
December 1, 2015