Software chronology

This is a bit of an experimental page, where I go into the greatest detail possible about the various technologies I’ve worked with over the years, basically since the beginning of my career, or even earlier than that. This can serve as a résumé of sorts, but it’s more for me to remember and keep track of all the things I’ve gotten familiar with.


  • Built a setup to receive GOES weather satellite images using an old WiFi grid antenna, an SDR dongle, a SAW filter, and a Raspberry Pi.
  • Built a digital picture frame with an e-ink display, driven by a Raspberry Pi Zero (using SPI to write data to the display).


  • Downloads of DiskDigger for Android exceed 100 million.
  • Developed personal home security system with PoE IP cameras and a Raspberry Pi server, automatically uploading videos using the Google Drive API, using Python scripts.
  • Developed prototype water/moisture sensors using Raspberry Pi GPIO pins.


  • Downloads of DiskDigger for Android exceed 50 million.
  • Downloads of DiskDigger for PC exceed 100 million.
  • Experimented with Oculus Go, and developed a few sample apps using Unity.
  • Deployed my apps to the Samsung app store and the Huawei app store.


  • Purchased a Google Home unit, and experimented with various DialogFlow projects.
  • Made a rudimentary 2D game using Unity.
  • Deployed my apps to the Amazon Appstore (in addition to the Google Play Store).


  • The Android version of DiskDigger no longer requires devices to be rooted!
  • Number of downloads exceeds 10 million.
  • Number of downloads of the PC version of DiskDigger exceeds 75 million.
  • Experimented with Google Daydream.


  • Experimented with Google’s Project Tango tablet, and created a prototype app that saved a point cloud of an enclosed space, and made it viewable in 3D afterwards.
  • Experimented with Google Cardboard. Created an app for viewing .MPO files (pictures from 3D cameras) on Cardboard.
  • Experimented with Samsung Gear VR. Created a planetarium app that displays stars, planets, and nebulae in the VR viewer. Accurate star positions from the HIPPARCOS catalog.


  • Joined Wikimedia Foundation.
  • Wikipedia app: 30+ million installs.
  • Released Android version of DiskDigger, only for rooted devices.
  • Number of downloads of the PC version of DiskDigger exceeds 50 million.


  • Consulted with a local startup company to create an Android app for patient surveys and information delivery for hospital waiting rooms.
  • Wrote C code for a PIC controller (PIC16F505) to send modulated pulses controlled by a push-button, to be received by a mobile device through its headphone jack (interpreted as modulated variations in microphone input).


  • Released version 1.0 of DiskDigger: a full-featured and more mature data recovery solution. Rewritten in C#, with the goal of better cross-platform support, and with a goal of running on Linux without any changes.


  • DiskDigger: a simple data recovery tool for Windows. (Written using C++Builder)
  • The LifeHacker bump (Washington Post, etc.)
  • Joined Think-a-Move (a small company specializing in speech recognition for military and medical applications)
    • Speech recognition SDK (originally based on the open-source Sphinx / PocketSphinx)
    • Ported to embedded Linux (Gumstix) devices.
    • Ported to Android.
    • Ported to Windows CE (Motorola MC75A0 or similar?)
    • Ultra-wide-band communication with storage tags (UART)
    • Ported to Tempus Pro (Also running Windows CE)
  • Experimented with Google Glass.
    • Communication protocol (over Bluetooth) for syncing UI with Glass in real time.
    • Started developing personal Android apps.
    • Unit conversion app  – 100K downloads.


  • Rewrote communication library for welding equipment in .NET (C#). Included communication over TCP/IP (custom protocol), serial (RS-232), and CAN (interfacing with proprietary hardware).
  • High-speed data acquisition from welding equipment (patents granted).
  • Custom network protocols for discovery of construction equipment (patents granted).
  • Experimented with Java ME (apps for mobile phones of the time) using NetBeans.


  • Mostly using C++Builder (by Borland, later Inprise, later Embarcadero) for work and personal projects.
  • Built communication library (.DLL for use in various other software projects) for welding equipment in .NET (C#). Included communication over TCP/IP (custom protocol), serial (RS-232), and CAN (interfacing with proprietary hardware.
  • Created bindings for the above DLL for most languages, including Python, Ruby, and even LabVIEW.
  • Built numerous high-level utilities for Windows for interfacing with welding equipment, for diagnostics, configuration, sequencing, reflashing firmware, etc.
  • Created ActiveX components for use by other applications.
  • Created PalmOS apps that communicated over IR (infra-red) and WiFi, used CodeWarrior as the IDE.
  • Created scripting components (Microsoft JScript).
  • Created a parallel-port driver for communicating with a label printer.


  • Used LabWindows/CVI (from National Instruments) to build statistical analysis tools for analyzing welding waveforms.
  • Finished university.


  • Built and programmed a communication interface for a TI-83 calculator.


  • JPEG decoder in pure QuickBasic.


  • Finished high school.
  • Joined Lincoln Electric part-time while starting to attend university.


  • MeltManager: Software that interfaced with an industrial iron powder machine via RS-232 (PC serial port), and gathered statistics and diagnostic information from it. This machine took scrap iron from other manufacturing processes and turned into a powder form. The software ran in MS-DOS, and was written in Turbo C. All of the routines for communicating through the serial port were written from scratch, as well as the text output routines, etc. Although I still have the compiled binary version of this program, the C source code has unfortunately been lost forever.
  • Took an experimental “programming” class in high school that taught a bit of Pascal on a Macintosh.


  • Had a typing class in middle school that I believe used Commodore computers. While the teacher was talking I would type BASIC commands.
  • Most of my initial self-directed programming was in GW-BASIC on an IBM PC.
  • Then QBasic
  • Then QuickBasic
  • Then QuickBasic with x86 Assembly routines
  • Then QuickBasic with compiled C libraries (VESA and Mode-X graphics, and BIOS and DOS interrupts)