Atlanta (Cumming / Alpharetta), GA, USA
Objective / REQUIREMENT:
Night shift or very flexible hours.
(receives text / SMS).
If you call without emailing, I will probably lose track of you.
Citizenship: US Citizen
For four years I worked for 2,000-employee software companies doing development, consulting, and final-tier application support. Since then, I've done ~25 freelance projects—everything from web development to a USB device driver. I've usually done my own requirements gathering, dba, sysadmin, and customer support.
current core skills
- LAMP (Linux, Apache, MySQL, PHP / PHP7), SQL, Ubuntu Linux
- Linux sysadmin / Linux system administration / Linux admin
significant work in
- Google Cloud Platform / Google App Engine / Google Apps Script
- REST, Google OAUTH / OAUTH2, Google Data APIs
- Amazon Web Services (AWS), AWS EC2
past core skills
- C, Oracle, PL/SQL, Informatica, Essbase, Oracle performance tuning and dba / admin, Essbase performance tuning and Essbase admin
Self-Employed / Freelancing: 2004 - present
With very few exceptions, these projects are freelance contracts, and I found the clients myself--no agencies or recruiters involved.
Also, I don't always explicitly list support, sysadmin, dba, requirements gathering, and selling my services, but if the project needed those skills, I did all that myself.
All companies are in the Atlanta area unless otherwise noted. If the company is outside Atlanta, I worked remotely.
Drupal / PHP developer, AWS / Linux sysadmin
2016, Feb - present (part time)
- Wrote a Drupal module / API to take billable hours from Drupal to an external, 3rd-party billing system.
- Used Google Apps Script to interact with Google Sheet, Calendar, and Drive
- The external system did not have a preexisting API, so I used HTTP / cURL and HTML / DOM / XML parsing to emulate browser interaction and create an API, a form of site-scraping.
- Extensive use of raw SQL when Drupal objects were not appropriate. Extensive use of Chrome Developer Tools. Version control using Git.
- Created an Amazon Web Services (AWS) EC2 Ubuntu Linux instance to host my module (Linux sysadmin).
- Used AWS Simple Email Service (SES) and Sendgrid to send daily reports
- Drupal is LAMP = Linux Apache MySQL PHP (PHP7 / PHP 7.0).
2017, Feb (a brief midnight consultation)
- Created an interaction to auto-populate country, city, state (region), area code, and country-phone prefix from ZIP code (postal code). The interaction used all of
- Used Sass / CSS to make a number of changes--making sure HTML elements appear and disappear appropriately, moving elements around, etc.
- Found and removed a previous developer's back-door password
- Identified and removed Bootstrap and Bootstrap CSS code that was conflicting with preexsiting code
- Dealt with preexisting apostrophe / MySQL escape-character issues
Repairs, upgrades, and administration to / of a Google Cloud Platform - Google App Engine Python site
- Fixed email notification of reservations: added an authorized sender in the App Console. Put the sender in one piece of Python code (factored)
- Fixed the web-to-email / customer contact form, an HTML change
- Moved the site to a different Google user and project ID. In the GoDaddy DNS zone file, changed the necessary CNAME, A, and AAAA settings
- Upgraded code to Python 2.7. Fixed resulting HTML UTF-8 errors by eliminating unnecessary characters
- Created a local Ubuntu Linux dev environment to run the application / site, including Eclipse debugging and installed Django
2015, Nov - 2016, Jan
Diagnosed a problem with Magento modules for featured and new products. Made a local copy of the site, used MySQL Workbench and followed the MySQL general (SQL query) log until I found that both modules needed the product to be in the "Featured" category. (Magento is LAMP - Linux Apache MySQL PHP)
Fixed 15+ issues on a LAMP system, including:
- Significant repairs to payment processing until it worked. (Stripe payment gateway)
- Fixed the rest of the signup process
- Implemented coupons / discounts
- Implemented part of admin access versus standard user
- Developed on a local copy of the system--some Linux sysadmin and MySQL dba
2013, Sep - 2016, Jan (occasional consulting)
- Fixed a virtual host error in Apache on an AWS EC2 CentOS Linux instance. Gave advice on AWS.
- Feasibility mini-study of a video upload site:
- Used ffmpeg to convert 3gp (Android) video format to Flash (flv)
- Demonstrated Apache-level user login security and HTML-to-PHP video file upload and post.
- Feasibility mini-study of using WordPress for a new site: installed WordPress on my Ubuntu Linux server, opened it to the internet, created a second WordPress admin user, and helped research plugins for login management and video upload.
2015, March - April
- Magento project - Fixed a client's live site: web response time went from minutes to a few seconds or less. I copied the site and database from MageMojo to a laptop to get root access and use the MySQL general log. Magento is LAMP - Linux Apache MySQL PHP. The laptop was Ubuntu Linux.
- Ruby on Rails (RoR) project:
- Copied a live Heroku-hosted inventory reporting site, including the PostgreSQL database, to a Linode VM. (Linux sysadmin, PostgreSQL dba)
- Did the Linode Ubuntu Linux install from scratch--installed and configured Apache, Ruby on Rails (RoR), PostgreSQL, Sidekiq, Passenger, and rvm (Ruby Version Manager). (Linux sysadmin)
- Wrote cron jobs and Bash scripts (including boot scripts) to reproduce the Heroku scheduler. (Linux sysadmin)
- Identified and thoroughly described a bug involving automatic purchase order generation and presented a solution
- Described in SQL a bug involving duplicate Amazon order ids
- Figured out the scheduling / timing interaction between the Amazon-order-fetching script and the backorder (Ruby) reporting script; thus, I could explain the discrepancy between the live backorder report and the to-be-live Ruby report
- Installed phpMyAdmin and created a MySQL backup script and cron job
- WordPress / system hack recovery: identified and repaired affected PHP files
- Copied live site (MySQL and PHP) to my development Ubuntu Linux machine (running Apache) so that I could turn WordPress features on and off until I tracked down the hacked files
personal projectMailChimp Mandrill research 2015, February
- Modified my test domain's DNS zone file to test Mandrill features. My test domain is through Google Apps for Business and DNS features are subcontracted through GoDaddy.
- Changed MX records to receive mail through Mandrill
- SPF and DKIM records to sign mail under my domain rather than Mandrill
- CNAME record so that links within emails are to my domain and not Mandrill's
- Wrote PHP code to test Mandrill features:
- Set up Linux / Apache server as an incoming mail webhook to parse and display incoming emails
- Sent template emails through the Mandrill API using merge tags, MailChimp's template language, and Handlebars.JS tags
- Also sent through Swift SMTP
PHP development / analyst / sales
- Gathered requirements for a system involving CRM, appointment handling, and Quickbooks integration
- Got customer data going into and coming out of a Quickbooks sandbox, in preparation for customer and receipt integration. This uses PHP, OAUTH, and the Quickbooks API.
- Wrote an article on
getting the QuickBooks PHP API working.
- Sold third-party services (matchmaking) to create the CRM component in Google Apps--using Google Calendar, Contacts, Sheet, and Drive.
Labor's List LAMP / web developer
Wrote a prototype / demo web application to connect general building contractors with
subcontractors. Technologies / Features:
- LAMP (Linux Apache MySQL PHP) plus Angular.js.
- login / user / session management
- Google Maps to set and show user's location, CSS to overlay instructions on Google Maps
- calculated latitude and longitude lines for a "square" to find subcontractors within x miles of the contractor, then used the Haversine formula to calculate exact distance; also calculated direction
- Found a workaround to a critical WordPress bug. Installed WordPress on my own Ubuntu Linux server and exported and imported a copy of the site for a test environment.
Trained site author to use the “pre” HTML5 / HTML tag to align the letter-number grid (see the source code of
After many years of frustration, this made the alignment much easier.
- Determined that the WordPress xmlrpc.php file was not needed and deleted it because it was being called thousands of times for a hack attempt.
- Determined that hits to wp-load.php are legitimate. This involved analysis of web server access logs, IP whois, etc.
- Analyzed web server access logs for hit patterns, timestamps, and IP whois to tentatively determine that many hits from China are from human viewers and not bots.
FlightGear community developer2013, April – present
- Wrote script to score each landing with maximum upward acceleration—event-driven programming, event listeners, event handlers.
- Identified an inadequate 256MB Ubuntu Linux swap space as the performance issue with a Minecraft server; increased to 2GB (equal to RAM).
McClellan Industries / McClellan Sales
developer / etc.
2013, April – 2014, June
McClellan OpenERP (Odoo) Project
- Created a sales commission feature: the user assigns a commission percentage to each sales line item, and this carries over to the invoice.
- Created 10 other addons / modules:
- Accounting workaround - If accounting isn't completely set up, this allows the user to use the customer database and sales orders without encountering required accounting fields.
- Mailing list opt-in / opt-out: generates and processes (un)subscribe links, records IP address and date of this action.
- Mail send later - set an email to send later rather than now.
- Several tasks can be summed up as: New forms, new fields, UI property changes, UI filters.
- OpenERP is an MVC architecture.
- Database administration:
- Installed and configured PostgreSQL and restored the production database in Ubuntu Linux 14.04. Performed both full and incremental / binary log / WAL restores.
- Backed up PostgreSQL--both full backups and incremental (binary logs / WAL).
- Documented full and incremental backup processes.
- Installed OpenERP in Ubuntu Linux 14.04
- Support / Training
- End User support
- Solved the "blank invoice issue" after detailed analysis of data (SQL), workflows (XML), and code (Python)
- Helped explain and document the marketing email process
- Explained folder security process
- Developer support / Training
- Took 3 other developers through the Eclipse - PyDev debugging process
- Helped train 2 other developers
- Wrote several technical bulletins on OpenERP issues / best practices
- Sales - Created and demoed an analytic account scenario that was crucial to selling the OpenERP installation
- OpenERP admin - imported contacts from Outlook, GMail, and Insightly into OpenERP.
- Added keyword: ERP
Earlier McClellan Projects
Details are a secret until the products are released, but here are the technologies involved:
Project 1: A Google Chrome extension involving traversal and parsing of an HTML5 DOM tree, HTML5 local storage, OAUTH, XML / JSON I/O to / from Google Data REST APIs,
- 2. A second application involving OAUTH and other Google APIs.
Orinda, CA. Developer.
2011-Feb intermittent through 2014
(Note: Sensory Acumen is in CA. I was always remote in Atlanta.)
- Wrote a USB device driver, API, GUI, and slide show for the
GameSkunk scent generator
- Slide show with music and the Skunk's scent as a demo, used an XML config file
- GUI to turn scents on and off
- Multi-threaded with resource locking
- Documented the GameSkunk bytecodes, API, and hardware specifications
- Consulted on the driver for a 2nd platform (details secret for now)
- (The driver was partially in Linux but mostly on a platform that I don't want on my resume anymore)
Magento developer, support, some DBA
2012, Dec – 2013, Feb
- Created a zip code database based on open / crowdsourced data
- Wrote REST interactions / integrations between Magento and the client's custom ERP system—prices, inventory, and shipping from the ERP, customer data and payment info to the ERP
- Wrote two Magento extensions, for the zip code pricing and ERP interactions
- Guided client through Magento front-end problems and consulted with them on setup; helped them work through product data problems
- Moved Magento installation and data from test site to permanent site
- Changed database to get rid of fields from inactive Magento extensions
- Set up WordPress
- Upgraded PHP from 5.2 to 5.3 on CentOS Linux server. Made changes to php.ini file. Adjusted Linux file permissions for Magento. Removed unnecessary MySQL users
- Created a custom shipping method in Magento
- Created a lightbox / modal dialog from scratch—no Scriptalicious / jQuery / Prototype. Used CSS3 opacity property
- Magento is an MVC architecture
- CSS repair to a client's website.
consultant, Magento dev, some DBA
2012, Feb - April
- Consulted on integrating Magento with SolidCommerce
- Fixed a bug in a Magento extension, including a bit of database admin (LAMP)
- installed a local Magento instance with sample data for development
- LAMP = Linux Apache MySQL PHP
IDG Education Solutions (idg-ed.com)
2011, May - Nov
- Moved a LAMP-based online course product from procedural to OO (SVN code storage)
- Numerous bug fixes and enhancements.
- A bit of web admin (.htaccess) to prevent password files from being exposed
- LAMP = Linux Apache MySQL PHP
web developer, web / sys admin
2011, July - Sep
- Coded fifteen easy to difficult enhancements / bug fixes on a LAMP application.
- Moved the LAMP app from shared hosting to a VM, configured Apache httpd.conf from scratch,
sent a second domain to a different home page.
- Eight easy to very involved enhancements / bug fixes on a Java /
J2EE / JSP / Tomcat application (SVN code storage)
- Coded an HTML-to-PDF feature--installed Debian packages for supporting software
- Created a local Tomcat environment for testing.
- Used jQuery for Lightboxes and AJAX calls
- LAMP = Linux Apache MySQL PHP
Braineo Web Solutions
2011, July - Aug
- Wrote an Intuit QBMS payment module for the WebsiteBaker CMS in PHP, using Intuit's API calls (URL / GET calls)
2011, March - April
web developer, part time, contract
2007 - 2010
- Systems analysis, coding, and support of a LAMP / WAMP / AJAX application to keep track of sales calls
- Multi-user login, passwords hashed with secret salt and public salt
- Search screen that previews result counts in each category and grand total
- One-button backup that emailed a compressed .SQL file to user
- 15 tables, 75 fields--kept track of phone numbers to call, result of call, cumulative status of lead, dollars-to-call ratio, source of lead, etc.
- LAMP = Linux Apache MySQL PHP
Dec 2009 - Jan 2010
- Reverse engineered several fields of a Misys Electronic Medical Record (EMR) system and converted the data from Informix RDBMS format to desktop-searchable files and file names
Professor H's Classes
web / system / db admin
- Set up a web site for online children's classes: Configured databases for forums and chat, installed and customized the php-BB forum system and a chat program;
set up password protection (LAMP). Trained teachers to create new classes from the template I built.
- LAMP = Linux Apache MySQL PHP
SE Neurodevelopmental Consultants
2005 - 2006
- Systems analysis and coding of a LAMP / WAMP application to analyze blood chemistry data
- Fixed network when the DSL modem and router had the same default IP address
- LAMP = Linux Apache MySQL PHP
Vancouver, WA, Java developer
- Java applet to do nine numerology calculations based on name and birth date
2004 (June - July)
- Performed systems analysis and rewrote a CRM-data-driven OLAP / data analysis / data warehousing system after a Siebel CRM transaction system upgrade. The OLAP system was in Oracle RDBMS and Hyperion Essbase
- Performance tuning - Reduced the RDBMS analysis calculation (Oracle PL/SQL routines) by 8 times
- Reduced the Essbase calculation time from infinite to workable; made outline changes
Hyperion Solutions (now part of Oracle)
software engineer (employee)
2000 - 2002
- CRM-data-driven OLAP consulting that continued with Object Alliance in 2004
- Original development of data analysis / OLAP systems in Oracle PL/SQL, MS SQL Server T-SQL, Informatica, and Hyperion Essbase
- Some DBA experience beyond tuning - built my own test environments
- Wrote a C program to output text from IBM DB2 UDB
Indus International (now Ventxy)
programmer / analyst, customer support rep (employee)
1997 - 1999
- Worked all aspects of an industrial maintenance support system / ERP--customer support, bug fixing, fix testing, and installation at client sites. System written in C and Oracle SQL.
- Took hundreds of bug calls, found problem, fixed it, and installed the fixes by modem
- Specialized in fixing resource locking issues
- The system kept track of purchasing, receiving, and inventory of maintenance parts, and maintenance schedules for power plants, gold mines, oil refineries, etc.
developer / analyst
- Wrote a C program to perform 19 numerology calculations based on name and birth day.
Univ of So Cal (USC) Information Sci Inst
Marina Del Rey, CA, programmer (employee)
- Wrote a Gopher client in C using the Prospero distributed file system, used TCP/IP socket networking calls
- Wrote a file backup program in PASCAL and ran it to backup files to 5-1/4" floppies
- BS in Computer Science, Southern Polytechnic State University (Marietta, GA): 2005, 4.0 GPA
- University of Southern California (Los Angeles): 1991 - 1993, 3.4 GPA
- Harvard University Summer School (Cambridge, MA): 1991, 3.85 GPA
- Used Java to send packets in a loop across 4 computers and back. Used low-level TCP/IP and UDP/IP calls. (2004)
- Used C++ to gather information on online learning students' OS version, RAM, screen resolution, Adobe Reader version / existence, etc. (2005)
- Led the team for this project and did the final presentation to SPSU's Industry Advisory Board
- Several C++ projects in 1992 (USC)
PERSONAL PROJECTS (2012 unless otherwise noted)
Amazon Web Services (AWS)
2010 - present
- Kwynn.com has run on a LAMP server on an AWS EC2 instance using EBS from November 2010 to present, an Ubuntu image, uses an Elastic IP address
- Successfully resized the default 10GB EBS of a micro-instance to 2GB
- Studied the various AWS services in some detail
- Created a couple of dozen instances to play with (usually destroyed them within hours)
- Project 1: got several screens working and going from screen to screen (2011)
- Project 2: GPS hello world
Node.js and Ruby on Rails / RoR
- Before doing the Labor's List demo in LAMP, I installed and experimented with Node.js, Ruby on Rails, and MongoDB (MEAN stack / NOSQL) in Ubuntu Linux. I was trying to decide whether to move away from LAMP.
- I had Node.js inserting data into MongoDB, and I went through 85% of the
on the official RoR site.
Virtual machines working in Debian Linux
A socket-level implementation of IMAP IDLE for email push /
continuous monitoring. Includes two layers of threads with resource locking and hopefully
robust exception handling. Tested with Gmail. Generated an SSL Cert and used Wireshark to confirm
TLS/SSL was working, documented code and the overall project on Kwynn.com. (2013, June)
(separate project) Wrote a simple WAMP web app to display a count of unseen (similar to unread) emails with a GET URL query key that does not expose any other email data. (2013, March)
Installed on my Ubuntu system, got to "hello world"
Wrote a Nasal-language script to assist simulated Boeing 777 landing drills in the
FlightGear flight simulator. The script adjusts 15 – 20 settings so that the pilot is ready to land after
“appearing” in the air less than a mile from the runway. The script prepares landing gear, flaps, autothrottle, auto speedbrake, autobrakes, etc. (2013, April)
Visual Basic (VB) in Excel
Searched rows for a specific name and then looped through them, also learned VB if-then syntax. (2012-Nov)
Google Chrome Extension
Converted an existing extension from manifest version 1 to 2 (2012, not to be confused with my 2013 project)
Played with basic API calls
- PHP running within WordPress
- Used SOAP to take customer data from main app server to Magento Go
- Used PEAR to generate and sent an HTML email with pictures (MIME)
- Used HTML5
Breakfast Menu Project
Created a breakfast menu with XHTML plus extra XML tags to define items as side dishes, toppings, etc. Performed surprisingly complex logic on toppings, etc. Put the extra info into MySQL and then filtered out the extra tags to output pure XHTML (LAMP)
Dating Site 2010 - 2011
- Easily grant fine-grained database user access to different SQL calls
- Automatically create long database passwords, and
- Communicate the passwords between the PHP and db
Used AJAX to fetch XHTML / XML from server
Well past "hello world." Some tinkering noting view versus controller (model wasn't involved)
- Completely hand-coded XHTML/CSS (usually XHTML strict)
- Occasional intense dealings with CSS
- Uses sitemap
- Several of my projects mentioned above are on there for experimenting
Experiment with my Gmail account using IMAP from the command line and a PHP script. Read through
RFC 1730 to find email-identifying sequential integers (UID) and used these to backup emails to individual files (2009)
More Basic Networking
- Routinely port-forward my home router to my own PC's LAMP/WAMP server for testing
- First used "ping" in 1991
- Occasionally run tracert
C++ program to emulate the board game MasterMind (1997)
Swing shift, graveyard shift, evening shift, 3rd shift, 2nd shift, 24x7 operations, 24/7