Tom McFarlin Consulting
Hi, I'm Tom

When you hire me, you get me

I am a freelance software engineer with years of experience building across modern platforms. Allow me to help you to make software-related decisions and build solutions for your business.

One contact

You will communicate directly with me

Bug exterminator

I am quick to diagnose and fix issues

No platform left behind

I'm here to solve all of your software problems

Upwork Customer
"I had a very short deadline and Tom got the job done in record time. Strongly recommend using him."
CEO/Co-founder at ezClocker
"Tom is an outstanding developer. This was my second project with him. Highly recommend."
"It was a pleasure to work with Tom. He is a highly experienced Android developer, great communicator where he keeps you updated on the progress of your project and gives you recommendations on how to improve the app. Highly recommend and will hire again for our next project."
Alec Davis
Product Manager, Customer Experience at Mira Technologies
"I had the pleasure of working closely with Tom on several web development projects during our time at Promantus. Tom is invariably a team player, a quick learner, and a curious and optimistic guy. When he doesn't know the answer to a problem, he never hesitates to dive in, learning as much as he can in a short period of time and coming up with a plan to solve it. As a designer, I can also attest to Tom's attention to detail in implementing software designs. Would love to collaborate again in the future."

Expertise

Java
Android
Kotlin
Material Design
JavaScript
Git
HTML
CSS
XML
Chrome Extension
Chrome App
Google Drive APIs
Google Classroom APIs
PHP
Python
SQL
Drupal
Google Integrations
3rd-party Integrations
Google Location Services for Android
Google Cloud APIs
Jekyll
YAML
NodeJS
NVM
Design
Ruby
RVM
webpack
Docusaurus
Chrome Web Store
Google Apps Scripts
Google Sheets
Chrome Developer Tools
View my portfolio
Form Filler

Form Filler

Oct 16 2018

Summary

The Chrome extension that an Upwork client used for work purposes broke after they added new functionality to their website. The bug was identified and fixed, and the updated app was returned and approved. An additional bug was discovered during an audit of the app, and subsequently fixed. The turnaround time of this project was one hour.

Identify and fix bug

This particular Chrome extension parsed form data that the user entered into the client's website. It then auto filled forms with previously entered data. This extension helped the client to conduct work more quickly, however upon a website update the extension stopped working.

It was identified that the issue was that the client added SSL to their site, causing the extension to no longer recognize the URL. The manifest file was updated to include the https scheme. Also, the content script was updated to recognize new form pages on the website. Finally, during testing of these updates, an additional bug was found that was not previously identified by the client. This was fixed.

Technologies

JS
HTML
Chrome Extension
Chrome Developer Tools
Tax functions

Tax functions

Oct 2018 - Present

Summary

Tax functions is a Google Sheets add-on that adds tax-related functions to spreadsheets. Add these functions to Google Sheets by navigating to a Sheet, click the menu "Add-ons," click "Get add ons," and search for "Tax functions". You may view in the Chrome Web Store and add it to a new Sheet here.

Research, architecture, and test cases

Documentation about Google Apps Scripts was read and sample applications were developed. Distribution methods were learned and troubleshot. Functionality was identified and translated to exposed custom Sheets function templates. In order to robustly test the functions, use-cases were identified and a test spreadsheet was developed to run unit tests on all exposed functions.

Development and testing

Exposed functions were developed, tested, and documented. The product was uploaded to the Chrome Web Store and tested by a private Google Group.

Design, marketing, and launch

Chrome Web Store content was created, which included product title, descriptions, logos. The logo (bar graph) was developed and iterated over a few cycles to ensure that it fit the required sizes (32x32 and 128x128) while conveying the desired message that this product relates to tax calculations. The product was uploaded to the Chrome Web Store and exposed publically.

Technologies

JS
Google Apps Scripts
Chrome Web Store
Google Sheets
tmcfarlin412.github.io (this website)

tmcfarlin412.github.io (this website)

Sept - Oct 2018

Summary

This website is a statically generated site built with Jekyll and hosted on Github Pages. It's purpose is to showcase my experience and help you to better understand my skillset.

Project planning, research, and architecture

Version 1.0 goals were identified and initial research was conducted to determine the technology of choice for this project. Goals included simple maintenance, minimal architecture, and ability to create static web pages. Off the bat, a static website generator seemed to be an attractive solution due to its minimal architecture. Popular static website generators were compared, and the bidding was narrowed down to Jekyll and Docusaurus. Jekyll was selected, as these sites can be hosted on Github free of charge (thus, easy and cheap maintenance).

Design

Mobile and desktop wireframes were created using Inkscape. The site would be clean and simple, with a header, tabs, content region, and footer. The Material Web Components that would be incorporated included the Toolbar, Tabs, Buttons, Cards, Elevation, and Ripples.

Project management and development

