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
Creating 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
Building 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
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
Some 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
The 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 of 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.