Software

On this page, I make available software that I wrote for my own use, or for learning a programming language.

ClipEx clipboard extension

Clipex windows and dialogs
  • ClipEx is a clipboard extender for text. It allows users to create multiple text items that can be inserted in another program by pressing a hotkey (i.e., a combination of keys) associated with each item. ClipEx needs to be running to do this, but it does not need to be the active application. It does not even need to be visible anywhere on the screen. While using an editor, IDE or other program, just press the hotkey and the corresponding item is inserted at the current caret position. ClipEx items are stored to a configuration file when the program exits, and re-loaded at program start.
     
    ClipEx requires Windows 10 (64-bit) or Windows 8 (64-bit). It may also run on other 64-bit versions of Windows, but it has not been properly tested for this. There are no Mac or Linux versions, and there never will be. There is no 32-bit Windows version. This software is only available in English.

Download the ClipEx help file (zipped, you need to save it to your computer and unzip it locally because Windows for safety reasons blocks all CHM help files downloaded from the Internet) or the ClipEx installer. If you download the installer, the help file is included, and you don't need to download it separately. However, I do recommend that you read the help file first, particularly the disclaimer section and the system requirements. Read also the rest of this web page.

I guarantee this softwere to be free from viruses, adware, malware and any malicious security or privacy threats, as long as you downloaded these files directly from savazzi.net. If you have any doubt on whether you are really accessing my site, type "savazzi.net" (without quotes) in the address bar of your browser, then press Enter. This is the only location where I make these files available. Any other locations are unauthorized by me, and of course I cannot guarantee the safety of these files if downloaded from other sources. In short, do not trust any other download location for these files.

Even if you do download these files directly from savazzi.net, I strongly suggest that you test the software with all antivirus and internet security software you have available, both before and after installing it, and before running it for the first time.

This software runs in the background and reads all keyboard strokes, waiting until one of the registered hotkeys is pressed. It does not store, log or forward any keystrokes, does not access the network for any reason (unless you store the ClipEx configuration file or a ClipEx backup file on a network drive), and does not connect to the Internet to check for updates or for any other reason. However, I recommend you use care if you store sensitive data in ClipEx text items, because this program stores its items in an unencrypted file in the user directory, where malicious software may potentially try to access it.

This software is freeware. More information is available in the help file.

SitemapWiz offline sitemap generator

Over the years I have used or tested at least a dozen sitemap generators for this web site. This includes freeware, shareware and commercial software. None of them has been fully satisfactory.

One of the latest I tried is Sitemap Writer Pro, commercially licensed. I quickly discovered that either the software is not properly documented, or it cannot include PDF files in the sitemap (Google does recommend that PDF files be included in the sitemap). I tried everything I could from adding "application/pdf" to Crawler Settings > Content types to adding "pdf" to Crawler Settings > File extension, but no luck. I can see that Sitemap Writer Pro is listing PDF files in its internal list, but I never found a way to convince it to include these files in the sitemap. I filed a support ticket with Sitemap Writer Pro (I am a registered, paying customer), but so far it seems that the latest version of Sitemap Writer Pro is from 2013, both development and support are unmanned, and the only part of this company that still works is their web shop.

Also, Sitemap Writer Pro, like many others, works by crawling an online web site, while I prefer to generate sitemaps on an offline copy of my web site where I do all development.

There is indeed one sitemap generator that seems to do everything I need now, and everything I might conceivably need in the future: Microsys Sitemap Generator A1, available in three versions. I found out about it just one day after I solved my problem. The free version might be enough for me in a pinch, although not quite. The Standard version is 49 USD, which is a little too much for me, now that I just wasted money on Sitemap Writer Pro and I just solved my problem by writing my own sitemap generator (see below). The Pro version is 69 USD, and good enough for a large corporation.

In the end, I decided to write my own sitemap generator. It took me only one day to get it working and it does everything I need. As such, it is not a "polished" product with a snazzy GUI, but just a console app written in C# and configured via a Json configuration file. Also, it is not a proper crawler and it uses the Windows file system to locate files.

When the program starts, it immediately attempts to generate a sitemap and a list of files. This may fail in strange ways if your file structure is different from mine (it most certainly is). Therefore, before running the program, you will be better off by manually editing the configuration file as described below. If you want to move the program to another folder, copy to the latter folder all contents of the SitemapWiz\bin\Release\net6.0 folder. The program uses absolute paths to locate the offline site, so it will be fine anywhere.

