Jason McCreary

Resume

I have 13 years professional experience with a variety of technologies and standards.

My main strengths are:
Using clear, concise communication to turn around robust web based applications.
Implementing new processes in legacy codebases.
Managing complex API interactions with speed and reliability.

Skills breakdown

(* = skill used in the last year)

Professional History

Senior Web Programmer - CNC (Catastrophe and National Claims)

Nov 2016 - Present (7 Years)

Technical Communication - Work directly with users, managers and team members to design and improve site features related to the processing of insurance claims and managing adjusters
Claim system API Integration programming and research - Headed up the design and construction of API integrations between multiple different claim managment systems (3 still in use) and abandoned legacy databases. Using OO PHP.
I Introduced a log based approach to complex API integrations - That fosters: Fast and programatic identification of user / system trends. Rapid identification and recreate problems. Accleration of API help interaction and report generation via a full timeline of all API events.
Docusign Integration Programming and Research - Designed and built out a system to send pre-built / custom documents with signature progress integrated into claim and employee managment systems.
AWS (amazon web services) - Integration of legacy systems with AWS for new features and as part of a transition plan.
PHP OO Programming - Contributed to the modification and extension of the legacy claims managment system. Built new OO / MVC based components and supporting MYSQL database structures.
Front End Development - Created and modified interactive pages to serve adjusters and managers using html, css, jquery, json and AJAX
Linux tools and command line - Daily use of ubuntu, MYSQL workbench, PHP Storm. Command line access to developement web servers, use of vim, grep, mysql.
Version Control - All version control done using GIT after migration from SVN

Web Programmer - Glean View LLC

July 8th - Nov 28th 2016 (6 months)

Technical Communication Skills - Worked as lead technical contact for new client onboarding process requiring professional email writing and phone communication.
System Integration Programming and Research - Worked on intermediary systems between clients’ phone systems for call logging
as well as email servers using IMAP and Microsoft Exchange to send data to our custom APIs.
PHP OO Programming - Contributed to the modification and extension of the fully in-house developed CRM’s MVC code base. This included communication with programming lead in Ukraine.
Front End Development - Created and modified interactive pages to serve business records to clients using html, css, jquery, json and AJAX
Version Control - All version control done using GIT, primarily through PHP Storm.
Linux tools and command line - Daily use of ubuntu, vim, PHP Storm, MYSQL workbench, grep and other command line tools.

Web Programmer - Meclabs LLC

March 2012 - May 2016 (4 years, 2 months)

Team Work - Worked closely with research analysts to help clients (partners) optimize traffic flow through their websites. This included participating in calls with the partners.
Technical Communication Skills - I was in charge of holding meetings and gathering specifications for new features for our custom CMS built on Ruby on Rails
Front End development - Implemented full responsive design on dozens of client pages using their branding guidelines and legacy systems.
Made a significan contribution to the total rebuild of meclabs.com
Javascript / Jquery / Ajax from animations to complex interactions with the server side. I develop reusable structural and visual components used across the site.
PHP Development - developed or modified pages and entire sites for a wide variety of partners (clients) and meclabs legacy systems (up to 10 years old).
Ruby On Rails Development - Worked as part of a small team designing and implementing a custom CMS for use by meclabs staff in maintaining our multiple domains.
MYSQL Development - Many projects required the reworking and maintaining of client databases
Linux - The Rails CMS is running on an Ubuntu Linux server and developed in an Ubuntu Linux environment.
User Behaviour Analytics - using adobe Test and Target and Google’s Universal Analytics and Tag Manager. I was regularly called on by management to advise others on the use of Tag Manager.
Version control - through SVN with some minor GIT usage
Other projects - Development of a natural language behaviour driven development system (BDD) using cucumber. Automated package postage label making systems using SOAP and the stamps.com api. Developed a web browser based log tailing tool.

Open Source Developer - RMI (now part of General Electric)

June 2010 – October 2011 (1 year 5 months)

