Projects

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.

GitHub

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

GitHub

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

Java9c

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

TeamCity2XML

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.

Sources: https://github.com/jonnyzzz/ClassesVersionChecker

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.

Sources: https://github.com/jonnyzzz/kotlin.xml.bind, https://github.com/jonnyzzz/kotlin.xml.dsl
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

TeamCity.GitHub

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

Sources: https://github.com/jonnyzzz/TeamCity.GitHub
Tags: TeamCity.GitHub

TeamCity.Node

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.

Sources: https://github.com/jonnyzzz/TeamCity.Node
Tags: TeamCity.Node

TeamCity.Kotlin

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.

Sources: https://github.com/jonnyzzz/Kotlin.TeamCity

TeamCity.Virtual

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.

Sources: https://github.com/jonnyzzz/TeamCity.Virtual
Tags: TeamCity.Virtual

TeamCity.AntMessages

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.

Sources: https://github.com/jonnyzzz/TeamCity.AntMessages
Tags: TeamCity.AntMessages, servicemessage

TeamCity.Meta

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.

Sources: https://github.com/jonnyzzz/TeamCity.Meta

IDEA.Dependencies

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.

Sources: https://github.com/jonnyzzz/IDEA.Dependencies
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.

Sources: https://github.com/jonnyzzz/named-java-frames
Tags: named-stack-frames

TeamCity.PluginTemplate

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).

Sources: https://github.com/jonnyzzz/TeamCity.PluginTemplate
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

AudioBroadcastr

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.

Sources: https://github.com/jonnyzzz/AudioBroadcastr

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.

Source: https://github.com/JetBrains/teamcity-nuget-support
Tags: nuget

TeamCity.ServiceMessages

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

Source: https://github.com/JetBrains/TeamCity.ServiceMessages
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