Nikolay Rozhkov

Hello!

I am a web developer with diverse experience. Mermaid JS contributor.

Drop me a line if you are interested in collaboration and partnership. I can be a developer, a team leader or a consultant. I also have some teaching experience, so you may ask me for mentoring. Can keep track of outsource development.

Contacts

Gmail GitHub Calendly Linked In Telegram Discord Stackoverflow

Skills

Ruby
JavaScript
Ruby on Rails
RSpec
React
Git
Docker
Postgres
BashScript
Redis
NGinx
Linux
Github
Github Actions
Circle CI
Rabbit MQ
Apache Kafka
Go
C
C++
C#
Typescript
Traefik
Nomad
Terraform
Ansible
D3
Swagger
K6
Apache Benchmark
Grafana
Mermaid JS
Markdown

Some experience excerpts

Implemented parser for the schedule (proprietary), which was written in a free form like «working from monday to saturday, 9 am to 10 pm, 1 hour lunch at 2 o’clock». They had no standard for this nor a form to fill so each and every office of the company cut loose and invented their own string describing working hours. We could not force all the people to format this correctly, hence the parser came into play.

Integrated with different payment systems, such as:

Among all of them (at the time of implementation) the worst documented was Alipay, and the best documented and the easiest to embed was Stripe. I do not find integrating with payment systems particularly interesting, but Stripe’s approach of launching local client and avoiding all unnecessary things, such as exposing your localhost to the internet and providing payment system with your host name for the sake of testing and debugging is awesome and the way to go.

Prefer to set up local development with Docker. It helps to avoid versions conflicts durings installation, simplify onboarding process and your software becomes more or less portable.

It can be awkward to configure Redis clusters as well as Rabbit MQ clusters within Kubernetes or Nomad. They need to know node / host name of their siblings beforehand, which can be tricky when you are using service discovery. It is possible, but always takes some tricks.

Obvious but sometimes you can forget about it: using Envoy as a proxy for Redis will limit your available commands set, not everything is supported.

The simplest and fastest way to start load testing is ab or siege. For longer scenarios I usually prefer k6, because it is convenient, and there are convertors from HAR to JS. tsung, though is powerful, is not advisable: wrapping escaped JSON (your data) into Erlang (sometimes you need embedded erlang for the scenario) withing XML (which describes your scenario) is completely unreadable. Setup Grafana or any other metrics beforehand, the more tools for analysis the better, especially when conducting load testing.

Cross-domain cookies have pros and cons. They can cause troubles during switching between domain and cross-domain version, but sometimes help to reduce the amount of work needed by a developer to authorize a user.

Proxy-based authentication can tremendously help with authentication system for inner services. The idea is that a proxy server makes a sub-request and asks if you are authorized or not, then your request goes to sub-system. It can also enrish your request headers with user information if it is needed by your service. Hence it eliminates the need of implementing complex authentication inside separate backend service almost completely. Such a module is present in NGinx as well as in Traefik

Current interests

Parsers and compilers Infrastructure Websites Data visuzlization Computer graphics

I love creating parsers, doing 3d modelling, and creating data visualizations.

Can do a little bit of Fusion360, SketchUp, 3dsMax, Unity, Graphviz.