Tom has worked in PHP for 25 years. Tom has worked in PHP and GraphQL for the past 6 years. His application template, ldog.apiskeletons.dev is a vehicle for his open source library, GraphQL Type Driver for Doctrine ORM
Tom is an open source contributor and a member of the Doctrine Core
team for the Doctrine Project.
Tom's responsibility is to the Zend and Laminas supporting
repositories.
Tom has contributed to the Laravel and Laminas frameworks.
Tom is a leading expert with Skipper and has a specialty creating Entity Relationship Diagrams with this tool. Tom keeps a close relationship with the lead developer of this fantastic tool.
Tom's first PHP application is still running at
etreedb.org. This project is
his altruistic magnum opus. Through this site, and constant work
on this site, Tom is able to practice his trade and try new
ideas in a live environment. Tom is proud to have a way to give back
to the world in a way that doesn't benefit him directly. Expressing
altruism in his life is important and this flows nicely to his open
source work.
The continuation of this site is being built at
lcdb.org.
The Live Concert Database will continue the database created at
etreedb.org but with all the niceties of modern development tools.
This site is built in Next.js and uses a GraphQL schema written
in PHP.
Since 2017 Tom has taken all his projects through Upwork. His profile there has a many items of note:
A 100% success rate. This is a calculated field based on many factors including the feedback he receives from clients.
Expert-vetted. In order to achieve this certification Tom had to pass tests through Upwork. This puts him in the top 1% of upwork contractors.
Feedback received: All of these quotes are listed on Tom's profile at Upwork but here are a few highlights:
API Skeletons
-
github
-
upwork
This is Tom's comany's organization. He has released many open-source
projects through this organization and contines to support them, when
appropriate. This organizaiton takes on clients through Upwork where
Tom has as 100% success rate.
etreedb.org
-
github
Tom started what is now etreedb.org
in 1999. Since then he has 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
Tom was invited to become a member of this open-source organization
and serve the project maintaining Zend and
Laminas libraries.
PHP Meetup Groups
Tom regularly attends meetups in PHP and has talked at Utah Laravel Meetup,
UPHPU Meetup, and SFPHP Meetup.
Docker has changed the way we develop applications today. Tom is accomplised with experience in writing Dockerfile for production deployment. All his applicaitons are deployed with Docker. Tom prefers Cloud Run over Kubernetes. Tom uses docker-compose for all his development environments.
Tom has worked in PHP since 1999. During the entirety of that time he have actively programmed in PHP. Today Tom works in Laravel and has contributed to the core libraries and documentation. Tom builds databases using Skipper entity relationship diagrams for Doctrine ORM and Eloquent.
Tom was part of the team that built Apigility in Zend Framework. Tom built the Doctrine in Apigility integration as well as contributions to many other parts of the project. His role ended before Laminas was created. During the time Tom was developing Apigility, he created a dozen open-source projects around Zend and Doctrine. Immediatly after his time with Apigility ended, Tom was invited to join the Doctrine core team. Tom's work with these developers has brought a new level of programmatic excellence to his work.
In 2011 Tom 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 Tom studied the Entity-Attribute-Value database schema and tried to write an application using it. He brought this application to his employeer's largest client in 2011 and they studied it for two months. In all Tom 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 Tom doesn't program in Wordpress.
In 2007 and ending in 2008 Tom created a custom analytics application for a customer who had a $2B USD sales program. He really enjoyed this work and that was a contributing factor for how he creates applications for clients on Upwork today through API Skeletons.
From 1999 through 2007 Tom worked professionally in PHP but the language was young and no proper frameworks existed. During this time Tom was a "developer" and not an engineer or architect.
Tom's first database was on the Commodore 128. Tom next worked with dBASE IV which he converted to MS Access. He then got his first programming job using Visual FoxPro. Tom's next career move brought experience with Oracle, MSSQL, Sybase, and SQL Anywhere.
In 1999 Tom started working with MySQL. Since then Tom has also worked with PostgreSQL, Firebase, MongoDB, MariaDB, and SQLite, and others.
When developing ORM applications in PHP his unit tests use SQLite for each unit test, recreating the database from the schema for each test.
Tom has written open source libraries for auditing of Doctrine ORM installations using a different database and triggers to create the audit data. His work in database auditing began in 2007 and he has studied it ever since.
Tom has studied many approaches to schema design and he is a leading expert on Skipper. Designing ERDs is something he's done since 1997. Today Tom teaches ORM design and how to create ERDs with Skipper.
This list of projects does not contain Tom's customer's projects. These are a selection of open source and public projects of his own.
Tom's Blog
This blog is about programming and specific issues he's found while
programming. There are some articles which are not strictly
technical but most of it is discussing a specific problem. He
really likes the article on
data fixtures
because it brings together years of experience and discusses
using them in other [non-zend] frameworks.
API-Skeletons/doctrine-orm-graphql
This project joins Doctrine ORM (a data-mapper pattern ORM) to GraphQL.
Express entities as types while extending types globally or per-use.
With events covering the lifecycle of generating a type, introspection
of the processes is supported. This is a very complex library that makes
implementing GraphQL in a Doctrine ORM project simple.
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
GraphQL api-centric approach, this
project will work for years into the future to keep the etreedb
project running for decades more. It uses the exact same database as
etreedb.org but remaps the old schema in code using Doctrine metadata.
DoctrineModule
This module was created before Tom became a curator. He has maintained
this module, with help from the rest of the Doctrine team, for some
time.
DoctrineORMModule
This module was created before Tom became a curator. He has maintained
this module, with help from the rest of the Doctrine team, for some
time.
Conference or Meetup | Date | Title | Slides | Audio/Video |
---|---|---|---|---|
Utah Laravel | 2024-10-17 | The LDOG Stack | Slides | |
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 |
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
Since building crosswords on an Epson, Tom been involved in computers. Tom attended Comdex for 7 years because he didn't know what he wanted to do but Tom knew that he loved computers. When PHP 3.0 came around in 1999, Tom knew that's how he wanted to spend his career.
Tom supports mhprompt.org and has an article on their site On Being a Bipolar Programmer .