@j5bot // Jonathan 'J5' Cook

Jonathan ‘J5’ Cook

Getting To Know Me, Getting to Learn All About Me

Introduction

Jonathan Cook

I like patterns; taking abstract ideas and bringing them into the world of the ‘real’ in order to help people get more done and have more fun.

I have taken on diverse roles and responsibilities throughout my career. From individual contributor to systems architect.

Wondering about my nickname? I <3 JS: so much so that my nickname, J5, is both a reference to the 80’s movie Short Circuit’s Johnny 5 robot-with-emotions and to the tongue-in-cheek h4x0r spelling of JS.

What I’m looking for

I am seeking a Principal Software Engineer or Tech Lead position. For the right company, that will support me in furthering my career, I am happy to take a Senior Developer role while I learn your business.

My ideal company is past the early startup stage, with developed processes, strong leadership, and a clear strategy and long term vision.

I am a big believer in agile methodologies and iterative delivery, offering both the opportunity to fail quickly, the motivation to succeed, and the incentive to constantly strive for quality code.

The ideal culture for me is one where everyone — particularly leadership, product owners, and managers — is heavily invested in the success of the company, the quality of their work, and personal growth. But also one where work/life balance is emphasized and tight deadlines don’t translate into a high pressure, high stress environment or death marches.

I strongly prefer to work remotely, but am able to make myself available for on-site meetings as long as they are near my home in Fairfax, VA (greater Washington, DC area).

An overview of my technical experience

Resumes, CVs, and more

Check out my Resume or Fun Resume!, and LinkedIn profile, if you want to know more about my skills and the work that I’ve done in the past.

Keywords

In alphabetical order, a keyword dump of technologies I’ve worked with over the years:

.net 4gl adobe aem adobe ecm akamai android web browser angular angularjs animation api artifactory asp.net mvc backbonejs backend backgroundworker bash bdd bitbucket blueprintjs bootstrap bulma c# c++ chai chrome plugins circleci cisco routers classic asp compass confluence cookies cross-browser compatibility crucible css3 flexbox css3 css cvs d3 day cq4 day cq5 debugging dhcp dns docker compose docker dom-testing-library echarts edgecast end-to-end testing envox es2015 es5 es6 esnext etl exchange server express fogbugz frontend full stack git github issues github pages github grunt gulp hackathon hibernate homebrew cask homebrew html5 html ibatis immer integration testing intel dialogic ivr java javascript jcr jenkins jest jira jpa jquery plugins jquery-ui jquery jsunit junit knockoutjs laravel less localstorage macos metaprogramming microservices mocha ms access ms sql server mvc nginx node.js normalizr novell npm nunit nvm orientdb osgi osx performance optimization php postgresql ras raw tcp/ip sockets react react hooks react-redux react-router-redux react-testing-library reactjs redux redux-sagas remedy reselect rest rxjs sass scrum master scrum secure coding selenium selenium webdriver session storage server-side rendering sinon sling smtp spa spring spring boot spring data svn tcp/ip tdd third party javascript tinkerpop tsql typescript unit testing user experience user interface vb4 vb5 vb6 vba vbscript webpack websockets webworker windows 10 windows 2k windows 7 windows 8 windows 95 windows 98 windows nt xml xslt zsh zurb foundation

Basically, I’ve been programming since I was a kid. I have the longest and closest relationship with the Javascript programming language, having worked with it since the mid 90’s. Based on my mastery of it’s C-style syntax and experience with application development, I quickly picked up programming Java and C#, and soon became aware of more rigorous ways to go about solving problems than are typically associated with Javascript.

At the same time as I like to be conscious of design patterns and algorithms, my roots as something of a ‘cowboy coder’ mean that I can get things done and think outside of the proverbial box.

While I’m versed in many of the latest frameworks and libraries like React, React-Redux, and Redux-Sagas, I don’t use the latest and greatest just because it’s cool. That’s not me. I evolve existing legacy systems into the future, and I want to use the right tool for the job. Sometimes that means building out your own tooling, embracing functional programming, meta-programming, and more.