Teamwork - Fast paced agile team environment involving the use of scrum.
Professional communications - communicating specs and working with interdepartmental projects to help accurately implement business logic.
Project coordination - through use of a group WIKI, source code tracking and JIRA SCRUM software.
Interactive web design - Front end work using AJAX, CSS and Template Toolkit.
PERL Development - Working with a large PERL code base extending back up to 15 years.
Planning and execution of new systems and features using client feedback. Modification, replacement of legacy systems (15+ years old).
Linux - The sole development environment used, required extensive and daily usage of the command line, scripting and the VIM editor.
Version Control - Daily usage of SVN including complex merges.
XML based communications - Between rail industry hardware and the Raildocs system.
MYSQL Database Development - Developing with a large databases including what I believe was the largest (MYSQL) database of railroad switching and relay hardware in the United States.
This included not only modification of existing storage practices but long term planning for scale and data version tracking.

Junior Web Programmer Intern - 10East Corp (RMI)

May 2009 – August 2009 (4 months)

Perl Programming - Assisted in the updating of PERL scripts that generate web page interfaces for the management of people and assets.
Created an employee expense report management tool.
Drupal and css - Built the new drupal based main website framework, pixel perfect to specs created in photoshop.
This site was both fully standards compliant and compatible with Internet Explorer back to version 6

Intern - Verizon Business (MCI)

July 2006 – September 2006 (3 months)

Assisted in the documentation of Cisco router and switch equipment for their reclamation program.
Worked in a related database system written specifically for the process.

Network Analyst - MCI (Professional Services Engineering Department)

June 2005 – September 2005 (4 months)

Verified network documentation against production installation for corporate network infrastructure.
This was accomplished by using a secure-shell type application to manually access network equipment and confirm the IP address of all connected machines against printed technical drawings.
During this time I discovered a critical fault in one systems design. Assisted with the modernization of the engineering technical documentation process.
Performed installation of Linux on a disused server in order to run a configuration management tool (router audit tool or RAT) for network operations.

Code Examples

JAnimations: Animation Queing / Batching Function

A javascript (jquery) function that executes a series of css based movements with reliable sequential or simultaneous execution without the need to write ugly nested animation code.

This simple recursive function works off an array of arryas containing the finished state of the given element's location, duration of movement and if this is a sequentially or simultaneously executed with the next step. A post animation function can also be added to the end of the movement step array. Stacking of simultaneous animations has no limit. One major issue solved by this function is the condition where post animation execution happens during load and again during animation execution.
Why show case such simple code? To demonstrate a dedication to simplicity and clean programming practices resulting in minimal code writing.

//step array example ["#res",   {top: "25px"}, 300,  true, runFunction()]
function JAnimations(janim_que, this_janim){
    //if 3 is true do this and next simultaneously, this can stack forever
    if(janim_que[this_janim][3] !== "undefined" &&
      janim_que[this_janim][3] == true){
      //console.log('is true do both!');
      //console.log("recurse run animation #"+this_janim);
      //synchronous execution of next step
      JAnimations(janim_que, +this_janim + 1);
    }
    //.animate( properties [, duration ] [, easing ] [, complete ] )
    $(janim_que[this_janim][0]).animate(
        janim_que[this_janim][1],
        janim_que[this_janim][2],
        function(){
            execution:{
                //code here executes when animation is first established and again when animation completes
                //The while loops during animation and the if only fires when animation is done
                while($(janim_que[this_janim]['0']).is(':animated') == false){
                    if($(janim_que[this_janim]['0']).is(':animated') == false){
                        if(janim_que[this_janim][5] == true) {
                            //kills execution if simultanious execution is attempted
                            //console.log("~~~"+this_janim+" RAN BEFORE!~~~");
                            break execution;

                        }else{
                           //console.log("~~~"+this_janim+" first time~~~")
                        }
                        janim_que[this_janim][5] = true;
                        //console.log("after animation of #" + this_janim);
                        if (janim_que[this_janim][4] != undefined) {
                            (janim_que[this_janim][4](janim_que[this_janim][0]));
                        }
                        //non synchronous execution of next step
                        if(this_janim < janim_que.length - 1
                            && janim_que[this_janim][3] != true) {
                            //console.log('not true, dont do both');
                            //console.log("end run animation #" + this_janim);
                            this_janim++;
                            JAnimations(janim_que, this_janim);
                        }
                    }
                }
            }
        }
    );
}

