This is what I do on a free time. You may also check for my contributions to open source or talks. Also I have GitHub profile with a set of repositories and work I have.

Kotlin/Native Clipboard

This tool converts a screenshot image from a clipboard (use CMD+SHIFT+4 on macOS to capture one) into a base64 URI for easier embedding into HTML or markdown pages.

The project is fully written in Kotlin/Native. It uses the macOS Objective-C API to access the clipboard. It statically links with the libpng C library to load and process a PNG file.


Kotlin/Native Project Template

Setting up Kotlin/Native project in Gradle Kotlin DSL with the Kotlin Multiplatform plugin. The repository contains the set of helpful templates to kickstart your Kotlin/Native journey. Checkout repository branches to find the best suitable template to what you need


Kotlin Fractals

I started that project as a demo for my Multiplatform Kotlin in 42 minutes talk. It demonstrates a Multiplatform project with Kotlin. I use the same Kotlin code and compile it to JavaScript, JVM and Native. The resulting app looks nice and useful. I think to host it somewhere and/or to and Android and iOS companion apps too.

Sources: GitHub Slides: Slides


Migration to Java 9 Modules or jigsaw is what everyone of us will be doing, eventually. Currently, there is a split package problem: it is not allowed to have the same package in several modules (aka .jars), no matter if the package is public or not.

java9c is a plugin for Gradle, that helps to detect possible conflicting packages.

Sources: GitHub
Tags: java9c

The DSL Way

There is alternative way to add a support for a language to an IDE wihtout writing any IDE specific code or a plugin. The idea is to back and forth project an unsupported language to some supported language by an IDE. All IDE features and refactorings are projected too. See more read a detailed description in the main post.

Tags: the dsl way


Experimental project to create a DSL with Kotlin, as well as a tool to generate a DSL code from a given input data. The DSL is created to preserve identical map, so that a generated DSL produces exactly same input data as it was used as input. Thanks to the property, the toolset can be used to refactor an input data with the help of Kotlin, DSL, and IDEs. The Gradle plugin is created to simplify usages of the toolset.

Sources: TeamCity2DSL
Tags: teamcity2dsl

Classes Versions Checker

A tiny java utility to make sure a project was compiled to the right java class versions. It scans application folder/.jar recursively into archives and generated easy-to-understand reports.


Kotlin XML

DSLs are nice to develop with Kotlin. I created a tiny DSL for XML generation. Next I did a DSL-styled XML data binding in Kotlin.

Tags: kotlin.xml.bind

TeamCity Book Review

I was in charge of reviewing the Learning Continuous Integration with TeamCity book about JetBrains TeamCity, back in 2014


GitHub status API published for TeamCity. Nowadays TeamCity team created Commit Status Publisher plugin with nearly same functions

Tags: TeamCity.GitHub


Probably the first plugin for TeamCity done in Kotlin. A runners set for TeamCity to support Node.js stack builds. Provides Node.js, NPM, Grunt, Gulp, PhantomJS builds.

Tags: TeamCity.Node


Do you use IntelliJ IDEA projects with Kotlin? I did. So this is a meta-runner for TeamCity to configure TeamCity’s IntelliJ IDEA Project Runner to compile your Kotlin project with specified Kotlin compiler version.

There is also an example build configurations to implement mirroring of Kotlin builds on your local TeamCity server.



Do you like your build to run in container or VM? This plugin provides build runners for TeamCity to have your build step running in Docker container or in Vagrant box. We adopted running CI builds in Docker with the help of TeamCity.Virtual plugin.

Tags: TeamCity.Virtual


A set of Ant tasks to generate Service Messages for TeamCity. Builds with Gradle and proguard, depends on TeamCity Open API. Thanks to proguard the package is only a few KBs.

Tags: TeamCity.AntMessages, servicemessage


Do you like meta-runners in TeamCity? This extension is designed to allow a one-click install of new meta-runners from public repository. Done in Kotlin.



Do you have dependencies between modules in IntelliJ IDEA project that can be removed without any errors? I was needed to solve this task on-and-on during some refactorings. To make things easier the plugin for IntelliJ IDEA was created.

Tags: idea-dependencies

Named Java Frames

In a normal java thread dump you see calls stack. But you do not see anything else. For example, you cannot know what project, repository or other context was around the stack. For my projects it was vital to know the context for each thread. Thread names did not play well for it. The library solves it via tiny classes generation.

Tags: named-stack-frames


This is mostly to simplest way to create IntelliJ IDEA project for new TeamCity plugin unless you use something from Documentation

What’s included is a sample IntelliJ IDEA project where your plugin .jsp files will be green as well as Spring Framework configuration files (of course if you are on IntelliJ IDEA Ultimate).

Tags: TeamCity.PluginTemplate

Android Battery Tweet

I was wondering to create an application for Google Play and Android. The idea was to have an application that make a phone scream loudly when battery is about to discharge. I was a twitter mega-fun that time, so I made the app to post on Twitter to notify everyone a phone is about to discharge.

You may still try it on Google Play

Tags: battery-tweet


I was using Windows that time and Spotify. I also had Pioneer audio AV-receiver connected to home network. I wanted to listen Spotify via it. So the goal was to capture all playing sounds from by PC and stream it to the AV-receiver.

I created a tiny (and ugly) HTTP server, found the way to force AV-receover to play an HTTP .mp3 stream form my server. Made use of .mp3 library to encode what-u-head sound stream into an .mp3 stream. Found a way to capture what-u-hear audio stream on Windows. Made a commandline utility out of it. That is a hackathon quality project that solved my need.

It turned out I used it only a few times, quite soon I switched to Mac OS X and started using Air Play for that.


TeamCity NuGet Support

At the very beginning at JetBrains we decided to try implementing the initial support of NuGet for TeamCity. The project was made under Apache 2.0 license and soon was included into standard TeamCity package. I was supporting and developing the project from the beginning. Currently TeamCity team is supporting it.

Tags: nuget


Open-source .NET library to generate Service Messages for TeamCity. Available in NuGet

Tags: TeamCity.ServiceMessages, servicemessage

Traffic Lights Controlling

I did hacks on hardware with my friends. We used Arduino to create a USB device that controlled our transistor bridge that controlled relays. Next we used re-programmed WiFi router to work as the HTTP server. At some point the router had to be returned.

Next we implemented another device on Arduino that was able to toggle lights via UDP commands. Unfortunately, our Arduino was too small to fit HTTP server and DHCP inside.

Some archive videos of v1.0 and v2.0

Dynamic System Investigation Software

I did dynamic systems investigation software for may Master and and PhD degrees. The software was turning a dynamic system into an oriented graph, next we were running graph algorithms to extract system properties from it.

Project was done in C/C++ and C#. Close-sourced.

Journal Differential Equations and Control Processes

For nearly 15 years I help to maintain the web site of the Journal Differential Equations and Control Processes journal. Back in years (approx. in 2004) I invented a static site generator for the journal. It was not possible that time to use anything else but static HTML on our university hosting.

The Sources

You may find most of my projects on GitHub