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. Most recently I have moved to GraphQL exclusively. In REST I built 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 leading expert with Skipper and have a specialty creating Entity Relationship Diagrams with this tool. I keep a close relationship with the lead developer of this fantastic tool.
I support mhprompt.org and have an article on their site On Being a Bipolar Programmer .
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.
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 database written
in PHP.
Since 2017 I've taken all my projects on Upwork. My profile there has a many 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 pass tests through Upwork. 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.
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."
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.
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 takes 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.
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 prefer Cloud Run over Kubernetes. I use docker-compose for all my development environments.
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 frameworks existed. During this time I was a "developer" and not an engineer or architect.
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, and others.
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 a leading expert on Skipper. Designing ERDs is something I've done since 1997. Today I teach ORM design and how to create ERDs with Skipper.
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.
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.
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 |
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, 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.