(H) 508-820-7672 (C) 508-395-8258
161 Temple St. Framingham, MA 01701
Seeking: Positions enabling me to
to create and ship new software products. I enjoy extending my breadth of knowledge and
solving complex problems; delivering a new product is always interesting and fun.
Keywords: Compilers, runtimes, Linux, Android (internals), Windows, systems development, virtualization implementation, data-parallel, multi-threading.
- Platforms: Linux, Windows Vista through
Windows 10, Solaris 8 and 9, Android, Tizen
- Languages: C++ (including STL/Boost, templates), C, bash, assembly (multiple architectures), Python, OpenCL, Java, Fortran, PL/I.
- Compilers: gcc, llvm, clang, VisualStudio
- Processes & Environments: Jira (Kanban), gerrit, repo, git, Bugzilla, Jenkins, scons, make, scons, svn, Perforce, cvs
- Misc. tools: VirtualBox, Valgrind, PIN, Atom, Dalvik VM
- Skilled at
delivering close-to-the-hardware products: compilers, interpreters,
runtime libraries, binary translators/optimizers, and custom
- Extensive experience
retargeting compilers for different architectures.
- Significant experience
intercepting and manipulating system semantics at various levels on
Linux (including Android) and Windows. From the API level down to instruction and
system call levels (sometimes inside the OS kernel).
- Experience with multiple assembly languages & dialects: M68K, M88K, WE32100, SPARC, Weitek FPU, x86, RS/6000 (now PowerPC), Alpha, Mips (R3000/R4000), x86_64, Cognitive (2-wide embedded VLIW), ARM (v5, v7a, THUMB2, VFP, Neon). Learning a new one has never been an impediment.
March, 2015 to October, 2016: Sr. Engineer, OpenMobile World Wide
- Conceptually similar to Docker Containers, but for Android apps on a Windows host.
- Virtualization work to enable Android applications to run on Windows 8.1/10. Implement various Bionic APIs (Android libc) using native Windows mechanisms, performing semantic conversions where applicable. For example, pthreads, sockets/networking, pseudo-devices such as /dev/urandom, wchar_t conversions.
- Extended existing ARM v7a Interpreter (VFP instructions)
- Wrote a custom tool to automatically inject instrumentation code into
an arbitrary Android .apk. The resultant apk logged method entry, parameter values, and return values.
The tool was used by Windows and Tizen development teams
April, 2013 to March, 2015: Sr. Engineer, Cognitive Electronics
- Lead compiler and runtime developer:
Implement an LLVM target for Cognitive's multi-threaded Data Parallel Architecture (big-data focused).
Assist in definition and refinement of the ISA, including estimation of gains of
additional instructions via architectural simulator.
Enable compilation and link of arbitrary C++ and Fortran applications.
- Ported libc (newlib, then musl) to the architecture.
- Enhanced architectural simulator to support system calls and collect instruction-level performance data.
Use architectural simulator performance data to focus optimization enhancements in LLVM.
- Implement test automation to verify compiler correctness
- Set up cascaded Jenkins jobs to build compiler and runtime libraries
January - April, 2013: Independent Developer
- Created a dynamic whole program path profiler in C++.
- Created a low-level API library to support
AMD's LWP (LightWeight Profiling) architectural extension, which
requires modification of the Linux kernel.
- Enhanced valgrind: support LWP, submitted patch
March, 2007 to December, 2012: Sr. Member Technical Staff, AMD
- Developer on a dynamic binary optimizer for
Windows7 and Linux. We attained 5%-7% reduction in rendering time for PovRay
- Architected, developed and released the AMD String
- Developer for CodeXL, a unified GPU/CPU Profiler
and GPU debugger for OpenCL on Windows7 and Linux.
October, 2001 to March, 2007: Software Engineer,
- Designed and
implemented UNIX user-space buffer overflow protection mechanisms
for Linux/x86, Solaris8/SPARC, Solaris9/SPARC.
- Implemented in-kernel
system call interceptors; designed and implemented call-chain
- Maintained rule
language compiler and interpreter.
August, 2000 to August, 2001: Member Technical
Staff, API NetWorks
- Maintained device
drivers, system exercisers, and Linux kernel code.
- Created a set of Linux kernel patches which
boosted kernel performance by 40%.
May, 1992 to July, 2000: Principal Software
- Project lead for
dynamic binary optimization: demonstrated at a corporate analysts
- Invited speaker at
- Project lead: modify
the GNU tools to support the StrongARM 1500.
- Enhanced GNU tools on
Alpha, resulting in a 5% performance improvement.
- Project lead for multiple binary translator
products: MIPS/Ultrix, MIPS/Irix, and SPARC/Solaris.
October, 1985 to May, 1992: Sr. Software Engineer,
- Project leader for
PL/I, FORTRAN, BASIC, and Pascal compilers
- Improved performance by
200%-400% for a number of UNIX platforms.
- Project lead for
retargeting six compilers and a debugger to the WE32100
- Tools developer:
maintained in-house development toolchain including source code
control system, build system, and other tools used to develop
- Ported Liant’s compilers and debugger to a
wide variety of UNIX systems: 680x0, 80x86, SPARC, 88000, WE32100,
January, 1985 to September, 1985: Software Engineer,
Boston Systems Office
Worked as part of a team writing a new generation
of VAX to 68K cross development tools.
Patents, Publications and Advisories
- Linux Journal
Kernel Korner article: "Kernel Tuning Gives 40% Gains"
- HotChips 11:
"Wiggins/Redstone: an online program specializer"
- Security advisory:
discoverer of CERT-2006-1174 (useradd).
- US Patents: 7721281,
- Path Profiling
publications: "Dynamic Whole Program Profiling" and "Isometric Paths"
Bachelor of Science: Applied Computer Science, University of
- Board of Directors,
Gorton Studios, Inc. Eagan, Minnesota
- Endowment founder:
Gorton Endowment for the Sciences, The Prairie School, Racine,
- Endowment founder: CS2100 Endowment (Computer
Science) University of Wisconsin Parkside, Kenosha, Wisconsin
- Distinguished Alumni, 2016
University of Wisconsin Parkside, Kenosha, Wisconsin