Resume for
Objective
A position on a small, highly motivated software development team.
Skills
JavaScript, Java, Go, Python, Bash, Scala, C#, C++, C, Delphi, SQL
React, Sencha Touch, Ext JS, JQuery, Spring, Scala/Lift, CSS, HTML5, XML/XSLT, ASP.NET, PHP
Node.js, npm, webpack, Babel, Compass, Rhino
Git, Subversion, Ansible, Scrum, Jenkins, Docker, Vagrant
Experience
Origami Logic
Aug
2015
Mar
2016
contract, remote
Tidemark Systems, Inc.
Sep
2011
Oct
2014
Release Engineer: 1 year (full time, remote)
Senior UI Developer: 2 years (full time, remote)
Sportaneous
Jan
2011
Jul
2011
contract, remote
Mozilla
Sep
2008
Nov
2009
full time, remote
Google
Jun
2007
Jun
2008
ImageKind
Nov
2006
May
2007
contract
golimojo.com
Jun
2006
Nov
2006
personal project
The Pipestone Group, Inc.
Oct
2005
Jun
2006
Later became Trailfire, Inc.
Bocada, Inc.
Oct
2003
Jul
2005
Human Interface Technology Lab
Jan
2003
Jun
2003
University of Washington -- part time
Tangis Corp.
Apr
2001
Apr
2002
Akamai Technologies, Inc.
Apr
2000
Mar
2001
Akamai acquired INTERVU in Apr 2000
INTERVU, Inc.
Aug
1999
Apr
2000
INTERVU acquired Netpodium in Aug 1999
Netpodium, Inc.
May
1999
Aug
1999
Microsoft Corp.
Jun
1997
Feb
1999
Microsoft acquired Dimension X in May 1997
Dimension X
Feb
1997
May
1997
Macromedia, Inc.
Jan
1995
Nov
1996
Macromedia acquired Altsys in Jan 1995
Altsys Corp.
May
1992
Jan
1995
Origami Logic
Python, Bash, Git, Git Flow, Jenkins, Selenium, Nginx, Docker, Vagrant, Puppet, Mongo DB
Automated Integration Testing
Implemented a fully automated integration testing system for the Origami Logic application. This system was designed to run a suite of integration tests against multiple Origami Logic services running together in a test configuration. The system would start a new test run any time one of the components was rebuilt, assuming the other necessary packages also had testable builds that could be used.
To carry out a test run, the system would first determine which specific versions of each component package would be needed for the test. It would download each required package, unpack it, and configure the contained service properly for the run. It would also configure supporting services such as MongoDB and Nginx. Once this was done the test system would start up all the services, load test data into the database, and initiate the Selenium integration tests. After the test run was complete, the various services would be shut down and test results would be sent out by email.
The test system was designed to run not only on AWS but also in a Vagrant box which could easily be run on developers' laptops. This made it possible for engineers to easily make modifications to the test system itself, for example adding non-Selenium integration tests. Once the modifications were working properly on the Vagrant box, they could generally be expected to work on the real test system running under the Jenkins build server hosted on AWS.
Git branch management scripts
Wrote sophisticated scripts to facilitage Git flow-style management of a dozen or so Git repositories which were being branched and merged in parallel to facilitate the QA and release process for the the Origami Logic application. Initially these scripts were pretty simple, just Bash scripts to put a loop around the Git flow tool (for merges) and regular Git functionality (for creating branches). As the requirements grew, I made the scripts more complex, adding standardized error handling, multiple options, color-coded output, and even a work-around for a serious bug in the git-flow tool.
Tidemark
JavaScript, CoffeeScript, Java, Python, Bash, HTML, CSS, Sass/SCSS
Maven, Maven Plugin API, Spring, JSP, Apache Tiles
Ext-JS 4, Mozilla Rhino, JRuby, Google Closure Compiler
Git, Subversion, Jenkins, Ansible
Jenkins Slave Configuration and Automation Support
Reverse engineered the manual ad hoc configuration of the Jenkins build servers to created an automated Ansible configuration script. Extended the configuration script to support new requirements such as support for multiple JVM versions, multiple versions of Maven, etc. Used the configuration script to configure a suite of 4 new Jenkins slave VMs with a common configuration which could build both the older Java 6 version of the Tidemark application as well as a newer Java 7 version. Did substantial testing of the new slaves by manually running a suite of representative build jobs (with varying requirements for installed build tools) on each of the new VMs. Worked with a QE engineer to identify some missing dependencies needed for QE test and utility jobs, reconfiguring slaves as problems were identified.
Git Hook Scripts
Implemented a number of Git hook scripts in Python and Bash to monitor pushes to Tidemark's primary source code repository. These scripts sent out reminder and warning emails based on the contents and destination branches of Git pushes. Notable features were sending out process reminder emails when new feature branches were created and when old branches were archived. They also sent warnings when sensitve configuration files were changed, and when commits were made to release branches that were not obviously mirrored on the master branch.
Also implemented a Git hook script (in Python) which would monitor pushes to the Git repository, then apply branch-specific rules to decide if and when to run certain Jenkins build jobs. The script supported regular expression-based inclusion and exclusion rules for specifying build jobs based on the names of changed files; the rules were simply specified in a text file at the project root in the Git repository. This was advantageous since the hook script, running on the same VM and filesystem as the primary Git repository, could interrogate the repository directly, whereas the Jenkins server would have to update one or more cloned repositories to get the same degree of information.
Migrating the Jenkins server to Git
Wrote scripts to modify the XML job configuration files used by Jenkins -- there were more than a dozen active development branches, each with five build jobs -- so there were too may to modify by hand. Initially tested the scripts with a dummy branch and dummy build jobs, then moved on to testing the script against a few mostly inactive development branches, until finally building the confidence to convert all of the active jobs en masse. Such caution was necessary since, due to resource constraints, we had to do the updates on the production Jenkins server. At each step the conversion script got more sophisticated; ultimately it would snapshot configuration files into a Git repository at the beginning of each run so easy rollback was possible in the case of a mistake.
Initial Git Migration
Largely responsible for the migration of Tidemark's main source code repository from Subversion to Git. This required a substantial amount of prepatory work. Investigated how the existing repository might be translated from Subversion to Git format, what the impact was in terms of performance (better) and disk usage (worse, but still OK). Set up the official central Git server and used SubGit to translate the old Subversion repository to Git format. Configured SubGit to mirror to the Subversion repository until all the jobs on the Jenkins build server could also be migrated.
Tenant Logo Management
Designed a system for handling static resources (principally tenant logos) that could be shared across installations of the Tidemark application and which could be updated in near real-time. This involved a single static resources webserver backed by a Git repository. Wrote a script and related documentation which mostly automated the process of uploading tenant logos to the new system. This allowed Customer Success to largely take over logo management without having to understand Git. Later implemented server-side support in Java (using the JGIT library) as part of a project to make logo management possible through the standard Tidemark configuration GUI.
Grid Configuration UI
Designed and implemented the initial grid configuration UI in the main Tidemark application. This included the basic layout of grid configuration bricks corresponding to edges (configuration of grid rows or columns), nested edges (working kind of like a cross-product in the final rendered grid), and content bricks (the intersection of row and column bricks, corresponding to a rectangular section of the actual rendered grid). Implemented property dialogs for each type of configuration brick, including the design and implementation of a horizontal cell list for the complex variance edge brick. This list was scrollable and re-arrangeable using drag and drop gestures. Much of this functionality was implemented from scratch using low-level HTML, CSS, and JavaScript events, since there wasn't a library component that was compatible with the requirements. All UI functionality was tested on both desktop browsers and on the iPad. Also worked with an application-tier engineer to specify wire format and protocols for the server API servicing the grid configuration UI. Helped test the APIs and sometimes fixed bugs in the API java code.
New Login System
Implemented most of the login UI for the General Availability release of the Tidemark application. This included a rewrite of the main login page and the implementation of new pages for common user interactions such as password management. This effort included writing HTML, CSS, JavaScript, JSP, and Apache Tiles. Wrote many of the Java Spring endpoints for these pages as well.
Presentation Layer Build Tooling
Substantially rewrote the background build scripts used by the UI team to compile CoffeeScript and SCSS source files into JavaScript and CSS. Updated the build process to build the presentation layer on the Jenkins build server, rather than requiring UI engineers to check build products into the repository along with the source code. Given the unique way the presentation layer was compiled and packaged, this required the creation of a custom Maven plugin which embedded Rhino, Mozilla's JavaScript-in-Java engine, to host the CoffeeScript compiler and JRuby to host Compass, the tool used to convert SCSS files into CSS. The Maven plugin supported multiple output products (e.g. separate desktop and tablet versions) using a list of source filenames and a tagging scheme for source files that were only needed in a subset of build targets. Later added a code compression and obfuscation step by adding the Google Closure JavaScript compiler to the Maven plugin.
Number Formatter
Implemented support for Excel-inspired numeric format strings. This involved investigating Excel's implementation of numeric format strings, developing a specification for a similar (but not strictly compatible) implementation of format strings, creating a prototype implementation in a stand-alone web page, getting product management to sign off on the spec, then converting the JavaScript prototype implementation into CoffeeScript for use in the main Tidemark web application. The final implementation included a tokenizer, a parser, an object model, and logic for applying the object model to concrete numeric values. The example numeric formatting from the original PM review was converted to unit tests for the module.
Modelizer UI
Fixed bugs and implemented features in the Modelizer, Tidemark's internal tool for configuring tenants in the Tidemark system. This required a crash-course in Ext-JS 4.0 in order to fix some of the many bugs in the Modelizer prior to the first customer launch of the Tidemark system. Learned about common Ext-JS components like combo boxes, grids, forms, etc. Learned to navigate the Ext-JS documentation, search for Ext-JS examples and tutorials, and (inevitably) learned about monkey patching.
Sportaneous
Scala, Java, Scala/Lift, JavaScript, JQuery, HTML, CSS, Hibernate, MySql, Maven, Photoshop
Sportaneous website
Worked at all levels of the stack on the Sportaneous website. Technologies used included Scala, the Lift Web Framework, HTML, CSS, JavaScript, JQuery, Java, Hibernate, MySql, Maven, Adobe Photoshop, Amazon AWS hosting.
Designed and implemented the "keep me logged in" feature. Since the Lift framework is a stateful framework, this feature was effectively an "automatic login" feature, but the distinction was largely hidden from the end user. The feature involved the generation of unique and random login codes for each user, and a multi-step protocol to transmit the login code cookie to the server over a secure connection. The latter was necessary to handle the common case where a user returned to the website after session timeout by requesting a page over HTTP. In this case the secure cookie is transmitted over a transient HTTPS connection that is effectively invisible to the user. The overhead of the transient connection is only incurred if a cheap unsecure "flag" cookie indicates that a secure login cookie is available. This secure cookie is never sent in the clear, so there is no danger of it being hijacked when the user is on an open Wi-Fi network.
Implemented the game invite page. This combined existing Facebook and Twitter invite mechanisms and added a new email-invitation mechanism. All three were integrated into a single accordion-style UI. The email textbox reused the resizable textbox from the Game message list. The final design incorporated feedback from the Sportaneous CEO, but I was responsible for most of the design decisions.
Implemented a message list for the Game page. This included an automatically resizing textbox, an automatically updating message list, server side processing of new messages, formatting of existing messages, and the persistence model for these messages. Also fully responsible for the design of the message list UI.
Implemented other smaller features, including web UI to encourage users to invite more players whenever they join a game, a custom checkbox with a common look across multiple browsers, and also, among other things, installed and configured the Sportaneous WordPress blog.
Mozilla
C++, JavaScript, XUL, HTML, CSS, Firefox internals, Firebug internals
Mozilla Firefox 3.6
Implemented the Troubleshooting Information page (about:support). This page presents information useful for troubleshooting, including the Firefox version number, the list of installed extensions, and a partial list of preferences that have been modified from their default settings. The page also provides links to other helpful pages, such as about:plugins and about:buildconfig and it provides an easy way to open the current profile directory.
Firebug 1.4
Moved Firebug's main panel tabs from the second line of the Firebug UI to the first line, resulting in a more logical layout. Also re-arranged a number of secondary UI elements in response to the first change. The actual code changes were small, but a number of mockups, prototypes, and blog posts were necessary to validate the idea and sell it to the Firebug working group.
Mozilla Firefox 3.5
Modified Firefox's source view to automatically hyperlink URLs inside HREF and SRC attributes.
Google
Java, JavaScript, HTML, CSS
Google OnePick
Added an image document type and image thumbnail support to Google Docs, and implemented a low-level document store to access images stored on Google Picasa.
Google Docs
Implemented file upload (from the user's machine or from another location on the Internet) for a file picker. This included the client-side JavaScript for the UI as well as the server-side Java code for processing the uploads. The latter was also responsible for moving the uploaded file to an internal Google storage service and then reporting the upload to a metadata storage service.
ImageKind
C#, ASP.NET, IIS, ImageMagick
ImageKind Uploader
Principal engineer on the ImageKind Uploader and the web service API used by the Uploader to communicate with the server. The Uploader was a stand-alone GUI application written in C#. The web service was also written in C# and ran on ASP.NET under IIS. Designed and implemented the image thumbnail generation, most of the UI, and the web service. The Uploader communicated with the server using a multi-stage protocol which permitted the CPU- and memory-intensive thumbnail generation to reside on the client, while the business logic (such as disk quotas based on thumbnail file size) resided on the server.
Golimojo
Java, JavaScript, HTML, CSS, Firefox extensions, Java servlets
Golimojo
Conceived of, designed, and implemented golimojo.com, a website/web service which automatically hyperlinks phrases in existing web pages to matching Wikipedia articles. Technologies used included HTML, CSS, JavaScript, Java and Java servlets, and an Ajax-based Firefox extension. The implementation included a crude but very fast HTML/XML parser, data structures optimized for the high-speed analysis of text to identify key phrases, algorithms to analyze the Wikipedia page database for candidate articles, and a system for building specialized Firefox extensions on demand. The system is largely OS-independent and can run on Windows, Mac OSX, and Linux.
Pipestone/TrailFire
JavaScript, HTML, CSS, Firefox Extensions, AJAX, Apache
Pipestone Firefox Extension and Internet Explorer Toolbar
Designed and implemented the client-side search system for the Pipestone Firefox extension and later ported it to the Pipestone Internet Explorer toolbar. The search system was written in JavaScript and originally used an IFRAME-based technique for communicating with search engines and was later upgraded to use an XMLHttpRequest-based (AJAX) approach. The search system submitted search requests to search engines asynchronously, parsed the returned HTML to extract the search results, and then displayed them in the Pipestone sidebar. Search engine support was parameterized and selectable. A number of search engines were supported, including Google, Google News, MSN, MSN News, Yahoo Search, etc. The system could submit and manage many simultaneous asynchronous search requests, while maintaining robust error handling and the ability to cancel outstanding requests en masse. Also designed and implemented a custom JavaScript test framework that included the ability to test privileged code and which also provided a system for testing asynchronous event-driven code.
Bocada
Delphi, JavaScript, HTML, CSS, SQL, SQL Server
Bocada BackupReport 4.0
Added interactive column sorting capability to generated Flex Reports, using JavaScript and Dynamic HTML. Extended the report testing framework to test the report SQL as well as the supporting Delphi code. Designed the user interface and SQL back end for the rules subsystem, which will allow users to set up standard rules for associating backup client machines with specific zones, SLA profiles, pricelists, and timezones.
Bocada BackupReport 3.5
Designed and implemented three standard reports: The SLA Compliance Trends graphical report, the SLA Compliance Summary tabular report, and the Troubleshooting tabular report, using Delphi and T-SQL. Extended the standard Delphi memory manager to track memory allocations and report on them for identifying memory leaks. Designed and implemented a system for testing the standard reports against known data using the Delphi DUnit testing framework.
Bocada BackupReport 3.0
Designed and implemented, in Delphi, the standard Flex Report which permits BackupReport users to run essentially arbitrary SQL reports inside the BackupReport system and then view the results tabular form in a web browser. The Flex Report system includes the ability to rewrite (with some constraints) the user's SQL to automatically incorporate "query criteria" selected by the user through BackupReport's standard report UI.
Human Interface Technology Lab
C#, PHP, Python, HTML, CSS, OLE Automation
ARToolKit and MagicBook
Provided support for ARToolKit (a library for constructing augmented reality applications) and MagicBook (an augmented reality variation of the classic 3D-popup book). Implemented a web-based email archive solution for the ARToolKit mailing list using C# and Outlook OLE Automation for HTML generation and PHP for the search page. Implemented a Linux version of the email archiver using Python and the standard Unix mbox email format. Other responsibilities included giving demos for visitors and providing technical support for other MagicBook users. Also responsible for diagnosing and fixing problems with the MagicBook hardware setup.
Tangis
C++, Java, JavaScript, HTML, CSS, XML, XSLT, OLE Automation, COM, ATL
Tangis Procedure Presenter
Re-designed and re-wrote the Exelon pilot code to make it robust and flexible enough to use in a production system. This included the introduction of a simple and logical XML representation for inspection procedures and the implementation of an XSLT stylesheet to translate the XML representation into Dynamic HTML. Implemented a JavaScript framework for associating particular classes of elements with particular behaviors. The framework also provided a system for managing various combinations of style attributes, simplifying user interface behaviors such as color coding of procedure steps, hiding and revealing user interface elements such as buttons, and responding to user actions such as mouse clicks.
Tangis Exelon Pilot Project
Lead developer on a pilot project to assess the feasibility of replacing paper inspection procedures with a mobile electronic solution running on a pen tablet. Worked closely with the program manager and UI expert to understand the problem, design the solution, and implement it on a fixed and extremely tight schedule. Organized and coordinated the efforts of other engineers who assisted on the project. Implemented the initial Java (Visual J++) shell program which provided the basic menu system and hosted Internet Explorer for presentation of the test procedures. Used Tangis's user interface library to provide voice menu capability, and used Internet Explorer's DOM APIs to manipulate the procedure documents in various ways. Also used COM to expose an API so that script running in the procedure documents could access functionality provided by the shell application. Generated Dynamic HTML documents for the chosen test procedures and implemented a substantial amount of external JavaScript to manage the interactive behavior of the procedures and to interface with functionality exposed by the shell program.
Tangis User Interface Presentation System for PocketPC
Assisted in an effort to re-architect the Tangis User Interface Presentation Service and rewrite it in C++, initially targeting PocketPC 3.0 using eMbedded Visual C++. Designed and implemented the COM API for the menu management system, using a mixture of ATL and self-written C++ templates for implementing the COM classes.
Tangis Context Awareness Demo
Re-designed and re-wrote the original Context Awareness demo as a single application written in a single language (Java, using Microsoft extensions) to make it easier to debug, maintain, and extend. Introduced simple frameworks to abstract out management of the Tangis UI, to manage presentation of HTML content pages (displayed using a web control), and to manage access to the database used to store persistent data.
Tangis Theme Editor Demo
Implemented the Tangis Theme Editor demo using a mixture of XML, XSLT, HTML, CSS, and JavaScript, running under Internet Explorer 5.0. The Theme Editor allowed a user to build an essentially arbitrary HTML frameset by dropping vertical and horizontal "dividers" into the authoring area. The user could then populate the frames with a variety of "theme panels". Implemented a suite of pre-existing theme panels, including panels to access the "Contacts" and "Tasks" collections from Microsoft Outlook (using OLE Automation), panels to access arbitrary HTML pages, panels to access specific HTML pages such as Google and CNN, and some dummy panels too complex to actually implement for the demo. Once a new theme had been constructed in the Theme Editor, it could be saved and then displayed inside the Tangis Context Awareness demo.
Akamai
Java, C++, JNI, OLE Automation, TCP/IP, HTML
Akamai Conference 5.0
Initial design and implementation of the PowerPoint converter. The converter consisted of two major components, a Java 2/1.2 shell program and a DLL implemented in C++. The shell program used JNI to drive the DLL and the DLL used OLE Automation to load a PowerPoint presentation and export it as a sequence of GIF images.
Akamai Streaming Encoder Automation
Adapted and generalized the logging system from Conference 2.0 for use in SEA, including network logging capability. Also implemented the simple asynchronous message system underlying the network logging subsystem using TCP/IP sockets.
Akamai Netpodium 2.5
Implemented a simple archiving tool (using Java) to automate the process of building Netpodium archives. Implemented a Dynamic HTML wizard to provide a user-friendly front-end to the archive tool.
INTERVU/Akamai
Java, JavaScript, HTML
INTERVU/Akamai Conference 2.0
Responsible for various parts of the Conference system, including the automated archiving component and the initial implementation of the Windows Media encoder automation for video events. Designed and implemented the NT service shell which hosted the Seattle components of the Conference system, with the exception of the Netpodium server itself. Implemented self-contained test drivers for testing various Seattle components in isolation. Responsible for the back-end integration of the Seattle components into the main Conference system. Helped implement a stand-alone archive tool to serve as a stop-gap solution before video encoder automation was completed. Assisted the Conference 2.0 system administrators in the operational support of the Conference system by troubleshooting problems and providing hot fixes. Redesigned the scheduling system and retrofitted multi-threading into the load testing tool used for the Netpodium subsystem. Implemented an HTML/JavaScript template for hosting Conference archives offline and wrote step-by-step instructions describing how to customize the template for a specific event.
Microsoft
Java, C++, HTML DOM
Microsoft Vizact
Designed and implemented the core selection architecture and the on-screen handles for selection, resizing, and rotation. Implemented motion path recording and on-screen motion path editing and resizing. Designed and implemented the direct editing of VML shape outlines and the core support for the UI for hand-drawing VML shapes. (All in Java, using Microsoft extensions.) Also evaluated the requirements for multiple selection.
Microsoft Liquid Motion 1.5
Extended the selection model to support multiple selection. This included refactoring the existing selection and highlighting code to be more modular and understandable, and then the extension of that code to permit multiple items to be selected and deselected in both the structure view (a tree view control) and the main workspace. Also modified key editing functionality such as element movement and deletion to work with the new multiple selection capability. (All in Java.) Specified, designed, and implemented (in C++) the Liquid Motion webbot for FrontPage 2000. Worked closely with a FrontPage developer to get the improvements to the FrontPage server extensions necessary for the webbot.
Microsoft Liquid Motion 1.0
Rewrote LM 1.0's vector graphics functionality to execute on top of DirectAnimation. Implemented publishing of vector content to the DirectAnimation based LM run-time. Implemented a new motion path model which unified motion paths with the Bezier path model used for vector graphics. Rewrote the file serialization to make LM files both smaller and easier to understand. (All in Java.) Did extensive performance measurement and optimization, especially with respect to memory usage. Implemented a FrontPage 98 webbot (in C++) for managing embedded LM animations inside of FrontPage.
Dimension X
Java
Dimension X Liquid Motion Pro
Played a major role in the design of Liquid Motion Pro's vector graphics functionality. Implemented (in Java) the core vector rendering functionality and also the support logic needed by the UI for creating and editing vector graphics in the application.
Macromedia
C++, Netscape plugin API, Bitsteam embedded fonts
Macromedia Shockwave Graphics Player 7.0
Senior engineer on the Shockwave Graphics Player version 7.0, a Netscape Navigator plug-in written in C++. Designed and implemented embedded font support in the plug-in using technology licensed from Bitstream, Inc. Implemented support for reading the new FreeHand 7.0 file format in the plug-in. Designed the font embedding functionality in the FreeHand Afterburner Xtra and oversaw the new hire that implemented that functionality.
Macromedia Shockwave for FreeHand 5.0
Senior full-time engineer on Shockwave for FreeHand 5.0, a plug-in to Netscape Navigator written in C++ enabling the viewing of FreeHand 4.0/5.0 files embedded in HTML documents. Designed and implemented the document drawing engine. Also implemented a substantial portion of the Macintosh plug-in's interface to the Netscape plug-in API.
Altsys
C, C++, Flex & YACC
Altsys Facade 2.0
Designed and implemented Facade 2.0, a library written in an object-oriented extension to C, enabling third party applications to read and write FreeHand 4.0/5.0 files, as part of a contract project for Scitex America Corporation. Designed and implemented as part of the same project one half of a conversion program (written in C++) which converted Scitex Impak PS documents to and from FreeHand 4.0 documents.
Altsys OOPS 4.0
OOPS 4.0 was an experimental version of the proprietary object oriented programming system used by Altsys's FreeHand, Fontographer, and Virtuoso products. Implemented the parser for an IDL-like class declaration language using Lex (Flex) and YACC as well as the source code generation sub-system which generated header files containing C declarations and macros from the parse trees constructed by the parser. Implemented most of the run-time system (in C), including: management of meta-class data, a fast pool memory allocator for meta-class data, dynamic method look-up, and a caching scheme which avoided expensive look-ups for the vast majority of method dispatches. Internal versions of FreeHand 4.0 and Virtuoso 1.0 were ported to OOPS 4.0 and it was later used in the Facade 2.0 library.
Altsys Facade 1.0
Responsible for maintaining Facade 1.0, a library enabling third party applications to read and write FreeHand 3.0/3.1 files. Responsible for converting the project from Think C to Apple MPW. Converted PC version from static library to DLL using Borland C++ 3.1. Provided support for third party clients of the library.
Articles
"Forward Difference Calculation of Bezier Curves", C/C++ Users Journal, November 1997
Education
Bachelor of Science in Computing and Information Science with double major in Mathematics
Oklahoma State University, 1993
References
Available on request.