The program displays a menu of one-key commands, with the following options:

s - show Sitemap
f - show File list
d - save Default configuration
r - Reload configuration
c - show Current configuration
w - Write sitemap XML file
q - Quit

The s and f options display the respective list. d saves a default configuration file (SitemapWizConfiguration.json), that you can edit with a text editor or programmer's editor. If you muck up your configuration file, in this way you can start anew from the default configuration. By editing the source code and rebuilding the project, you can change the default configuration settings.

A typical configuration file is a garbled, unformatted text ("minified" in programmer's parlance). You can make it more intelligible by formatting it properly. For example, Notepad++ has a JSON plugin that does a nice job:

{
    "siteURL": "https://www.savazzi.net/",
    "rootFolder": "C:\\Users\\Enrico\\Documents\\freehostia\\savazzi.net",
    "sitemapFileName": "C:\\Users\\Enrico\\Documents\\freehostia\\savazzi.net\\sitemap.xml",
    "depth": 6,
    "includeExtensions": [
        ".htm",
        ".html",
        ".pdf",
        ".txt",
        ".rar",
        ".zip"
    ],
    "excludeFolders": [
        "images",
        "img",
        "scripts",
        "js",
        "css",
        "documents",
        "reprints"
    ],
    "excludeFiles": [
        "google6b47bd2ebebf8191.html",
        "fsg2c635.txt",
        "robots.txt"
    ]
}

siteURL is the URL of your online site.
rootFolder is the local folder that contains the file structure of the website.
sitemapFileName is the path to the sitemap on the offline site. It is your job afterwards to upload the sitemap to the online site.
depth is the maximum crawled depth in sub-folders.
includeExtensions is a list of case-insensitive file extensions that will be indexed in the sitemap. Nothing else will, so you must add all file types that you want indexed.
excludeFolders is just what it says. Any folders with these case-sensitive names, regardless of where located in the folder hierarchy, are not indexed.
excludefiles is also what it says. Files with these exact case-sensitive names and extensions, no matter where located in the sub-folder structure, are not indexed. Not even if their file extensions are allowed by includeExtensions.

You can see below an example of the beginning of a sitemap produced by SitemapWiz. Note that the comments in the header contain simple file statistics. Note also that the program applies a simple algorithm, based on the file date, to choose priority and change frequency (simply speaking, a file that has been changed recently is given a higher priority and change frequency). SitemapWiz also does other necessary conversions from Windows file system to web URLS, like replacing backslashes with forward slashes and blank spaces in paths with %20.

<?xml version="1.0" encoding="UTF-8" ?>
<!-- Sitemap for https://www.savazzi.net/ generated at 2022-05-10 -->
<!-- 343 URLs in 16 folders match the indexing criteria -->
<!-- 131 additional URLs do not match the indexing criteria -->
<!-- 14 folders do not match the indexing criteria and were not crawled -->
<!-- Generated with SitemapWiz v 1.00 (c) by Enrico Savazzi, 2022 -->
<urlset xmlns = "http://www.sitemaps.org/schemas/sitemap/0.9" >
    <url>
        <loc>https://www.savazzi.net/</loc>
        <lastmod>2022-05-10</lastmod>
        <priority>1.0</priority>
        <changefreq>weekly</changefreq>
    </url>
    <url>
        <loc>https://www.savazzi.net/dp.htm</loc>
        <lastmod>2022-05-07</lastmod>
        <priority>0.7</priority>
        <changefreq>daily</changefreq>
    </url>
    <url>
        <loc>https://www.savazzi.net/books/index.html</loc>
        <lastmod>2021-08-01</lastmod>
        <priority>0.5</priority>
        <changefreq>monthly</changefreq>
    </url>
    <url>
        <loc>https://www.savazzi.net/download/Errata%20list%20110201.pdf</loc>
        <lastmod>2013-07-03</lastmod>
        <priority>0.3</priority>
        <changefreq>yearly</changefreq>
    </url>

[...]

This zip file contains the whole Visual Studio project, including source and compiled executables, for you to use and modify as you wish - except you cannot sell or rent out the original code or its derivations. I hold the copyright to the source code, but I am granting free use of it for non-commercial purposes. Parts of this software are copyrighted by other persons or entities. Visual Studio is available for free for personal use from Microsoft.