Dimitri Kulk
D-*****, Ottobrunn
Handy, WhatsApp: +49-151-****-****
***.****@*****.***
Searched Position:
Senior Full-Stack or Back-End Ruby on Rails Developer/Architect SUMMARY
More than 20 years of solid software development of them the last 15 years mainly with Ruby on Rails
The technologies: Ruby on Rails v. 2 bis 7 full stack: haml, jbuilder, graphQL, sass, hotwire, coffeescript, ES6, jquery, Vue.js, Stimulus, etc.
The experience in other languages: ruby, python, c, c++, golang, rust, javascript, coffeescript, ES6, …. In total there are more than 20 ones.
More than 20 years of experience in creating SQL queries and optimising them
The experience in major modern JS frameworks: Vue.js, React.js, jQuery, etc.
Excellent skills also in the field of code refactoring
Software architecture design
The degree in Computer Science. Deep knowledge in the theory of computations, graph theory
Bug-tracking: RedMine, Jira, Trac, Pivotal, FogBugz, …
Experience in the deployment to the range of platforms including dedicated servers with the tools like capistrno, mina, docker
More than 15 successful WEB solutions implemented
Experience in project management (SCRUM, KANBAN)
Excellent knowledge of Linux
The degree in computer science. In-depth knowledge of the theory of computation, graph theory
Driving licence class B, professional German and English. Other languages
More information about me and my software can be found on my GitHub EMPLOYMENT
09/2023 – 03/2024 Developer
LOUIS INTERNET GmbH – https://www.louis.info/
The goal of the project is to organize the communications with (potential) customers through the messengers such as WhatsApp.
During the communication with WhatsApp API, the application receives the requests from it. The controller creates a new DalayedJob and responds with 200. The code of the job and the corresponding models was realised so badly that I had to refactor the code completely. The entire business logic was moved from the DelatedJob to a new class. But first I had to create the Rspecs, that were completely absent.
The next step was to create a bot that automates the customer registration dialogue. The process is that he/she scans a QR code with a link that allows him/her to appear in the system by sending a message with the code that a service agent has created for him/her. The bot sends the welcome message, followed by the message with the agent's contacts and a requests the customer to send own contacts. After receiving the contacts, the system asks for confirmation to save the received contacts. Once the customer has confirmed this, the bot's task is complete.
The second bot implements the notification of absence of a service employee of the system in response to a message from the customer once a day during the period of absence. Dimitri Kulk Seite 1
I discovered that the scaffoldgenerator does not contain any code for pundit and graphiti. To close this gap, I created 2 gems: pundit_scaffold_generator and graphiti_scaffold_generator.
The used technologies are:
Ruby 3.2, Rails 7.0, rspec, puma, pundit, graphiti-rails, GraphQL, haml, sass, vue.js, ES6, postgresql, que, guard, TDD.
06/2020 – 03/2023 Softwareentwickler
FAST LTA GmbH – fast-lta.de
The goal of the project is to create a web application called LogAnalyzer (LA) that simplifies the analysis of logs. It is required to debug our main products, large capacity storage systems. When a problem appears, a new ticket is added to one of 2 ticket trackers. A set of logs is prepared and uploaded.
When LA recognises a new ticket, it connects to the corresponding server and downloads the logset to its own server.
Afterwards the logset is unpacked. Each log is parsed to obtain the offsets of the lines with possible time stamps to be stored in the database.
GNU/Linux systems from time to time perform log rotation. This means that a log is split into several files. LA combines them so that the split logs can be analysed as a whole.
Now let's turn to the front end.
On the logset page, where the logs are displayed like a tree, it is possible to open the content of one or more logs.
It is possible to scroll through each log, jump to any line, mark the line, make a note of it and search through the lines.
It is possible to open the table of marks and notes, update them, so that employees can communicate through it.
The searches are located at the top of the log window. They have controls to scroll back and forth through the search results and to jump to the last result visited.
The states of all logs and searches are represented in the URL field, so that using the value returns the same result in a new window.
I encountered some problems with productivity, so I had to refactor not only my but also third-party code. In between, I updated Ruby, Rails and Vuejs to the latest versions.
The LA monitors the status of the original tickets, and when a ticket has been closed, cleans up the space in the database and hard drives. And if the threshold of the used volume is exceeded, the LA informs the administrators by e-mail.
The used technologies are:
Ruby 3.1, Rails 7.0, rspec, puma, cancancan, haml, sass, webpacker, vue.js, ES6, coffeescript, jest, postgresql, que, guard, TDD. 06/2018 – 12/2019 Engineering Consultant
ALTEN GmbH – de.alten.com
I have participated in two large projects. The first project uses AI and other algorithms to recognise and track the objects. A large fast food company decided to use security cameras to better understand visitors and capture advanced statistics. I have completed the following tasks.
Organisation of the entire development process with setting up a git repository and defining the rules for the team to use pull requests, code review and other procedures.
Implementation of a high-performance object tracking solution.
Design and implementation of the project infrastructure that has given more efficient code integration and higher video processing speed than the one proposed by the customer.
Composition of a docker image to run OpenCV, Darknet YOLO and other software on Python 3.6 and other frameworks on NVIDIA GPU.
Development of the original tracker to monitor the positions of visitors and their vehicles.
Optimization of the frequency of the frames of each module. Dimitri Kulk Seite 2
Development of the aggregation module that summarizes the tracking data from different cameras
(Docker machines) and delivers the overall data.
Development of a web application to display the tracked objects and the integral information about them on the streaming video.
Implementation of inter-process communication via nanomsg.
Introduction of protobuf for serializing structured data to be sent between modules.
Development of the orchestration scripts and the configuration file to run the required Docker images in both production mode and benchmarking mode. The second project was the support of an autonomous driving project.
Implementation of the processor that compares two json files generated by the computer vision algorithms. One of them contains the labels of the objects recognised by the algorithms, while the second contains ground truth characters produced by a human. The goal is to calculate the KPI for 8 different recognition modules and store the results in the PostgreSQL database. The other small projects include:
Development of a prototype of a technology chain on blockchain with Hyperledger Fabric.
Development of a machine learning pipeline.
The used technologies are:
python, golang, c++, Google Test, vue.js, TensorFlow, Neural Networks, Deep Learning, Recurrent Neural Networks, Decision Trees, Regression, Apache Spark, YOLO, Nanomsg, Protobuf, Docker.
02/2016 – 02/2018 Senior Software Developer
MICE Portal GmbH – miceportal.com
Development from scratch of a server application that collects hotel data from hotel chain owners and stores information in the own database. The heart of the system is an XML parser that processes the obtained data to be properly stored.
Extensive refactoring of several services, whereby the functionality of two services has been merged into a new service. A new server with all functions was created. A total of 6 out of 7 existing servers were adapted accordingly in preparation for the upcoming rollout, so that the data can be retrieved either from the existing servers or from the new server, depending on a feature flag.
The used technologies are:
ruby on rails, haml, kaminari, jbuilder, sass, simple_form, cancan, javascript, jquery, react.js, coffee-rails, rspec, factory_girl_rails, guard, shoulda, rswag, paperclip, traco, activeresource, puma, resque, whenever, annotate, spring, mysql, postgresql, elasticsearch, redis, jira, jenkins, docker, github, TDD. 06/2009 – 02/2016 Senior Software Developer
Freelancer
During this time, I have successfully realised several projects, both alone as well as with a team, including the following:
An API back-end server was developed for a start-up using VoIP technology from VoxImplant. It allows authorised persons to monitor the data via the HTTP front-end and create user registrations on web interfaces. Gem sidekiq was used for queue processing.
Implementation of a back-end server for video processing. It was supposed to be the basis for a new social network with video content. I suspect it was a prototype or analog of Tick-Tock.
Development of a web server application for a tourist agency. This not only enables online booking, but also implements a tour search from various tour operators with the help of an aggregator partner.
A Personal Cabinet web application for clients of a forex company was developed from scratch. It was integrated into several trading and accounting systems. Dimitri Kulk Seite 3
I have also created some plug-ins for Redmine. These extend the functionalities by implementing the concepts of Scrum development. One of the functions uses complex Ajax interactions, among other things.
A prototype of a desktop client that communicates with the above-mentioned server was developed with ruby-qt.
The used technologies are:
ruby on rails, haml, kaminari, jbuilder, sass, simple_form, cancan, javascript, jquery, coffee-rails, rspec, factory_girl_rails, guard, shoulda, paperclip, traco, activeresource, puma, resque, whenever, annotate, spring, mysql, postgresql, redis, github, TDD.
EDUCATION
Faculty of Applied Mathematics.
Master's degree, specializing in automated control systems.
Postgraduate school
Ph. D. in technical cybernetics and information theory.
Ten years of active participation in the working group “Artificial intelligence and Computer Science”.
I am constantly learning new technologies and languages on my own. SPECIAL ACHIEVEMENTS
I have participated in more than 20 successful software projects.
To improve the result of the standard Ruby-on-Rails generators, I create the following public gems: Gem Name: Function:
advanced_haml_scaffold_generator Generates haml views to use cancancan and wice_grid features
i18n_scaffold_controller_template Generates common controllers that use I18n, cancancan and wice_grid features
i18n_scaffold_generator Generates the files of the translations for models, controllers, and views in yaml format for I18n
jbuilder_rspec_generator Creates Rspecs for Jbuilder templates pundit_scaffold_generator Generates the code of policies and specs, in case pundit Gem is used
graphiti_scaffold_generator Generates the code of resources and specs in case graphiti Gem is used
More Gems for FactoryBot Gem:
Gem Name Function
active_record_model_and_rspec_enhanced_templates Generates Rspecs that use the FactoryBot for models
rspec_rails_scaffold_templates Generates Rspecs that use the FactoryBot for controllers and views
Other Gems:
Dimitri Kulk Seite 4
Gem Name Function
factory_girl_fixtures_template Generates further useful codes for FactoryGirl factories
translations_sync Utility that synchronizes the keys in YAML translation files for all used languages
wice_grid The Gem was not supported for years. I had been running my own branch. But now I've become an
official supporter. And the Gem is now Rails 7.1
capable.
PERSONALITY
I really like software development, do it with enthusiasm and prefer to create near-ideal code.
I enjoy working as a member of a results-orientated team, as I am a strong team player, and can create the great projects on my own.
I am energetic and persistent to achieve my goals. Ottobrunn, 25.09.2024
Dimitri Kulk Seite 5