Andrea P. L. Shepard 1819 23rd Avenue #E212 Seattle, WA 98122 andrea@persephoneslair.org Skills: C/C++: Most of what I did at Isilon was in C++, and my work at Zillow was about 50% C++, and at Amazon and The TC I worked primarily in C++; I used C and C++ extensively all through school and at both of my Microsoft internships. This was my first major programming language, self-taught before I started at Cornell, so I probably have close to 9 years of C/C++ experience now. Java: I worked with Java at Zillow using the Tapestry web application framework to develop features and fix bugs in their search pages. Networking: I have experience with TCP/IP networking and client/server architecture. One of my main projects at Zillow was a multithreaded 'change broker' server written in C++ for a UNIX environment, responding to queries from its on-disk data store and in-memory cache via HTTP. UNIX/Linux: I have extensive UNIX/Linux experience; every position I've held since I graduated involved substantial programming on a Linux platform, so that makes about four years of professional experience, and I've used Linux on Intel or SPARC platforms and SGIs at home exclusively since the 1990s. Other programming languages: I have significant professional experience with Java (at Zillow) and Perl (at Amazon). I also have experience with assembler for x86, MIPS and SPARC processors. Experience: Envision: Software Development Engineer, February 2009 to July 2009 * Worked on integrations with vendor-specific APIs for telephony server product, mainly in C++ and C#. Implemented RTP transmitter to play sound files back to VoIP, including decoders for MS-GSM and VOX ADPCM formats. Isilon Systems: Software Development Engineer (Contract), November 2008 to January 2009 * Worked on startup scripts and developed runlevel switching utility for Isilon's FreeBSD-based OneFS product. Zillow.com: Software Development Engineer, Search & Maps team, June 2007 to October 2008 * Worked on Search & Maps functionality for web site in Java. * Developed change broker to queue and distribute updates and reduce load on SQL server instances in C++ on Linux. This was a multithreaded server which queried back-end databases for updates, queued them (on disk with an in-memory cache) and responded to queries through an HTTP interface. The Technical Committee: Software Development Engineer (Contract), May 2006 to January 2007 * Prototyped Linux server-side implementation of Microsoft's LSA-RPC protocol in C++ in order to verify Microsoft's protocol documentation. Amazon.com: Software Development Engineer for Financial Systems, January 2005 to May 2006 * Developed and maintained software handling Amazon's accounting systems, using C++, Perl and SQL (Oracle). Microsoft: SDE Intern for Windows CE, Summer 2003 * Developed USB function drivers and boot loader for AMD Alchemy Au1550 MIPS32 microcontroller. Microsoft: SDE Intern for Visual C++, Summer 2002 * Modified the Visual C++ back-end to optimize in parallel on SMP machines at per-function granularity. Education: Cornell University, College of Engineering B.S. in Computer Science, Class of 2004 Personal Projects: * Developed a minimalist package manager to support custom Linux distribution. Original version written in Perl in 2005; rewritten in C in 2008. The C version can do a streaming install of new packages from stdin, suitable for piping wget through during a network boot/install, using under 64K of heap and no temporary disk space in excess of that needed by the package itself. * Bug-fixes to get recent Linux kernel versions (2.6.26.1 at the moment) to boot on Sun E4500 server. This involved fixing a race condition in the SMP startup code which caused the non-boot processors to try to make OpenPROM calls using the same parameter buffer, and only manifested with high CPU counts (3 or more in theory, not observed in practice with fewer than 5), and modifying the TILO boot loader to support larger boot images. There were also some minor tweaks needed to make interrupt handling on the PCI I/O board work. My SMP startup bug-fixes were recently accepted into the kernel source tree. * Ported Cyclades PC300 T1 line card Linux driver to UltraSPARC and modified it to work on recent kernels. This involved rewriting portions of the driver to work with the newer version of the kernel HDLC layer in 2.6.3 and later, editing for 64-bit cleanliness and rewriting the management of buffers in the card's on-board memory for improved performance. (April 2005)