//As used on this page for the opening animation
//Step Components
//EXAMPLE: ["#res",   {top: "25px"}, 300,  true]
//#res is the selector of the object being moved
//{top: "25px"} is the desired css at the end of the animation.
//300 is the duration in milliseconds.
//true means execute the next step before this one completes, false here would mean wait for execution to stop.
//a fourth element can be filled with an arbitrary function.

JAnimations([
    //starting element positions are established (off screen)
    //Heading slide in from the right and on completion the resume block is brought in using the jquery slideDown function
    ["#heading", {left: "1000px"}, .1, true, function(select_this){$('#resume-block').slideDown('100');}],
    [".resume_button", {top:  "500px"}, .1, true],
    [".top_button", {top:  "-500px"}, .1, false],
    ["#heading", {left: "0px"}, 500, false],

    //top elements slide in and over-shoot giving the appearance of momentum
    //everything ending in true happens at the same time as the animation after it
    //false implies that this animation must be completed before another is started
    ["#res",   {top: "25px"}, 300,  true],
    ["#code",  {top: "22px"}, 500,  true],
    ["#oproj", {top: "20px"}, 400, false],

    //now they appear to rubber-band into their final position
    ["#res",   {top: "0px" }, 100,  true],
    ["#code",  {top: "0px" }, 200,  true],
    ["#oproj", {top: "0px" }, 400, false],

    //Lower buttons do similarly after the top ones are in place
    [".expand_resume",            {top: "-25px"}, 300,  true],
    ["#get_resume",               {top: "-22px"}, 500,  true],
    ["#get_resume_better_format", {top: "-20px"}, 400, false],

    [".expand_resume",            {top: "0px"  }, 100,  true],
    ["#get_resume",               {top: "0px"  }, 200,  true],
    ["#get_resume_better_format", {top: "0px"  }, 400, false]

    //the 0 here is the starting animation step.
], 0);


            

Explode It! A just-for-fun special effect for making text fly apart

Explode It! is a function that makes any block of text's individual letters explode away from their starting locations and fly off in a random direction and then snap back as if nothing happened.
To see this function in action click on the "Code Examples" title at the top of the screen or any other H3 element

function getRandomInt(min, max) {
    var result = Math.floor(Math.random() * (max - min + 1)) + min;
    if(result % 2){
        return result * -1;
    }
return result;
}
//send the letters flying about and then snap them back
//A simple fun function by Jason McCreary
explodeTitle = function($target, $explode_speed, $snap_speed){
  var the_height = jQuery($target).outerHeight();
  //save this for later so we can put it back when we are done.
  var og_content = jQuery($target).text();
  var characters = og_content.split("");
  jQuery($target).empty();
  //maintains the height of the element during the transition
  jQuery($target).append("div id=\"explode_box\" style='clear:both; height: "+the_height+"px;'> /div>");
  jQuery.each(characters, function (i, el) {
		jQuery($target + " #explode_box").append("div class=\"exploder\" id=\"exploder_" + i + "\"
			style=' height: "+ the_height +"px; z-index: 1000; position: relative; float: left;' >" + el + "/div>");
		jQuery($target + " #exploder_" + i).animate({
			top: getRandomInt(10, 100),
			left: getRandomInt(100, 200)
		}, $explode_speed);
	});
    //snap back, replace with original content
    jQuery($target + " .exploder").animate({top: 0, left: 0}, $snap_speed, function(){
    jQuery($target).empty();
    jQuery($target).text(og_content);
  });
}
            

Other Projects

Other projects here!

Contact Me

jason.mcc AT Gmail.com
9O4 742 O73Eight