Sofware Architect
 



CV

Thomas Hallgren CV

Presentation

During my 35 years of software development I have implemented microservices, messaging systems, REST apis, and routers. I've written parsers, evaluators, and even participated in development of virtual machines and operating systems.

The last three years have been mainly devoted to programming in Go. Prior to that I have 17 years of Java, +10 years of C/C++, and several years of Ruby experience.

I'm well acquainted with with Cloud Computing services such as AWS (EC2, S3, Beanstalk) and container technology (Docker)

I have learned to take advantage of the benefits gained by good architecture, code reuse, peer reviews, documentation, and quality awareness. I posses the knowledge needed to construct and sustain a development process that will live on in an ever-changing environment.

I have participated in two start-ups. The first was situated in New York where me and my family spent three years. The second, where I was one of the founders, was a virtual company that eventually got acquired in 2013 by Puppet Inc., a Portland based company focused on automating software delivery/operation.

Both start-ups focused on building model-driven tooling based on Java and JEE which aligned well with my previous roles during the 90's, when I was an architect and designer of similar multi-layer application frameworks written in C/C++ at Abalon AB

I was employed by BEA Systems (now part of Oracle) 2004-2006 (between the two start-ups), working with client tools in Java and the JRockit JVM

I was born in 1960 and raised in Skåne (southern part of Sweden). I moved to Stockholm in 1987 and have remained there since, except for the 3 years in New York. I am married to a girl from Hälsingland. Together, we have 3 wonderful boys.

Experience

Entreprenour

April 2020-present Tada AB Täby, Sweden
  • Created MQTT-NATS bridge, which enables MQTT devices to publish and subscribe to the NATS communication system
  • Continued support on Hiera, the Go version of Puppet's data lookup system

Senior Developer

May 2013-March-2020 Puppet Inc. Portland, Oregon
  • Main developer of Lyra, an Open Source Workflow Engine for Cloud Native Infrastructure (Go/TypeScript)
  • Built a Terraform Bridge for the Lyra Workflow Engine
  • Created Dgo, a framwork for dynamic types in Go
  • Ported the Puppet parser/evaluator from Ruby to Go
  • Ported the Puppet parser/evaluator from Ruby to Java
  • Wrote Go implementation of Puppet Hiera Lookup
  • Developing core parts of the Puppet language compiler
  • Implemented the Puppet Hiera 5 configuration data lookup system
  • Implemented a NATS service for Puppet Bolt Inventory
  • Added RBAC security to the Puppet Forge repository

Chief Architect and Founder

October 2006-May 2013 Cloudsmith Inc. Täby, Sweden
  • Chief Architect and Founder of Cloudsmith Inc.
  • Project lead and chief architect for Buckminster, an Eclipse tools project.
  • Architect and supervisor/implementer for Cloudsmith.com service, an AWS based web site/service written in Java, based on Hazelcast (Kafka-like), and PostgreSQL
  • Committer to the Open Source projects Buckminster, and Equinox Provisioning project (P2
  • Contributor to several Eclipse projects including the Eclipse Communication Framerwork (ECF) and the )
  • Member of the Eclipse Architecture Council

Senior Software Engineer

February 2004-September 2006 BEA Systems Inc Stockholm Sweden
  • Development of Oracle's Java Virtual Machine, JRockit, mainly focusing on client Java tools and Eclipse plugins
  • Architect and Developer of the Eclipse Technology Project Buckminster
  • Continued management of PL/Java

Self employed

December 2003-January 2004 Tada AB Stockholm Sweden
  • Founded Tada AB
  • Working as a subcontractor for Veratech in Stockholm helping with Veratech's Open Source offering
  • Participate in the Eclipse Web Tools Project
  • Deeply involved in launching the Frameworx Open Source Project
  • Created PL/Java, a language mapping for Java Stored Procedures, Functions and Triggers for the PostgreSQL backend, project
  • Designed and implementation fo the Tada.se website.

Director of Architecture

June 2000-November 2003 The Frameworx Company New York, USA
  • Architect and supervisor/implementer of a major part of the extensive J2EE based meta-data driven framework that became the company's main product.
  • Designed parts of an Object Publishing facility that enabled transparent publishing of objects both as EJBs and Web Services.
  • Single-handedly designed and built a comprehensive OQL to SQL translator that exposes OQL as a JDBC driver.
  • Principal architect, designer, and supervisor of a OO-RDB mapping facility that is configurable using an UML-model.
  • Helped write an advanced system to ease up the build/assemble/deploy cycle of components under CM control.
  • Wrote a UI framework for advanced SAX event driven XSL transformations that replaced Cocoon.
  • Deeply involved in merging the frameworks product suite with the Eclipse environment.
  • Advocate for making the company products available as Open Source.
  • Acted as mentor and advisor in a significant part of the company's projects.

Chief Architect, Common Frameworks

