Development Process

These are the tools I use every day to create high performance web applications.

Host OS
Mac OS X
Guest OS
Linux
Version Control
Git
Deployment
Rocketeer
VM Management
Vagrant
IDE/Text Editor
Sublime Text
Dependencies (Front)
Bower
Dependencies (Back)
Composer
Linux Logo Vagrant Logo Git Logo Sublime Text Logo Bower Logo Composer Logo

Developing on Mac OS X makes the process easier because of its baked-in Unix commands. OS X is also less targeted for viruses which means less down time. Its elegant and unified UI and access to many applications make it perfect for my needs. Developing in Linux under guest VMs is a necessity since the applications will be running on Linux servers in production. Vagrant is fantastic for managing VMs on the command line. I enjoy Sublime Text for its sheer speed, along with the Emmet plugin for its many productivity hacks. I prefer Git to Subversion due to its more modern approach to managing code repositories.

My Development Philosophy

MVC keeps projects tidy. I enjoy using MVC principles to keep projects cleaner.

Don't reinvent the wheel. When a library exists that I can customize to my needs, I don't waste time building my own version that would be less bug tested.

DRY (Don't Repeat Yourself). Refactoring code to make sure code blocks aren't being repeated helps to prevent future maintenence nightmares.

Easy to follow code is better than terse, clever code. I always try to write code in a way that other developers can follow.


Recent Work

SJLShots

a custom AngularJS frontend for WordPress to display an "inifinite" loading photo wall

SJLShots

Frontend

  • Bootstrap
  • AngularJS
  • ngSanitize
  • AJAX calls to API on backend
  • Javascript
  • JSON

Backend

  • PHP 7
  • Wordpress
  • MySQL 5.7
  • Nginx
  • Linux
  • Reverse Proxy Caching
Bootstrap Logo AngularJS Logo PHP7 Logo WordPress Logo MySQL Logo Nginx Logo

I wanted to use a modern frontend like Angular with WordPress to make a Single Page Application, but was not satisfied with the idea of calling Angular from within Wordpress files. I decided there needed to be a separation of the frontend and the WordPress backend, in order to have more control of the UI and in a much cleaner way. I was going to write my own API between the two, but then found that WordPress has a REST API in beta, which was perfect for my needs. I gave it the Angular treatment along with a lightbox modal and infinite scrolling to continuously load the photos. I finished it off by using Bootstrap and some CSS3 tricks to make it responsive.


Freshbox

allows a user to quickly sort Redbox movies by Rotten Tomatoes critic scores

Freshbox

Frontend

  • Bootstrap
  • VueJS
  • MomentJS
  • AJAX call to custom API on backend
  • Javascript
  • JSON

Backend

  • PHP 7
  • Laravel 5
  • MySQL 5.7
  • Nginx
  • Linux
  • Reverse Proxy Caching
  • PhantomJS
Bootstrap Logo VueJS Logo PHP7 Logo Laravel Logo MySQL Logo Nginx Logo

I was looking for a service that allows a user to quickly sort by the highest rated movies. This was not available on Redbox, so I decided to build it. I use PhantomJS to crawl both Redbox and Rotten Tomatoes, then I parse and store the data. I use VueJS (similar to Angular) on the frontend to access the data and manipulate the DOM in realtime, by sorting and filtering the JSON results. I built the custom API endpoints using Laravel.


Secure-i

a SaaS online video surveillance and cloud storage platform

Secure-i

Frontend

  • HTML5
  • CSS3
  • SASS
  • Javascript
  • jQuery
  • JW Player

Backend

  • PHP 5
  • MySQL 5.7
  • Apache
  • Linux
  • VMWare ESXi
  • DRBD
  • Kayako Help Desk Suite
jQuery Logo Javascript Logo PHP7 Logo MySQL Logo Apache Logo VMWare Logo

Secure-i started out as a small start-up operation that was in need of a few critical skills as they were growing. I focused on performance, scalability and automation by helping them out across the entire stack and also in a DevOps capacity. I implemented a custom portal system that removed redundant code and completely white-labeled the video surveillance interface for resellers. I also interfaced with BrainTree's API and created a clean UI to submit and process payments. I provided many performance fixes for both the frontend and backend, including separating traffic into web server requests and application server requests, identifying and rewriting slow queries, creating better table indexes, partitioning tables by date, and many more.

I made recommendations for new hardware upgrades in order to keep DB tablesets in RAM and also based upon my testing of disk IOPS and latency. I helped scale out the system by implementing a Master-Master DB replication system with slave servers, by creating a read-write split, and by cloning, provisioning and turning up VM servers to distribute the load. I also identified tasks that could be automated and wrote custom shell scripts (Bash) and PHP scripts to clean up old video files on disk, to deploy application code, to collect system specific metrics, and to take nightly backups of MySQL slave servers and sync them off-site. For the databases, I wrote stored procedures for cleanup tasks and triggers for updating summary tables.


Modern Landing Page

a custom landing page contact form

Custom landing page

Frontend

  • HTML5
  • CSS3
  • Bootstrap
  • Javascript
  • jQuery
HTML5 Logo CSS3 Logo Bootstrap Logo jQuery Logo Javascript Logo

I designed a custom responsive landing page with Bootstrap and CSS3 and used jQuery for the contact form input validation.

Full Stack Development

I have experience in the following areas:

Functionality

RESTful APIs - Integrating APIs from payment processors and support desk suites into application code

Transactions - Creating secure bill pay pages for handling PCI-DSS compliant transactions

Rebranding Systems - Creating a templating system for rebranding of partner portals in current application codebase

Membership Systems - Creating and extending existing membership systems

Authentication - Creating secure login systems to authenticate and authorize

Sessions, Caching, and Cookies - Managing user activity

Performance

Speeding up page load time by optimizing MySQL queries

Creating a more responsive UI by loading assets after page load and before user action

Rewriting application code to split requests between web servers and application servers

Working internationally with an application development team overseas to solve issues and provide bug fixes for their software

UI/UX

Designing a clean UI for admin dashboards to display internal system metrics

Studying page traffic flow and implementing changes to increase conversions

Redesigning landing pages based on entry keywords and usability to increase conversions

Redesigning contact forms based on usability studies to increase conversions

Decreasing the number of page clicks to get to frequently accessed pages in web app based on user behavior

Creating an assistance callout center of FAQs and support articles to reduce call volumes and support tickets

Integrating applications to use a single sign-on (login share)

Converting a UI for international, multi-language support

DevOps

Full LAMP/LEMP Stack Engineering - Linux, Apache/Nginx, MySQL, PHP

Prototyping

Build Management

Server Environments - Dev -> QA Testing -> Staging -> Production

Application Deployment

Tools of the trade: PHP, jQuery, Javascript, AngularJS, VueJS, RESTful APIs (XML, JSON, CSV), SQL, HTML5, CSS3, Bootstrap, Bower, APC/xCache, WordPress, Laravel, Composer, Sublime Text, Rocketeer, Trac (Bug tracking system), Version Control (Git, Subversion)

Some experience in: Drupal, Magento, Python, Java, C++, C#, ColdFusion, Android Studio, Visual Studio, Zend Studio (Eclipse), CSS Preprocessors (SASS)

Database Engineering

I have experience in the following areas:

Replication

Designing and implementing Master-Master replication systems with multiple slave servers in high performance & high availability environments on private subnets

Rolling back datasets and stepping through transactions

Backup

Automating database backups by writing custom cronscripts

Performance

  • Auditing slow queries then rewriting queries more efficiently
  • Creating appropriate table indexes for slow queries having poor index usage
  • Converting tables to appropriate table engines
  • Creating summary tables and views for improving load times for user and admin areas of the web app
  • Partitioning heavy-use tables based upon date

Scaling

  • Failing over and upgrading database servers in highly transactional production environments
  • Splitting database servers and the application for read/write queries
  • Tracking table sizes and increasing memory to keep data sets in RAM

Tools of the trade: MySQL Server, Innodb, SQL, Views, Triggers, Stored Procedures, sysbench, Memcache, Navicat

Systems Administration

I have experience in the following areas:

Virtualization

Managing web, application, database, reporting, storage, and DNS servers in virtualized environments

Cloning application servers to turn up more instances based upon higher demand

Setting up test and QA servers

High Availability

Automating storage and database server failover using DRBD and Heartbeat

Server Performance

Analyzing IOPS on database servers and recommending upgrades based upon findings

Auditing Apache and Nginx logs to identify performance issues

Modifying Apache and Nginx server variables to improve performance

Configuring reverse proxy caches to massively improve page response time and decrease server load

Scaling

Dedicated Servers, VPS, Shared Hosting

Colocated Servers in Data Centers

Virtualized Environments

Cloud Environments

Automation

Writing scripts to push out server updates automatically on Linux and Windows servers

Automating database backups and storing them off-site with custom scripts

Writing scripts to cleanup expired files left on disk

Tools of the trade: Linux (Debian, Ubuntu), Vagrant, Nginx, Apache, rsync, SCP, SSH, Putty, iostat, htop, NFS, Jmeter, Wireshark, DRBD, VMWare ESXi, vSphere, Virtual Box, Plesk (Hosting tools), cron, Bash (shell scripting), Batch scripting

Some experience in: CentOS, IIS, Reverse proxies (Varnish/Nginx), DNS, Bind, SAN performance, AWS (Amazon Web Services), Dell Cloud