Career Profile

Software Engineer with analytical and problem-solving skills. Before actually do something, always think about the approach that is the best fit. Passionate to work with developer tools and develop own for other developers.

Experience

Software Developer

2020 - 2022
Wix
My interests after working with elastic.io shifted a lot into developer tools. I was lucky to find a project in Wix that required to develop the internal developer tools. These tools included internal frameworks for Node.js, internal platforms for writing and deploying the code in production, internal libraries to share the guidelines of the company and so on. Well, you got the idea. I was part of the team that develops it for Wix developers, for our colleagues. Delivering better velocity when it comes to developing new services by delegating their pain on our shoulders. The outcome of such a team is to provide the internal platform for other developers on which the other products are built.

Software Developer

2017 - 2019
elastic.io
It was the first time when I took sabbatical after working in Dev-Pro. Once it ended, I decided to join a small startup that provided a solution to integrate different sources and destinations between each other. That was the place where I was doing everything I knew and didn't know. Because of this, I learned a lot about building production APIs, managing clusters with Kubernetes, developing developer tools and so on and so forth. That's the place, where I learned a lot and grew as a software developer.

Software Developer

2016 - 2017
Dev-Pro
After an amazing experience in Onix-Systems, I decided to change town and continue my journey elsewhere. Dev-Pro hired me to lead a small team of developers and to implement a library that communicates with the Point of Sale hardware. These devices are payment terminals, magnet card readers, thermal printers and everything else that is needed for POS to operate. It was a lot of reading, especially specifications for payment terminals, but, in the end, we delivered a library that can be built with the Angular and run in the Electron. So that the other team of Angular developers could communicate with the POS hardware without knowing the technical details of it behind.

Software Developer

2013 - 2016
Onix-Systems
It's hard to describe what I was working with in the company. Started as a PHP developer working with the WordPress to implement a plugin for it. The plugin provided a possibility to integrate the website with banner-ads, e-mail subscribe forms, etc. But the fate decided otherwise and pretty soon the whole project was rewritten by me into Node.js, following by leading a team of Node.js developers onsite. That was pretty an interesting experience so will gladly discuss it on the interview.

Software Developer

2012 - 2013
MAA
At some point, while freelancing, I found a client that had a lot of work to give. So that, I stopped freelancing and started working with one specific company and people. The project we were developing was about providing a user interface to manage the transport park. Including, but not limiting, vehicle tracking via GPS, storing archive data for replaying the timeline of the vehicle position and so on. The problem we solved is that managers in transport parks were able to monitor their vehicles and in the case of emergency immediately take action to help.

Freelancer

< 2012
Any company with the job to give
While studying in the university, I had some freelancing stuff to work with to get along. Mostly, it was some minor programming, making landing pages, configuring CMS, reverse-engineering some stuff and so on. Nothing specific or something that worth mentioning, was trying to make my living, that's all.

Projects

I specify here only the projects that are publicly available on my GitHub. I'm not going to tell about projects I was working with as part of my career (we can talk about them as part of the interview). For me, these are totally different things, and I want to show you my interests and what I love to work with foremost and not the stuff I was forced to work with.
  • Semi-automatic installer for Developer Tools\iTerm\Fish Shell\Plugins - I reinstall my operating system pretty often, especially when a major update comes up. I don't believe into backward compatibility, sorry. One of the problems after reinstalling the system is to install all the developer tools you need to work. This script was built as Bash script that you can run in one-line and get the installation process for Command Line Tools, Homebrew, iTerm, Fish Shell and all the plugins and tweaks to it to get the shell with batteries included. The installer used by many people who work with Fish Shell and want to have batteries included without installing all of it manually.
  • Canvas-like API for a terminal emulator cursor - I have a project called kittik. It is built to create and show slides in the terminal as an ASCII art. While the kittik itself is a tool set to build those slides, it needs to have its rendering engine. This project is exactly that - rendering engine to manipulate cursor in the terminal emulator through a canvas-like API. By incorporating caching, algorithm to check changed cells and flush only what really changed and other small tweaks, I managed to get a fast enough rendering. Sure, it is not fast enough as other alternatives in other languages, but for Node.js it is pretty ok. Delivered as a npm package and written in TypeScript, it allows you to quickly integrate cursor manipulation in your Node.js project.
  • Parser for Icecast metadata - One of the projects I was working on was a search engine for radio stations. The overall idea was to index all the radio stations on the internet, grab the metadata from them and provide a search to it. For instance, searching for “AC/DC” should provide all the radio stations where it was playing at the moment. To achieve that, one of the components needed is a parser to metadata. That's how the project was born. It is designed to connect to a radio station, grab the metadata, parse it and give to the developer.
  • Type Challenges Solutions - There is a project called Type Challenges. The idea of the project is to provide a collection of challenges where you need to solve problems by using only the TypeScript Type System (no runtime at all). However, there was a gap in solutions to them, and, sometimes, it wasn't clear on how the solutions were built. So I made a collection of solutions to those challenges, with a detailed and incremental explanation on each challenge. It is delivered as a website with links to the original challenge and links to the solutions with the incremental walkthrough.
  • Kittik - Building and presenting slides in the terminal, it was something that I was following for some time. Imaging showing your slides as ASCII art in the terminal instead of Google Slides or Keynote! It's not something that is usable, but it's cool and geek-y. So I developed a tool set to create, build and show your own slides in the terminal. It is based on TypeScript and runs in Node.js runtime.
  • Iterum - When I was learning compiler theory, I worked with different kinds of homework and pet compilers to implement. However, at that time, I never wrote even a close-to-production “something” that will be able to compile or interpret the code. So this project was an educational project for me. The goal I followed is to implement an interpreter for a subset of ECMAScript specification. Including parser, simple runtime (not actually the runtime, but just a proxy-runtime from Node.js), CLI and test infrastructure for it. In the end, I got a CLI tool I can use to interpret some JavaScript files and get the result back.
  • Nand2Tetris - Nand2Tetris is a course on Coursera that guides you from the CPU basics to developing your own operating system on top of your own CPU. Completing the course was a total fun for me, so in result I've got a project where the source code stored for the CPU, assembler for it, compiler and operating system. Meaning, that's all about the whole tool chain developed by me while passing the course.
  • Simple OS - I was interested in how operating systems work and the best way to learn about it is to create your own. So I've found some courses and materials that are publicly available and decided to follow along and write my own operating system. Of course, it is a simple operating system, with transitions from x16 mode to x64 and drivers for keyboard and video. As a result, you have an operating system that is able to accept input from the keyboard and echo it on the terminal.
  • CodeMirror Mode for JSONata - JSONata is a language that allows to select different parts of the JSON objects using the domain specific language. There were no syntax highlighters for the language at that time, so I wrote my own syntax highlighter for it.
  • Sails REST API Scaffolder - A long time ago, when I was working with developing REST APIs for mobile applications, I noticed some patterns that were common for all APIs. It motivated me to develop those patterns into something that will scaffold them automatically without developing the code for it. In the result, I got a scaffolder based on framework Sails that we were fine-tuning to provide additional services with common patterns implemented. The scaffolder was used to automate and increase velocity when building new APIs for mobile applications.

Skills & Proficiency

Problem Solving

Node.js

JavaScript / TypeScript

Linux/*nix/MacOS

DevOps

Compilers

Cyber Security