Andrew T. McFadden
fadden@fadden.com
https://fadden.com/resume.html
(This is a detailed work history that has accreted over time,
rather than a carefully crafted résumé, but it'll do for now.)
Skills
Things I've done recently:
- C#, C/C++, Java (incl. JNI)
- Linux (desktop and Android), Windows
Employment History
faddenSoft -=- November 2017
- Present
Notable projects:
- CiderPress II. Utility for
managing Apple II and vintage Macintosh disk images and file archives.
Written in C#, it features a multi-platform command-line interface and
a Windows GUI.
- 6502bench. Code development
"workbench" for 6502 CPUs. The SourceGen disassembler is written in C#,
using Windows Presentation Foundation for the UI.
castAR, Inc. -=- June 2016 - June 2017
Software engineer and architect, developing software for an augmented
reality headset system.
Key responsibilities:
- Developed Android service that drove the AR glasses
over USB. Supported multiple generations of hardware. Used embedded
Lua for device configuration. Wrote command-line tool to manage
service. (Mostly C++.)
- Developed Android service that controlled Bluetooth LE game
controller "wands". Wrote a companion app to exercise wand
features, and a command-line tool to manage the service. (Mostly Java.)
- Made modifications to the Android framework, notably the graphics
compositor (SurfaceFlinger).
- Maintained browser-based tools for configuring glasses and visualizing
data streams from them. These displayed various data streams
graphically, and allowed parameters to be
tweaked in real time. (Mostly Javascript and Lua.)
- Wrote a lot of technical documentation, on our software and on
general Android development topics.
As a result of my work at castAR, I am named as an inventor on the following
issued patents:
US10621707 |
2020/04/14 |
Table reprojection for post render latency compensation |
The company went out of business in June 2017. I was briefly employed by
CastAR (ABC), LLC during the asset auction period, to help potential buyers understand
the value of the intellectual property. (The assets were purchased by
Tilt Five.)
faddenSoft -=- December 2014
- June 2016
Reprising my role as founder, chief architect, and head dish washer, I
re-founded the 2002-era faddenSoft, LLC as a sole proprietorship.
Notable projects:
-
Tic-Tac-Toe with Stuff. A simple game of tic-tac-toe, implemented
excessively with the Unity 3D game engine. Initially released in April 2015
as an Android app.
-
Maze Escape. Escape from a 2D maze. Implemented with the Unity
game engine, released for Android in June 2016.
Android, Inc. /
Google, Inc. -=- May 2005 - June 2014
I started as a Senior Software Architect at Android, a
10-person startup. The company was
acquired by Google in July 2005.
2012 - 2014: System-Level Graphics
- Part of the system-level graphics team, which is responsible for the
parts of the graphics system below the app framework rendering layer.
- Tracked down stability, correctness, and performance issues. Worked with
various OEMs to track down and fix driver bugs.
- Modified the media system to allow graphics surfaces to be used as input
to the video encoder. Set up a site on my home web server with sample code
(bigflake.com/mediacodec).
- Developed the Android "screenrecord" tool.
- Created Grafika
to exercise and demonstrate various graphics and media features.
- Wrote the
Android System-Level Graphics Architecture
document.
- Wrote Android Breakout
as sample code for simple games.
2012: (internal stuff)
- Tech lead for an internal project, never released.
- During this time, testified in Oracle v. Google (patent phase).
2011 - 2012: Calendar app
- Worked on Google's Calendar application.
- Made various changes required to "unbundle" the app, including
extended validation.
- Added various features, working primarily on the content provider.
- Did the odd bit of "Dalvik consulting".
2006 - 2011: Dalvik VM
-
Primary developer of the Dalvik virtual machine runtime. Wrote 85-90% of
the code that shipped in the 1.0 runtime, and did significant development
post-1.0. Some things I did:
-
Bytecode interpreter, in C and ARM assembly.
-
Class loader, object model, native threads, synchronization.
-
"Internal" library features, like reflection and proxy classes.
-
Native method access (JNI), including -Xcheck:jni support and dynamic
shared library loading.
-
Bytecode verifier and register maps (to support type-precise GC).
-
Developer features: remote debugger support (JDWP), method profiling
("traceview"), deadlock prediction.
- (In short, wrote nearly all of the features found in Android 1.0 -
1.6, except for the garbage-collected heap and a few odds and ends.)
- Wrote developer documentation on VM-related topics, e.g.
JNI Tips
and the Android SMP Primer
(my version)
(current version).
- Created the first incarnation of DDMS, a GUI app that manages the
connection between a debugger and multiple Dalvik VMs running on a device.
(This was later converted to an Eclipse plug-in and built into the Android
SDK, and subsequently replaced by Android Monitor.)
- Maintained and enhanced JamVM, which was used for Android framework
development while Dalvik was under construction. Added JDWP debugger
support.
- Helped out wherever I could, e.g. wrote
zipalign.
2005 - 2006: Application Framework
- Developed design for the Android "mid-level" architecture, i.e. the code
that sits between the operating system and the application.
- Started development on the application framework, which was initially
planned to run on Linux, Mac OS, and Windows (Cygwin), as well as devices. Wrote
cross-platform libraries. Created the initial implementations of some
fundamental framework features (graphics composition, event handling,
debug logs, asset management). Wrote the original Android build system ("FMS").
- Developed the Android "simulator", a GUI front-end that allowed Android
software to run natively on Linux, Mac OS, and Windows. (This significantly
pre-dated the QEMU-based system emulator that shipped with the SDK.) The
hardware abstraction was later improved by using a (Linux-only) pre-load library
that patched various library and system calls.
At various times, I learned Java, Javascript, Python, ARM assembly, SWT, and
wxWidgets when I needed to use them.
I actively assisted developers on
stackoverflow.
As a result of my work at Google, I am named as an inventor on the following
issued patents:
US08255991
US08332936 |
2012/08/28
2012/12/11 |
Computer application pre-permissioning
Computer application pre-permissioning [continuation] |
US08336029
US08843895 |
2012/12/18
2014/09/23 |
Debugger connection
Debugger connection [continuation] |
US08589691
US08621226
US09137023 |
2013/11/19
2013/12/31
2015/09/15 |
Self-signed certificates for computer application signatures
Self-signed certificates for computer application signatures [continuation]
Self-signed certificates for computer application signatures [continuation] |
FaddenSoft, LLC -=-
August 2002 - May 2005
Founder, member, chief architect, and head dish washer. I
worked on projects that interested me and published them as freeware or
shareware on the web, and occasionally did contract work. Notables:
Technical Consultant -=- March 2005 - April 2006
Provided technical expertise to a law firm during software
patent litigation (initial trial in
TiVo v. EchoStar).
Akimbo Systems, Inc. -=- November 2003 - December 2003
(Software engineering contract.) Developed an event
logging system in C# .NET. Developed an API for engineers to use to log
interesting events to a compact binary format. Wrote log harvesting and
aggregation servers, as well as tools for sorting and formatting event logs.
CiderPress
-=- initial shareware release March 2003, open-sourced March 2007
Developed CiderPress, a Windows application for manipulating
Apple II archives and disk images. Features include a full set of archive
operations (similar to WinZip) as well as Apple II-specific text and graphic
file format converters. The program uses low-level I/O operations to
access Apple II hard drives, floppy disks, CF cards, and CD-ROMs. Five
different filesystems are supported. The project was developed in C++
(about 100K lines of well-commented source code), using Visual Studio 6.0 and
the MFC library. (I did a "refresh" in early 2015 to get it working with
modern compilers and tools.)
Moxi Digital / Digeo, Inc. -=- January 2000 - July 2002
Software architect and team
lead. Moxi built a set-top box featuring multi-tuner video recording, CD
jukebox, MP3 ripping and playback, DVD playback, and wired or wireless
distribution. The device went on to win Best In Show at the January 2002
CES convention.
Moxi Digital was originally known as Rearden Steel
Technologies. It was acquired by Digeo
in May of 2002.
Responsibilities and achievements:
- Part of the "Gang of Five" that developed the detailed design of the
hardware and software. Developed detailed plans for application
infrastructure, graphics and sound architecture, "mother" services, and other
topics.
- Part of a small group that defined the merged Moxi/Digeo architecture
after the acquisition.
- Led a team varying in size from 2 to 4 engineers. My group was
responsible for application infrastructure, graphics drivers, satellite and
cable tuning, DVD playback, user input, and porting Macromedia Flash (4.x and
5.x) to our architecture.
- Designed and implemented "Central Services", the core of the Moxi
application infrastructure. CS loaded apps, managed access to graphics and
video resources, handled user input devices, and provided debugging hooks for
developers (thread watcher, memory watcher, and a graphical "control panel").
- Designed and implemented the initial version of the "RATI" library, a
hardware abstraction layer that proved to be extremely useful as the hardware
evolved.
- Designed and implemented remote execution wrappers with pseudo-ttys and
network sockets. These connected to "xterm servers" running on developer
workstations, allowing developers to view the output from multiple remote
processes.
- Managed the relationship with one of our graphics chip vendors (ATI).
- Gave presentations on different system components to vendors, potential
buyers, and internal folks.
NotifyMe Networks -=- January 2000
Software engineering contract (two weeks with ongoing advisory
relationship). Helped design the NotifyMe service. Developed service
launcher and some service infrastructure libraries.
The NotifyMe service used a bank of outbound phone lines to
provide automated, interactive customer notifications. Target customers
were corporations that wanted to provide information to their customers and get
simple feedback. Examples include online auction sites and furniture
delivery companies.
WebTV Networks, Inc. /
Microsoft, Inc. -=- March 1996 - December 1999
Software engineer in the online service development group.
WebTV runs an online service, connecting users to the Internet with a television
set-top box. The service was initially written in C on BSDI, but was
primarily developed on Sun Solaris 2.x (SPARC).
WebTV was acquired by
Microsoft in August of 1997.
Primary responsibilities:
- Designed and implemented the WebTV dialup infrastructure. The system
automatically configures the set-top box, selecting multiple dialup access
numbers from several different Internet access providers based on the
customer's phone number. Selection process optimizes for call cost (to
customer and to WebTV) while load-balancing and attempting to provide
redundant access in case of IAP failure. Works for NANP (US/Canada) and
Japanese phone systems. Wrote tools to examine and manipulate telco data and
per-customer settings.
- Designed and implemented the client upgrade system. Three different
classes of WebTV box are upgraded automatically by the service as needed. ROM
images are split into pieces, compressed, and digitally signed before being
downloaded.
- Held general ongoing responsibility for several major service components.
Other achievements:
- Responsible for implementing service support for new products, including
EchoStar "DishPlayer" and Thomson "eTV".
- Developed offline e-mail access for two different classes of WebTV client.
- Implemented data compression algorithms for use in client-service
communication.
- Developed pieces of the early service infrastructure (handled system
dependencies in build process, added "fun" stdio, tweaked client connection
handling, ported service from BSDI to Solaris, etc).
- Developed and maintained service side of phone activity logs and box crash
logs.
- Wrote service documentation for pieces I developed, including a 70-page
tome providing a general overview of the dialup system, for use by
engineering, QA, network operations, and customer care (the "Greater Scroll of
Dialing Wisdom").
- Plugged several security holes exposed by users, and several more that
weren't. Redesigned "tricks" service to allow different levels of access for
regular customers, outsourced Customer Care, and internal users.
Most development had a high level of visibility in Customer Care, Operations,
and Business Development.
As a result of my work at WebTV, I am named as an inventor on the following
issued patents:
US05838927 |
1998/11/17 | Method and apparatus for compressing a continuous,
indistinct data stream |
US05940074 |
1999/08/17 | Remote upgrade of software over a network |
US06023268 |
2000/02/08 | Reducing latency while downloading data over a network |
US06230319 |
2001/05/08 | Managing interruption while downloading data over a
network |
US06259442 |
2001/07/10 | Downloading software from a server to a client |
US06317792 |
2001/11/13 | Generation and execution of scripts for enabling
cost-effective access to network resources |
US06473099 |
2002/10/29 | Automatically upgrading software over a satellite link |
US06614804 |
2003/09/02 | Method and apparatus for remote update of clients by a
server via broadcast satellite |
US06779034 |
2004/08/17 | Cost-effective access to network resources |
Catapult Entertainment, Inc. -=- August 1994 - March 1996
Software engineer in the online service development group.
Catapult created the XBAND Video Game Modem and Network, a device and service
that allowed owners of Sega Genesis and Super Nintendo Entertainment System
(SNES) consoles to play against other users over a phone line. (Catapult
was later purchased by Mpath Interactive, a/k/a HearMe.)
Major feats:
- Implemented a significant portion of the service that Catapult launched
with in mid-November '94. Notably: customer database, intra-service mail,
news, game matching, game result tracking and player ranking, game patch
management, build environment, logging, stat generation, and general network
infrastructure including RPC between server processes. Service was written in
C on SunOS 4.
- Ongoing responsibility for much of the service. Carried a pager, and
fixed anything that broke. Continued development on customer database, new
game platform support, security, and client interaction.
Lesser feats:
- Implemented data compression algorithms for use in client-service
communication.
- Spent a month in Japan, adapting the service for use with the SNES-J
client.
- Shared assorted SunOS sysadmin duties with the rest of the team.
Highland Digital -=- June 1994 - July 1994
Software engineer. Highland Digital was primarily a Sun value-added
retailer (VAR). They kept a small software team to develop products that
addressed specific problems.
In brief:
- Ported various WWW tools to SunOS and Solaris.
- Set up highland.com web server.
Amdahl Corp. -=- June 1991 - May 1994
Software engineer in the UTS System Software Group. Amdahl built
IBM-compatible mainframes and software to run on them. UTS is Amdahl's
mainframe UNIX product, based on SVR3 and SVR4. As demand for mainframes
slowed, Amdahl began to move toward Sparc-based systems.
Things I did:
- Ported and enhanced utilities from AT&T's SVR4.x to UTS4.y.
- Added new system configuration and maintenance commands.
- Made changes to UTS4 kernel.
- Ported public domain and GNU-license software for internal use.
- Debugged a lot of strange situations.
- Worked on A+Texture, which was supposed to be a suite of applications for
World Wide Web development. Enhanced NCSA Mosaic.
Other Projects
CD-Recordable FAQ -=- March 1996
- 2010(-ish)
Created the Frequently Asked Questions list for CD recording, starting with
the list of questions that I wanted to have answered. The FAQ currently
fills about 250+ pages (depending on how you print it), has been translated at
various times into Hungarian, Turkish, Italian, French, Russian, Spanish,
German, Dutch, and Chinese, and at its peak got several thousand visitors a day.
Customer support organizations at major hardware and software companies
regularly referred customers to it as a resource. I have been interviewed
by various newspapers and made a live appearance as a guest on TechTV's "Call
for Help" program.
The FAQ is converted from an ASCII text Usenet posting to an indexed,
multi-page HTML format using a text-to-HTML
program I wrote for the purpose.
NufxLib and NuLib2 -=- February
2000
Designed, implemented, and documented a data archiving library and
application. The NufxLib library allows applications to add, extract, rename,
delete, and examine the contents of NuFX archives (popular in the Apple II
world, mainly for use with software emulators). NuLib2, a replacement for the
original NuLib (see below), is a command-line application implemented with
NufxLib. Both are available as source code on GitHub under BSD
licenses.
HardPressed[tm]
-=- March 1992 - July 1993
Designed and implemented "HardPressed", a transparent file compression
product for the Apple IIgs. Project involved extensive patching of the
operating system, development of GUI user applications, and writing lots of code
that had to be absolutely reliable. Sold as a commercial product through
WestCode Software.
The complete source code is available
here.
Hacking Data Compression -=-
October 1992 - January 1993
Developed a 12-part online course for the GEnie online service, entitled
"Hacking Data Compression". The course taught compression theory and
algorithm implementation, focusing on lossless data compression for Apple IIgs
applications written in C or 65816 assembly.
Netrek Enhancements -=- December 1991 - May 1994
Developed several enhancements to Netrek,
a multiplayer space combat game
written for UNIX and the X window system. Among them:
- Implemented UDP networking code. Netrek was originally written to use
TCP/IP, and performed poorly over lossy connections. To the best of my
knowledge, Netrek was the first game that ever used UDP over the Internet.
- Developed a suite of server administration tools, including a graphical
observation and maintenance tool (XShowGalaxy).
- Developed the "meta-server", which provides up-to-date information on
public server usage. (Looks like one is still running on
metaserver.netrek.org port 3521; telnet to it.)
- Wrote a curses-based player-list editor.
- Wrote a secure packet-passing daemon ("trekhopd") to allow gameplay across
a bastion-host firewall.
- Created the Frequently Offered Clever Suggestions (FOCS) list for would-be
developers.
I gave a deposition for the defense in a patent lawsuit (HearMe vs. Lipstream
Networks re: US 5,822,523) where Netrek was used as an example of prior art.
And again, when the same patent came up in PalTalk vs. Microsoft.
Optical Disc Jukebox Daemon -=- Spring 1991
Wrote a client library and server application to control an optical disc
jukebox that the Berkeley CS department had acquired.
NuLib -=- Early 1989 - 1991
Developed a full-featured file archiver for use with Apple II ".SHK"
archives. NuLib was written in C and ported to a wide variety of different
UNIX systems. The program is still in use, mainly by Apple II emulator
enthusiasts, though it has largely been replaced by NuLib2.
Background
Graduated from the University of California at Berkeley with a B.S. degree in
Electrical Engineering and Computer Science, May 1991.
Outside interests include martial arts, notably Krav Maga, Muay Thai,
and Danzan-Ryu Ju-jitsu. As part of my martial training I am certified in
seifukujitsu (massage therapy).
I have been known to perform certain acts of
interior decoration.
Last updated: 2024/08/01