Tom H Anderson
Intellectual Architect Software Engineer

My company, API Skeletons, works through Upwork where I build custom applications for my clients.

I have worked in PHP and MySQL since 1999. Before moving to the web I worked in PowerBuilder using Oracle, SQL Anywhere, Sybase, and MSSQL. I have been programming since I was a teenager on a Commodore 128.

I am an expert at API architecture. I build APIs to Richardson Maturity Model level 3, HATEOAS, with Hypertext Application Language as the JSON dialect.

I am an open source contributor and I am a member of the Doctrine Core team for the Doctrine Project. My responsibility is to the Zend and Laminas supporting repositories.

I am a sponsored developer with Skipper and have a specialty creating Entity Relationship Diagrams with this tool. I have written an online course on building ERDs.

I support mhprompt.org  and have an article on their site On Being a Bipolar Programmer

Altruism

My first PHP application is still running at etreedb.org. This project is my altruistic magnum opus. Through this site and my constant work on this site I'm able to practice my trade and try new ideas in a live environment. I'm proud to have a way to give back to the world in a way that doesn't benefit me directly. Expressing altruism in my life is important and this flows nicely to my open source work.

Upwork

For the past three years I've taken all my projects on Upwork. My profile there has a few items of note:

I have a 100% success rate. This is a calculated field based on many factors including the feedback I receive from clients.

I am expert-vetted. In order to achieve this certification I had to take tests through Upwork and pass them, of course. This puts me in the top 1% of upwork contractors.

Feedback I've received: All of these quotes are listed on my profile at Upwork but I want to highlight a few of them:

Tom brought professionalism and competency beyond what I expected. Often pointing out issues we didn't not even know existed in our legacy ZF2/Doctrine/MySQL systems. We will most definitely be moving on to future projects with Tom, to modernize our legacy solutions, as his insights and knowledge in our stack are formidable.
stockinstore
WOW! All I can say is wow. Tom is a professional's professional. He is on his game and knows his game inside and out. I tried desperately with two other developers to solve an issue. After two months and much $$$ with no results I found Tom. He solved the problem in less than 3 hours. WOW! Tom is now my goto guy. If you are reading this I highly suggest you make him your goto guy as well. You won't be disappointed."
Local Immersion
I can't rate Tom highly enough. He is extremely honest, trustworthy, helpful, and provides great informed guidance and assistance with all the projects he works on.
CMS

Organizations

API Skeletons - github - upwork
This is my comany's organization. I've released many open-source projects through my organization and contine to support them, When appropriate. This organizaiton take on clients through Upwork where I have a 100% success rate.

etreedb.org - github
I started what is now etreedb.org in 1999. Since then I've constantly maintained this website as the "head head" of this database of live concerts. At one time the site received 20M hits per month and boasted over 300 volunteers. Because people have changed the way they collect music, etreedb.org has become less popular but it is still the canonical resource for live concert recording information.

Doctrine Project - github
I was invited to become a member of this open-source organization and serve the project maintaining Zend and Laminas libraries.

Docker Experience

I believe Docker has changed the way we develop applications today. I am accomplised with experience in writing Dockerfile for production deployment. All my applicaitons are deployed with Docker. I have experience with Kubernetes with an active application I maintain up and running with this fantastic tool. I use docker-compose for all my development environments.

PHP Experience

I've worked in PHP since 1999. During the entirety of that time I have actively programmed in PHP. Today I work in Laravel and I have contributed to the core libraries and documentation. I build databases using Skipper entity relationship diagrams for Doctrine and Eloquent.

I was part of the team which built Apigility in Zend Framework. I built the Doctrine in Apigility integration as well as contributions to many other parts of the project. My role ended before Laminas was created. During the time I was developing Apigility I created a dozen open-source projects around Zend and Doctrine. Immediatly after my time with Apigility ended I was invited to join the Doctrine core team. My work with these developers has brought a new level of programmatic excellence to my work.

In 2011 I created Enhantsy which was a Javascript injection engine for Etsy. The application rewrote Etsy web pages as you downloaded them to add enhancements such as one-click add to cart. This application pre-dated Apigility and was an excellent example of an API centric application.

In 2010 I studied the Entity-Attribute-Value database schema and tried to write an application using it. I brought this application to my employeer's largest client in 2011 and they studied it for two months. In all I had spent 10 months working in that rabbit hole. The client came back with a decision that "this is not something [we] want to use, ever". This expereince is why I don't program in Wordpress.

In 2007 and ending in 2008 I created a custom analytics application for a customer who had a $2B USD sales program. I really enjoyed this work and that was a contributing factor for how I create applications for clients on Upwork today through API Skeletons.

From 1999 through 2007 I worked professionally in PHP but the language was young and no proper framework existed. During this time I was a "developer" and not an engineer or architect.

Database Experience

My first database was on the Commodore 128. I next worked with dBASE IV which I converted to MS Access. I then got my first programming job using Visual FoxPro. My next career move brought experience with Oracle, MSSQL, Sybase, and SQL Anywhere.

