Programming and Software Development

What I Do

I build Wordpress sites and custom CMS and related web apps. I migrate databases, integrate rich media content and open source applications and manage R&D projects. I research vendors and technologies, helping clients find the best IT solutions for them.

I have been writing software professionally since 1996. I have experience with the following technologies: (open source) PHP, Javascript, JQuery, PythonPerl/CGI, C, C++, SOAP, JSON, XML, CSV, Linux and MySQL, and (Microsoft) Win32 SDK, VB, ASP, COM, MS-SQL, IDL, MSMQ.

I am currently building a semi-serverless, highly data-driven applications for end-to-end data management, auditing, filtering, formatting and publishing. The data is managed in structured data files so it is fast, flexible and secure. I have delivered REST interfaces to manage the time needed to load the page. Content updates are so fast, you can’ see them in the debugger. I have had to add animations so users can see the change.

Typical clients for this are companies with large product inventories with lots of parametric data. I have built several different kinds of parametric and related search tools to meet their needs.

Past Projects

Online Documentation

I designed and built an 800+ page WordPress site with a breadcrumb menu, back/next navigation, a unique hierarchical menu system and a self-maintaining, context-sensitive search. It also has bulk page number I/O and other features based on Custom Field Types to accelerate content development, issue tracking as well as reduce the maintenance effort. Everything was done with one small custom plugin and a minimalist child theme.

Industrial Parametric Searches

As mentioned above, I have built several websites with parametric searches. Some have dynamic page loading, a cart with tiered pricing, and dozens of data sets per record. I vary the techncial design (client-server load) according to requirements. (PHP/Javascript)

Bulk eMail Data Extraction

I wrote tools to automate data extraction from over 100K emails for a NYC municipality. The data had been collected over several years and had varying formats. (Python)

Shopping Cart Migration

Migrate national retailer with thousands of products from a legacy cart to Big Commerce. (PHP)

E-Commerce Front End Design

I designed the sales brochure pages and internal portal for a retail trading information site.

Online multimedia investor presentation

Create online multimedia investor presentation. Powerpoint has limitations that make it less desirable for fast, rich online presentations. We wanted to integrate various media types, Flash, voice-overs and background music and by mixing Flash, frames and DHTML, I created a presentation that was modular, easy to modify and upgrade incrementally.

Productivity Application

Web-based in-house sales ticket tracker that integrated three business units, increased transparency and enforced policies that cut costs and increased revenue. The solution was a Perl/CGI + DBM web application because the customer has a very heterogeneous server environment. This Perl script cost far less than customizing the accounting system.

DIBOL Database Migration

Imagine putting your business into a World War I biplane every morning and flying it over the Grand Canyon. Well, that it what this business was doing with their mission-critical, proprietary database application. The hardware had been old enough to vote since the early 90’s. The companies that had built the various components had long since been bought and dismantled, and the software was hard-coded to it. Libraries and drivers had been deprecated decades ago. And of course, the entire ball of mud was thoroughly undocumented and unintentionally booby-trapped. Staff operations were not only undocumented, but laden with superstitions and magic keystroke combos that were handed down from the early times. No one single person fully understood what the app did, how it worked or whether it was working correctly. But because the application performed a mission critical, core business function, upgrading that software and hardware was like changing the piston rings while the motor was running. And yet me and my colleague did it. Today, that same app runs on a state-of-the-art firebreathing monster. The business unit has never gone down and a plan is in place to migrate the app going forward.

Scientific Instrumentation
screen shot

This desktop application performs a significant amount of data conditioning, file I/O, and printing – all of which went in a headless multi-threaded DLL. The data reporting model allows the client to make asynchronous queries and redirect the results individually. The raw data cache provides a data abstraction layer so the data conditioning code does not know whether the data came from the port or a file. The post-conditioning data cache allows the GUI to query without re-processing (which would be perceptible to the User). Finally, the GUI exe has a representational data cache because the User chooses a particular view of the data. The container class allows the client application to easily describe new representations. (Windows API / C++)

Keystroke Redirection Service
screenshot

"KeyJack" is a keyboard utility that redirects function keys to the console. It was developed for a terminal emulation project that needed to send keyboard commands over a telnet session. (Windows API / C+)

Realtime Report Server

I was the technical lead on this ISAPI webserver DLL and browser client. It was a multi-threaded, multi-tenant polling app that delivered multiple screens or views of information about a virtual call center. (Windows API / C++, XML, COM, JS and DHTML).

Internet Guard Dog

I re-wrote the front end for McAfee. It had 90+ DLLs, an unlicensed encryption library (that needed to be replaced), and a a couple of executables that used interprocess communication. I also wrote a web spider for test automation. (C/C++/VB)

McAfee Utilities

I wrote several applications for McAfee, Network Associates and Helix Software for the Windows desktop in the nineties. (WinAPI C/C++)