William Katcher
mail@williamkatcher.com

My name is William Katcher and I am an experienced software developer and architect. I have worked on a wide variety of technologies, and tend to concentrate on the lower levels. My code is simple, efficient, and maintainable. Feel free to contact me to talk about consulting projects, employment opportunities, or any other topic.

Skills

Technologies

Linux kernel development

File systems

Device drivers

Embedded systems

Networking

Real-time multi-threaded systems

Languages

C/C++

Python

Assembly

Some Java

Environments

Linux

Android

Windows

Various RTOS's


Projects

"Infinite Storage" File Server

I am currently working on a new type of NFS file server. This product looks like a normal file server to the user, but in the backend it shuffles the data between local storage and offsite cloud storage or backup media. Basically, old data will be moved to long-term storage and recently-used data will be stored locally for quick access. Multiple versions of each file will be saved. I am responsible for the main part of the product: the file system layer. This is actually part of a very large and well established enterprise backup system, so reliability is a big focus at this point, as well as figuring out how to efficiently manage large amounts of data. I'm also porting the software to Windows and giving it an SMB interface.

File Systems, Linux Kernel Development

I was a primary developer of our flagship product, CeDeFS. CeDeFS is a Linux kernel module file system filter that transparently compresses the user’s file system by offloading the data to hardware. Not only does it save space, but it speeds up I/O-bound applications because of less I/O blocking. We’ve measured an over 30% speed increase for a MapReduce TeraSort benchmark on a Hadoop cluster.

I’ve inherited this project and helped it grow in features, stabilized it until production-ready, debugged it, supported it, and optimized the heck out of it. In addition to kernel development, I spent a lot of time finding bottlenecks in the system performance. This was done by writing a set of scripts in Python to collect system-wide data and then performing data analysis using R and Pandas. We found a lot of surprising bottlenecks from this, and took the product to the next level.

Along with CeDeFS, I also helped develop a prototype of a transparent network compression filter, which transparently compresses a network stream using hardware offload. I also supported the hardware itself, contributing to the hardware driver maintenance and customer support.

Facial Recognition

I wrote a facial recognition app for Android devices. This would record video from the device’s camera and identify familiar faces in real time. The Android would use facial detection to identify the faces, which was using a previously-written home-grown algorithm based on OpenCV. The faces were sent wirelessly to a remote server (written by somebody else) to perform the recognition. This was done mostly in Java, with some JNI code to tie together the Java and C++ algorithm code. There was a lot of emphasis here on optimization to get a reasonable frame rate.

I also inherited a server-based image recognition system that was in field trials at a major amusement park. They were using this as a ticket authentication platform. This was using a web-based front-end using JavaScript and JQuery on tablets connected wirelessly to a set of processes running on a Windows-based server cluster running ASP for the web server, MS-SQL to store all the faces, and C++ for the image recognition algorithms (which were developed in-house). Although I added minor features, my job was basically debugging all areas of the system to get through the trials, which ended successfully. I also statistically appraised the performance of the system and algorithms.

TCP and Video Proxy

I designed and built a TCP Proxy that allowed communication under extreme network disturbance. I was able to complete an FTP transfer while subjected to 90% packet loss! The proxy intercepts IP packets using ipfilter and manipulates the packets as well as inserting new ones, transparent to the end-user. Although performance-enhancing proxies are not new, I believe this is the first one to be non-split (not terminating the original stream and creating a new one). This was all done in C++ user-space on Linux. It enhanced performance by overriding TCP’s congestion control behavior, adding Reed Solomon error-correction packets, performing compression, and re-negotiating the MTU size.

I also designed a video proxy that operated on H.264 packets. Like the TCP proxy, the idea was to overcome network disturbance by protecting key-frames with a variable level of redundancy. I achieved fluid video with up to 30-40% packet loss.

DSL System Software

For 12 years, I designed embedded system software for DSL modems and gateways in all areas of the stack, from low to high. This software was delivered into products by major manufacturers and sold in high-volume worldwide. My software ran on ARM, MIPS, and SPARKlet processors, and Linux, Nucleus, and ISOS RTOS’s. Here are the highlights:

DSL PC Software

Most of my work on DSL gateways was on embedded software (see previous section), but I also got to write a number of GUI applications that were also shipped in volume to consumers. Here are the most interesting:

A control panel was a Windows MFC application written in C++ that showed the user the status of their USB modem and allowed some basic configuration. A debug mode exposed a much larger set of set of parameters, and a script file dynamically defined the windows and fields. This design completely eliminated the constant maintenance that was required by previous GUIs.

An installer handled the installation of the drivers of a USB modem, and auto-configured network parameters, all without a reboot. This sounds simple, but wasn’t quite supported by Windows, so involved quite a bit of registry hacking.

Simpler versions of the control panel and installer were written for Mac OS9 and OSX.

Enterprise Switch Embedded Software

I wrote software for the Timeplex Synchrony, an enterprise voice/data TDM switch. I designed and wrote a billing agent, which basically collected all kinds of data throughout the system to measure the duration of each type of connection and store the data in non-volatile memory. The data was eventually propagated through a network of nodes using a TFTP Manager that I also wrote. Ultimately, the data was reported via RMON and SNMP. The embedded software was all written in C++, and we only had an assembly-level debugger. Although this was embedded software for a VRTX RTOS, I wrote this to be portable to Windows and did all the initial development and unit testing under Windows. This resulted in a very quick development time with hardly any bugs.

Handheld ATM Protocol Analyzers

I developed embedded software on a device with a 80256 processor without an OS, just using the bare metal! I wrote ATM protocol tests as well as system software. I learned a lot, most of all that it is much easier to multitask with an actual OS!

Virtual Reality

I wrote Windows software to display polarized interlaced and anaglyph images on 3D stereoscopic display systems.

Motion Control System

I developed a PC-based PID controller for a laser positioning system that was used for researching new storage technology using Cholesteric Liquid Crystals.

Robotics

For my graduate research thesis, I demonstrated a distubance-rejection control algorithm on a pair of 9 DoF Puma arms for use in a space exploration environment.