Free Software & Tips

Click here for info on other work, awards received and my resume.
Some of the software below is now obsolete as new technologies have emerged. Some of the links below no longer work. I will update this page in the future.


Cofax - Content Management and Publishing for News Media Sites (Featured!)
Cofax is a web-based text and multimedia publication system. It was designed to simplify the presentation of newspapers on the Web and to expedite real-time Web publication. It was designed originally at Knight Ridder to serve the content for several of its newspapers, including its largest, the Philadelphia Inquirer and Philadelphia Daily News. Cofax was the tool it used to manage and build numerous web sites across its network for two years. Cofax source code and technologies continue to be an integral part of KR Digitals's current SDP content management system. Currently, Cofax is used across the world as an open source, scalable and powerful content management solution provided by numerous independent solution providers. Click here for the Cofax web site.
FolderWatcher runs as as a Unix Daemon or Windows NT service and watches a specified folder for new incoming files or folders. As new files or folders appear inside the folder, it uses dynamically loaded handler classes to take action on those files and folders. This is often used to create ftp drop folders where whenever new files come in, they are given to a processing program. This can also be used for content replication across mirrorred servers. When one or more files in a watched folder change, the handler class called can automatically copy them over to the mirror servers. (Source code and instructions on installing it as a WinNT service provided.)
SendMail Java Class (can also be used as an ASP Server Object to send mail from .ASP pages.) This object is used to send mail from Java programs. It is a fast, lightweight class, ideal for web applications. (download precompiled class files & view installation instructions on how to install this as an ASP server object) (view source tryit.java - a program to test the class) (view source SendMail.java) (view source SendMailCouldNotDeliverException.java) (view source SendMailResponseException.java) (view javadoc generated for the class & the index) (view source tryit.asp a VBScript ASP that uses this as a ASP component to send mail from a web page.)
include_url.java This program overcomes a limitation of the .shtml <!--#include virtual="URL" --> tag that includes a URL from the same server into the page. This web server-side Java object allows a page to include a remote URL in itself. One of its uses is to get a block of HTML from a remote ad server that includes a link to the advertiser, the ad image, some accompanying text and even scripts and applets. The commonly used method of using an <img src="http://ad-server/cgi-bin/getad?name"> can only include an image, but nothing else around it. Combined with a cluster of ad servers, this makes it possible to rotate ads of any type -- image, multimedia, html, script, applet, anything. I wrote this as a tutorial on using Java with Active Server Pages (ASP) to create ASP components in Java. However, this is not limited to ActiveX technology and can be used with any web server that allows server side Java (even if via CGI or shtml exec). (view source include_url.asp) (view source include_url.java) 1997/Mar/11
Date_Time.pm Object oriented Date & Time functions package for Perl 5.002 and above. (view source test_Date_Time that shows hos to use it.) (run test_Date_Time as a CGI) 1996/May/28
TourGuide.java Applet used as site map for naviagation. I wrote this in March '96 as a precursor to smart agent that works as tour guide to a site. (run applet) (view source TourGuide.java) (view data file TourGuide.links.txt) (download TourGuide.class.dat in precompiled Java bytecode form. Then rename it to remove the .dat extension for downloading.) To see how to use it, see the html source of this page and of the TourGuide.PopUp.html frame page it calls. The HTML source of this page also shows how to use JavaScript to pop up a smaller window which can contain a navigation page. Instead of the applet above, the page can contain simple text links or an imagemap. 1996/Mar/14
Numbers as Words Object oriented Perl package Text::numbers to display numbers as English words. For example, the number 9872334 in words is nine million, eight hundred seventy-two thousand, three hundred thirty-four. (view source numbers.pm) (view source of tryit.pl to test it.) (run a CGI demo)
Visual J++ Macros to Comment-Out & Uncomment Blocks of Java Code With these macros written for MS Visual Studio '97, you can select a block of Java, Visual Basic, C++, or HTML code and automatically comment it out. Then, you can select code again, and choose uncomment to remove the comment marks. Since Java does not support conditional compilation, this is quite useful when developing Java programs. For Java files, these macros place (or remove) a // at (from) the beginning of each selected line. These macros know about and handle other languages like VB, C++, HTML too. (view source vs97.dsm)
Make your Unix based web server case insensitive about URLs like NT Many sites use a mixture of naming conventions especially when many people work on the site. Also, when people upload files to the unix servers from PCs or MACs, the case may vary depending on program used to transfer, it's configuration, and the file name itself. Also, if your unix server shares a disk with an NT server using Samba or NFS, and you want to make it searchable using MS Index Server or NT based search program, this ensures that URLs will always work. It makes it easier for you to give out your urls without saying "with an uppercase P and a lowercase u". If NT web servers do not care about case in URLs, why should unix ? (view source make-dbm-of-urls in Perl) (view source not_found.cgi in Perl) This should be implemented as server API for efficiency. Also, you will need to edit these programs to suit folder names on your system.
Also, note the smart "not found" error handler page. When a page is not found on your server, it displays a message depending on how the was referred to the page. If you had a bad link, it says to. If someone else had a bad link, it asks you to contact them, not you. If they came from a bookmark or typed it in, then it tells them to check. 1996/Sep/22
Plus/Minus or Expand/Collapse demo
Do you like the way "Plus/Minus" or "Expand/Collapse" works with folders and other things in your Windows and Macintosh systems? Here is how you can present your site visitors with the same simple, friendly navigation system they use for folders and other things on their Macs and Windows. Such a view is especially handy when each item may have several sub items and you don't want to show them all at once. This is implemented entirely on the server side using CGI or server API. No client side JavaScript, Java, ActiveX, or plug-in required. 1996/May
Find out what web server software a web site is running. (view source wserver.cgi) 1996/May
Introduction to ASP A simple server-side VBScript demo using Active Server Pages (.asp) I wrote this as a demonstration and introductory tutorial to ASP a few days after Microsoft announced this technology. (run Random Colors) (source code included in page)
MS Internet Explorer Favorites on a web page This is useful when I'm in another office in the building from where (for security) I don't allow connections to my workstation. So I point to my departmental web server which shows me my MSIE bookmarks. (view source favorites.pl)
Image Width & Height Determination Functions
gifsize by me and jpgsize by Stuart Curtis Lathrop are Perl scripts to return an img src tag containing the width and height of a gif image. The subroutine is part of a package that is used by my other programs to automatically include gif sizes in the automatically posted newspapers, rotating advertisements from the ad server, etc. 1994/Oct
Splits a big file into smaller files This is a useful Perl script when you need to transport a large file to another location and you don't know what tools or operating systems you will have available at the other end. Also, it is useful to transport something in smaller pieces over a slow modem connection that often gets disconnected. (view split.pl source and documentaion) 1994/Aug
Advertisement Click Through and Logging
A Perl script to log each click on an advertisement on a page. The logs are later analysed by Ad-Master to find the click/view ratio for a page. (view source go-to-ad) Original: 1995/Dec. Updated: 1996/Jun
Ad Rotation
Note: This system is now on its way out and is being replaced by a SQL server based ad management system.
This (old system) can be used in any .shtml or .asp page. The source code of the rotate_ads programs can be easily incorporated into your cgi scripts and server APIs so that they can share the the ad rotation system with the .shtml/.asp pages.
.shtml/.asp syntax for rotating one ad picked from .data file placed in folders folder1, folder2, folder3 and folder4 (each folder contains 1 .data file): <!--#include virtual="/cgi/rotate_ads?folder1+folder2+folder3+folder4" --> To show 4 ads where an ad is picked from a .data file for each folder posN: <!--#include virtual="/cgi/rotate_ads_p?pos1+pos2+pos3+pos4" --> (view source rotate_ads) (view source rotate_ads_p) (using a <p> sepatrator between the ads.) (view source ad_choose_and_show.pl) Created: 1995/Dec. Updated 1996/Sep
Netscape Communications Technical Support Note 20021
When someone points their web browser to a directory on your server that does not have an index file, the person sees a list of files in that directory. The Netscape Communications and Commerce Servers (upto release 1.13) did not have an inbuilt feature to customize this. This program written for Netscape made it possible. You can extend this to specify which domain gets to see what type of files in your directories. (view source index.cgi) (read reply from Netscape Technical Support) (local copy of the note) 1996/Feb
The first solution to multiple default documents with Microsoft IIS This was a common request from many ISPs and users who wanted to migrate sites from Unix to NT and wanted to have different default documents for different clients on the same physical server. For a long time, this program was the only solution available and was listed on the ASP Developers ASP and IIS FAQs.
Here is a program to enable your MicroSoft Internet Information Server to recognise more than one default document. For example, it can look for index.html first, if it does not find that in the directory, it looks for default.htm, if even that is not found, it can look for an index.shtml server parsed document and so on. This was accomplished using Server-Side VBScript .ASP program. I was writing an ISAPI version, but the beta version of Microsoft's upcoming IIS 4.0 has this built in. (view source default-index.asp)
toHex.java A function in Java to convert integers (type int) to a hex string. This is one of my early contributions to Java. Back in Jan '96, the java.lang.Integer class lacked a toHexString method. This was a common request on Java newgroups and web pages of Java developers. Instead of making a package, I just wrote a function that people could cut and paste into their programs. Now that java.lang.Integer has a toHexString method, this is obsolete. 1996/Feb/02