Tickets for the development of the website were created, and a simple Gantt chart was generated to ensure that prioritized items were developed. Over the course of two weeks, the website was developed… You're looking at it right now!

Technologies

HTML
CSS
JavaScript
Git
Android
YAML
Material Design
Google Integrations
Jekyll
Design
NodeJS
NVM
Ruby
RVM
webpack
Docusaurus
Classroom Sync

Classroom Sync

July - Present

Summary

Classroom Sync is a suite of Chrome Extensions and Chrome Apps that enables students to complete their Google Classroom homework without connection to the Internet.

After initial consultation, a technical blueprint was formulated and Chrome Apps and Extensions were developed.

Consultation and Software Architecture

Research, design, and documentation was conducted to deliver a Software Design Description (SDD). The SDD was delivered to serve as a roadmap for the development of the Chrome Apps and Extensions.

Chrome Extension for Teachers

A Chrome Extension was developed to extend the features on Google Classroom assignments. When creating assignments on Google Classroom, teachers select an assignment title, description, due date, and much more. The Chrome Extension adds an additional field that teachers can configure so that student devices automatically download assignment materials for offline consumption. The extension also provides an additional user interface for teachers to track the progress of these downloads.

Chrome App and Chrome Extension for Students

A Chrome App and a Chrome Extension were developed to facilitate background download of Google Classroom content to student devices. If a teacher marked an assignment as "Cache offline" the Chrome App and Extension work together to download Google files (Docs, Sheets, Slides), videos, images, and any other file content to local storage so that students can view the materials without the Internet. Files that are edited by students remain in sync offline and with Google Drive.

Technologies

Google Classroom APIs
Google Drive APIs
Chrome Extension
Chrome App
HTML
CSS
JavaScript
Git
Material Design
Google Integrations
Google Cloud APIs
Design
ezClocker

ezClocker

May - Oct 2018

Summary

ezClocker is a timesheet solution for business owners. It simplifies the clocking in/out process with Android and iOS applications.

Crash fixes, performance improvements, data gathering optimization, and front-end updates were made to the Android application. Learn more about ezClocker here.

Performance optimization

When a phone application conducts unnecessary work in the background, the user suffers from battery loss and laggy interfaces. An audit of the Android app was completed to find and resolve inefficiencies that improve the user experience.

Crash fixes

Out of memory errors can be caused by just a few misplaced characters in code. Through debugging and evaluation of the memory allocation throughout the app lifecycle, memory leaks were discovered and patched.

Google location services

ezClocker uses Google Maps and location services to gather and display data; it is crucial that this data is accurate. The Android application was updated to use the latest Google Services to ensure the latest technology was available to end-users. A custom location gathering algorithm was developed improve the accuracy of the location coordinates and reduce battery consumption.

Technologies

Git
Android
Java
XML
Google Location Services for Android
Google Cloud APIs
Google Integrations
Always get the latest posts RSS Feed View Tom McFarlin on Twitter

"Update 2: Levels, saves, and items, oh my!"

Mar ‘23 - Oct ‘23 progress summary

"Update 1: Collision detection, motions, and weapons."

Sept’ 22 - Mar ‘23 progress summary

"FYI: Game Engine + Game Development Project"

I started to develop a game engine and game in C++.

"Python setup on Mac"

How to set up python on Mac and useful commands

"Move a Flutter project"

If you are receiving a ‘path does not exist’ after moving your project folder, in XCode run ‘Product > Clean Build Folder’ then in your Flutter project directory (/path/to/project/example/ if you are writing a plugin, otherwise /path/to/project/ run flutter build ios --no-codesign

"Flutter plugin"

How to create a Flutter plugin that includes platform-specific Java / Objective-C code

"Flutter < 15 Xcode 11.4 Support"

Fixes error “Building for iOS, but the linked and embedded framework ‘App.framework’ was built for iOS Simulator.”

"Tax Functions" is live!

Have you ever wanted a custom Google Sheet function? I make custom functions regularly and have made a few of mine available in “Tax Functions”. If you are an accountant, a tax preparer, or anyone who does their own taxes in Google Sheets, “Tax Functions” can help!

Beating Carpal Tunnel Syndrome and repetitive strain injury

I was diagnosed with bilateral (both hands) carpal tunnel syndrome in Fall of 2016. You will find countless blog posts telling you how terrible carpal tunnel is, and they are all true. You will also find countless routines teaching you how to keep symptoms at bay. Here is what helps me to continue my career.

Managing Google API Quotas

Exceeding Google API quotas can break your app. Luckily, there are simple measures that developers may take to mitigate these detrimental errors. This post explains how to avoid exceeding these quotas, and demonstrates how developers may update their code to eliminate quota errors in JavaScript applications.

Hello World!

Here, I will be blogging about my adventures in the software development world. Follow me on Twitter or add this feed to your favorite reader app to receive updates about new posts.