Videos

Videos which demonstrate products and projects I have worked on.

Code

GitHub

github

View all my repos and the repos I’ve forked.

Demo Projects

deck-of-cards (demo)

An ES6 implementation of a deck of playing cards, including mix-ins, base classes, and more. In addition to implementing a standard deck of playing cards, the code is extensible and can be used as the basis of any kind of card deck.

As this is base code which doesn’t include any implementation using the classes the demo site shows information for various project metrics such as code coverage and complete report of test results. The test results reporting is done using React components.

React Deck-of-Cards (demo)

A React UI using CSS3 Flexbox, showing an implementation of shuffling and dealing using the deck-of-cards code. Also allows for changing the card face design between the English pattern and a Russian “Atlas” design.

React ACID Trail (demo)

An ACID Trail is a sequence of colors and/or color names which is generated from arbitrary data and can serve as a unique identifier for that data, and especially a particular version of that data. Distinguishing between different versions of resources (e.g. files, records) which have the same “base” identifier is a difficult problem. I attempt to address this problem by using colors which are not randomly generated but rather generated as a representation of the data to create. Identical versions of the same resource would have the same ACID Trail identifier.

This implementation utilizes ES6 and WebWorkers for the logic and code structure, and React/Redux and Bootstrap for UI.

A (much) earlier version without ES6, WebWorkers, React, etc. is also linked below.

Libraries/Tools

Ångsturm (demo)

An application / toolkit extending AngularJS by introducing composite multi-aspect components. Composition occurs along many lines including heirarchy, layout, component definition, component configuration, component behavior, and contract/data consumption.

It is presented in the form of an example application, the Interface Designer. To get to know how the toolkit works, you will need to examine the example application code’s configurations and data along with the angsturm.js code itself.

acid-trail (demo)

Early version of a utility to create a memorable / human readable identifier for an object / document / state by mapping hashes to color sequences. Integrating existing functionality from other tools to solve a new and unique problem. Easily translates to other languages, I have implemented the code in C# as well as the javascript shown here.

Plugin / Toy

tower-egg (demo)

A small javascript puzzle game which implements the ‘tower of hanoi’ also known as ‘lucas tower’. Designed so it can be embedded easily as an application easter egg :)

HTML5 Shim

web worker shim (defunct)

Before the announcement of Chrome Frame, I was working on a shim for HTML5 Web Worker API based off of Google Gears. After the announcement I mothballed the project. It still stands as an example of my ‘raw’ JS programming.

Past Work

Sites

Prototypes

Collectist: The Walking Dead and Collectist: Gogos Crazy Bones

Two sites running off of the same code engine — collectors maintain a checklist for the particular hobby (obviously I have started with toys) which is stored for them via localStorage. The code leverages require, knockback (knockout + backbone), and a little bit of zurb foundation.

When completed, the site would enable different types of checklists such as ‘have’, ‘want’, ‘will sell’, ‘will trade’, etc. as well as sharing collections with others via links. I would like to implement distributed (i.e. via Dropbox, Google Drive, etc.) as well as centralized storage options (via document store such as MongoDB); also distributed (i.e. OAuth, OpenID) and centralized authentication.

The Past

Simpsons Collector Sector

A site built around and for the community of the Simpsons Collector Sector message board. The site served as the primary hub for information and socializing around the Playmates’ ‘World of Springfield’ line of Simpsons toys that were produced from 2000-2004.

While the language (VBScript/Classic ASP) and the coding is well below my current standards, it still represents the implementation of a large hand-rolled application with important features like image manipulation, CMS, blog, user management, etc.

Writings

Technical

medium@j5bot and j5bot.blogspot.com

I am not an extremely active blogger, but the items I have written should help demonstrate my communication skills as well as my approach to problem solving.

Personal

poemfor.us and infin8ty.com

Some of my works as a poet.