Jan 1999-June 2000 Industri-Matematik AB Stockholm, Sweden
  • Made recommendations on architectural strategies to the board of directors.
  • Researched Enterprise Java Beans (EJB)-server technology. The objective was to use EJB for next generation of the framework
  • Researched Messaged Oriented Middleware (MOM). The framework had high demands on scalability and both synchronous and asynchronous Inter Process Communication.
  • Designed an XML based messaging system based on Java Messaging Service (JMS).
  • Designed a transaction coordination package that could be used in place of a commercial TM-system making it possible to deploy the same code-base on both small and very large installations.
  • I was the Architect, designer and supervisor for the implementation of a Multithreaded, Component Based, and Object Oriented Framework that now serves as the foundation for the CRM-application developed within IM.
  • Architect and implementer of a SOAP-like protocol that includes distributed garbage collection and the ability to pass object by reference.
  • Designed data-replication capabilities in the application framework using Universally Unique Identifiers, Universal Coordinated Timestamps and a globally accessible Counter service.
  • Architect and designed a Load Balancer / Dispatcher service for HTTP requests.

Senior System Architect

June 1996-Dec 1998 Astea International AB Stockholm, Sweden
  • Senior member of a research project, tasked with defining an ideal platform for an applications architecture and application development tools focusing on graphical declarative software construction using an assembly paradigm.
  • Designed and implemented a component model similar to the (at the time non-existing) Enterprise Java Beans architecture.
  • Worked as the architect and implementor of a comprehensive C++ framework based on OMG standards for a multi-tier architecture.
  • Designed and implemented a lightweight OMG 2.0 Object Request Broker (ORB).

System Architect

Jan 1996-June 1996 Abalon AB Stockholm, Sweden
  • Responsible for the development of the Abalon Application Software framework.
  • Managed the Object Oriented analysis and design of the framework.
  • Built prototypes and implemented designs for the next generation of the Application framework using Smalltalk.
  • Designed and implemented a bi-directional COM to CORBA bridge.
  • Designed and implemented a CORBA 2.0 compliant interface repository.
  • Evaluated different Configuration Management Systems. Selected and implemented ClearCase.
  • Moved our entire development environment from Sun Solaris to Microsoft Windows NT.

Development Team Manager

June 1993-Jan 1996 Abalon AB Stockholm, Sweden
  • Managed a six people strong framework development team.
  • Performed salary and performance reviews.
  • Recruited new engineers.
  • Built and reported the R&D budget for this team.
  • Designed framework software, overall architecture as well as components.
  • Mentored and performed knowledge transfer activities with the team.
  • Managed a project that re-designed our framework as a multi-tasking operating system to be run embedded on MC68K board computers.
  • Implemented, and enforced the use of, a Configuration Control System based on SCCS.
  • Designed and implemented a bug tracking system (SPQR: System Problem and Quality Reporting).
  • Designed and implemented a shared memory version of the Virtual Machine. This version was far more efficient in both inter process communication and memory utilization.

Framework Developer

Aug 1988-June 1993 Abalon AB Stockholm, Sweden
  • Designed and implemented an object oriented framework and application development environment in C. The framework had abstractions for persistency and user interface and was largely meta data driven.
  • Wrote a portable C++ front end for C compatible to AT&T Cfront, enabling future framework development to be implemented using C++.
  • Designed and wrote training material for C, C++, Informix 4GL and SQL
  • Trainer in C, C++, Informix 4GL and SQL, both internally and externally. External customers included NCR, Swedish Defense, Swedish Nuclear Inspectorate, and Data General.
  • Translated the Informix product suite to Swedish.
  • Continued development of a windowing system for character terminals (C-Screen). The new product was renamed CB-term and was acquired by Informix Inc. for use in their development tools.
  • Integrated CB-term into Informix NewEra at Informix headquarters in Menlo Park CA.
  • Developed a Meta Data Driven Object to vendor independent RDBMS mapping, still in use for Abalon's core products. Designed and implemented back ends for Informix, Oracle and DB2.
  • Analyzed the framework garbage collector and increased performance by 100% by making the scavenging part incremental.
  • Wrote a sampling profiler for the Xip Language Virtual Machine. Presentation of statistics using graphics.
  • Analyzed the VM using gprof and the sampling profiler. Tuned the VM by removing optimizing bottleneck code and implementing method call optimization.
  • Wrote compiler for the interpretative Xip language.
  • Designed and implemented a special purpose low bandwidth communication protocol between our thin user interface client and the server.
  • Implemented a comprehensive Smalltalk like class library in C++ and the Xip language. The class library contains most of the classes found in Smalltalk.

Product and Operating System Specialist

Jan 1988-May 1988 Carl Lamm System AB Stockholm, Sweden
  • Product specialist for Unix based systems from Pyramid and Zilog

  • Assisted Zilog Inc. (Menlo Park, CA) in completing their Intelligent Communications Board offering
  • Designed advanced systems configurations and communications solutions based on Pyramid computers.
  • Also designed the communications offering for both synchronous and asynchronous communication that Carl Lamm System offered its customers.

Self employed

