Personal details

Tom W. - Remote

Tom W.

Timezone: Central Time (US & Canada) (UTC-5)

Summary

I love JavaScript and the JS ecosystem that has sprung up after the creation of NodeJS. I collaborate with independent development teams around the world to write full web applications, and to create UI and other reusable JS components.

I also have many years of experience in Java with Spring.

I'm always up for discussions that challenges the status quo to find a better way to do things.

Work Experience

Lead Developer, Scrum Master, Technical Screener
Tek Systems / John Deere | Aug 2014 - Oct 2019
Java
Google Maps
Test driven development
Es6
React
JavaScript
Webpack
Babel
Redux
I spend most of my time collaborating with teams around the world to develop reusable JavaScript modules and web applications with a Node JS backend, built on Jenkins and hosted on AWS. I test-drive all my code running Mocha or Karma and Chai. We use React and Redux on the front-end. Babel transpiles our code to ES5 so we can use the latest JS features, our styles are organized using SASS, and Webpack concatenates and minifies our code for faster downloading. One of my favorite projects was a massive codemod I wrote using the JavaScript Abstract Syntax Tree that re-writes a lot of our source code to convert legacy code that uses global namespacing patterns into modern commonJS modules. I also run daily scrum on an Agile team and interview candidates for new positions, which includes a technical screening and completion of programming tests.
Programmer
Rain & Hail | Jun 2009 - Aug 2014
Java
jQuery
Spring
jQuery UI
Spring MVC
Dojo
JavaScript
Esri mapping
I maintained two web applications and a few back-end document processing applications in Java. The web applications used jQuery and ESRI maps with Dojo for crop insurance customers to organize their farming operations and insurance. The back-end report processors listened to IBM MQ for messages, created and delivered PDFs using iText and Xerox VIPP, and implemented JMX to enable a remote admin interface.

Personal Projects

Modernization: Global Variable to CommonJS Conversion
2017
Node.js
Abstract syntax tree
JavaScript
Codemods
This was a solo project I worked on here and there. It started out as a proof of concept to showcase the power of the JavaScript Abstract Syntax Tree and codemods, but it didn't take long before it morphed into something much more ambitious. It was huge, challenging project that kept increasing in complexity as I uncovered more important details and edge-cases. We have dozens of JavaScript modules, each with their own repository on our internal GitHub. Many of them were written before Node's CommonJS pattern, so they expose their functionality using global namespacing for use in our web applications that are full of legacy browser-ready ES5 code. Global namespacing is old and hard to maintain. Module patterns are the future. So I wanted to replace global namespacing with CommonJS! This doesn't do the size and complexity of the project any justice, but these were the major parts. I wrote code to automate all of these steps: - Clone all of the GitHub repositories from several GitHub users - Read through all of the source code in all of the modules and extract all variable declarations and references - Find out which are global, and ignore local variables - Determine whether each global is native JS (window, Math), a third-party library (lodash, jquery), or an in-house namespace - Record all namespace definitions and references to build a module dependency graph, showing where each namespace is defined, including third party globals - Replace all namespace definitions with "module.exports", adding extra code to immediately invoke initialization functions, whenever they exist. - Replace all namespace references with local variables, each initialized at the top of the file with a "require" to the appropriate file or module, determined by the dependency graph