Tech Stack
What does my Full Stack include

I am a full stack developer. It means I can do the job of multiple specialists. I develop both frontend and backend parts of applications. I solve DevOps problems for small and medium-sized applications. I also develop desktop applications when it is required.

Frontend development

Frontend development usually takes about half the time of my work. I think over the design of the frontend and implement it in the program code myself.

Following modern trends, I use adaptive layout, that is, I develop frontends that can be opened in both desktop and mobile web browsers.

I do both multipage, classic frontends and one-page application frontends, which have recently become more popular.

In most cases, the frontend interacts with the backend and/or some external services. I do this by integrating the frontend with various APIs.

I usually develop a frontend using various modern frameworks and libraries. However, if it is required to make a very compact application, I work with pure JavaScript, CSS and HTML5.

Most of the single-page applications I developed using the Sencha ExtJS framework. I used this product from version 3 onwards. The last project used ExtJS version 6. I also have experience with the Backbone.js framework, which I used together with Marionette.js and jQuery. In some of my projects, I use Bootstrap. Also, I use such general-purpose libraries as lodash, Moment.js, jQuery, Modernizr and others.

The performance of the web frontend is very important. I use modern techniques and tools to optimize frontend performance. I make most of the features of the Google Chrome Developer Tools. I use unit testing methods to a reasonable extent.

The frontend code should be minimized and optimized for loading by the browser. To prepare the final result, I actively use task-runners and packers. My set of tools includes Grunt, Sass, Gulp, Webpack.

I develop almost any type of web-applications, but most of the projects in which I participated had GIS specifics. In this regard, my frontend toolset includes a number of special frameworks and libraries. For example, I use the OpenLayers library very often. I am familiar with Cesium, Leaflet and Mapbox GL JS libraries. I use Turf.js, proj4js, jsts, three.js and OpenSeadragon libraries. I have considerable experience of working with Google Maps API. Combining these components into a single whole, I develop quite complex applications.

Backend development

I develop the backend starting from the requirements analysis to the last line of the code.

I implement reliable and secure authentication and authorization mechanisms using the technology of JSON Web Tokens (JWT).

I'm developing an API design. I pay attention to data validation, error handling, clarity.

I develop relational and non-relational databases, normalize data, optimize query performance, develop effective indexes.

The main database management system I work with is PostgreSQL. In GIS projects I use PostGIS – an extension of this system. I also use other PostgreSQL extensions such as pgMemento, pgRouting, pgcrypto, pgTAP. I use the concept of evolutionary database design using the Flyway tool.

I have experience of working with such NoSQL DBMS as MongoDB, CouchDB and Redis. I implemented effective text search systems using such systems as Apache Solr and Elastic Search. Implemented a centralized log collection system using Elastic Stack.

I use a specific toolkit when developing GIS applications. I used Mapproxy and GeoServer as geodata servers, Mapnik for map rendering, CartoCSS for convenient styling, GDAL for working with raster geodata, MBTiles and Geopackage for efficient storage of multi-scale images, GeoTIFF, GeoJSON, WKT, WKB for raster and vector geodata exchange.

I often use JasperReports to generate reports, integrating it with other services.

I implement the main backend mechanics with JavaScript using Node.js runtime. Normally I use such server frameworks as Express and Hapi.js.

When I develop backends I prefer to use a micro-service architecture. To establish communication between services I use either HTTP(S) protocol or AMPQ message protocol. In regards to AMPQ, I used ZeroMQ and RabbitMQ software.

To make sure the backend is able to sustain the load I test it with jMeter.

DevOps

I prepare the infrastructure for the developing, testing and production environments. I have extensive experience with the family of GNU/Linux operating systems. In particular, I prefer to use a CentOS system for my backends.

I have base skills of system setup, firewall configuration and security measures.

I have experience working with such tools of high availability as SystemD, Supervisord and Monit.

I actively use Docker toolset both in development and production environments.

I used Packer and Vagrant tools in several projects to create and use virtual machines.

I actively use my own automation scripts in Python and Bash.

Normally I use Nginx as a balancer and reverse proxy.

Desktop applications

I have extensive experience in developing desktop applications, mainly using the Qt platform. Within some of my projects, I developed custom plugins for QGIS in Python language, using PyQt library. For some of my customers, I developed complete cross-platform Desktop products with Qt.