Software

Blue keyboard

This page contains software that I have written over time and software-related documents that I have authored. I will eventually release all of these under an open-source licence. Please let me know of any bugs or new features you would like to see implemented. All software on this page is released under by the Mozilla Public Licence 1.1, unless noted otherwise. Basically what this means is that you can use it in any open- or closed-source project (unlike GPL-licensed code), but you have to keep any modifications open-source, and also acknowledge me as the original developer. You can learn more about me here, or you can have a look at my resume.

Recently, I had trouble finding a freeware version of PGP that I could use on Windows. It seems that PGP Corporation has placed a time restriction on the latest freeware version, and it has also removed all instances of previous versions from its Web site. Eventually, I was able to find PGP Freeware 8.0.2 for Windows XP, so I put it up for download here for those who find themselves in the same position I did. Of course, I haven't actually written this myself; I'm merely re-distributing it. Note that this is freeware, so by downloading and installing it, you do not violate any copyright laws. Should you decide to install it, here is an excellent guide to installation and available features.

Software

Autocomplete Manager, a Mozilla Firefox extension that augments the address Autocomplete component in Firefox, providing advanced features, such as matching against bookmarks and page titles and customizing the sorting criterion of entries on the suggestion popup. Check the extension's page for all available features and to download it. It comprises around 3,000 non-comment lines of JavaScript and XUL code.

For my own convenience, I wrote a short bash script for authenticating on the UCLA Computer Science department wireless network without using a graphical browser. It utilizes 'curl' to authenticate on the command line. The script has been tested on Fedora Core 4, but should also work fine on other Unix flavors. You can either enter your username/password fields in the script, or have it ask for them every time you run it. You can also invoke the script from within your 'ifup' interface startup script, to have authentication automatically take place whenever your wireless interface comes up.

An emulator of the Quikwriting palmtop input software, written in Java. This is a fully functional emulator with most of the features of the actual software. It is around 850 non-comment lines of Java code.

A tiny Web server (around 300 non-comment lines) and HTTP client, both written in C. I wrote these some time ago to experiment with HTTP and multi-threaded programming on Linux. The server supports only the 200 (successful response) and 404 (file not found) HTTP status codes. It creates a thread pool at startup and assigns a separate thread to serve each request. The client is also multi-threaded and can be used to stress-test any Web server.

VRML Author, a 3D scene authoring tool. This nifty little tool allows you to load up VRML models in a 3D scene, manipulate them (translate, rotate, or scale) at will, and save the result again as a single model in VRML format. This was the software artifact of my Dipl.Eng. thesis project in Greece back in 1999. It is around 2,300 non-comment lines of Visual C++ code and uses MFC and the Cosmo3D library from SGI (formerly Silicon Graphics).

An image manipulation tool, written in OpenGL and Visual C++. It has been tested on Windows XP and makes for a good first project in an image processing class.

My own wrappers for the C socket functions. These are supposed to make it easier to write network applications on Linux, by providing a more high-level API to the developer than the native socket calls.

My own implementation of C memory allocation functions. Same concept as above. I implemented this some time ago to better understand how memory allocation works in C.

A library for manipulating strings, written in C. Encapsulates memory allocation and de-allocation for strings, making it (maybe) easier to treat them as first-class objects in C.

An implementation of AVL trees, written in C. It creating a tree, adding and changing nodes, and balancing it. If you have no idea what I'm talking about, you can read all about it here.

Loband Switcher, a Mozilla Firefox extension that controls how the browser loads pages. Loband is a public service that simplifies Web pages, in order to make them download faster over slow Internet connections. To use the service, one has to first load the main Loband page, and then enter the page of interest in a textbox. This extension reduces the required steps to load a page through Loband, by automatically translating an address the user enters, into its Loband equivalent, and then using the Loband service to download the simplified page. The user can always revert to the default browser behavior by unchecking a menu item.

A simulator for a generational garbage collector, written in C and tested on Sun Solaris 8. This little program simulates the operation of a garbage collector based on object generations. Such a collector exploits the fact that "most objects die young". You can read more about this intriguing topic here.

An implementation of a neural network using back propagation, written in MATLAB. I implemented this for a class project in my senior undergraduate year. It contains some data to train the neural network, and also test data to check its performance after training. The parameters are set to values I found to be "good" for the specific test dataset. Feel free to experiment with them and drop me an email if you find better parameter values.

Documents

I sometimes access my home directory here at the UCLA Computer Science department via Samba on Windows , so I decided to compile a document containing detailed instructions on how to do that.

Back in December 2002, me and Manas Tungare wrote up a comprehensive literature review on Zoomable User Interfaces (ZUI). Although it does not contain the latest developments in the field, I thought I would post it here, in case someone finds it useful.

Last Modified: March 25, 2008