|
welcome to my extended resume! in a normal resume you have to be
concise and don't have the opportunity to expand on some of your
accomplishments. this makes me sad because i have worked on many projects
so here is my extended resume, though it is still under construction. enjoy!
Christopher Davis
Objective: To find a professional outlet for my creative energy.
Professional Skills:
- Development Skills: System architecture, software development and design, web design and programming, project management
- Fluent Languages: .NET, C#, VB.NET, ADO.NET, XML, XSLT, SQL, JavaScript, HTML, XTHML, CSS, UML, PHP, ASP, mySQL, Regular Expressions, AJAX
- Pretty Good With: Photoshop, Illustrator, Director, Swift 3D, Blender, Java, MIDI, MAX/MSP, Pure-Data, Premiere, ADP, Perl
- Tools: Visual Studio(2001 & 2005), Dreamweaver, Flash, Fireworks, Photoshop, Pro Tools, SQL Server Management Studio, Query Analyzer, Visio
+ Work Philosophy
There are many comforts in life that I’ve come to enjoy; many of which I
would not be able to attain without money. In exchange for this money I spend
most of my time at work, doing whatever is tasked of me to make the business
I’m working for run better and make more money. To me being happy in the workplace
goes beyond this exchange. It entails actually making a difference and being
noticed for it. It stems from being a part of a team where everyone is working
together towards a common goal; where people feel good about what they’re working
for and what the company stands for. It encompasses ambition, intuition, creativity,
intelligence, and good old fashioned hard work. If I were to come home at the end
of the day and I could say that I had what I outlined above I would be a happy man.
Professional Experience:
Senior Developer 9/2005-present
EVO Merchant Services/Transaction Payment Systems
Melville, NY/Moorestown, NJ
- Wrote several services to automate daily tasks. + Case Study: Amex End To End
- Architected, built, and implemented several key system components.
- Interfaced with Industry leaders such as American Express and Discover.
- Released proprietary software to optimize and partially automate the merchant boarding process.
- Built several websites integrating CMS tools and intelligent dynamic content.
- Created several icons used for internal applications.
Programmers can have artistic skills :^)
Amex End To End
American Express is one of the most well known companies in the world,
so when I got a chance to develop against their merchant boarding API I was pretty exited.
To kick off the project I was handed the very large document that Amex had given
my superiors and told, “We’re not sure how this works, see if you can figure it out”.
So that’s how I started. Because a lot of the document is proprietary I can’t discuss
the details; however I recognized immediately they had a similar API to Royal Caribbean
Cruise Lines which I was quite familiar with from my time at TRAVELSAVERS. Suffice it
to say it is an XML based web service that encapsulates a string of all the data needed
to board a merchant onto the Amex platform. I started programming against the documentation
and within a few days had the first prototype available.
The idea was to write a windows service that connected to the Amex API and simply sent a
batch of merchant data off every [n] amount of time to board the merchants on the Amex
platform. For those totally unfamiliar with the credit processing industry this is a
necessary step for any merchant to be able to accept American Express cards on their
credit card terminals. Without being “boarded” on a specific platform a merchant can’t
accept their cards. Being that EVO is a very large credit processor and hundreds of merchants
are boarded by them every day it was important to be able to write a program that could
handle the automatic boarding of any processor possible. This of course would free up
lots of data entry time, dramatically reduce the possibility of human error, and eliminate
the wait time of at least a day that was formerly associated with the manual process.
The API is technically XML, however inside of the XML node is a long string.
This seems to be common with companies that use mainframes as the serial type string
must be easier for them to import and work with. Since I’ve never worked with mainframes
this is just a guess based on my observation of companies that do. I wrote a routine to
parse out all of the sections of the serial string and map the corresponding data in our
database to those positions. Because of the nature of serial strings I had to add a few
functions for padding values with zeroes, accommodating for spaces and general stuff like
that. This was fairly simple:
/// <summary>
/// This will insert blanks into all of the error fields in the string.
/// the only error codes that aren't 1 charachter long are 400-409, these are all 3 charachters long.
/// </summary>
/// <param name="sb">the string builder we're using to build the request</param>
private static void InsertBlankErrors(StringBuilder sb)
{
//insert blanks into all the error fields
//see table AmexWSErrorCodes
DataSet DS = Connection.AmexErrorCodes();
foreach(DataRow dr in DS.Tables[0].Rows)
{
try
{
InsertSpaces(sb,Convert.ToInt32(dr["StartPos"].ToString()),Convert.ToInt32(dr["FieldLength"].ToString()));
}
catch(Exception ex)
{
string err = ex.Message;
}
}
}
/// <summary>
/// this function adds space to make sure all fields are the correct length
/// </summary>
/// <param name="strValue">the string to add space to</param>
/// <param name="intStringLength">the required length of the string</param>
private static string PadValue(string strValue, int intStringLength)
{
while(strValue.Length < intStringLength)
{
strValue += " ";
}
return strValue;
}
private static string AddSpaces(int intSpacesToAdd)
{
string strSpacey = "";
for(int i=0; i < intSpacesToAdd; i++)
{
strSpacey += " ";
}
return strSpacey;
}
/// <summary>
/// this calls AddSpaces to insert a blank field into the Amex string
/// </summary>
/// <param name="sb">string builder used to build the amex string</param>
/// <param name="intStartPos">position in the string where spaces need to be added</param>
/// <param name="intLength">the number of spaces to add</param>
private static void InsertSpaces(StringBuilder sb, int intStartPos, int intLength)
{
sb.Remove(intStartPos,intLength);
sb.Insert(intStartPos,AddSpaces(intLength));
}
private static string CheckForTempValue(DataSet dsTempValues, int intFieldNumber)
{
//loop through DS and try to find the temp fiels, if it exists,return it. else return null.
string strReturn = null;
foreach(DataRow dr in dsTempValues.Tables[0].Rows)
{
if(Convert.ToInt32(dr["fieldNumber"]) == intFieldNumber)
{
return dr["fieldValue"].ToString();
}
}
return strReturn;
}
/// <summary>
/// this will update the string builder with the appropriate data.
/// First it makes sure the field is the correct length
/// Second it removes the old charachters at that position
/// Third it inserts the nessasary spaces
/// </summary>
/// <param name="sb">string builder used to build the amex string</param>
/// <param name="intStartPos">position in the string where the value is added</param>
/// <param name="intLength">length of the field to add</param>
/// <param name="strValue">curent value of the field to add</param>
private static void UpdateString(StringBuilder sb, int intStartPos, int intLength, string strValue, DataSet dsTempValues, int intFieldNumber)
{
if(dsTempValues != null)
{
string strTemp = CheckForTempValue(dsTempValues, intFieldNumber);
if(strTemp != null)
{
strValue = strTemp;
}
}
strValue = PadValue(strValue,intLength);
if(strValue.Length > intLength)
{
strValue = strValue.Substring(0,intLength);
}
sb.Remove(intStartPos,intLength);
sb.Insert(intStartPos,strValue.ToUpper());
}
I opted to use the StringBuilder
class because it’s much more efficient than just passing strings around and it has a lot of
great pre-defined functionality that makes working with this type of data much easier.
The next part was to parse the data returned from Amex. They actually populate the
pre-defined spaces in the serial string indicating weather or not specific fields passed
their validations. To avoid hard coding these values I created a table in the DB to hold
all of the positions of the error indicators and the corresponding error. Now I could
simply loop through that table when I get the string back and handle the errors as defined
by Amex. Besides the errors there are 2 important values that are returned; weather the
record was successful and if it was what identity Amex had given it. The unique number
returned is called an SE number and it’s used by Amex to identify a merchant when a
transaction is sent for processing. If the record was successful I would copy the SE
into our database and log the results of the transaction. If it failed I would log the
details for later use.
In the original design I thought of setting up a notification mechanism for failed merchants.
However it turns out this wasn’t sufficient for several reasons. First of all many merchants
can potentially fail validation causing people to be inundated with emails. The primary
reason was because of business rules. The person in charge of handing the Amex errors
was also responsible for manipulating the data for some merchants if we thought they
should pass validation or if there was some kind of data entry error that caused the failure.
For this I set up a full interface in a web application that allowed the responsible
people to run reports on statuses and errors and export them to excel, as well as a
directly interface into our system so they could make any changes they deemed necessary.
This also handled special cases that required certain flags to be set which only these
administrators should have access to. I made it a web app because I can develop web
applications really fast and because of the way the network was set. We programmed most
of the company applications as web apps and controlled access to them active directory.
By using this model I didn’t have to worry about permissions or logins because I could
use our existing infrastructure.
Writing a DataGrid to Excel was really easy so that made me happy. Here is the code,
however this is .NET 1.1, I know the DataGrid was totally re-done into the DataView and
I’m not going to re-write the code for this article – sorry!
//code for generating excel where dgReport is the datagrid
string strStyle = "<style>.texto { mso-number-format:\\@; } </style>";
Response.Clear();
Response.AddHeader("content-disposition", "attachment;filename=AmexMerchantReport.xls");
Response.Charset = "";
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.ContentType = "application/vnd.xls";
System.IO.StringWriter stringWrite = new System.IO.StringWriter();
stringWrite.WriteLine(strStyle);
System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
dgReport.RenderControl(htmlWrite);
Response.Write(stringWrite.ToString());
Response.End();
After the program ran for a while we realized we had to make some changes. The person
who was checking the queue for errors wanted to know when they were coming in at real time,
but didn’t want emails with the errors. Due to their high status level with the company
I was tasked to put something together ASAP, it better be good and it will live outside
the normal project schedule. For any inexperienced people reading this you may think
this would be frustrating; however the more experienced people know that this is normal
in the corporate world. The boss wants it, the boss doesn’t want to pay for it, make the
department look good to the boss. The good thing about these types of projects it they
usually get you recognized to the higher ups and you have all kinds of creative freedom.
To make sure they noticed my work I decided to write something that was a bit
over the top – SHMON: the Service Heartbeat MONitor. This was a program that ran
in the system tray and told you when something went wrong with the process or if
there were records in the queue. It was a pretty simple program; there would be a
beating heart in the system tray that displayed an exclamation mark if something needed
your attention:
You would right-click on the icon:
Click “check services” and see the app:
From here you could just click on the program with issues and you would be directed to
an interface to fix it. This project was actually a lot of fun because since it wasn’t
on the project schedule I didn’t have to justify putting a beating heart in the system
tray which I thought was cool. My manager thought it was cool when it was done, but he
probably wouldn’t have signed off on if he had to. Also when we released this program the
person who was to use it thought the program was cute and I guess that was good enough for me.
Overall the Amex project encompassed many different facets of development from the
database development, to the windows service that ran against the API, the web forms used
to administrate the data, and finally the windows app in the system tray with fun icons
for the higher ups. It’s a great case study in how an idea can turn into an end to end
solution. This application has been running for almost 2 years and the only problems
we’ve encountered have been when Amex “upgrades” their API. Other than that project success!
Director of Web/Application Development 2001-9/2005
TRAVELSAVERS / TravStar Technology
Oyster Bay, NY
- Led IT team in planning, design and development of several high level applications
- Designed and coded several web based applications including dynamic sites, booking engines, mediated chat servers, content managers and email distributors.
- Led the IT team in converting several applications from ASP/COM to .NET.
- Worked with senior management to identify the technological needs of several departments.
- Worked on projects during the entire development cycle; Identification, planning, scheduling, coding, QA,
training and maintenance.
- + Case Study: The NEST
The NEST – Empowering new business with technology:
During the web boom the travel industry underwent serious and significant changes.
The online travel agency giants took a significant amount of business away from
local travel agencies and many of their businesses began to falter. Instead of
allowing small home based travel agents to be driven out of the industry by technology,
TRAVELSAVERS brought on industry entrpreneur Stuart Cohen to lead a new division of
the company called “The NEST”. The NEST is a group of home-based travel agents that
leverage technology to compete with the industry giants while providing the service
that only your own personal travel agent can provide. During my time at TRAVELSAVERS
I was the Director of Application and Web development during the launch of this program
and I used my group of programmers based in Shannon Ireland to build the products that
made this tech-oriented project an industry success. Following is a description of some
of the technology we provided:
Extranet Web Site
The first thing we built was an extranet site. This was fairly simple at first;
users could log into the site and view documents and special offers that were only
available to members. For this we wrote a CMS tool so the content owners within
the company could change the specials or upload new documents as nesasary.
These-a-days most people would just buy a CMS but at the time they were expensive an
cumbersome. We worked out a great design where all of the content would be placed
in the aspx pages (yes, this project was in .NET) as custom user controls. Each
control had an ID property which corresponded to an ID in the content database;
at the time we were using SQL server 2000. If a user logged in with content
owner rights to specific content then they could click on the content, it would
change colors to show that it was in edit mode, and they could type away. There
was a save button for when they were done. This was a fairly easy project to manage;
I came up with the architechture and one of the programmers got it done fairly quickly.
In retrospect we could have spent more time with this and released it as it’s
own product because there are software companies today which have a model which
is almost exactly the same as this only ours was way more lightweight and we didn’t
build a ton of features into it.
Online Mediated Chat
One of the cool ideas Stuart came up with was an online mediated chat. He would
invite big-wigs in the industry to give talks to the agents; the agents would get
an email, click the link to get to the chat, log in using their extranet credentials,
and be able to listen and then ask questions. To avoid an insane barage of questions
the chat was to be mediated by someone within the company. They would see all of
the questions and pick the ones to be sent, then whoever the guest was would be able
to answer the question for all to see. I architechted this solution with the VP of
IT, Dr. Arthur Pid. He was my boss at the time and a pretty cool guy at that.
We ended up using socket programming to accommodate the chat portion of this. We
allocated 2 developers to the project and they finished it in a fairly reasonable
time. When it was released it was an instant success!
Skinnable booking engine
Being that we already wrote a booking engine we just had to skin it based on the
user that logged into the site. If a member of the NEST logged in then it would
look like the NEST extranet, otherwise it would looke like the TRAVELSAVERS extranet.
This was fairly simple to accomplish because we built the engine using an MVC
model which included a lot of XSLT and CSS. We could determine the user based
on the login session and change up the CSS for colors and graphics and change the
XSLT if we needed new formatting.
Instructor of Continuing Education 2000-2002
SUNY Farmingdale
Farmingdale, NY
Teaching is fun!
Working at SUNY Farmingdale was a lot of fun for me. You may be wondering how
someone right out of college without an advanced degree ended up teaching computer
technology at a state university. I was working a freelance gig at Dayton T. Brown,
a company that does a lot military documentation and logistics contracting to upgrade
their website. They weren’t sure what they wanted so I came up with a bunch of ideas
and gave them several presentations. It turns out that one of the people who watched
my presentations worked at IBM with the head of the continuing education department at
SUNY Farmingdale and she was so impressed with my knowledge and presentation skills
that she gave me a recommendation which led to an interview and the rest is history.
The job entailed teaching continuing education which is basically professionals
looking to broaden their horizons and further their carrers. The people there were
all pretty intelligent and the topics were my expertise so it was like just hanging
out and shooting the BS about programming and how to do it most of the time. We had
in-class assignments and discussions. I would ask the students to read the material
but I knew that most of them had families and work to worry about and at the end
of the class they only get a certificate based on attendance so I went over all
of the material in detail in the classroom. We had a lot of hands on training and
programming and by the end of the class everyone has enough knowledge to actually start
applying their skills professionally. I love teaching, for some reason it just comes
naturally to me; this was a fun job! Unfortunately it came to an end when NY State
cut a whole bunch of educational funding and the program I was a part of became
one of the casualties.
Webmaster, Systems Administrator, Multimedia Specialist, Consultant 1/2000-10/2000
Pan American Bancorp
Hauppauge, NY
- Designed company logos using Illustrator and Photoshop.
- Designed, programmed and maintained sections of company web page with Perl, HTML, JavaScript, Photoshop, ImageReady, and Real Video.
- Involved in ad production (brochures, newspaper ads, business cards, etc.)
- Designed and maintained add banners and web pages for several co. clients with Flash, Illustrator and Photoshop.
- Lead several special projects, including a live web-cast at the World Trade Center Using Real Products.
- Worked with partner company Promotores de Turismo in Miami, Fla.:
- Set up Real server.
- Trained staff to use Real Products, streaming media, and Flash.
- Technical consulting in all areas of web development.
Fine Arts Site Manager 1998-2000
Instructional Computing
Stony Brook, NY
- Conducted training in new media programs such as Director, Flash, Photoshop, Dreamweaver, Fireworks, and Macintosh OS.
- Assisted in installation and maintenance of hardware and software.
- Scheduling and training of staff.
- Design and maintenance of site web page.
Web Programmer 1999-2000
Eduware
Huntington, NY
- Enhancement of web page with JavaScript and DHTML.
- Production of ad banners.
- Some database work and classifications.
Lab Assistant 1994-1995
Brookhaven National Lab
Brookhaven, NY
- Prepared media for experiments.
- Catalogued results of experimentation and maintained database.
- Visual design programming for UI of custom software.
Education:
1996-2000
SUNY Stony Brook
Stony Brook, NY
Wait, you majored in music?
When I first walked through the door at Stony Brook University I was a dreamer
and an idealist. I wanted to write an Opera so I decided to major in music and I
loved running so I was determined to run X-C. Once I had a full understanding of
the history of music I realized that writing music like Bach, Mozart and Beethoven
didn’t make one great, it was the innovation that went into that music. It was the
ability to create something that could move people as no one had done before; to extend
understanding of emotion through art. I think that many of the great artists of the
20th century tried to take music in another direction and missed the mark, then were
ultimately eclipsed by the popular music which still dominates our culture today.
I had the desire to create complex art however as a student I didn’t have the
resources to build a group of artists to accomplish my goals. I decided to turn to
the world of technology to help. I started taking computer science classes to get up
to speed with modern practices and techniques and picked it up rather quickly. I
took a technology in art class where my talents began to truly be noticed. Thanks
to my expertise in the technology along with my unbridled creativity I was selected
above all of my peers by my professors Dr. Dan Weymouth
and Christa Erickson to manage
a new computer lab the school was to open which specialized in art, music, theater and t
echnology. During my time in the lab I was able to hone my skills and work on my
projects using most of my free time. I began programming with web specific languages
that weren’t taught in class and was able to get my skills to such a point where I was
able to take on part time jobs programming JavaScript. I became good enough where I
was able to land a job directly out of school developing web applications.
Though I didn’t follow the outlined curriculum I value the education that I got from
Stony Brook. My professors truly encouraged me and helped me determine the path that
would ultimately lead me into the world of software development.
Miscellaneous Accomplishments
- 2004 Guest Speaker at the 5th hope technology conference in NYC.
- 2000 Undergraduate Recognition Award for Excellence and Outstanding Achievement and Leadership.
- 1999 Undergraduate research and creative activities award for outstanding project in Music.
- 1998–99, 99-00: Captain of Stony Brook Cross Country and Track teams.
- 1995: Academic all American in cross-country.
Interests & Hobbies
Running, adventure racing, robotics, the future of new media’s integration with the arts.
|
|