Sr. Software Engineer Resume
SUMMARY:
- Software engineer in C# technologies, a strong background in C++/C software design, and broad experience with: control and automation software; database - driven applications; voice recognition, network transmission protocols, RF network simulation and UI design. Twenty years of software development experience providing creative solutions to complex business projects and industrial production systems, including demonstrated skills as a technical lead and a background in electronics design.
TECHNICAL SKILLS:
Languages/Protocols: C# .NET; C++, C (Real-time); LINQ; SQL; JavaScript; VoiceXML (VXML); VoIP/SIP; XML; SMPP; UML.
Development environments: Visual Studio 2017, 2015, 2008 (Win CE7), etc.
Windows Technologies: Winforms; Windows services; Web services; IIS 7.5 - 5; SSMS; Voxeo Prophecy v11 - 8; NeoSpeech VoiceText TTS engine.
Database Technologies: SQL Server 2008, 2005; MS-Access; Poet (00DB); Supra V2; Oracle; Btrieve.
Operating Systems: Windows 10, 7, etc; Windows server, etc; DOS; OS/2.
Tools: /Utilities/Methodologies:Agile (Jira);TortoiseSVN, TFS 2012, 2005; VSS; MKS.
PROFESSIONAL EXPERIENCE:
Confidential
Sr. Software Engineer
Responsibilities:
- Team member on the design of a 2nd generation of the Parker Motion Manager Windows application to configure Servo and Stepper drives of the new ACR7000 Drive Controller product line. A MS-Access database was defined to maintain system level parameters and default values for the various models of each drive type and to be easily extensible as new drives were brought into the product family.
- The main application UI was redesigned for rapid development in C# to enhance usability and add features specific to the new products.
- Developed the C# (VS2015/17) Winforms UI of the initial ‘Model Selection’ and ‘Encoder Feedback’ wizard pages for Stepper drives, before the entire project was handed over to an off-shore team.
- Updated the transfer of serialized C# properties to a legacy C++ DLL that used a convoluted 3rd party parsing library to convert them into parameterized System Code values that were downloaded to a Drive Controller to configure each axis for motion.
- Documented this complex process for our off-shore team who successfully implemented the changes for ACR Servo drives without ever asking any questions. Nice.
- Developed a solution for Ethernet-over-EtherCAT (EoE) as a multi-threaded C# plugin component of our custom branded CoDeSys Automation Platform (AP) IDE, used to develop programs to coordinate the multi-axis motion of servo drives via an EtherCAT bus using the CoDeSys Runtime hosted on a Parker Automation Controller (PAC).
- Modified the C code of an open source OSI L2 TAP adapter (OpenVPN.org) to act as a fully functional network adapter. Packets sent from a Windows Servo (Drive) Manager application were intercepted from the TAP adapter and sent to the Runtime using a UDP client/server connection. Packets received from the Runtime were injected into the TAP adapter where they were sent to the Servo Manager.
- Updated the ethernet component of the CoDeSys Runtime with a linked list and UDP server, in C using VS 2008 on Win CE7, to cache and move packets between the UDP connection and the Runtime where they were hosted on the EtherCAT bus. Debugging used the VS 2008 Remote Tools and CERHost.
- Assisted colleagues in our German division with their implementation of a CoDeSys plugin for the PSD Servo Manager application used to configure and tune their line of servo drives.
- At this point the EoE project provided a seamless solution for communications between Servo Manager applications and the drives they controlled without any need for a dedicated network connection and with performance on a par with direct ethernet.
- QA testing revealed that AP users, with non-admin permissions and with UAC enabled, were prevented by Windows from loading the kernel-mode TAP adapter when EoE communications was first started, which was inherent to the initial design.
- The EoE plugin was removed and the C# code was minimally redesigned to operate as a Windows service, using a Named Pipe to send start/stop messages to the AP, with no degradation in performance.
- Installation of the TAP adapter was added to the Install Shield scripts that installed the branded CoDeSys AP and the entire project was ready for release.
- However, Windows 10 build 1607+ on systems with UEFI (replacing BIOS) would install the TAP adapter but refused to load it as a network device in keeping with Microsoft’s enhanced security practices. PITA.
- Assumed responsibility for purchasing an Extended Validation (EV) Code Signing from COMODO and re-signed the TAP adapter installation files (.sys/.cat/.inf), then worked with Microsoft to get the TAP adapter attestation-signed through their Hardware Developer dashboard such that the re-signed adapter will load on all builds of Windows 10.
- Developed several C# UI and Console applications to debug and test EoE in its various development iterations and for use in the scripts that installed the TAP adapter.
- The ease-of-use of EoE with the Parker PSD Servo Manager plugin reached our Parker Field Service Engineers (FSE) who asked if it could be used to configure 3rd party devices (drives, LED towers, I/O modules, etc) that were defined as EoE-capable by their manufacturer. We created a document that walked FSEs through some simple steps to configure and enable EoE communications between a Windows application and any device(s) connected to a PAC over the EtherCAT bus. Soon thereafter our FSEs had used EoE and resolved several PAC customers’ on-site configuration problems with their EtherCAT devices. They were ecstatic
- Modified the C++ (VS2008) HMIGateKey DLL of the InteractX HMI product to transfer the license string from an external USB HASP key to the ‘OEM strings’ data area in the BIOS chip, thus replacing the need for an internal micro-HASP key and saving $50/unit and manufacturing costs per batch.
- Replaced a CE7 kernel driver to control a replacement GPIO Expander chip on a 2nd-gen PAC motherboard. The C code connected to the GPIO chip via an I2C bus and accessed multiple LEDs on the front panel of the PAC, the Watchdog timer chip, and several write-protect lines.
- Updated the two CE7 C++ Daemons to use the new GPIO driver. The Daemons control the LEDs during the system boot cycle and configure the Watchdog.
Confidential
Sr. Software Engineer
Responsibilities:
- Redesigned and expanded an Interactive Voice Recognition (IVR) application into a suite of ‘voice apps’, as a C# web application and VXML and Javascript, with both voice/dtmf and dtmf-only call-flows, to support cNotify, an outbound SIP-based notification system, utilizing Voxeo’s premise Prophecy IVR servers. Designed the SQL Server DB schema, sprocs and web services to support operation of the voice apps across multiple servers.
- Redesigned and enhanced the TTS web services wrapper to communicate with a replacement TTS engine, NeoSpeech’s VoiceText Server, to convert text to audio .wav files. Enhanced the functionality of the cNotify website by recompiling the SoX audio library to support conversion of uploaded MP3 files to create both .wav and .µlaw formatted audio files. Designed a multi-threaded WinForms application to test the initial changes to the web services and TTS engine and then perform load testing.
- Ported the two IVR apps of a Gift Basket retail customer from obsolete Linux/Win NT hardware into the stable and reliable environment using Prophecy IVR and voice apps. Expanded the DB schema and web services to retain the status of each call for billing purposes. To support the very heavy usage of their voice apps by this customer during the holiday season (Nov - Jan) a Cisco ACE 4710 was purchased to provide SIP load balancing across both production servers, thus doubling the traffic the voice apps could handle and increasing the revenue stream.
- Maintained and debugged issues with R3, a bi-directional SMS communication product with a powerful and complex web UI and several supporting background applications.
- Redesigned the windows service that received R3 SMS MO (incoming) consumer responses then parsed the data content out of an HTTP/SOAP header and replaced the protocol to use SMPP. This long running application required a permanent connection to a remote server which wasn’t always stable. To mitigate constant error messages when the remote connection fluttered up and down, the SMPP implementation was enhanced to accommodate some hysteresis such that errors were only generated if the connection remained down for a concerted period of time.
- Maintained and supported the File Processor (FP) suite of web service applications and a SQL job. One application retrieved files from remote FTP sites and moved them to our FTP folders where they were picked up by a separate application and the records were processed and inserted into the cNotify database. Modified the PreProcessor application to extend the processing of macro phone records to include macro SMS & email. The File Processor applications are limited to running on a single server.
- Designed a major update to the FP applications to operate on multiple servers concurrently where files uploaded to one FTP folder are replicated (DFS/R) across all servers. Designed a new DB schema, sprocs and the web services, comprising the BLL and DAL, such that only one record for any file would be created in the DB and only one server would be granted permission to process that file. The new solution reused the existing assemblies that have proved reliable for several years and was multi-threaded to increase performance. Initial development of a WFP application that presented XML data in a format that could assist support technicians to easily and efficiently modify the parameters associated with the configuration required to support the parsing of data files uploaded by customers.
Confidential
Sr. Software Engineer
Responsibilities:
- Team member primarily responsible for the WinForms UI of a C# client/server application to control a complex instrument that measured trace carbon (ppm). The UI made extensive use of unbound and (later) bound DataGridView controls that allowed users to enter chemical parameters and define the sequencing of run-time work-flow.
