Achievement document

  • Working in IT industry since 2010
  • Worked in different domains, technologies and platforms
  • Expert in Legacy: once I supported a 30+ years old codebase
  • Time investor
  • Fond of clean code, refactoring and performance optimization
  • Nerd of productivity, meta-learning
  • Large experience with teaching and training people
  • Productive atmosphere creator
  • Commited to life-long learning
  • Always learn something new: worked with JS, C and Scala code bases.

Epam for Merck

January 2024

Linux service for a webapp

Converted our service we develop into a linux service.
https://linuxhandbook.com/create-systemd-services/

September-December 2023

Huge migration of CI/CD pipelines:
Secrets stored in plain text along with env-specific config files in git repos!

  • Configs are now in source code repo
  • Secrets are replaced with placeholders {dev.psw.key-USR/PSW}
  • The actual secrets are placed in Jenkins Credential Storage using a self-written script
  • During deploy phase the secrets in a config file is replaced with secrets
  • CI builds are rewritten from Jenkins Freestyle to Declarative Pipelines

The routine is done for 10 projects in 2 project streams.

March 2023

Successful release of Medchem Workbench.

February 2023

Fixed a subtle intermittent networking issue with a service M.
Service sometimes doesn't reply connections. Consequence was in hanging request from web side.

  1. Connection problem caught with tcpdump (networking issue)
  2. Slow login was caught by using jstack and finding several threads synchronized on one monitor, were the logic was quite tangled and happened one every web-request.

Resolved by untangling web requests from sync with service M.
Also enveloped the sync request to M into an async call with timeout. If timeout is reached, the thread stopped checking. No locks and hangs anymore from now on.

Localhost for Webplayer

Found out a way how to debug an iframe bound web-application locally, while my middle frontend developer used build-deploy-to server cycle.
This improved up to 60 times the change-reload debug cycle from changes in code to visible result: 3 min to 3 sec.

January 2023

Moved a lot of small webapps from Spring Boot 1 to Spring Boot 2

Got rid of an extremely toxic Project Manager.

December 2022

TLS traffic debug

Learned how to decrypt TLS traffic in Wireshark. Successfully debugged a secure connection and thus found a bug .

October 2022

Spring reactor problem

Found a problem in a client library with mismatching Reactor v3.4.16 (from spring webflux 5.3.x) and my Spring 5.2.9.
Reactor was fail with timeout on a .block() method even after response is came. This happened with help of Wireshark, where I saw that problem.

100k molecule restriction

By rewriting the algorithm make one process 1.2M molecules, while before it was only 200k at once. The processing time also became 4 times faster than before. The key is chunking.
I wanted to go further and almost implemented a kind of a map-reduce approach of parallel data processing to improve performance even more.
The tricky part is that I could easily process chunks in parallel but the final result file should respect the initial order of molecules. I was about to finish but strict timeframes and other tasks postponed this task unfortunately.

Oracle JDBC library NPE

ojdbc7-12.1.0.2 has two versions - one smaller and one is bigger. One was in old Nexus, while the other in Artifactory. There were sudden problems in the code that 'worked yesterday'.

Pipelines

I created a couple of jenkins pipelines from scratch:

  • declarative pipelines
  • pick an arbitrary branch (for back and front)
  • run tests
  • build backend and frontend
  • removed slow frontend maven plugin and replace it with simple resource-plugin
  • deploy using safe credentials
  • publishing to Artifactory
  • MS Teams notification
  • deploy history on each server with
    • date and time of deploy
    • backend branch
    • frontend branch
    • sha1sum of deployed file

Epam for III

  • 5 years with extremely legacy codebase: 35 yrs, 6.5 MLoc Java, 1.4 Mloc ANSI C
  • lots of memory leaks, reverse engineering done
  • good low-level knowledge acquired: linux user, network protocols, tcp dumping
  • because of the complexity of the project we founded a Student project for making a tool for comparing results: EDP
  • debugged and written some code in Scala

Epam for Java-Lab

  • graduated 2 groups of students, most of them are seniors
  • taught: SQL, build tools, Java, TDD
  • lead 3 projects: EDP, Staffing helping tool, Parking

Epam for Novartis

  • fixed a permgen out of memory during redeploy on Tomcat;
  • introduced zero-downtime redeployment using Tomcat standard features without any load-balancing;
  • developed an integration test harness:
    • a nice tiny Groovy based tool for writing simple test mocks;
  • brought BDD approach testing with Cucumber as a framework.