Mark D. A. van Gulik
Copyright © 2016 Mark van Gulik.
Mark can be emailed by humans at
The Avail Foundation.
Areas of expertise include:
- Language, compiler & interpreter design
- User interface design
- Smalltalk mentoring
- Object-oriented analysis & design techniques
- Object-oriented implementation
- Building frameworks and re-use libraries
- High performance & highly scalable systems
- Object-oriented databases
- Relational databases
- Wilf R. LaLonde, Mark Van Gulik, Building a backtracking facility in Smalltalk without kernel support, Conference proceedings on Object-oriented programming systems, languages and applications, p.105-122, September 25-30, 1988, San Diego, California, United States
- US 9,830,348 — Persistent data storage techniques
- US 9,769,292 — Concurrent process execution
- US 9,665,403 — Executing algorithms in parallel
- US 9,652,287 — Using databases for both transactions and analysis
- US 9,613,112 — Structuring data
- US 9,189,536 — Maintaining a relationship between two different items of data
- US 9,092,411 — Understanding data in data sets
- US 8,935,225 — Persistent data storage techniques
- US 8,489,567 — Persistent data storage techniques
- US 7,512,610 — Processing Data Records
- US 7,587,428 — Maintaining a relationship between two different items of data
- US 7,689,560 — Persistent data storage techniques
- US 7,783,655 — Processing Data Records
B.C.S. With Honours in Computer Science (Software), Carleton University, 1989.
|The Avail Foundation LLC||Madison, Wisconsin and other locations||1993 to present|
|Role:||Developer, Co-Founder, Chief Technology Officer|
|Environment:||PowerPC & x86 Macintosh, System 7.5.1 - MacOS 9.0, OS X 10.0-10.10.5, VisualWorks 2.0, 2.5.2, Power PC Assembly, C, C++, Java/JVM, Windows XP, Windows 7, Eclipse, IntelliJ/IDEA.|
|Developed many of the deep core concepts of Avail (availlang.org), its syntactic mechanisms, and its semantic philosophy. Was sole designer and developer until 2008. The Avail Foundation was founded in 2012, nearly 20 years after work began on it.
|CUNA Mutual Financial Group||Madison, Wisconsin||Mar. 2018 – Present|
|Role:||Analyst V, Data|
|Environment:||Windows, Azure, SQL Server, Visual Studio|
|Worked within Predictive Analytics team to solve data engineering problems and plan additional data pipelines. Assisted in execution and evaluation of predictive models for marketing a variety of banking and insurance products. Advocated best practices in contexts such as code development and deployment, data governance, and quality assurance. Role included programming in SQL, R, and C#.
|My Coverage Plan, Inc.||Madison, Wisconsin||October 2017|
|Environment:||OSX, IntelliJ IDEA, Avail|
|Reviewed code, fixed bugs, and tuned performance and security of a health insurance expert system written in Avail. The portion of the system reviewed includes a domain-specific language for specifying business rules and a compiler that produces JVM bytecodes.
|Sonic Foundry||Madison, Wisconsin||January 2017 to June 2017|
|Role:||Software Design Engineer|
|Made bug fixes and created TCP/IP interface for closed-hardware device.
|Madison, Wisconsin||January 2016 to November 2016|
|Role:||Software Engineer, SWE-6|
|Environment:||Linux, Eclipse, C++|
|Worked on a massive scale distributed RDMA-based in-memory key/value store in C++. Also contributed pieces to its underlying file system infrastructure. Designed and wired in event logging mechanism, and provisioned the network and storage resources for recording these events for system health monitoring, performance profiling, and post-mortem analysis.
March 1999 to
Of lesser note, designed and implemented entirety of:
|Sprint||Overland Park, Kansas||
to December 1998
|Role:||VisualWorks Smalltalk Architect|
|Environment:||Pentium Pro, Unix boxes. Windows NT, XWindows. VisualWorks 2.5.2, Envy/Developer.|
|Architected "Partitioning Service" for the Sprint ION project. This service is the mechanism for coordinating ION services in the presence of planned and unplanned node failovers and hand-offs. Also developed uniform layer for starting and controlling external processes on either NT or Unix.
|Honda Canada||Alliston, Ontario, Canada||August 1998|
|Role:||VisualAge Smalltalk Expert|
|Environment:||Pentium Pro, Unix boxes. Windows NT 4.0, XWindows. VisualAge 4.02b, Envy/Developer.|
|Assisted in very short term troubleshooting & coding (2 weeks). Order of magnitude performance improvements were made to graphics subsystem under XWindows.
to March 1998
|Environment:||Pentium Pro. Windows NT 4.0. VisualAge 3.0a, 4.0, 4.02b, Envy/Developer, TOPLink.|
|Mentored other developers (about 20), mostly helping to debug framework quirks. Improved performance of framework by caching and recycling key windows. Helped design pieces of security subsystem. Assisted in deployment of system for a client using MVS DB2 3.0, by patching TOPLink.
|Columbia, South Carolina||
August 1997 to
|Environment:||Pentium, Dual Pentium Pro. Windows NT 4.0. VisualAge 3.0a, 4.0, 4.02, Envy/Developer, Micado Frameworks.|
|Mentored team of >100 (of varied experience) in Smalltalk. Produced key tools for analysis of application packaging. Produced components for automated layout of screens. Critiqued portions of system (total system was > 90,000 methods).
|Ottawa, Ontario, Canada||
to April 1997
|Role:||Smalltalk and Languages Specialist|
|Environment:||486, Pentium, Pentium Pro. Windows 95, NT 3.51/4.0. VisualWorks 2.5, Envy/Developer, Gemstone, HP Distributed Smalltalk, Rational Rose.|
|Mentored team of about 12 in Smalltalk and object-oriented design &
analysis, using Rational Rose. Delivered key pieces of an agent framework. Constructed
performance measurement framework. Constructed automated testing framework.
Interfaced Smalltalk to C code. Built layers for resource management and call control
|Marsh & McLennan||Toronto, Ontario, Canada||
February 1996 to
|Role:||Smalltalk Developer and Troubleshooter|
|Environment:||Pentium. IBM VisualAge Smalltalk.|
|Tracked and corrected hundreds of bugs in a production insurance
claim processing system. Also extended functionality as per existing requirements.
Moved many business rules from code to database tables for easier maintenance
and distribution. Mentoring was also a significant portion of my activities.
May 1995 to
|Role:||Senior Smalltalk Specialist|
|Environment:||486 PC and PowerMac 8100. ParcPlace VisualWorks 1.0 & 2.0.|
|Participated in design of C++ browser. Developed prototype
in Smalltalk. Prototyped portable window system layer in Smalltalk, started
translation to C++.
|Ottawa, Ontario, Canada||
May 1994 to
|Role:||Senior Technical Lead|
|Environment:||486 PCs. ParcPlace VisualWorks 1.0 & 2.0. ENVY/Developer.|
|Participated in the design of a system to handle connections
between any two non-homogenous and homogenous digital systems. Built an
interpreter in Smalltalk to support the building of scripts within the
application. Scripts used enterprise model rules for resource allocation
and other policies. Provided mentoring, training, code and design reviews
to the entire team (>10 persons). Was responsible for most of the technical
implementation details, such as adding new user interface widgets and complex
functionality. Was ENVY Library Supervisor.
|Raleigh, North Carolina||
to April 1994
|Role:||Senior Technical Lead|
|Environment:||Diskless X-windows boxes connected to Unix servers. ParcPlace VisualWorks 1.0. ENVY/Developer.|
|Was responsible for building various low level interfaces
to external data sources. Designed and built an object broker mechanism
to retrieve data from relational and object databases, as well as from
legacy systems. Was responsible for major technical issues, such as
performance. Provided support for code and design reviews.
|Willowdale, Ontario, Canada||
May 1992 to
& July 1993 to
|Environment:||386/486 PCs, OS/2 1.3, Windows 3.1, Digitalk Smalltalk V/ PM and V/Win.|
|Smalltalk/VPM and Smalltalk /VWin knowledge resource for
the other (more than 16) members of the group. Previous experience with
bugs and caveats in these environments was fundamental to fulfilling this
role. Debugged and extended several modules that were heavily dependent
on detailed aspects of VPM's and VWin's windowing classes. Provided programming tools and tips to simplify development.
& Simcon System
|Ottawa, Ontario, Canada||
to May 1993
|Environment:||DECstation 3100, Ultrix, X/Windows, VisualWorks 1.0, and ObjectWorks r4.1.|
|Developed reusable components for an enterprise modeling
system. These components included graph layout classes, model based drag
and drop support and hypergraph (graph of graphs) editor. These components
were built inside the VisualComponent hierarchy in order to be able to
plug in arbitrary objects. Designed some of the look and feel. Provided
support for the tuning of the application, as well as debugging of low
level problems. Mentored the group of 5 developers on proper use of the
existing class library and general Smalltalk idioms. Porting of tools developed
in other environments was also done. These tools improved the effectiveness
of the load building process already in place.
& First Union Bank
|Charlotte, North Carolina||
to April 1992
|Role:||Consultant to First Union Bank|
|Environment:||386/486 PCs, 0S/2 1.3, Digitalk Smalltalk V/ PM.|
|Design and development of a product (Customer Relationship
System) for internal use by First Union Bank. The product provided facilities
for selecting a customer and then viewing simple reports about the customer.
It acquired its data from a host by means of OS/2's APPC services, as well
as OS/2's EHLLAPI services for scraping data from 3270 screens. This was
the first project in Smalltalk for the rest of the programming team (from
Broadway & Seymour). Position required mentoring and transfer of Smalltalk
October 1989 to
|Role:||Smalltalk Software Engineer|
|Environment:||386/486 PCs, 0S/2 1.3, Smalltalk V/ PM, C, COBOL.|
|Participated in the design and development of an expert system
for handling the resolution of credit card charge-backs. The team consisted
of 3 to 6 programmers, varying over time. Duties included: Building knowledge
engineering tools. Interfacing Smalltalk/VPM to OS/2 Extended Edition's
SQL Manager and 3270 screens. Building export and import utilities for
the domain data to and from multiple destinations and sources. Setting
up a simple CASE system to deal with teams of 3 to 6 programmers. Construction
of the expert system engine and user interface. Extension and correction
of the Smalltalk/VPM class library. Porting the system across multiple
versions of Smalltalk/VPM (alpha0.76, 1.0, 1.1, 1.2, 1.3). Near end of
project, the core of the system was ported to COBOL by myself & 3 others.
May 1988 to
|Role:||Assembly Language Software Engineer|
|Environment:||AT PCs, C, 80286 Assembler, 6502 Assembler.|
|Developed a real time simulation of motorcycle driving. The
simulation involved displaying a moving track from multiple points of view.
It also involved tuning acceleration and terrain effects for realism.
May 1987 to
|Environment:||APPLE Lisa, Macintosh II, Tektronix-4405, Smalltalk-80 (Tektronix, r2.1).|
Produced many prototype applications based on different aspects of computer animation: ray tracing, world editing, experimental techniques of movie editing, and an object oriented way of describing movies (describing the interactions between objects in a world). A general equation solver was written in order to solve the constraints (differential equations) given in the description of a world. Many venues for stereoscopic viewing were investigated.
|Over 20 years of work developing Avail, a novel multi-paradigmatic language for articulate programming. See the Avail home page for details.|
SUN SparcStation I, I+, II
|DOS, Windows 3.0 / 3.1 / 3.11 / NT4.0 / 2000 / XP / XP Professional 64 / Server 2003 / Vista Ultimate / Windows 7 / Windows 10
Macintosh System — MacOS 3.0 through Mac OS X 10.12.5 (Sierra)
UNIX (FreeBSD, X Windows on Solaris)
OS/2 (1.1 through 3.0)
Gemstone (an ODBMS)|
Objectivity/DB (an ODBMS)
MioDB (a parallel/distributed ODBMS developed almost exclusively by me)
DB2 (MVS 3.0, MVS 5.0 Universal, and Windows NT 5.0 Universal)