West Palm Beach FL ***** David MacRae 215-***-****
OVERVIEW:
With over 30 years of experience as an Software Engineer, I bring extensive expertise in C++,
Python, C development, coupled with a solid understanding of design patterns including Factory, Singleton,
Observer, and Decorator. Proficient in crafting multithreaded applications, thoroughly skilled in networking apllcations such as TCP/IP, HTTP and Websocketing, adept at applying object-oriented programming concepts, and experienced in Agile methodologies. Skilled in software testing using tools such as GDB and Valgrind, conducting thorough code reviews, and contributing to requirements specification. My background includes working with Real-Time Operating Systems (RTOS), proficiency in low-level assembly programming, and utilizing essential tools like Git, Eclipse, and Visual Studio. I have developed software industrial automation systema with impeccable code quality, successfully bringing projects to fruition.
SUMMARY:
Design, implementation and maintenance of large code bases over the full SDLC
Architectural and component interface design
Proven ability to deliver production systems on schedule
25 years of C++11/14/17 using the STL, Boost, MFC, and ATL class libraries
3 years in C# using WPF, WinForms, WCF and Microservices
Other languages: C, Java, VB, JavaScript, Python, Lua, UNIX scripting, assembler
Extensive multithreading, multiprocessing and networking experience
Deep low-level knowledge of Windows, including Win32, COM, DLLs, and kernel
Real-time embedded applications working with naked hardware, QNIX and Linux
Team player, experience in management of small groups.
Service and client applications in both Windows and Linux
Telephony applications using TCP/IP, VOIP and SIP
Experienced with Agile development, Jira, GIT, Jira and Jenkins and other source code control systems
TECHNICAL SKILLS:
O/S : 32/64bit Windows, UNIX LINUX/Solaris/AIX
Languages : C/C++, C#, VB, VBA, Java, Shell scripts, various assemblers, JavaScript
Device drivers : Win32, UNIX, DOS
Application Frameworks : MFC, ATL, .NET, STL, Boost, XSD, XML, SQL, HTML, Tibco, STS, Maven
O/S APIs : Win32, Linux, COM, CLR, DCOM, DirectX, Sockets, OpenGL, Xwindows
Tompkins Inc, Raleigh NC Dec 2023 – Present
Software Engineer (employee, remote)
Software for warehouse automation
Interface with PLCs using C++
Dematic Corp, Minneapolis MN Aug 2022 – Jun 2023
Software Engineer (employee, remote)
Software for warehouse automation
Rockwell Automation, Cleveland OH Mar 2022 – Aug 2022
Software Engineer (contractor, remote)
Control software for managing PLCs
Comscope, Minneapolis MN Aug 2021 – Feb 2022
Software Engineer (contractor, remote)
Firmware engineer working in C and C++, developing a propritary communications protocol.
Control software for the embedded system written in C#
ADT, Philadelphia PA Oct 2020 – Apr 2021
Software Engineer (contractor, remote)
This division of ADT makes Home Security System
Firmware engineer for an embedded Linux system using C++/14.
Primarily worked on the communications between the box and a remote Internet server
TCS/Travelport, Atlanta, GA Sep 2017 – Jan 2020
Software Engineer (contractor)
Travelport makes systems for travel agents. TCS is one of the world’s largest consulting companies
Wrote a full-featured editor in C#/WPF for a scripting language
Updated the scripting compiler/runtime written in C++. Added new features.
Wrote a host communication program in C#/WCF
FreedomPay, Radnor, PA June 2015 – April 2016
Software Engineer (contractor)
FreedomPay makes software to connect merchants to banks for credit card payment
Built a TCP/IP interface to Oracle Opera for hotel and resort management
Supports thousands of simultaneous terminals
Written in C#.Net using WCF
American Contract Bridge League, Horn Lake, MS March 2014 – March 2015
Software Engineer (contractor, remote)
The ACBL is the North American headquarters for duplicate bridge players
Built a Windows app interfacing with a legacy PASCAL program to score games. Written in C++ and C#.
Built an XML generator, which shows the contents of game files.
Included various ancillary functions such as Windows services, FTP, unzipping, etc.
SiriusXM, Lawrenceville, NJ June 2012 – Nov 13
Software Engineer (contractor)
SiriusXM builds streaming radio from satellite and over Internet.
Built a TCP/IP relay to fetch metadata from a variety of sources and send it downstream for Internet radio
Triveni Digital, Princeton Junction, NJ June 2012 – April 2013
Senior Software Engineer
Triveni builds software to monitor digital image streams for cable companies.
Worked on drivers for low-level software that interfaces with the image streaming hardware.
Ported some of it from Windows to LINUX.
Barclays Capital, New York, NY Sep 2011 – May 2012
Software Engineer in Derivative Pricing (contractor)
Barclays Capital is the investment bank arm of Barclays Bank. This group prices derivatives.
Worked on communications between an instrument-pricing server and a client application, server-side in Java and the client side in C++.
Client side uses COM to provide data to Excel apps written in VBA and an internal functional language.
Made modifications to the pricing server job management software in Java.
Developed facilities in Java for automatic comparison of the output of various pricing engines.
IPC, Fairfield, CT Oct 2010 – June 2011
Software Engineer in Telephony Applications (contractor)
IPC builds specialized intelligent phone systems for use by financial traders
Built a SIP (internet telephony) server interfacing with MS Communicator using sockets, STL, XML and HTML.
Interfaced with the phone system using SQL, Tibrv and Winsockets.
Wrote a multithreaded diagnostic program using SQL and sockets.
Windows/GUI development using WinAPI, MFC and STL.
Extensive use of Windows APIs to connect to Internet Explorer and to control its operation, transparently changing operation based on the version of IE installed.
Maintained server-side communications using TIBCO.
Bloomberg, New York, New York Dec 2009 – Oct 2010
Software Engineer in Equities Estimates (contractor)
Bloomberg builds high-speed terminals for use in financial systems, especially trading
Re-wrote an app written in JavaScript and C++, achieving speed improvements of two orders of magnitude.
UI development in JavaScript
Re-designed a data base information retrieval service doubling throughput.
Extensive database work using STL and proprietary databases.
C++ applications developed using GCC, GDB and Eclipse
JAI Pulnix, San Jose, California May 2007 – Sep 2009
Senior Software Engineer / Team Leader (contractor)
JAI is a manufacturer of specialized cameras for machine vision and ORT (Open Road Tolling) applications
Designed and implemented a library of OCR and template matching functions for use in automatic license plate reading applications, currently used around the world.
Innovative driver-like design makes extensions and maintenance easy.
Implemented as a set of co-operating DLLs loaded as required.
Written in Portable C++, running on 32 and 64 bit Windows, Linux and embedded systems.
Multi-threaded for speed.
Designed/implemented teaching and testing tools for use in localizing the library to a given set of license plates. Written in C#/Winforms with VBA and Matlab.
Implemented applications and system software in C on smart cameras running LINUX.
Most development in VS2005/8 with some cross-platform work in Linux using GCC and Eclipse
Xiris Systems, Burlington, Ontario June 1992 – Jan 2004
FLIR Systems Inc., Seattle WA (companies inter-related)
Software Manager
Xiris is a machine vision company building for automatic inspection of part in the automotive, electronics and DVD industries. FLIR builds high-res Infrared cameras.
Designed and implemented the world’s first VBX machine vision library, written in C++
Completely re-designed the library to move to ActiveX, MFC and Win32
Managed a group of 4 engineers and provided architectural specifications for the entire project
Designed specialized machine vision algorithms for automotive and CD/DVD inspection.
Migrated the algorithmic code from MFC to ATL/COM, thus creating a client/server architecture with multithreading/multiprocessing support and OS independence.
Several real-time applications requiring multi-threading, multi-processing and networking.
Embedded applications in Windows NT/2000 for real-time industrial automation.
Wrote extensive template libraries to support COM
Designed, maintained and wrote hundreds of thousands of lines of lean code
Designed and implemented several GUIs built on the toolkit using MFC, ATL and VB
All code developed in various versions of Visual C++, especially VC6.
Optimized the toolkit using MMX and SSSE.
Wrote a Windows NT driver
Noesis, Montreal, QC Oct 1988 – June 1992
Engineering Director
Noesis made imaging software and applications used on UNIX systems.
Managed a group of 4-6 engineers
Interactive Image processing package primarily for bio-medical applications
Extensive customer support work
The Package was written using X/Motif under UNIX. My main programming task was to write an interface layer to allow a Motif app to run under Win32 unchanged.
Wrote an interpreter in C as to be used as a macro language for the package. The language interpreted was very similar to JavaScript.
Eicon Networking, Montreal, QC May 1988 – Oct 1988
Software Engineer
Eicon builds networking system. This group was making a Postscript printer
Embedded work using Motorola 68000 to make a Postscript printer
Worked on the fonts and image engine
Completely re-designed the image engine, gaining 30 times speed improvement
Matrox Electronics, Montreal, QC Oct 1981 – May 1988
Software Engineer / Product Manager
Matrox builds special-purpose graphics and imaging hardware
Embedded programming for assorted target systems on x86
DOS drivers written in 8088 assembler
UNIX driver for a frame grabber
3 years as Product Manager in Marketing for imaging products
Wrote Machine Vision libraries for various board-level products
Extensive design work in OpenGL to create a Silicon Graphics - graphics workstation
Philips, Montreal, QC July 1980 – Oct 1981
Software Engineer
This division built Word Processors on Z8080 systems
Maintained a compiler, making extensive modifications
Wrote a linker for a Z80 Macro assembler
System ‘guru’ for a pair of VAXes running BSD 4.2 UNIX
EDUCATION:
University of Quebec at Montreal, BSC in Math, minor in CS