Craig Stewart Holman, Ph.D.
***** ****** ******, ***. *** 952-***-****
Eden Prairie, Minnesota 55344 www.patterncraft.com abpo6i@r.postjobfree.com
Services Offered
Software architecture, design, and development in C#, C++, C, PL/SQL, rule systems; technical leadership
Object-oriented design of frameworks, class libraries, components, and applications; design patterns
Algorithm engineering: design, implementation, and tuning
Research in computer science, especially in algorithms and graph theory
Review of architectures, designs and code; review and tuning of development methodologies
Instruction in C#, C++, C, .NET, PL/SQL, rule systems, object -oriented analysis and design, optimization, testability,
GUI design, and other aspects of software development
Creativity, innovation, and performance
Available after appropriate notice, preferably starting in January or February 2011, negotiable.
Education
Ph.D. Northwestern University, Computer Science, 1990
M.S. Northwestern University, Computer Science, 1988
B.S. Northeastern Illinois University, Information Science, Mathematics minor, 1986
B.A. University of Illinois at Urbana-Champaign, English Literature, Mathematics minor, 1981
Dissertation : Elements of an Expert System for Determining the Satisfiability of General Boolean Expressions
Thesis : A Method for Determining the Satisfiability of General Boolean Expressions
Qualifiers: Artificial Intelligence, Formal Theory, Programming Languages and Compiler Theory
Software Engineering Experience
Languages and Programming Technologies
Visual Studio 2005 2010. NET 2 4.0, LINQ, ASP.NET, WCF, MS SQL Server 2005 2008, MS
C# and .NET
Report Viewer, dynamic HTML generation, VSTO; add-ins for Office 2003 and 2007
applications; Fluent Ribbon tabs for Office 2007 add -ins; robust multithreading, TCP/IP, HTTP,
MSMQ, event publishing/subscription, web services, GUI. Experience with namespaces includes
CodeDom, Collections, ComponentModel, Configuration, Data (Common, Odbc, OleDb,
SqlClient), Diagnostics, Drawing, Globalization, IO, Linq, Messaging, Net, Reflection, Runtime
(InteropServices, Remoting (Channels.Tcp)), Security.Cryptography, Serialization (Formatters),
ServiceModel (Dispatcher), Text, Threading (Tasks), Timers, Windows.Forms, Xml (Linq,
Schema); Office (Core, DocumentFormat (OpenXml, OpenXml.Packaging), Interop (Excel,
PowerPoint, Word)); Microsoft (CSharp, Forms, Reporting, Win32). Exploring F#, WF, WPF.
ASP.NET Website implemented using DotNetNuke, Telerik controls, custom controls, ASPX, MVC.
XML DOM, SAX, XSD, XSLT; XML generation and parsing, .NET Xml(Linq, Schema).
Open XML Experience parsing and manipulating Microsoft's new open format for Office files, including
Microsoft Word 2007, PowerPoint 2007, and Excel 2007.
Theory, design, relational DBMS, deductive database systems, Oracle PL/SQL; Oracle 7i 9i; MS
Database
SQL Server 2005 2008, T-SQL, complex queries, stored procedures, dynamically generated/
executed stored procedures; taught undergraduate, graduate courses in database design,theory
C Microsoft, Borland, DeSmet, and UNIX V; taught to undergraduates, IBM developers
C++ Microsoft, Borland, UNIX V; taught to undergraduate and graduate students
1.52 2010; .NET 3.5 4.0, STL, Boost, Win32 API, MFC, COM, OLE automation (Word, Excel),
Visual C++
graphics, multithreading, messaging, enhanced controls, DLL, exception handling, serialization,
memory-mapped files, private heaps, Unicode, embedded SQL, SNMP, services, optimization;
taught to undergraduates and others
Rule Systems Extensive coursework in Artificial Intelligence, Mathematical Logic, Automated Theorem
Proving, Database Theory, and Deductive Databases; member of the Deductive Database
Research Group at Northwestern University; teaching assistant for Automated Reasoning course;
taught graduate course in Automated Reasoning; Otter; 2 years at Blue Cross Blue Shield of MN
driving an enterprise business rules initiative, including vision, architecture, methodology, design,
and prototyping; Pegasystems
Significant experience: Pascal, Java, Python, Lua, Assembler (6502), LISP, Logo, Modula-2, SNOBOL, Prolog
Moderate experience : F#, Sage, CSS, Assembler (370, 3090, 8088), COBOL, FORTRAN, PL/I, Visual Basic 5
/20/10
Craig Stewart Holman, Ph.D.
Software Engineering Experience (continued)
Operating Environments
Windows 7, Vista, XP, 2000, NT 4.0, NT 3.51, 98, 95, and 3.x; DOS, Unix System V, OS/2, MVS
Object-Oriented Analysis, Design, and Development
OOA, OOD, OO development (21 years); design patterns (16 years); Booch, Rational Rose; UML, RUP; Agile
Quality Assurance and Reviewing
Design and code reviewer (15 years); computer science teacher (review and evaluation) (8 years)
Standards and Methodology
Rule systems (2.5 years), C++ standards (2 years), development methodology (6 years), IS Standards (1.5 years)
Employment
Vusion Minnetonka, Minnesota
Software Architect and Principal Software Engineer, contractor, November 2009 Present.
Vusion is a start-up that provides analysis, fuel-tax, and modeling services for the trucking industry. I was brought in
to architect, design, and implement their first system, which provides these services through a website. Nearly all
development was performed by myself and one other developer. This system and website are successfully servicing
clients. Mission accomplished, my role is being phased out as Vusion shifts fully into production mode. The
President and the Vice President of Vusion are quite satisfied and have offered to provide references.
Shakespeare System Eleven windows services integrated by message queuing and event publication/subscription,
providing services including data digestion and integration, logging, metrics, modeling, monitoring, reporting,
and website support. Website, web services, scheduleable agents and report generation, dynamic web reporting,
dynamic code generation/compilation from models, high performance, high availability. Short iterations, web UI
design, database design, implementation, stored procedures, performance tuning. (Visual Studio 2010, C#, .NET
4.0, LINQ, WCF, SQL Server 2008, HTTP, ASP.NET, DotNetNuke, Telerik controls, MS ReportViewer, XML)
The Aagard Group Alexandria, Minnesota
Consulting C++ Expert, contractor, July 2009 September 2009.
The Aagard Group designs and builds custom robotic product packaging equipment.
Refactoring Effort Worked on refactoring, documenting, and writing unit te sts for experimental robotics code that is
written in C++ and makes significant use of templates. (Visual C++ 2008, STL, Boost library, Loki library)
SpeechGear Northfield, Minnesota
Senior Software Developer, December 2007 December 2008.
SpeechGear develops software for translation between natural languages.
Document Workbench Enhanced the natural language translation workbench that also provides translation services
to SpeechGear's add-ins for Microsoft PowerPoint and Word. Enhancements incl uded access to translation
memory domains by integration with SQL Express, domain stacking, acronym expansion, robustness, and
performance. (Visual C# 2005, .NET 2, MS SQL 2005, 2007 8, SpeechGear)
Document Add-ins for Microsoft Word Redesigned and rewrote natural language translation add-ins for Word 2003
and 2007. Devised and implemented a new capability for document -translation systems: the retention of nearly
all formatting elements, including font properties and style. For example, the sentences
Some text is bold, some is underlined, and some is italic. Red text can startle cats. become
Algunos texto est escrito en negrita, subrayado algunos y algunos en cursiva. Texto rojo pueda asustas gatos.
New features also included the translation of most Word document components (e.g. footnotes, comments),
translation caching, retranslation prevention, automatic protection from translation of text in scripts that should
not be translated, user-specified protection of text from translation, inter action with Word via interop assemblies,
and a tab on the fluent ribbon for the 2007 add -in. (Visual C# 2005, .NET 2, VSTO, 2007 8, SpeechGear)
Document Add-ins for Microsoft PowerPoint Redesigned and enhanced natural language translation add -ins for
PowerPoint 2003 and 2007. New features included translation caching, retranslation prevention, automatic
protection from translation of text in scripts that should not be translated, interaction with PowerPoint via interop
assemblies, and a tab on the ribbon for the 2007 add-in. (Visual C# 2005, .NET 2, VSTO, 2007 8)
/20/10
Craig Stewart Holman, Ph.D.
Employment (continued)
SpeechGear (continued) Northfield, Minnesota
Translation Client/Server Prototype Developed prototypes of a translation server that can translate between severa l
pairs of natural languages simultaneously and and multiple clients that use the translation server for translation.
(Visual C# 2005, .NET 3.5, Message Queuing, 2008)
HTML Translator Developed an application for translating HTML files between natural languages. This application
is a client of the translation server. (Visual C# 2005, .NET 3.5, 2008)
Open XML Parser Developed a hierarchy of classes for parsing, representing, and manipulating Microsoft Office
PowerPoint and Word documents that are in the new Open XML file format. The implementation was not
complete but was sufficient to provide a proof of concept. (Visual C# 2005, .NET 3.5, 2008)
National Cinemedia Eden Prairie, Minnesota
Software Engineer, contractor, November 2006 March 2007.
National Cinemedia prepares and distributes the half-hour programs that are shown before movies in many theaters.
Content Manager Advertising content manager for movie theaters. (Visual C++ 2005, 2006 7)
Code generator for XML-ready classes Generates source for classes from brief XML-encoded class descriptions.
The generated classes are fully interoperable with the rich DOM and SAX wrapper classes described below (e.g.
object tree from SAX, object tree from and to DOM). (Visual C++ 2005, 2006 7)
Rich wrapper classes for DOM and SAX for XML manipulation (Visual C++ 2005, 2006)
Blue Cross Blue Shield of Minnesota Eagan, Minnesota
Rule Systems Architect, November 2003 September 2006.
Business Object Model Repository Vision, requirements, and architecture for a complete BOM repository, with
special emphasis on business rules; user -interface prototype for task-centric repository (Oracle 9i, PL/SQL,
Apache, Web application, 2005 6)
Business Rules Initiative Vision, architecture, methodology, and design (2003 6)
Near Real-time Pharmacy Claims Processing Analysis and design (Pegasystems, 2006)
Connectivity Coordinator Filled new role, tasked with eliminating backlog and improving processes. Coordinated
efforts of several groups responsible for establishing connections with clients for the transmission and processing
of electronic files. Task was successfully completed. (2005)
Return Wayzata, Minnesota
Senior Software Engineer, March 2002 August 2003 (contractor for first fi ve months).
Return facilitates reverse logistics, handling and accounting for product that is returned from retailers.
Web-based Reporting Architecture, design, and implementation (Oracle 7i, PL/SQL, Apache, Web Application,
2003 4)
Data Auditing Architecture, design, implementation (Oracle 7i, PL/SQL, Apache, Web Application, 2002 3)
Jasc Software Eden Prairie, Minnesota
Senior Software Engineer, July 1998 November 2001 (contractor for first five months).
Paint Shop Pro Versions 6, 7 and 8, design and implementation (Visual C++ 6, STL, COM, MFC, 2001)
Digital Video Editor Design and implementation of composition serialization and aspects of the user interface for a
new product. (Visual C++ 6, STL, COM, MFC, 2000)
Animation Shop Versions 2 and 3, feature design and implemention, Windows 2000 certification research and
preparation (Visual C++ 6, MFC, 2000)
Best Buy Eden Prairie, Minnesota
Senior Technical Analyst, July 1996 April 1998.
Enterprise-wide event forwarding Designed and implemented several programs for logging events, summarizing
event logs, and forwarding events from event logs to HP OpenView via SNMP (Visual C++ 5, GUI, MFC,
COM, NT service, multithreading, ODBC, embedded SQL, string patterns, DLLs, 1997 98, Best Buy)
ReplicationLogMonitor (Visual C++ 5, MFC, GUI, multithreading, scripting, 1997)
SQL Gateway Enhancements (Visual C++ 5, NT service, MFC, multithreading, sockets, registry, 1997)
/20/10
Craig Stewart Holman, Ph.D.
Employment (continued)
Clear With Computers (now Firepond) Edina, Minnesota
Senior Programmer / Analyst, June 1995 July 1996.
Clear With Computers developed custom salesforce -automation applications for many corporations, especially in the
automotive industry.
Proposal module of a salesforce-automation tool OLE automation of MS Word to generate proposals for truck/tractor
purchases based upon information derived from other modules of a custom salesforce -automation tool for
Freightliner, (Visual C++ 1.52, MFC, OLE automation, GUI, 1995 96)
Xavier University of Louisiana New Orleans, Louisiana
Assistant Professor, Computer Science Department, 1993 1995.
University of North Dakota Grand Forks, North Dakota
Assistant Professor, Computer Science Department, 1990 1993.
International Business Machines Corporation Poughkeepsie, New York
Graduate Intern, System Performance / System Workload Analysis Department, Summers 1988, 1989.
Programs for reconstructing / analyzing channel programs from traces Rewrote PL/AS program in C, reducing its
runtime from 24 hours of 3090 CPU time to less than 1 minute (C, Assembler, IBM 3090, MVS, 1988)
Northwestern University Evanston, Illinois
Instructor, Department of Electrical Engineering and Computer Science, Fall quarter, 1989.
Senior Teaching Fellow, Department of Electrical Engineering and Computer Science, 1988 1990.
Teaching Assistant, Department of Electrical Engineering and Computer Science, 1987 1988.
Programmer, Solid-State Devices Laboratory, Summer 1987.
Research
I have been conducting private research for 24 years. My research has been focused on developing algorithms for
challenging problems, including several NP -complete problems, particularly in graph theory. In 2008, I began a research
blog at www.patterncraft.com. Entries on most of the following topics may be found in this blog and I ll be updating it
over the next few months. I am writing At Play, a book on some of my research in graph theory, especially on cliques,
that aims at enticing readers to engage in mathematics and algorithms.
Algorithm Definition Language I ve been working for the past year on Alan, an Algorithm Definition Language named
for Alan Turing. My goal is to design an extensible language that can offer constructs for most programming paradigms,
enforce type consistency, enforce correct interface use, and facilitate parallelization.
Algorithm Workbench I m currently designing a .NET application, named Alonzo after Alonzo C hurch, that will be a
workbench for algorithm development, analysis, and code generation. It will provide support for the definition and
validation of algorithms expressed in Alan. It will provide an extensible framework for algorithm analysis and the
transformation of Alan algorithms into source code that implements the algorithms.
Boolean Satisfiability My research for my Master's thesis resulted in a new algorithm for determining whether a general
boolean expression (not necessarily in CNF or DNF) is satisfiable. The algorithm assumes that an expression evaluates to
true, reverse propagates that constraint, constructs a constraint tree, and from that constructs a directed acyclic graph of
constraints having a single source and sink. The expression is satisfiable iff there exists a consistent set of constraints
along a path from the source to the sink. Assuming that the expression evaluates to false can be used for falsifiability
testing. The constraint calculus that I defined was proven to be both sound and complete. The algorithm has some
ordering parameters and I did some preliminary studies of the effects of settings for these parameters on algorithm
efficiency. I also sought and found some metrics that were predictive of satisfiability, falsifiability, and the amount of
work the algorithm would need to determine the logical class of an expression.
Boolean Simplification My research for my doctoral dissertation resulted in a new algorithm for simplifying a general
boolean expression to a canonical logically equivalent expression. The reduction process operates upon a constraint tree. I
found a set of eight reductive graph transformations that form a complete set of reductions, meaning that if the eight
reductions are applied in any order to any application sites in the tree until no further application is possible, the same
canonical constraint tree will result. This property allowed me to be concerned with efficiency rather than minimality.
Proving that this set of reductions was complete and providing an algorithm for the reduction process were the central
results of my dissertation. This algorithm has o rdering parameters that were not explored at that time. I sought and found
some metrics that were predictive of the amount of work required for reduction and the size of the resulting reduced
expressions. It was during this research that I first considered the problem of how to choose the best tools for a task.
/20/10
Craig Stewart Holman, Ph.D.
Research (continued)
Maximal Cliques A maximal clique is a clique that is not a proper subgraph of any other clique of the graph. The
Maximal Cliques problem is the construction of the set of the maximal cliques of a graph. I found a way to use a splitting
technique to build up the set of maximal cliques. A few years ago, when Vodafone, a European telecommunications
company, was looking for a better maximal cliques problem, I ran two of their sample graphs through my algorithm. It
was able to construct complete sets of maximal cliques for the gr aphs within two minutes, while their algorithm was
having trouble producing incomplete sets over the course of a weekend. They confirmed the correctness of my solutions
down to the threshold that their algorithm had been permitted to use.
Maximum Cliques and Maximum Clique Size These are the problems of finding the maximum cliques of a graph (the
cliques having the largest size) and the size of these maximum cliques. The approach that I've been using is an adaptation
of my splitting algorithm for finding the maximal cliques of a graph.
Graph Isomorphism I'm close to completing a new algorithm for determining whether two labeled, undirected, and
unweighted graphs are identical except for their labels. For each graph, it constructs a canonical represent ation that
incrementally partitions the nodes of a graph into an equivalence class based upon (what will be) a universal invariant.
The basic algorithm is beautiful and works efficiently (O(N 4)), but I found that, for some graphs, a supplemental signature
is needed. Most of my time has been spent on this supplemental signature. I think I've nearly got it pinned down - I'm
almost done with the proofs and have to rework the implementation of the supplement. The algorithm should be easily
extended to handle directed and/or weighted graphs.
k-Clique Exists Determining whether a graph contains a clique of size k remains my favorite problem - it has fascinated
me for the past nineteen years. I have worked on six new algorithms for its solution. A clique is a complete subgraph of a
graph - there is an edge between every pair of nodes in a clique. The approach that I've been focusing on for the past
several years began as an investigation of a classic searching technique. It changed into a studies on the reduction of the
search space and has become an exercise in squeezing blood from a stone. The reduction of the search space now quite
often solves the problem, rendering a search unnecessary.
The Adaptive Market Pattern This is the pattern for a multi-level free-market framework for selecting and applying the
best tools for tasks that learns from experience and incorporates the elements of prediction, estimation, bidding,
reputation, and adaptation. I first became interested in this problem when thinking about how to choose the best tool
(algorithm + parameters) for determining the satisfiability of general boolean expressions. I have frequently encountered
this problem and decided to generalize it into a pattern.
Problem-Solving Services For several years, I've been interested in how a commercial problem-solving service could be
organized. What I envision is software as a service, accessible through the internet, that would publis h a catalog of
problems it could solve (including many NP -complete and other challenging problems), accept instances of these
problems to solve, and use the best algorithms and its experience with solving similar problems to attempt to solve these
instances as efficiently as it can. An overview is at www.Patterncraft \Blog\Blog-090527.html
Active Blackboards A blackboard is a software construct that can hold and serve objects of many varieties. At its
simplest, it is a container of named objects. I'm interested in blackboards that can do far more. I've had fun thinking about
templates for blackboards (e.g. crime investigation), blackboards that can perform reasoning, and blackboards that can
perform tasks as appropriate. Blackboards should have the abilit y to mainain the source and history of all facts and
deductions as well as a measure of confidence that can be justified. Blackboards should also be able to support What -If
analysis. I could really use some of these enhanced blackboards for implementing so me algorithms, the Adaptive Market
pattern, and problem-solving systems.
Emergent Network Dataflow Processing When I took my first course in computer architecture, my professor introduced
the topic of dataflow processing by describing it as a pool of f undamental processing elements out of which could be
woven as needed a network for solving a specific problem through which data could flow. I thought that was beautiful
and was disappointed that the current implementations of dataflow processing were much more prosaic. I decided several
years ago that the design and simulation of such an emergent -network dataflow processor would be great fun.
The Business Object Model and Rule Systems Methodology While a Rule Systems Architect, I designed an engine -
agnostic business rule repository; worked towards a comprehensive business object model; designed and prototyped a
task-oriented engine-agnostic business object model repository; developed a process for managing business rules,
including identifying rule candidates, synthesizing rules; figured out how traditional programming can coexist with a rule
systems approach; and adapted a light version of the Rational Unified Process so that it accomodates a rule systems
approach.
/20/10
Craig Stewart Holman, Ph.D.
Research (continued)
Factoring Composite Integers Into Two Factors Inspired by the no-longer-active RSA Labs Factoring Challenge, I've
worked on a new algorithm framework for factoring a composite integer into two factors. This is a beautiful problem.
Other topics Subgraph Isomorphism, U niversal Traversal Sequences, Ramsey Theory (Graph theory aspect), and the
Riemann Hypothesis
Clique Problem Solver software application Solver for the k-Clique Exists, Maximal Cliques, and Maximum Cliques
problems. (Visual Studio 2010, C#, C++, .NET 4.0, LINQ, active blackboard, automated deduction, proof system)
Honors and Awards
University of North Dakota Outstanding Faculty Advisor Award, 1992, University of North Dakota.
Dean of Students Exceptional Performance Award, 1992, University of North Dakota.
Senior Teaching Fellowship, 1988 - 1990, Northwestern University.
Graduate Teaching Assistantship, 1987 - 1988, Northwestern University.
Walter P. Murphy Fellowship, 1986 - 1987, Northwestern University.
Bachelor of Science degree awarded with high honors, 1986, Northeastern Illinois University.
Teaching Experience
Undergraduate : C, C++, Pascal, SQL, Modula-2, Logo; object-oriented analysis, design, and programming; problem
analysis, computer architecture, algorithms, operating s ystems, database theory and design, AI, and automated reasoning.
Graduate : Database theory and deductive database systems, automated reasoning.
Professional : 2 courses on programming in C and presentations on C++ at IBM in Poughkeepsie, NY.
Relevant Coursework
Undergraduate : Algebra, Trigonometry, Calculus and Analytic Geometry I, II, and III, Computer Calculus Lab,
Differential Equations, Real Analysis, Complex Variables, Discrete Mathematical Structures, Probability Theory and
Applications I, Numerical Analysis, Computer Programming I, Algorithmic Processes, Data Structures, Advanced
Programming Techniques, Compiler Theory, Operating Systems Concepts, Operating Systems Theory, UNIX Systems,
Networking, IBM 360/370 Assembly Language/Architecture, Advanced Assembler Programming, COBOL Programming,
Advanced COBOL Programming, PL/I Programming, General Physics I, II, and III, Intermediate Electricity and
Magnetism I, Chemistry I and II, Psychology, Introduction to Linguistics, Descriptive English Gram mar
Graduate : Mathematical Logic, Number Theory, Modern Algebra II (Linear Algebra), Theory of Computability, Turing
Machines, and Recursive Function Theory, Computer Subsystems, Computer Architecture, Advanced Computer
Organization, Robotics, Computer Networks, Database Systems, Relational Database Theory, Artificial Intelligence,
Natural Language Processing, Theorem Proving, Automated Theorem Proving, Seminar on Advanced Theorem Proving,
Linguistic Theory, Syntactic Analysis (Government -Binding Theory)
Professional training : Business Rules Forum 2004 and 2005 (80 hours), Pegasystems PegaRULES BPM and rule engine
development / runtime environment (80 hours), Vitria BusinessWare BPM development environment (80 hours),
Microsoft Visual C++ and MFC (80 hours), Object-Oriented Analysis and Design (40 hours), UML (40 hours)
Supervisory and Mentoring Experience
As an assistant professor in two universities, directed the activities of several teaching assistants, oversaw the research a nd
thesis writing of several graduate students, and directed the independent studies of over twenty students. Invested much
time working with advisees as well as students. Was awarded the University of North Dakota Outstanding Faculty Award,
and the Dean of Students Exceptional Performance Award for my work with dyslexic students. Continued mentoring and
tutoring several undergraduates after leaving teaching for software development. Mentoring two students at this time.
In the role of the Rule Systems Architect for Blue Cross Blue Shield of Minnesota, worked with several people in different
roles on educating them about what the business-rules approach was, how it could affect the business, and how to
implement it effectively. These people included the senior vice president who was responsible for the business rules
initiative, the vice president over my area, half a dozen business staff (director and below) who were charged with
implementing the intitiative on the business side, several enterprise architects, a fe w application architects, the technical
business analysts, the director of the electronic claims processing division, and several developers.
Personal Interests
Science, mathematics, writing, Baroque music, reading, Greek history, movies, friends, pets, and good conversation.
/20/10