Chance favors the prepared mind.

-Louis Pasteur

Over my career, I have developed skills in a large number of diverse areas in addition to general software engineering. Below are some of the specific technical areas in which I can contribute to your project.

If you don’t see what you need, please don’t hesitate to ask.  If I can’t help you, I may be able to put you in touch with someone who can.

Mathematical Programming

integralCreating production quality software from mathematical equations is not always as straightforward as it seems. I can take your proof-of-concept system, prototype MATLAB code, or even equations written on a napkin and build a high-quality software library for your application.

Network Programming


internet-network-scheme-globalisation-networkingBuilding robust, cross-platform, interconnected systems can be a significant design challenge. Whether your solution requires development of a simple REST API or even a custom TCP/IP protocol, I can help.

Hardware Interfacing

OLYMPUS DIGITAL CAMERA

Applications today do not exist in a vacuum.  Many must acquire data from locally connected sensors and be able to interact with the real-world using motors and actuators.  My background in electrical engineering allows me to bridge the gap between the software and the hardware.

Embedded Systems

BeagleboardSome projects require programmable intelligence but a traditional PC is too big (physically and/or financially) for the job. An embedded PC may be required or possibly one of the many inexpensive embedded Linux boards, such as a Beagleboard or a Raspberry Pi.  Going even smaller, something in the Arduino family may be a good fit or your application may require a microcontroller on a custom circuit board. I can assist you in selecting the right solution, interfacing to your custom hardware, and writing the embedded software.

Mobile Applications

smartphone-655342_1280The cross-platform mobile development tools created by Xamarin are absolutely incredible.  Applications for all major mobile platforms can be created from a single C# code base, eliminating duplicated development work, reducing testing requirements, and allowing bugs to be fixed once for all platforms. I can help you move your existing or future mobile app over to Xamarin.

Cloud Computing

The emergence oDell_PowerEdge_Serversf cloud computing has changed the playing field for small companies building internet applications.  I have specific experience hosting applications on both Microsoft Azure and Rackspace (OpenStack) and limited experience with Amazon AWS.

Cross-platform Development

Writing software that can compile across several platforms requires an eye for detail and a certain amount of restraint to avoid relying on operating system specific features.  For one recent project, I was able to create a C++ library that could be compiled and used on Windows, Linux, Android, OSX, and iOS.

Multithreaded and Parallel Programming

Sometimes a single processor or even a single computer is not enough processing power for the job.  I can architect your code to take advantage of multiple cores in a single computer or multiple servers in a local or cloud-based cluster.

Databases

All applications store data somewhere and most choose some form of database.  I have worked with embedded databases, such as SQLite, open-source databases, such as MySQL and PostgeSQL, and industrial strength databases, such as SQL Server.

Programming Languages

Most of my current development work is in either C# or C++ but I have worked in several other languages, including C, Python, MATLAB, Java, and Visual Basic. I also learn new languages quickly.

Operating Systems

I have extensive experience developing software for both Microsoft Windows and various flavors of desktop and embedded Linux, including Android.