Sept 1987-Dec 1987 Adaxus HB Malmö, Sweden
  • ADAXUS (Advanced Development and Adaptations for Xenix and Unix Systems) HB was my own company.
  • Developed a lottery system in C for Skånes Art Association.
  • Developed C-Screen, a fully event driven window system for character based terminals. A predecessor to CB-term (see Abalon above).
  • Developed a financial system for Transportvaruhuset AB in Malmö using C-Screen and Informix SQL. This system was developed in C, using Object Oriented design patterns.

Engineer

April 1986-Sept 1987 Carl Lamm System AB Malmö, Sweden
  • Systems programming in Unix on pyramid RISC systems and Zilog super microcomputers.
  • Implemented SNA-3270 communication protocol on a Zilog UNIX system.
  • Converted and re-wrote systems written in Basic into C.
  • Implemented laboratory administration systems in Informix RDBMS.
  • Installed and configured Uniplex office suite in Unix.
  • Helped Zilog Inc. engineers fix severe problems in their hardware and software for synchronous communications protocol (SNA). This consisted of writing low-level code for Zilog intelligent communication boards.
  • Contracted as a software developer to a software company, and developed financial systems in C.

System Consultant

Jan 1985-April 1986 Kommundata AB Lund, Sweden
  • Developed administrative systems for managed healthcare in COBOL for Tandem non-stop computers.
  • Worked with Unix and C using Borland Turbo-C compiler and wrote utility programs.

Service Engineer

Jan 1984-Jan 1985 Zetner AB Malmö, Sweden
  • Maintained and serviced Wordplex word processing equipment in southern Sweden.
  • Worked with CP/M 2 and dBase II.
  • Designed and implemented a CP/M 3 compliant kernel on the WordPlex word-processor machine using Z80-assembler.
  • Transferred dBase II databases in CP/M to dBase III in MS/DOS

Knowledge

Programming languages

I fully master C, C++, Java, Go, and Ruby and have worked with several different assembler variants. I'm done scripting using Perl, PHP, Python, VB, and JavaScript along with various shell variants (bash, csh, tcsh) and Windows bat files. I am very experienced in using tools for compiler/parser technology, like YACC/Bison, Java CC, and Lex/Flex. I've written several recursive descent parsers.

Well acquainted with markup languages such as HTML, XML, and miscellaneous helpful "languages" to dynamically construct markup (JSP, XSL transformations, Jakarta Velocity, PHP, and Eclipse JET).

Development environments

I fond of the Jetbrains product suite and also well acquainted with Eclipse, Netbeans, and Visual Studio. I master build systems like Maven, Ant, and CMake. Some experience with Autotools. I've been using Git and GitHub for the past ten years and have earlier experience with Mercurial, Subversion, ClearCase, Perforce, and CVS.

Cloud Providers

Mainly Amazon where I've worked with EC2 and surrounding technologies such as Elastic Beanstalk and RDB.

Architectures

I have worked extensively with Java and related technologies and possess a deep knowledge of JNI, JMX, JMS, EJB, JCA, and JDBC. I have long experience of different types of inter-process communication such as CORBA, Microsoft COM and Java RMI. I've written several RESTful solutions based on JSON and JQuery and I'm familiar P2P built on SOAP and WSDL.

SSH/SCP has been part of several back-end solutions.

Application servers

More than 3 years experience with JBoss and Websphere. Some experience from Weblogic and JOnAS. Experienced with Tomcat and Apache.

User interfaces

I have developed for both terminal based and graphical user interfaces using curses, Swing, AWT, SWT, and Win32.

Databases

Extensive experience in SQL based databases. Especially Oracle, DB2, PostgreSQL, and Sybase. Some experience with MySQL and MS-SQL Server.

Environments

The main operating systems have been MacOS, Linux, and Windows and a variety of unix flavors including HPUX, Solaris, and AIX. Early in my career I developed software for some minicomputer and mainframe operating environments. I have also designed and implemented virtual machines, real-time kernels, and hardware drivers for embedded systems.

Education

1967-1976 Korsbackaskolan Kävlinge, Sweden

9 year grammar school and Junior High School

1977-1978 AMU Furulund, Sweden

1 year Vocational College

1979-1980 Pauliskolan Malmö, Sweden

1 year of two year college program

1981 Statens Skola för vuxna Norrköping, Sweden

Micro processor technology course

1981-1982 F10 Ängelholm, Sweden

Military Service (mandatory in Sweden). Airforce K-9 Guards

1982-1983 Scandinavian School Stockholm, Sweden

Correspondence course, Computer Technology, Computer Management, Programming

1983-1984 Sperry-Univac Stockholm, Sweden

Mapper and CTS training

1984-1985 Zetner Stockholm, Sweden

Hardware and software training, Z80 assembler, Wordplex, CP/M, dBase III

1985-1986 LärData Malmö, Sweden

Training in Unix, C programming, MS-DOS

1986-1987 Carl Lamm System Stockholm, Sweden

Training in Unix, C programming, SQL, Informix 4GL

1988 Pyramid Technology Inc. Menlo Park, CA

Training in OSx (Unix) Administration

1996 ClearCase Stockholm, Sweden

Training in ClearCase System Administration