| Experience: |
Hewlett Packard, Palo Alto and Cupertino, CA February 2005 - present: Designed and developed much of the client and server sides of HP Guide as a Python and Apache application on Linux and Windows XP, and ported a suitable piece of it to Vista for inclusion in HP Advisor and distribution on Spring 2007 HP commercial PC's.
Elemental Security, San Mateo, CA Implemented high-level inference about the attributes of devices on the network. Designed and implemented a synchronization primitive designed to prevent deadlocks. Each thread could specify a set of objects to lock. Nested acquisition of locks was prohibited. The primitive was fair to ensure that requests to lock large numbers of objects would not be indefinitely postponed by requests to lock individual objects. Designed and implemented a general scheme for keeping a write-through cache consistent with the underlying database in the presence of errors. If an error happened while updating the cache, the values from the cache were flushed and then reread from the database when needed. Modified values in the cache had to be kept locked until the corresponding database values were committed. Designed and implemented a write-behind queue with a write-through cache to eliminate database writes as a bottleneck in one part of the server. Because new updates to the cache were merged with any redundant updates found waiting in the queue, as the queue gets longer there are more opportunities to optimize away redundant writes. For typical usage, the maximum number of possible non-redundant writes was able to fit into memory, so the queue size is bounded and the server can make progress without waiting on the database no matter how slow the database is. Wrote a watchdog in Python to restart the Tomcat server if it hangs. Wrote specifications for aspects of the product as part of a process that achieved consensus where there was none before. The specifications drove actual implementations. This is different from the usual scenario where specifications either document obvious decisions or specifications are written after the implementation. Wrote automated unit tests for my code that were run with every build. Because the build was considered a failure if the unit tests failed, the unit tests were actively maintained and regressions were promptly fixed, as opposed to the usual scenario where broken unit tests tend to get ignored.
Unemployed (by choice), Sunnyvale, CA Got it to work with some small programs, but got bogged down when translating their module system. Eventually decided it wasn't a viable product.
Branders.com, Foster City, CA March 2000 - July 2002: Lead programmer for much of the implementation of their present website using Java, Oracle, and Solaris. Their web site sells promotional products. Their web server is based on Blue Martini, which in turn is built on Weblogic. We often used Weblogic directly. Implemented the version of the image processing software currently used to composite custom logos and text onto product images on their web site. This included digitally processing some logo images to make them look embossed or embroidered and flood fill algorithms used to eliminate solid background colors of a logo before displaying them on the product. Implemented the initial Java version of their pricing algorithm. Worked as part of a team of varying size, ultimately 4, of programmers maintaining and adding features to their web site. Wrote a JDBC driver that tracks and reports connections that were opened but never closed and transactions that are never committed. This driver uses the existing JDBC drivers to access the database. Diagnosed an intermittent networking performance problem using tcpdump. Implemented an interface using XML to a separate Windows NT Yantra server for tracking orders in progress, and then eventually worked with one other programmer in the group to replace Yantra with Java code on the Solaris servers. Also replaced ACT, a Windows NT based system for contact tracking, with Java code on the Solaris servers. The replacement systems had a framework that cleanly separated page layout specifications from code that dealt with the computational content of the pages. The framework supported:
Unemployed (by choice), Sunnyvale, CA
Infoseek, Sunnyvale, CA Starting in December 1998, I eased some bottlenecks in Infoseek's software process. Re-engineered the way plug-ins are installed in Infoseek's web servers so they can be compiled faster. Worked around bugs in Sun's C++ compiler so now they can use available processors concurrently for compilations. Centralized Infoseek's Makefiles written in GNU make. Compile dependencies between source programs could be inferred from the sources and a few lines of configuration files. Before this, their programmers were hand-crafting long detailed makefiles for each directory of sources. Working with another consultant, split up some large monolithic chunks of their system into reasonable-sized packages free from cyclic build-time dependencies between packages. This involved making tools that can analyze the dependencies between source files and criticize a proposed arrangement of the source files into packages, and finding an arrangement of files in packages that had meaning to the programmers and could also be made cycle-free without modifying too much source code. Replaced the long hand-crafted makefiles in this part of the system with the short configuration files, as described above. Starting in July 1998, I worked with some other contractors and employees to allow Infoseek's ad servers to use a new version of SelectCast, a banner ad-selecting technology provided by Aptex. First I urgently stabilizized the operation of the old implementation so that it made more rational decisions about when to forget information about old users, as opposed to filling up its disk with useless information or forgetting almost everybody. When we interfaced the new version of the package (version 2.6.3) to Infoseek's web servers, I wrote Java code that determined what SelectCast should learn about users as they traverse content at Infoseek's site.
Silicon Graphics, Mountain View, CA
Silicon Graphics, Mountain View, CA
Thomson Consumer Electronics, Culver City and Mountain View, CA
Work during breaks from school:
IBM Watson Research Center, Yorktown Heights, NY
General Electric R&D, Schenectady, NY
Rensselaer Polytechnic Institute, Troy, NY
Aquidneck Data Corporation, Dahlgren, VA
| ||||||||||||
| Education: |
Carnegie Mellon University, Pittsburgh, PA Ph. D. in Computer Science, March 1994 Thesis topic: Refinement Types, a customizable type system for ML, a functional programming language.
Rensselaer Polytechnic Institute, Troy, NY
Mary Washington College, Fredericksburg, VA | ||||||||||||
| Publications: |
Refinement Types for ML, with Frank Pfenning.
Presented at the ACM SIGPLAN 1991
Conference on Programming Language Design and Implementation, pages
268-277.
Overriding Methods Considered Harmful; or ADT-OBJ: Rationale and User's Guide, Ergo report 88-064, Carnegie Mellon University, 1988. Dagwood: A System for Manipulating Polynomials Given by Straight-Line Programs, with Gregory M. Imirzian, Erich Kaltofen, and Lakshman Yagati. ACM Transactions on Mathematical Software, Vol. 14, No. 3, September 1988, pages 218-240. |