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.
- Connection problem caught with tcpdump (networking issue)
- 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.