Hi! People call me Tom.
I'm a Senior Applications Developer at King County.
Right now I am building a web app to manage and edit Road Assets like stop
signs and crosswalks using the Next.js framework and ESRI's ArcGIS JS mapping library. The
back-end of this app is composed of authenticated APIs exposed through Azure's API Management service and
Feature Services exposed by ArcGIS Enterprise.
This web app is a direct reimplementation of a decade-old app that was built on the now deprecated
Silverlight 👀 framework from Microsoft.
Numbers in Bulk
- Investigate the portablity of Local, Tollfree, and Wireless numbers
- Validate Phone Number ownership
- Handles up to 350 Phone Numbers in 20 seconds
When large organizations switch VOIP phone service providers often they bring their existing phone numbers
with them. To support this process, I built the Numbers in Bulk tool that accepts phone numbers in groups of
up to a few hundred and investigates each of them to verify that they can be ported to our network. It also
shows the user the current ownership of each number so that they can verify and audit the numbers that they
are submitting before we begin the rather complex process of bringing them over to our network.
The lookup requests for each number submitted are handled asynchronously which enables us to scale from
handling one number to hundreds while staying within our performance budget and getting the results out to
the users in just a few seconds. You can checkout the code here on Github and see how much our users love this feature.
- ~700k Entries Ingested Daily
- Web App Supports HTTP/2
- Average Page Load Time of 340ms
In support of my brother's company, I wrote a console application that scrapes phone numbers that are
available for purchase from a pair of SOAP APIs and a few REST API, and then aggregates them into a locally
database. You can review the results of the ingest process and quickly lookup available phone numbers on the Accelerate Networks website.
Posts About Number Search
- 28.1K Users a Month
- ~50% of Users on IE 11 or Below
- Average Page Load Time of 765ms
My primary responsibility at Kitsap County was maintaining the public parcel information system. Parcel
Details is a web app that allows anyone to look up a tax parcel in Kitsap County.
Parcel Details was originally an ASP.NET 4 WebForms project that used rapid application development tools
a vendor to define its business logic and user interface. Since I took over it's maintenance, I've upgraded
the project to .NET 4.7.2, lead a redesign of the user interface, rewrote the business logic and views to
remove all dependencies on the vendor's tools, and migrated the database calls from ancient ADO.NET Datasets
to a micro Object Relational Mapper (ORM) called Dapper.
What I'm most proud of is getting the average page weight down from 6 MBs to less than 200 KBs. This was
achieved despite the addition of a responsive CSS framework (Bootstrap 3.3.7), helpful icons, and a variety
of new interactive features.
This summer I rebuilt Parcel Details as an ASP.NET Core 2.2 MVC project. It took about 300 hours port the
data access layer and then rebuild the business logic and views in the MVC format. To prevent service
interruptions this was a pixel perfect rebuild. This required careful testing to verify that there were no
impacts and the use of ASP.NET Routing middleware to remap the routes of the old app to the structure of the
Posts About Parcel Details
- 1.5K Users a Month
- 25.35ms Server Response Time
- Average Page Load Time of 516ms
Plats Search is web app that
allows you to look up survey and plat documents related to a tax parcel.
It's an ASP.NET Core 3.0 project that I wrote from the ground up. Razor pages are used to define the views,
Bootstrap is used to style the views, and Entity Framework Core 2.2 is the ORM we used to handle database
Getting a hold of Plat Records from most Counties in Washington requires going through the formal records
request process. Plats Search circumvents this process by allowing people to search for Plats related to a
tax parcel and directly download scans of those source documents.
Posts About Plats Search
I like camping. Often I'll go out to the Olympics and stay at sites like Lake Cushman, Deer Park, and the
coastline around Lake Ozette. I'm also looking forward to ski season this winter.
For fun I've reimagined Kitsap County's parcel viewer as a 3D web map built on top of the MapboxGL.js library and
the County's open data dumps.
I also know a bit about photography. You can see my work on
Flikr. Right now I'm shooting with a Sony RX1R MKII.
As of October 2019 I am the author of the top text result on Google for "How
to install RAM". Although I don't
write product reviews anymore, I still have a deep interest in computer hardware.
I'm helping my dad rebuild his old pickup truck. You can see my project tracking repo on GitHub.
Open this page in the Desktop version of Chrome. Then hit the 'F12' key to open Chrome's inspect mode. Click
the 'Network' tab. Finally hit the 'CTRL' and 'F5' keys at the same time to do a hard refresh.
Performance is a feature. Identifying the most effective compromise often begins with a clear understanding
of a project's purpose and constraints.
This is a personal website intended to give new friends an introduction to my world. It's not a social
network, it's not a news outlet, and it's not SaaS startup.
To that end this page weighs in at about 5 kilobytes and loads with a single request to the web server.
to with ASP.NET.
polyfills, or images to speak of.
fast and purpose