{ Andrew Funderburgh }

A web-resume and project showcase website

{ About Me }

I am a software engineer with a passion for team development. It combines two activities that I love to do: programming and working with others. I have worked with a wide array of technologies, but I have spent most of my time developing in C#. I have a decent amount of cloud experience, I have developed and deployed many microservices to both AWS and Azure. Within each cloud provider I have used a good range of offerings and know how to navigate both systems comfortably. I have developed with several different web technologies such as Node.js, ASP.NET, AngularJS, Vue.js, and others. I can implement any reasonable frontend UI as long as I have good stylistic direction. I can design and implement a RESTful API. I can write well thought out automated tests at any level, from unit tests to cover individual groups of code to integration tests that test a system on a larger level. I am familiar with databases and the mechanics of them in both SQL-based and NoSQL-based databases. I have worked with various different source and version controls like Git, SVN, and Accurev. I have experience in Windows and Linux-based environments. I have actively sought out leadership roles, such as interviewing and leading interns, organizing a culture group within Tyler Technologies, and doing peer and code reviews.

While not at work I love to explore new hobbies. I prefer to be a "Jack-of-All-Trades," trying out many things and expanding my skill set, but rarely spending a large amount of time in any one area. Some of the things I have done that I enjoyed are bouldering, ballet, table top games (mostly Dungeons and Dragons), fencing, ballroom dancing, video games, painting, playing Magic the Gathering, and travelling. Above all else though, my favorite thing to do is read. I have spend countless hours reading all sorts of books, from fantasy to non-fiction, I will devour any text that piques my interest. I used to be pretty dismissive of audio books, but I decided to give them a try and now I am pretty much always listening to a book if I'm not busy.

{ Work Experience }

StoneEagle F&I
Team Lead
Jun. 2021 - Present
I am currently working as Team Lead on our companies’ “Platforms” team which handles all cross-cutting concerns for our software development teams. A few of the various services and projects we manage are Auth Systems, Document Services, Scheduling, and Event Management. Our solutions are mainly in Azure with some in AWS and all are written in C#. I have implemented several policies for the team to ensure we produce useful and reliable tools. They include: a requirement to produce useful documentation with actual examples to every API created, covering set of unit and/or integration tests for every system, and a requirement to use CI/CD to release all software our team produces.
Energy Worldnet
Senior Software Developer
Oct. 2017 - Jun. 2021
While working here, I developed and managed several web applications using various technologies in the .NET ecosystem. I personally built several projects, including a notification system, a dashboard for displaying company metrics, and a customizable integration system for importing and exporting data for our clients. I wrote code in C# on a daily basis, Javascript using Vue.js and Angularjs most days, and occasionally I wrote SQL. The main application our team developed was an ASP.NET core web site. Additionally, we had a Restful Web API that we exposed to our clients, a job scheduling service that handled reports, notifications, and other scheduled events, and a fairly exhaustive set of unit tests for our web site’s core functionality. Right before I moved to another company, I had started a set of integration tests for our APIs (both internal and external).
PCMS Technologies
Senior Software Developer
Oct. 2016 - Present
I was part of an extremely small development team, so I held a multi-faceted role. Not only was I a developer, but I fulfilled the duties of a project manager, business analyst, and QA. I was directly involved in gathering requirements from the client and managing the pace and deadlines of my projects. I was also responsible for coordinating and implementing integrations with third party businesses. I worked with an array of technologies in the .NET family to build a unique application for new clients from a core code base built by PCMS. I learned a lot from this experience and grew a better appreciation for non-developer team members at other companies I worked for.
Tyler Technologies
Software Engineer
Jun. 2013 - Sep. 2016
I worked in the Courts and Justice division on the Integrated Courts and Justice team. I was responsible for writing software for the Odyssey product. While on this team, I worked on both short and long term projects. I developed eDiscovery, a software component in our Odyssey product, for the state of Texas. It allowed prosecutors and public defenders' offices to share documents electronically and send/receive notifications via email whenever said documents were uploaded or altered. I was also a member of the team that implemented an entirely new product area to Odyssey which would service appellate courts. I started a culture group that met biweekly to discuss new technologies, organize outings to local developer conferences, and organize development of new internal developer tools. I was part of a refactor team that started a rewrite of some core systems for our main product. We also got to research and test development with various technologies new to our company like ElasticSearch.
Linnco
Software Programmer
Jan. 2011 - May 2013
I worked in a team of three that was responsible for maintaining and extending an in-house software suite responsible for inventory management and resource allocation. I implemented a Scrum process in the team in order to structure our previously unguided programming efforts. I personally initiated several projects to improve the quality of our development environment, involved in migrating our codebase to Git.
Branch & Hurtt Law Firm, P.C.
Computer Specialist
Jun. 2010 - Jan. 2011
I was hired to design and build a website for the law firm. Additionally, I helped establish the law firm's digital footprint. I accomplished this by registering the site on several websites like Google Business and oversaw purchasing of advertising. I also worked on several side projects for the owner of the law firm. I built a website for a roofing company he held a stake it that had a catalogue of the company's work and I built a simple application to update a database I designed for a collection agency he also owned.
Texas A&M University
Peer Teacher
Aug. 2009 - May 2010
I aided the TA in teaching the lab section of classes CSCE 121: Introduction to Program Design and Concepts and CSCE 221: Data Structures and Algorithms. I would occasionally help the professor grade tests. I also held office hours where students could get help with homework and class projects.
 

