* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Download Philip Craig Plumlee
Survey
Document related concepts
Transcript
Philip Craig Plumlee 7375 Alicante Road Carlsbad, CA 92009 [email protected] Phone: 760 814 5658 760 500 0338 Senior Software Engineer Objective To demonstrate rapid, goal-oriented, safe, and robust coding techniques, by both teaching and doing, in an environment of aggressive multi-platform, integrated systems, and advanced View visualizations. Programming Experience 2009-present – Cuker Interactive – Senior Software Engineer Cuker is a website agency specializing in boutique e-commerce and online marketing strategies, using Python Django. I upgraded their unit testing strategy to support Test-Driven Development, BehaviorDriven Development, and Continuous Integration to CruiseControl.rb. Celtek Clan – Integrated fulfillment via SOAP to ProLog’s ProWares warehouse management system. django-test-extensions – Add assert_xml and assert_html, to test XML and HTML via XPath. Manduka – Transmit sales orders via SOAP to Intuit QuickBooks. merchant-gateways – An open source Python port of the Rails ActiveMerchant plugin, to give all payment gateways the same simplified, idiomatic interface. Morelia viridis – An open source Behavior Driven Development system allowing clients to express business rules in plain English. Unit tests evaluate the rules and verify the source code obeys its specifications. Xterra Wetsuits – Integrated fulfillment to Mail Order Manager, and wrote an elaborate packing algorithm that matches wetsuit orders to correct box sizes. Web Cube – The core of all these projects is a CMS & e-commerce engine using Django’s segmented architecture to allow clients to pick and choose which features they want in their websites, all running from a common code base. 2009 – Climber.com – Software Contractor Launched 2 projects; one to calculate a user's résumé’s visibility to search engines, & mail out reminders when their rank changes, and another to periodically send customized search results to registered recruiters. Both projects required a “scheduling engine”, to sort and collate huge record lists before efficiently dispatching each one. 2007-2009 – Integralnet (eBlogs) – Senior Software Engineer Trained a crew of 6 junior engineers to use Ruby on Rails, Ajax, & MySQL for e-commerce and inhouse business views, using MacOSX desktops and Linux servers. My innovative contributions to the TDD environment, assert{ 2.0 }, assert_xhtml, and assert_rjs_, are now released and used as Free Software. VideoFly – The customer entertainment system, using light Ajax, and advanced SOAP Web Services connecting to multiple affiliates & payment gateways, with rotating content, & high-volume Flash, integrated via XML. weg2257 – The in-house content management system, using advanced Ajax, and high-volume MySQL data warehousing. All projects use Capistrano to deploy to multiple server clusters, with load balancing. 2005-2006 – Akonix – Senior Test Engineer Retrofit cross-platform tests for a C++ server that parses and filters various Instant Messaging protocols, using Boost. Researched and architected the kernel of a new platform, using CORBA (ACE/TAO/CIAO libraries) on Linux. 2004 – High Moon Studios (formerly Sammy Studios) – Test Engineer Built an integration test server for Darkwatch, using MiniRubyWiki to host acceptance test scripts written in Lua, applying the “Broadband Feedback” principle from the book Test First User Interfaces. Wrote developers’ tools in C#. Tested Maya, Renderware, Havok, Xbox, PS2, etc. 2004 – Spun Labs – Lemon Grove CA – Agile Coach Facilitate 2.0 – TDD, refactoring, tracking, and acceptance test mentoring for a turnkey orderentry appliance, using Java, Linux, MySQL, Apache & Tomcat, targeting small businesses. 2002 – 2003 – SYSTRAN – La Jolla CA – Senior Quality Control Engineer Introduced software product lines, daily builds, and automated tests to stabilize and localize their desktop product line, written in VB and WTL, using advanced XML and XSLT, and advanced internationalization techniques. ManageMSI – dynamically reconfigure Visual Studio VDPROJ files to dynamically create MSI (Microsoft Installer) files containing any product line and any kit of data files. Includes a complete, light, robust VDPROJ parser. C++ Server Interface Dialog – Internet Explorer hosted inside a WTL dialog box, controlling its DOM objects via COM, and exploiting its HTTP form plumbing to piggyback extra information to the Systran Enterprise Server. All written entirely via Test Driven Development (exposing none too few bugs in their server!). SystranDashboard – a lite GUI displaying a list of all of SYSTRAN’s product lines, and all of their language pairs. To generate a complete end-user application, one selects a product line, any combination of language pairs, and a list of locales. The program compiled and tested that configuration, then automatically built its locales and installers using two other projects. This system removed months from SYSTRAN’s order turn-around time. BASH shell scripts, CygWin, GNU, Linux, Makefiles, Perl, Tk, Unicode Systran Enterprise Client, Greek – retrofitted automated tests, debugged, trouble-shot, and upgraded Version 4 of the GUI tool suite to display a pure Greek user interface. iso-88597, VC++, WTL Systran Toolbar for Logitech Users – http://www.systransoft.com/Logitech/ Upgraded SYSTRAN’s Internet Explorer Toolbar (which translates Web pages between any of >10 language pairs) to dynamically register with a server and display intermittent dynamic pop-up ads, containing graphics, using efficient dynamically uploaded graphics. Project finished in 2 weeks using Test Driven Development. GIF, HTTP, VB, XSLT ResourceLocalizer – dynamically replace English text in RC resource scripts with translated text from any other language. C++, Unicode, XML 9/2002 – 4/2003 – MiniRubyWiki – Free Software A Wiki tuned for personal & project use, with many advanced features – embedded GraphViz, userdefined markup tags, etc. – and providing the most correct Wiki interface features possible under pure HTML. Now in use at many private sites. 9/2000 – 9/2002 – Omnigon International – Carlsbad, CA – Computer Scientist Data visualization and kernel processes for a distributed very-high-dimension complexity solving tool, using Agile Development, Linux and Python. Chain Code – suite of graphics tools to render the harmonics of chain-codes applied to 2D pattern recognition. BLT, Python Entity Editor – canvas to display the nodes, connections and activities between elements of the complexity solving tool. Editing the nodes programmed the tool. GraphViz, Python, Tkinter Graph Quantizer – canvases and math algorithms to represent graphs (nodes & edges), and animate advanced algorithms processing them. GraphViz, Python, Tkinter NumGram – canvas to render and edit the mathematical operations of a pattern-matching tool. BLT, Python, Tkinter NumGram Movies – experimental movies depicting histograms of mathematical results as animations of mountain range fly-bys. Python, POVray Zhegalkin Polynomials – tutored the Russian astrophysicist Marina Murzina to use Test Driven Development and write a Python program to manipulate binary polynomials and process them with a suite of Boolean operations. BLT, Python 2001 – Flea – Free Software Fractal generator. Users write turtle graphics using a miniature language. Ruby code interprets the turtle commands and outputs a stream of 3d object primitives. Pluggable back-ends convert these primitives into commands to a rendering tool, such as GTK, OpenGL, POVray, VRML, etc. Project used pure Test Driven Development. 1999 – 2000 – Spherion – Irvine, CA – Software Consultant Consultant to Odetics (now DTGTV; video tape library robotics using Win32, VC++), and to Firstsource.com (B2B e-commerce using Win32, VC++ and SQL Server). AIRO Automation System – debugged & cleaned up the build process for >1 million lines of C++ Data Export Tool – GUI, back-end, and task scheduler for a tool to convert any of an arbitrary set of views into a database into custom formatted comma-separated value text files, for regular export to other companies’ data portals. ASP, COM, HTML, JavaScript, MFC, MS Task Scheduler, MySQL, SQL Server, Test Driven Development 1998 – 1999 – Environmental Software – Huntington Beach, CA – Senior Software Engineer Data visualization, maps, and contour plots for a database of environmental quality samples taken at a customer's site. Win32, Visual Basic, VC++, SQL Server Data Importer – system to import any database of geographically distributed soil sample analysis results, of any schema, process the intermediate version to clean and sanitize it, and bulkimport the result into EnvSoft’s proprietary database. VB, SQL Server Surface Maps – ported FORTRAN contour plotting algorithms to C, wrapped them into an OCX control, painted this onto Visual Basic forms, and added controls to configure dozens of math coefficients. Rendered map outputs into portable formats, and display these on overlays of aerial photographs. Thorough documentation, including the math routines involved. ATL, DocJet, f2c, GDI, GIS, MFC, C, VB6 1998 – 1998 – Politizen.com – Culver City, CA – Webmaster & Software Engineer Authored & deployed a Web site containing an e-mail portal, ZIP-code database, discussion forums, and a Wiki. ASP, HTML, JScript, SQL Server, VBScript 1998 – 1998 – NBC Digital Productions – Burbank, CA – Software Engineer Temporary job upgrading the login to the Pretender game site. ASP, HTML, SQL Server, VBScript 1989 – 1998 – Jon Goldman Associates – Anaheim, CA – Chief Software Architect Process management systems for the semiconductor industry. Read data from various industry tools; graph it, and analyze it for trends. OS/2, Win32, Visual Basic, VC++ Applied Materials Recipe Verifier – Intercept Semiconductor Equipment Communication Standard messages between a cell-controller and an AMATS plasma furnace; verify the Recipes in these messages so all fields fall within specification limits. RS232c, VB BayView – Tool status viewer, permitting engineers outside the semiconductor fab to see at a glance what any set of dissimilar tools are doing in real time. The status viewer presents a (tool type-specific) icon if the tool is in process, and another if it is idle. Next to each icon is a set of vital statistics, such as the Recipe name and time into the run. If the SPC software reports an alarm, the status viewer instantly displays it as a blinking yellow icon. Developed both a TCP/IP client-server protocol and a database format to carry generic process data live from a tool monitor to a status viewer. Wrote ActiveX controls to interpret the protocol and output records, but not to handle the low-level TCP/IP sockets. Our VB programmers send data from off-the-shelf TCP/IP controls into my controls; this simplifies my controls and lets us mix and match the objects. The status viewer is a colorful Visual Basic form with apparently no user interface at all - no menus and almost no keystrokes. It reads a list of programs from an INI file. Then it displays a toolbar with an icon for each program. You select a tool and hit the toolbar, and the program launches the program with the tool's name or other info in its command line. The first program we add to the INI file displays the current process as a graph. VB, TCP/IP, proprietary database & network protocols Grapher – JGA's primary graphic process viewer. LabViews-based tool to display the data signals captured from one operation of an arbitrary semiconductor tool. The program stacks all the signals from one or more processes in horizontal strips, synchronizes them in time, zooms and pans, turns lines or strips on and off, presents raw data in a little report, etc. Our installers program which lines to display in what strips with a single, central, non-tool-specific INI file of less than 100 lines. Design Patterns, STL, VC++ Ion Implanter Monitor – for Cypress Semiconductor. Monitor an Eaton Ion Implanter using GEM communication. Verify entered recipe and lot numbers against the customer's Sybase workflow database. Collect process information into historical files and display it as graphs, and log all operator interactions. Borland C++, OS/2 Presentation Manager Net9000 – VT-220 terminal emulator to place a Graphical User Interface between the user and the character-mode interface of the Thermco Furnace MUX-9000 controller. Users hit our buttons, and our Virtual User drives the controller's user interface. The program maintains a database of Thermco Recipes, presents these in a full-featured source code browser. Recipes can transfer over a network between furnaces, and users can drive a furnace's terminal remotely. Parsed the 'recipe' command language for Thermco Vapor Deposition Furnaces, to present a hierarchy chart of the subroutine calls. Thermco writes their recipes in a language like old-fashioned BASIC, with GOSUB calls. This, plus their queasy user interface, makes the recipes too easy to write and absurdly difficult to read. The first thing our program does is expand all subroutines into a call tree and put every line in order. Think of it as a source code browser for recipes. Simulated recipe action in Schemes. Borland C++, OS/2 Presentation Manager Novellus Monitor – interpret the Semiconductor Equipment Communication Standard protocol emitted by a Novellus semiconductor furnace; sample its data while it runs, and relay the customer’s workflow commands into it. Borland C++, OS/2 Presentation Manager Recipe Editor – download, interpret, and graphically render the sequence of commands in a Thermco furnace controller recipe. Edit, store, browse, and upload recipes. VB Schemes – render any database contents, or live data, as a customized animated map representing the pipes and control signals inside a furnace’s Mass Flow Controller system. OS/2, Presentation Manager, proprietary language SPEEDFAM Material Handling Monitor – Record wafer film thickness before and after polishing. Display thickness trends over many runs. Schedule wafers from various lots for test, production and touchup polishing. VB TEL Data Capture – interpret the GEM emitted by a Tokyo Electron Limited vapor deposition furnace & store its run information to our proprietary database. Borland C++, OS/2 Terminal – VT-52 terminal emulator to present RS232c output from the Thermco Furnace, with hand-made character mode windows, menus, configurable charts and context-sensitive help. Thermo Data Capture – interpret the VT52 output of a Thermco furnace; store run information in our database. Borland C++, OS/2, Oracle TrendViewer 2000 – database and GUI to collate and display Statistical Process Control trends in the behavior of individual components of semiconductor furnaces. VB, LabViews, VC++, SQL Server 1988 – 1989 Digisoft – Anaheim CA – Programmer Inventory database for seafood warehouses, using CET BASIC, ISAM, & XENIX. Wrote a library of character-based input-output routines for a large database system, to make each module of the system consistent, user-friendly, and automatically upgradable. At the time, CET BASIC did not have a real userinterface library of its own. 1988-90 – Orange Coast College – Costa Mesa, CA Introduction to (1980's versions of) databases, programming languages, and techniques. 1987 – Bucks County Community College – Newton, PA Trigonometry & Calculus. 1982-6 – Tyler School of Art – Elkins Park, PA Painting, drawing, drafting, cartooning, performance art, and AmigaBASIC. Writing Acknowledged by the books… Agile Software Development: Principles Practices & Patterns by Robert C. Martin Extreme Programming Installed by Ron Jeffries Programming Cocoa with Ruby by Brian Marick Test Driven Development: By Example by Kent Beck Unit Test Frameworks by Paul Hamill User Stories Applied: for Agile Software Development by Mike Cohn Working Effectively with Legacy Code by Michael Feathers Lecturing Test First User Interfaces Test Driven Development Test First User Interfaces Refactoring Demo 27 8 4 2 July April Sept Oct 2004 2004 2003 2002 XP/Southern California XP/San Diego XP/San Diego XP/San Diego 2003 – 2005 – Test First User Interfaces A tutorial on Test Driven Development to create advanced Graphical User Interfaces. The book extends the Test Driven Development concept into GUIs, demonstrating tests, written at the same time as the source code, aggressively resisting bugs and preventing the need to operate a debugger. This lifecycle allows simple design principles to emerge into advanced and flexible object models, by avoiding GUI development's notorious fragility. The book presents the complete source history of these advanced projects: SVG Canvas – Combining Ruby, Tk, XML, XPath and GraphViz Test-Driven Development to display graphs in a canvas. Family Tree – Extending the previous case study to add interactive editing. NanoCppUnit – A tiny Visual C++ test rig that address the hardest issues of COM, WTL, and MSXML. Model View Controller – Extend the previous case study to use TDD and Refactoring to grow a data entry program with a clean, layered, and decoupled architecture. Broadband Feedback – Extend the previous case study to use TDD and ImageMagick to constrain low-level GDI graphics, localization & internationalization, and animation. Embedded GNU-C++ Mophun™ Games – A tiny game for color cell phones. The Web – Writing tests that constrain Web projects, using Internet Explore's DOM layer thru COM, HttpUnit with Java, and WebUnit with Ruby. Writing a Web server, in Ruby, that constrains Agile projects using an Acceptance Test Framework comparable to http://fitnesse.org/ SKILLS Languages C++ years 11 C language Visual Basic Ruby JavaScript Python Perl Systems MS Windows SQL STL TCP/IP HTML ActiveX / OLE / COM GNU Linux MFC AmigaDOS Tk ASP WTL XML XSLT MSI Unicode Gnome KDE Mophun Techniques User Interface Theory Object Oriented Programming Design Patterns Test Driven Development Extreme Programming Statistical Process Control 6 6 4 4 2 2 13 10 10 10 8 6 6 5 4 4 3 3 1 1 1 1 1 14 10 7 5 3 2 References employers o Kent Beck – [email protected] Dave Geving – [email protected] – (h)619-442-9337 (c)619-249-2310 Llewellyn Falco – [email protected] – (858) 336-6560 Paul Petralia – [email protected] – 201-236-7997 Paul Treece – 562 592 7608 colleagues o Ben Kovitz – [email protected] – 858 488 2052 Jim Shore – [email protected] John Sarkela – [email protected]