Resume - Technical
Posted
Hello, I’m Jake. I am an electrical and software engineer currently living in Minneapolis, MN. I work as a Senior Software Engineer at Cargill on the Cargill Nutrition Cloud product. I previously worked at Kato Engineering on the GenOSys product as a software engineer and manager. I enjoy working on all types of software and hardware systems, from small embedded products to large scale web applications.
Qualifications
- Over 11 years of software and hardware development
- Specialize design techniques and applying them in golang, C#/.NET, TypeScript, React
- Developing software engineering processes/project management using Azure Devops, Azure Pipelines, Azure Repos, GitHub, CircleCI, Appveyor, to implement automated testing, deployment, and code review
- Accomplished in design of systems using Azure, and Kubernetes
Project Management
- Lead the development and feature process for a industrial IoT product with stakeholders in the EU and US
- Designed the development and validation funnel for projects installed at customer sites as well as web based systems
- Customer or stakeholder makes feature requests
- Requests are validated for feasibility, timeline, and priority
- Requests lead to the generation of a specification and requirements around the feature
- The specification is broken up to logical systems for each a system design is generated
- From the system design a task list with the requirements of the task an acceptance test are generated
- Engineers are able to implement the task at this stage
- Managed a team of 2 other engineers
- Developed software process improvements
- All changes go through code review
- Large changes were rejected for smaller incremental changes
- Require unit and integration tests for all changes
- Linting and testing were completed by CI and enforced for all pull requests
- Prior to deployment all changes are sent to staging environment for validation and acceptance testing
- Used metrics to drive product improvements, page load times, time spent in queues, processing times etc
- Worked as team lead and architect on large team
- Propose and evaluate process improvements
- Serve as mentor to multiple engineers
- Establish best practices for the code base
- Participate in planning, and refinement sessions
- Participate in hiring and interviewing process
- Work on team priorities and scheduling to meet project timelines
Golang
Gateway Application
- Cross platform application that runs on any system which we put into the field, or in Docker
- Cross compiled on CircleCI using
GOOS
andGOARCH
- Version and build information linked in on CI using
ldflags
- Collect data from industrial devices using Modbus/TCP, Modbus/RTU, or a Custom JSON API
- Application designed using a service oriented architecture using a custom developed publish/subscribe library
- Collected data is sent to Azure IoT Hub using an in house developed golang driver as Azure does not make an SDK available
- Data is sent using a plugable model and encoding system to optimize bandwidth
- Application data is made available locally via JSON API developed using the
chi
router library - Configuration information provided by command line options, environment variables, or a configuration file using a system developed internally with its base in the golang library
viper
- Run embedded rules engine that was developed internally that allows custom algorithms to be ran on incoming data as it is pulled off monitoring devices
- Rules that detect alerts have those alerts sent to the cloud and are available over the local JSON API
Data Ingestion System
- These services are ran in Docker on a Kubernetes cluster using Azure Kubernetes Service
- These are done as multiple application reading from Azure Service Bus topics/subscriptions
- Each service can be scaled automatically depending on the size of the queue/subscription it is reading from
- Store and process data as required in Redis, CosmosDB (MongoDB API), Azure Table Storage, Azure Blob Storage
- Data stored in Redis is done to cache hour long blocks of data using lists before they are compressed and stored
- Using Redis design guidelines we implemented a locking mechanism for processing
- Using the Lua scripting capabilities of Redis we were able to lock the list and modify keys
Report Generation System
- These services are ran in Docker on a Kubernetes cluster using Azure Kubernetes Service
- Data is access via a custom Map/Reduce type system using Kubernetes internal load balancer to access average, min, max, range, standard deviation elements over a time range in the query
- Using a configuration generated on the web interface reports are generated periodically
- Reports are stored to stored to blob storage as JSON, and HTML documents
- HTML templates generated using golang templating
- Reports are ran in a dedicated Kubernetes pod to maintain information in the event of failure, they are started by a manager service and deleted on successful completion
- Graphs are generated for HTML pages in a format to be displayed using the plot.ly JS library
.NET/C#
NoSql Data De-normalization Performance and Architecture Improvements
- Improve performance during de-normalization process by 13x
- Propose multiple solutions, with internal and external stakeholders
- Design standard tests to measure performance
- Implement multiple proof of concept implementations
API system to access system data
- Implemented as Azure website using ASP.NET
- Swagger generated documentation
- Designed and implemented a Role Based Access Control where each endpoint was protected by a specific permissions granted by organization administrators
- The system was designed using dependency injection to facilitate testing and designing to interfaces
- Migrated to dotnet core 3.1
Web front end for customers to view and access their data
- Implemented as Azure website using ASP.NET MVC and AngularJS
- API client implemented using RestSharp
- Templating done with Razor
- Develop secure system for transferring access codes for gateway device
- Using modern UX standards develop ways to view fleet information, data, configuration, and system status
Industrial Systems
- Design of panel systems for MG set control in projects all over the world
- Using Add On Instructions for functionality is RSLogix 5000 designing modules for portable use
- Specialized in development in IEC 61131 for Wago and Allen Bradley PLCs
- HMI programming and screen design done using human center design methods
- Design system of easy integration into customer Distributed Control Systems, using Ethernet/IP, hardwired contacts or switches, Modbus/TCP, and OPC servers
Embedded Systems
- Multiple Industrial Communication Protocol Solution
- Selection Anybus CompactCom device to use as a pluggable module in order to enable the customer to select the communication protocol of their network for integration
- Developed portable C/C++ driver for easy implementation across multiple products
- Development of software architecture to allow for maximum portability between products by re-using tested and verified code
- Design and test system software for robust operation on critical systems
- Design and development of a system using dual Texas Instruments F28335 32 bit processors
- Design of configurable drivers for device peripherals (I2C, EEPROM, UART, FLASH)
- Development of communication protocols for use with external devices (USB, RS-232, Paired Processor)
- RS-232 Boot-loader design
- Design of various generator protection and control algorithms. One of which is has been patented
- Monitoring device development using Texas Instruments F28335 32 bit processor
- USB Boot-loader design
- Design of an automatic voltage regulator for brushless generator exciters
- Optimize control algorithms for sensing and power stage
- Develop driver software for CANopen, and Modbus/RTU communication
- Design of an NFC reader
- Worked with TI, Microchip, ST, and Atmel micro-controllers
- Used Yocto to build custom Linux images for field devices
Programming Languages
- Proficient in
- Golang, C#, TypeScript, React, C/C++, IEC 61131
- Familiar with
- Javascript, HTML, CSS
Frameworks
- Yocto, ASP.NET MVC/Web API, AngularJS, Gorilla, CHI, dotnet core
Tools
- Git, Github, Trello, Rollbar, Appveyor, CircleCI, VSCode, Visual Studio, Docker, Docker Compose, Kubernetes, Azure DevOps, Azure Repos, Azure Pipelines, Azure ARM Templates, Github Actions, MongoDB, CosmosDB, Application Insights, Prometheus, Graphana
Experience
Cargill
- Senior Software Engineer - Architect, Team Lead - June 2020-Present
Kato Engineering
- Software Engineering Manager June 2018-April 2020
- Systems Engineering Leader June 2016-June 2018
- Controls Engineer June 2010-June 2016
Education
- Bachelor of Science in Electrical Engineering, Saint Cloud State University, Saint Cloud, MN. Attending Sept. 2004-Dec. 2009
- Masters of Science in Software Engineering, University of Minnesota, Minneapolis, MN. Attending Sept 2014-May 2016
Certifications
- Certified Scrum Master August 2014-August 2020