{ Skills }

Programming Langauges
Web Technologies
Other

{ Project Samples }

The following is a catalogue of some of the personal projects I have worked on in my spare time.

{ Trading Card Game Overlay }

Summary

I developed a program to overlay graphical information about the game state of an online "Digital Trading Card" game called Eternal. The project can be found here on GitHub. Many games have players who wish to have easy access to more information available to them than the game normally provides. These players develop "overlay programs" which draw on top of the screen where the game is to display this information. There are several ways to go about this, a common way is to make something called a Direct3D Wrapper. You can duplicate the code in the Direct3D dll but include your own graphics code in the EndScene function, which will cause your graphics to be drawn after everything else has been rendered. This project will eventually attempt such a method. For the first iteration I wrote a program that finds the game's process and changes its drawing space to match the game, then drawing on a transparent background.

There existed another open source program to achieve a similar goal that derived the game state by reading network information between the server and client. I decided to develop a program using a different method: Optical Character Recognition (OCR). I used a C# wrapper for the popular OCR Engine Tesseract. Using this library, I was able to get almost perfect word recognition. However, since it wasn't perfect, I supplmented the Tessearct with another library, SymSpell that finds the closet word match. This project is normally used for spell correction, but it is also often used to clean up the results of an OCR program like I am using it here.

Results

The first few iterations produced very poor results. Reading text straight from the screen with no image processing failed to make any correct match. In order to improve this result, I went through several iterations of image processing. I started with scaling the image upwards to provide larger text to Tesseract. This was a little big effective, so the next pass, I added some light text processing on the results of the OCR. This included removing any non-alphabet characters including spaces. This had a significant jump in accuracy. The next few iterations I experimented with several kinds of image preprocessing. Some of the techniques include converting the image to greyscale, binarizing the image, noise removal, and several others. The latest version converts each screen rendering into grey scale, then scales the image upwards by a factor of 4. The following table shows the results of the most interesting milestones of the development process:

Method Accuracy Processing Time
No PrePrccessing 0% 44 ms
Scale 8.33% 2595 ms
Scale & Text Processing 58.33% 2565 ms
Binarize, Greyscale, Scale, Remove Noise & Text Processing 75% 1795 ms
Greyscale, Scale Image & Text Processing 83.3% 774 ms
Greyscale, Scale Image & Text Processing & SymSpell 100% 951 ms
Since the last iteration with image processing didn't reach an identification rate close to 100%, I used an open source library that implements Damerau-Levenshtein distance to find the nearest correct name match. This has resulted in slightly slower performance times, but a 100% rate of text identification.

Future Development

In the future I have several improvements planned:

  • Different Resolutions Support (Current Implementation
    The current iteration only has data for the 1920x resolution
  • Improved Timing Between Screen Recapture
    The program now sleeps for 750 milliseconds then recaptures the screen. The sleep is currently sufficient to wait between page renders, but a more dynamic approach would be more efficent and work on multiple systems.
  • Improved Drawing Time
    I am using the Graphics DrawImage to render the graphics on screen, there are ways to improve the speed of drawing images with this method.
  • Improved Image Processing
    Processing is required on each screen shot for Tesseract to be able to read it effectively. There are various ways I can improve the speed and efficiency of my current processing methods.
  • Dynamic Card Position Recognition
    Currently, the program uses hard coded values of where the cards text box exists. In the future I would like to be able to find the textboxes via algorithm, so changes to the UI do not break the current functionality.
  • Better User Workflow
    With the first version of this project, I start the .exe everytime I need the program to run. In the future, I want the program to be able to wait in the background and be able to activate it when needed with something like a system tray icon.

Contact me via the following methods: Email , Github , and LinkedIn