In 1999 I started working with MySQL. Since then I've also worked with PostgreSQL, Firebase, MongoDB, MariaDB, and SQLite.

When developing ORM applications in PHP my unit tests use SQLite for each unit test, recreating the database from the schema for each test.

I've written open source libraries for auditing of Doctrine ORM installations using a different database and triggers to create the audit data. My work in database auditing began in 2007 and I've studied it ever since.

I've studied many approaches to schema design and I'm sponsored by Skipper. Designing ERDs is something I've done since 1997. Today I teach ORM design and have an online course to learn how to create ERDs with Skipper.

Projects

This list of projects does not contain my customer's projects. These are a selection of open source and public projects of my own, only.

My Blog
This blog is about programming and specific issues I've found while programming. There are some articles which are not strictly technical but most of it is discussing a specific problem. I really like the article on data fixtures because it brings together years of my experience and discusses using them in other [non-zend] frameworks.

etreedb.org
This project was started in 1999 and is still running today. Every live concert in circulation is listed on this website. Bands who allow recording of their concerts, and those concerts which circulate in the trading commmunity, their metadata is listed here. Beginning with Walt Whitman recorded by Thomas Edison, this music resource is the canonical resource for sources in circulation. With over 300 volunteers, this site runs itself day-to-day.

Live Concert Database
This is the future of etreedb.org. Thanks to an api-centric approach, this project will work for years into the future to keep the etreedb project running for decades more.

trove.lcdb.org
This is a Progressive Web Application (PWA) which uses the Live Concert Database API and cross-references the data with archive.org to provide a browsable index if every live conert listed on archive.org along with the ability to stream each of them.

DoctrineModule
This module was created before I became a curator. I've maintained this module, with help from the rest of the Doctrine team, for some time.

DoctrineORMModule
This module was created before I became a curator. I've maintained this module, with help from the rest of the Doctrine team, for some time.

Angular Folder Structure
This is a collaboration with Mathis Garberg. I wanted detailed documentation on building Angular application folder structure and Mathis had the most popular article on the subject, so I contacted him and became a co-owner of his code. Then, based on his work, I authored the documentation using Re-Structured Text. This is a good example of my work in documentaiton.

Speaking Engagements
Conference or Meetup Date Title Slides Audio/Video
Utah Laravel 2021-09-09 Entity Relationship Diagrams in Laravel Slides
Utah Angular Meetup 2019-09-24 Angular Directory Structure
UPHPU 2019-08-15 Entity Relationship Diagrams for Eloquent Slides
UPHPU 2018-10-18 GraphQL Implemented for Doctrine Slides
Nomad PHP 2018-09-20 Build of a Modern ORM Enabled API with Apigility Slides
SF PHP Meetup 2018-08-15 GraphQL Implemented for Doctrine Slides
Utah Angular Meetup 2018-07-31 GraphQL and Doctrine for the Javascript Developer Slides
UPHPU 2018-04-19 Code Smells Slides
Utah JS 2018-04-17 Consuming Modern REST APIs Slides
UPHPU 2017-10-19 git in the real world
Zendcon 2016-10-19 Doctrine in Apigility Slides
UPHPU 2016-09-18 ORM and APIs Slides
SDPHP 2016-03-15 Doctrine in Apigility
- Designing Entity Relationships
Slides
UPHPU 2015-05-15 Doctrine in Apigility Slides
SFPHP 2014-02-11 Roll'n API Video
Zendcon 2012-10-23 Enhantsy
Slide Decks

Doctrine in Apigility - slides
An intermediate to advanced introduction to best practice technologies for building an API based on Doctrine using ZF2, Apigility, Doctrine 2, and Skipper.

Designing Entity Relationships - slides
A beginner to intermediate how-to for building best of breed databases by using canonical naming end-to-end from entity fields to database tables.  Correct naming principles for all field types are explained as well as why canonical naming in an application eases coding and overall maintenance and development of an application.

Doctrine QueryBuilder - slides
On the importance of building queries right in Doctrine.  Even behind DQL poor programming can result in catastrophic data leaks.  Also discusses data collection and the importance of taking in what the user gives you and filtering on the way out. 

Consuming Modern REST APIs - slides
Written for a Javascript audience, this walks through a history of APIs building up to an understanding of the Richardson Maturity Model and examples of consuming a Level 3 API.

Code Smells - slides
How to use phpcs for correcting and finding code smells and how to create your own company standard.

GraphQL and Doctrine for Javascript Developers - slides
An introduction to GraphQL and how to use filters when they are provided such as GraphQL and Doctrine.

GraphQL Implemented for Doctrine - slides
Front and and backend development with GraphQL and detailing the implementation of Doctrine in GraphQL.

Entity Relationship Diagrams for Eloquent - slides
Creating an ERD for Laravel's Eloquent in Skipper

In Summary

Since building crosswords on an Epson, I've been involved in computers. I attended Comdex for 7 years because I didn't know what I wanted to do but I knew I loved computers. When PHP 3.0 came around in 1999 I knew that's how I wanted to spend my career.