Chennai, Tamil Nadu, India
Project Team Lead at Caterpillar Inc
Product : Locomotive Interface Gateway Pushing Locomotive Blackbox data to REST Endpoint for IoT applications: - Designed Architecture and developed s/w for pushing locomotive data to REST apis - Developed REST API's with Node JS-Express backend & python flask for data transfer - The data pushed to REST api's is served to customers by fleet management solution via Web interface Stack used: - libcurl for http communication - JSON for Modern C++ library - Postman, python requests for REST api testing Performance tuning and benchmarking: Identified areas of bottleneck in app with perf and google benchmark Optimized code in hot path with move semantics, efficient cache access, elimination of cache line false Sharing, use of appropriate data structures to reduce cache misses Introduced optimizations to gain 7% increase in application runtime performance ==>GRPC Common Data Access(CDA) Server: Development of Microservices solution using GRPC (HTTP/2) / protocol buffers - This service runs on Linux platform - Generated Server code and Client stub using proto compiler - Defined protobuf schema for message exchange - Support both unary and server streaming - Implementation of server business logic to handle client requests RESTful API development with restbed C++ library ==>C++17 improvements in support tools - Replaced SFINAE with if constexpr (compile time metaprogramming ) - Replaced heavy usage of std::string with string_view for perf gains - Used C++17 parallel STL algos for heavy number crunching ops ==>Modern C++Trainings - Delivered hands on technical trainings for STL containers, algorithms, Smart pointers, move semantics, Async c++ with future/promise, Boost libraries, C++11, C++14, C++17 features, Performance tuning & optimization techniques, Best practices and idiomatic C++ development, compile time meta programming, Basics of GPU computing with Cuda/OpenCL https://github.com/rajeshceg3/cpp_training
Product ownership : Locomotive Computer Wayside Data Processor - Tech stack : C++, Linux , gcc - Workflow : Agile Environment Developed on board locomotive system software and new features requested by customers Protocols : HTTP, REST, SSH, SFTP, CAN, TCP/UDP Achievements: ==>Optimization of Data Meters Architecture, - Proposed the solution to migrate Data Meters from software to config (xml) based architecture - Implemented the software framework changes required to bring this change - Received Innovator award for implementing this solution, as it led to $35K dollar cost reduction / year ==> Delivering solutions for field issues: Field issues are reported from running locomotives. It is imperative to minimize downtime to avoid revenue loss. Provided timely fixes and solutions for field issues through following process, - Collection of logs from back office tool - Analysis of the logs to identify root causes with gdb, top, valgrind, strace, vmstat, timestamps in logs, looking for sudden spikes in CPU/ RAM usage, spotting skewed behaviors - Reproducing the issue in a controlled lab environment with requisite hardware setup - Subjecting the fixes to multiple levels of testing (Functional, Acceptance, Long run) ==>Developed logging and benchmarking libraries for debugging purpose: - Logging library enables developers to locate the offending function quickly during a crash - Used RAII to track function entry and exit, used singleton design pattern - For benchmark, used RAII with chrono library functions to create a new type. This class is used to identify execution time of any function ==>Transformation of a C++98 based codebase to C++14 standard: Features incorporated : Smart pointers for memory management, RAII style resource managing classes, Lambda functions, Replaced raw loops with intuitive STL algorithms ( Yes, Inspired by sean parent !!!), constexpr, Implementation of Concurrency with std::thread, async, future