The CleanCode site includes a myriad of open-source software libraries and applications in PowerShell, C#, Java, T-SQL, Perl, and JavaScript (see the Products menu above or the tables below).
Lately my focus has been on PowerShell and .NET, both in developing code and in writing articles (see my publications page).
The diagram at left (click to enlarge) gives you a graphical map of my applications and libraries, separated by language. Several concept bubbles span multiple languages indicating I have touched upon those technologies with either an implementation of the same engine (e.g. Diagnostics in Perl and JavaScript have the identical engine) or with a different but related concept (e.g. C# also has Diagnostics, but it is quite different).
The source code for virtually everything here is available on the download page.
As far as documentation, I have endeavored to be thorough.
javadoc and ndoc have been immensely helpful in generating
a complete API for Java and C#, respectively, building not just HTML files
for each class, but a documentation tree for all modules.
My CleanCode utility Pod2HtmlTree included below performs similarly
for Perl documentation (since the standard pod2html operates on single files only); DocTreeGenerator creates a PowerShell documentation set, and my general XML tool XmlTransform was configured to generate my SQL documentation set.
Regrettably I have not yet had a need to generate more than an overview
page for my JavaScript tools.
I have grouped what I consider the top-level components of the CleanCode libraries into the three tables below, grouped by .NET Controls, Applications, and Engines.
Notation: All of the controls listed have API references.
The following symbols are used in the tables below:
a formally published article on
Simple-Talk.com
()
or DevX.com
()
-- each typically includes further code resources to download, separate from the libraries available for download here;
an internally published article on this website
()
-- some include links to live sandboxes for experimentation;
a C#/.NET API reference
();
a PowerShell/.NET API reference
();
a T-SQL API reference
();
a Perl API reference
();
and
a Java API reference
().
FileMask:
Provides a panel for specifying one or more file masks to filter a directory by file name patterns using standard Windows wildcards. The control displays the selected set of files as well as a count of files; these update instantly as masks are entered or updated. Beyond being a completely generic filter-by-mask control, the FileMask control may be customized (using LINQ lambda expressions) to add an additional arbitrary filtering capability.
You could require files to be later than a certain date, have a particular attribute, contain certain data, or anything else you might need.
ConnectionStringManager:
A plug-and-play control that allows defining and testing
connection strings for a SqlServer database, an Oracle database, or any data source that has ODBC connectivity.
This provides a complete solution for interactive handling of database credentials: usernames and passwords, server choices, and connection types.
MultiConnectionStringManager: Manages a set of database connection strings and associated details,
providing a mechanism for easy loading and saving of the set to persistent storage (configuration file).
ChameleonRichTextBox:
This second generation syntax-highlighting control includes much faster performance, much easier customization (even at runtime), and keyword completion (a simple Intellisense).
Supports SQL Server, Oracle, MySql, and any ODBC connection out-of-the-box,
and may be easily customized with an XML context file--no subclassing required.
The DevX article at left discusses its predecessor (SyntaxHilightTextBox) but it is still partially relevant to this new control.
SqlEditor:
A complete SQL-editor-in-a-box, combining a ChameleonRichTextBox with
an ExtendedDataGridView. This control is designed to synchronize with a partner instance
when you use two of them together in a WinForm application.
QueryPicker:
Builds meta-queries from templates,
dynamically generating a set of input fields for the place holders within
a meta-query template,
then letting the user enter values in any or all fields,
and finally returning a finished meta-query.
Meta-queries included with the control (for SQL Server, Oracle, and MySql): displaying the version of a database, listing columns for a given table,
finding tables containing a given column, listing the size of all non-empty tables, and more.
See also my three-part Simple-Talk series on the QueryPicker:
A Unified Approach to Multi-DataBase Query Templates,
How to build a Query Template Explorer, and
Using Three Flavors of LINQ To Populate a TreeView.
ProgressBarMessager:
Enhances a standard .NET ProgressBar with progress messages
that appear sequentially beneath the bar, to provide useful feedback
during a lengthy operation.
As you add progress steps the message panel
expands vertically to contain a selectable number of messages.
Messages beyond that count cause the panel to scroll messages.
You can set each step to optionally show the duration of the step.
This section contains the major engines--building blocks--to plug into your code.
(Others may be found at the
CleanCode C# API
as well as
Java,
SQL,
JavaScript, and
Perl.)
Image
References
Description
StructuredTraceSource:
Diagnostics, or program tracing, is a crucial-and often overlooked and underappreciated-component of application development.
It is useful not only during program development but even more so once your application is deployed. Ongoing maintenance costs are one of the largest segments of software's true cost, and well-instrumented diagnostics can reduce maintenance costs significantly.
See also the DataDiagnostic engine for Perl, Java, and JavaScript, a similar idea but with a completely different mechanism, listed separately.
DataDiagnostic:
Provides an extensible, configurable diagnostic tool allowing precise control to isolate and dissect the output of your diagnostically-instrumented program, and to channel it to your console, a web page, and/or a log file.
See also the StructuredTraceSource engine for C#, a similar idea but with a completely different mechanism, listed separately.
WinForm Validator:
Input validation is something that every program needs, and every programmer dreads. Most developers craft hard-coded program logic to verify that a phone number consists of 7 or 10 digits; that an IP address consists of 4 octets; that a country name matches 1 of 193 choices, etc. While .NET 2.0 provides some support for streamlining input validation, it barely scratches the surface of automating and simplifying the input validation process.
See also the PageValidator engine for Perl and JavaScript, a similar idea but with a completely different mechanism, listed separately.
PageValidator:
For both front-end and back-end processing, this validation engine provides an extensible and user-configurable library to verify values from a web page form. PageValidator uses a single library for client and for server validation, guaranteeing synchronization. Accommodating new fields on a page is just a matter of updating the dictionary--no code needs to be changed. Moreover, PageValidator can validate not just single fields but also multiple dependent fields.
This validation engine is virtually identical line-for-line in Perl and in JavaScript,
within the constraints of these languages. This engine is designed for
front-end validation (JavaScript) and back-end server processing (Perl).
See also the WinForm Validator engine for C#, a similar idea but with a completely different mechanism, listed separately.
DisplayCommandsForm:
This WinForm provides a handy pop-up, quick-reference chart for the commands in
either an application or a control. If you have several complex controls within
an application, embed this in each of them and then wire them up at the application level to show a quick-reference for each of them in separate windows.
This is built-in to the following controls: ChameleonRichTextBox, ExtendedDataGridView, and SqlEditor.
IO.ResourceMgr
Provides an API to manage external file resources.
WebSiteInABox:
Quickly build a dynamic web site with this CGI framework. Unlike some frameworks, this includes sufficient infrastructure so you literally have a website right out of the box.
Net::DataMining
Provides a mechanism for extracting data for a list of items from a set of web sites.
Grabs data from a series of related and unrelated web pages, formatting it into a table suitable
for spreadsheet-import or word-processor import.
(I have one application which mines over 500 web pages for 2300 pieces of data, which
I run on a weekly basis.)
This section contains applications that may be run "out of the box", in various languages as noted in the table.
Image
References
Description
PowerShell DocTreeGenerator:
Provides an easy-to-use documentation generator for documenting your PowerShell libraries. It comes with a simple, generic template but you can easily instrument your own template to blend in with the look and feel of your site.
Keystroke Sandbox:
If you've ever been frustrated trying to figure out how to intercept or assign specific keystrokes to specific controls, you'll be glad you found this article.
It reveals not only the fundamentals about how keystroke handling is exposed in the .NET framework, but also provides a handy Keystroke Sandbox to actually observe how keystrokes flow through an application, and concludes with a "cook book" detailing how to instrument your code for all the common key handling hooks.
XmlTransform:
Preprocess HTML (or any XML), or generally convert XML to HTML, or XML to XML, via XSLT transformation. This package operates on an entire input tree of files, generating a comparable output tree after conversion. XmlTransform also provides XML Schema validation for either the input tree or output tree, or both. And, while transforming to HTML, you may choose to generate multiple tables of contents to go down a tree, and add navigational linkages to move sideways or up a tree.
There are two published articles about this: one describes the engine itself; the second discusses an application of the engine--generating a documentation tree for a SQL procedure/function library.
Histogram Generator:
Histograms help people analyze large amounts of data, whether you display them as tables or as charts. This article shows you how to do both.
SQL Map:
Simplify your SQL tasks by giving your queries and stored procedures the ability to iterate over arrays of table names or values.
JSArchive:
Consolidate and compress one or more JavaScript files to create a single release archive for production, as well as to improve network throughput.
Pod2HtmlTree:
Pod2HtmlTree bridges the gap between perldoc and javadoc, generating a hierarchical, hyperlinked documentation tree of your Perl library. This includes a full hyperlinked index of functions, methods, variables, and modules in your library. Pod2HtmlTree also supports multi-lingual libraries, cross-linking common modules between languages. Finally, each generated documentation page includes a capability bar that identifies generic capabilities of the module.
Plumb:
A static Perl include file analyzer.
Plumb the depths of the included module hierarchy for specified Perl files, providing a simple way to determine a module dependency tree. For a simple program, this won't reveal too much, but once you have dozens or hundreds of interlinked files, this can help track down dependency issues. This program is adapted from a version for C code I created when I worked at one firm which used a few libraries. Checking the dependencies on a single file produced a list of 17,000+ dependent files (with duplication, though)!
ServerFileExplorer:
View files on a remote host with a Windows Explorer-like interface. If you have command-line access to a remote host or server but no windowing interface, this package allows you to use your browser as an interactive file explorer. Offering list, tree, and image modes, ServerFileExplorer provides unique features not found in Windows Explorer or even Novatix' ExplorerPlus, including the ability to view all files below any point in your directory tree, and the ability to enlarge or reduce thumbnails with a single keystroke.
WebPageInspector:
An interactive tool that fetches a web page and provides tables detailing headers, links, cookies, parameters, and meta-data, and provides windows to view the source code, the web page text, and the conventional display of the web page.
MultiFileReplace:
MultiFileReplace provides a search and replace facility for all files (or selected files) in an entire directory tree. With two preview modes, it helps you ensure that you modify exactly what you want. And you may work with text blocks of arbitrary length by using file references rather than strings as your target and replacement text.