250 Falkirk Pl, Exton PA 19341
gmmapowell@yahoo.com
+44 7798 647 943
+1 484 477 8545
Investigated a number of aspects of reasoning about functional programs.
Designed a fundamental model of “base types” underlying normal type systems.
Built a sample functional language, FLAIR.
Designed an environment for handling functional program proofs.
Worked towards the automatic creation of programs from requirements.
Read thesis at http://hireme.gmmapowell.com/downloads/FunctionalMetaprogramming.pdf
Built a programming system supporting multiple languages along with a single backbone to provide for communication between them by means of sending "messages" along "pipes".
Inspired by combining the "pipe" mechanism is UNIX together with the more robust "message" concept found in Smalltalk.
Gareth's passion for delivering value to customers shines through in both the way he selects and masters the tools he uses, and in his desire to teach others how to program more effectively and efficiently.
I love the way that he combines the intellectual and down-to-earth sides of his character so well, and the story he tells about his ‘XP epiphany’ ‐ browsing ‘XP Explained’ in a bookshop in 2001 while reading his children picture book stories.
That really sums up Gareth for me.
Gareth has a unique ability to ask questions so as to unearth the core requirements of any project.
I've seen Gareth save customers time and money through the use of the Socratic Method to derive the most important elements of a software project.
He understands both the technical issues of a project as well as the business issues. Gareth was invaluable to me in his periodic role as a technical liaison to key customers.
He has an extremely professional and sophisticated manner and shows up well in exploratory, pre-sales, sales and design meetings. Customers quickly become enamored with Gareth and lobby to keep him on their projects.
Gareth is more than a software engineer; he is a systems thinker, a keen business mind and a high level strategist.
Gareth gave us a real sense of what a Team really is, how to improve performance and how to apply good practices for agile development.
Something really important, for every point of improvement he found, a very thoughtful reason for improve followed. He inspires respect so follow his advice becomes easy.
Results guaranteed.
One of the talents I admire in Gareth is his capacity to tease apart complex issues into discriminate parts and not relent until the issue at hand has surrendered a solution.
He has an uncanny ability to unravel or cut through Gordian Knot problems.
I had the pleasure of working with Gareth at McGraw-Hill.
Gareth brings a wealth of experience and knowledge to the craft of software development. Idealistic yet practical, super-smart but able to communicate with mere mortals, dedicated, driven, and with a fine sense of humor to boot.
Highly recommended.
I see myself as a full-stack engineer out to solve customer problems across the project lifecycle from analysis and chartering to testing, delivery and support. It is only truly possible to assist customers achieve their objectives if you are prepared to be with them every step of the way.
While much of the job I do is technical, involved, difficult, mundane and time-consuming, I never lose sight of the fact that there is a purpose to it: to provide value to a customer.
It's important to me that I meet, and preferably work closely with, my customers in order to fully understand and grasp both what is important to them (their values) and the tasks they are really trying to achieve (their product). Many times I have been involved in projects where the team has struggled with a complex feature that isn't really what the client needs when if they had truly understood the business case for the feature a simpler, easier to use, more maintainable solution would have presented itself.
As an early adopter of XP and Agile methodologies, it has been very important to me both to explain and to obtain customer buy-in on the processes that I use, and that is only possible if trust is built through close co-operation.
There is a lot of debate about whether software is an engineering discipline or a science discipline. I take the view that it is neither: it is a creative discipline.
In searching for an analogy, I would compare it most closely to non-fiction writing: it is essential that what the software does is correct, but within those parameters, many different organizations, structures and presentations offer themselves.
It is not creative in the sense that fine art or sculpture is creative, but it is a species of bounded creativity: the sky is not the limit, but within the bounds of meeting the client's needs, the canvas may be filled in any appropriate way.
Correctness is about rigour and certainty; everything else is about art and creativity.
Based on many of the projects I have joined, it could be that software development is an engineering discipline in the original Mediaeval French meaning of the word: an engineer being somebody who brings technology to bear to cause chaos and destruction.
These words are an almost constant refrain in our house.
This relates not so much to obvious bugs ‐ such as a system crash ‐ but to more subtle design flaws that make it difficult to achieve what seems like a simple goal. Software should be there to assist you, not get in your way by: continually asking you redundant questions; or forcing you to fill out forms that you are not interested in; or making you search through pages of text for the information you want.
With the prevalence of software not just on computers but in all kinds of devices, there is an ever-growing need to ensure that the software we build is aligned with the reality of our users.
A significant part of the work involved in the design of Medici revolved around coming up with a new metaphor for composable objects in a UI. Our solution was cards.
The visual metaphor is described at http://cardstack.io./
A number of attempts were made to build this on top of Tilde's Ember framework, but I was never personally happy with the results.
After the termination of the Medici project, I started from scratch, building a new, functional language that encapsulated the concept of a card as a fundamental first-class data type.
This code could then be transpiled into JavaScript for Web (or Java for Android or Desktop) use with a small run-time library.
This combines closely with the Ziniki project to offer a full-stack delivery system.
The FLAS compiler is implemented in Java and has an Eclipse plug-in. It is fully open source.
After the initial prototyping phase of the Medici project, I decided to step back and attempt a separate effort to build the appropriate underlying back-end infrastructure to make delivery of Medici much easier.
This project was called “Ziniki” and I formed a separate company to build and deliver this system, intended to be the backbone of the Medici system.
Ziniki supports sophisticated object-level security, data types, “envelopes” and “projections”, analytics, reactive event handling, websockets and more.
Since the end of the Medici project, I have worked more on the front end and have moved toward tight integration between FLAS and Ziniki.
As part of the Medici project, we were looking for a new way of thinking about big data analysis as an alternative to either Star-schema SQL or Hadoop-style batch processing.
In 2012, we identified Couchbase as a viable alternative with its incremental map-reduce views.
But it did not do the key thing we wanted ‐ allowing us to build a nested structure of derived analytics.
Ziggrid filled this gap by utilzing reactive processing and a rich set of analysis operators (including machine learning).
We built a demo for the Couchbase Conference in 2013 based on analyzing baseball statistics, which we presented at the 2013 Couchbase Conference.
As yet, this is only really at the "demo" stage, mainly due to Couchbase still not supporting the necessary “event” hook to call back into Ziggrid when views are updated.
It should be noted that I only made small contributions to the front-end of the demo.
Medici was the working name for the Digital Learning Platform at McGraw-Hill.
The idea was to create a platform which was responsible for all of the core activities: user registration, roles and security, admin, analytics, event handling and distribution, data modelling, commerce and application API. Individual applications or "content items" could then plug in to this architecture in standard ways.
The metaphor we used was that of an underlying operating system, providing services and a container for applications which could then talk to each other through standard “contracts”.
A key feature of the system was to allow embedded-application writers to plug into both the back end and front end seamlessly; for example, to write code once that supported a “search” that could be run either in the user experience or as part of a batch job on the server.
I was involved in the initial architecture and design of this project, and in a prototyping phase.
I was then subsequently re-contracted as a consultant during subsequent phases.
As part of my role at Ternary, I was called upon to deliver a number of small projects and prototypes.
As these were small-scale, low-cost projects, we did not have the budget to do a full evaluation of the most appropriate infrastructure for each job, but reused a standardized architecture consisting of Java, Spring, Hibernate and Velocity (later Freemarker).
Even so, the ramp-up phase to a walking skeleton was around a day or two as all the relevant pieces were patched together and configured using boiler-plate code and XML.
To resolve this (and to further improve productivity), I created Freebird, a project which used the concept of “conventions” to automatically generate all of the boiler-plate code needed for Spring parameter objects and views and for Hibernate DAOs, along with all the XML needed to configure these (before the advent of Java 1.5).
This was the basis of my Agile 2006 hands-on workshop.
TX2 Systems was a client of Ternary Software.
They had a product to assist companies and law firms doing Enterprise Mergers and Acquisitions (EMA). This was built from scratch by Ternary, but by the time I joined the project it was very much tied to the worldview of their first client, a law firm.
Their second client, a major healthcare company, wanted a very different approach to the topic, with much more focus on the post-deal integration of acquired targets.
I led a four-man team that rearchitected the entire product using the strangler “pattern” to keep the existing code operational at the same time as completely replacing it with a much more flexible architecture, including implementing basic versions of libraries similar to Spring, Hibernate and Velocity in C# 2.0.
This enabled the technical staff at TX2 to customize the product using an XML configuration file to support the process appropriate to each of their client's needs.
After this effort, I continued to support the product for another three years, making minor ‐ but key ‐ improvements to support the flexibility of the configuration mechanism.
In 2004, Byford Systems was looking for “the next big thing”. They considered that there was a good possibility it would be mobile.
I worked with them to produce a number of demos of things that could (just about) be done with the hardware technology at the time.
Among the demos created during this time were:
Goldman Sachs contracted with TIBCO to build a transactional messaging platform.
The basic idea was to enable them to reliably distribute transactions and deals around the world.
Thus in New York, they could process a deal as part of a transaction in “real-time” against a local database, and then have the knowledge about that deal transmitted asynchronously but reliably to Tokyo where it could then be included into their database as part of a separate transaction.
The key requirement was that in each location, the transaction was quick and not dependent on network connectivity.
ETX (Enterprise Transaction Express) was messaging middleware that did this.
My role was to deal mainly with the XA-compliant “node” responsible for interacting with the transaction manager; recording the messages created as part of the transaction; and then ensuring the messages were delivered and successfully consumed as part of a transaction on the far end.
(Other parts of the system included: the transaction manager; a logger to ensure that the information captured was persistently stored on disk; the routing infrastructure to move messages around the world; and the client library. From time to time, I was involved with each of these pieces, but mainly in a “pairing” role.)
I was initially hired by TIBCO as a compiler and language expert.
They had a lisp-like language for scripting interactions between the components in ETK called TDL.
I had a number of tasks in this area, including improving the performance of the parser and making code interpretation more efficient.
As part of the deal with Reuters, we were tasked with revamping this to provide an easier-to-use, more optimal scripting language.
Ultimately, our solution was to embed Java (using JNI and Reflection when it became available) to enable the ETK to use it as a scripting language.
The team I worked on for my first two years at TIBCO was building a suite of products known as ETK (Enterprise ToolKit).
It was a suite of messaging and other products designed to work together to enable clients to build distributed systems easily.
My first project with the company was to improve their Remote-Object Framework (ROF) to make it CORBA-compliant.
The result of this was a product called ObjectBus.
As a compiler and language expert, my main role on this project was to build the parser for IDL and then the code generator for the various object types in C++.
(The other portion of the project was to integrate this with the ROF framework.)
All of the content of this resume is my own work, except for most of the icons and clipart.
Most of the icons are derived from public domain sources, but some have asked for attributions:
The concept for the visuals and all of the HTML, CSS, JavaScript and PHP contained in it is all my own work.
The boringness of some of the icons mainly reflects the limitations of my creativity in thinking of something to search for, find or design that represented the topic.
The backdrop photograph was taken by my wife on the Pine Walk in Puerto Pollensa, Mallorca.