Ivan Kulagin
Menu

My name is Ivan, and I am backend developer since 1998. Here I want to list my skills in different technologies, especially those I'm focused on last 10 years: Ruby language, testing, refactoring, microservices, devops, data scraping parsing/manipulation and of course APIs design

My Ruby Portfolio

Please, keep in mind, this is a list of major Ruby projects I was involved in.
Also, I did another several backend API projects not listed here (and since they're APIs or under NDA, no screenshots provided, sorry).
Plus, There's a lot of scripts/parsers (love parsers!) and gems I've created for these 10 years

UPD [Apr 1 2022]: This website became quite outdated in last 7 years, and I'm currently adding a lot of new information about my skills, completed projects, etc. Additionally I want to reorganize content and migrate to TailwindCSS

AVR Chiptuning
Fronted (Elm) and backend (Hanami API+dry) implementation
spINFLUENCEit
Complex backend for iOS and macOS applications
BlockVestMovement
Multi-environment AWS stack design and implementation, CI setup
Instamotor Inc.
Refactoring and extending communication layer using Twilio
Apple pass manager
Apple pass WYSIWYG designer with passbook API integration
Higgins MD 420
Refactoring and developing web site for Medical Marijuana Evaluation Clinic
Pelesend corporate site
Refactoring and UI improvements of Pelesend corporate site
ABC Logistik
Regular complexity site for Russian logistic company

The way I work

  • I'm a huge fan of TDD/BDD and particulary Rspec
  • Use SOLID, KISS and DRY (amoung others) principles and don't overengineer using them
  • Always trying to be smart and accurate while refactoring, start it only after I have tests covered refactoring zone (if this is my code, it's always true) and find a compromise between complexity and readability
  • Break large tasks onto small ones, it it's still complex, repeat
  • I believe that modern developer must learn something new every day, especially in our information century, to be on the edge of new ideas and technologies
  • Love to read the source code if it's readable, of course
  • Write clean code and find simple and elegant solutions using language-specific technics
  • Learn fast (thanks to 17 years of experience)
  • RTFC, RTFM and google in every unexpected situation
  • Keep my workspace and tools simple and responsive, so they don't bother me, allowing me to fully concentrate on current task

My skills

Here I skipped things which level of knowledge is hard to measure, such as TDD or SOLID, soft skills like self-organization, task splitting and time management

Languages

This group of languages I know very well or looking for an project to enhance my experience as a temporary junior developer in real projects. So please free to invite me if you have one :) These are my favourites I want to be professional in

  • Ruby - today is my primary language I use since 2011, and feel myself very comfortable with it. For a few last years there are rumors what Ruby is dying, but trust me - everything's all right with language, there's a problem on how people using it. I'm about monkey-patching, God classes and other bad practices. Ruby gives a lot of freedom, and because of that requires a lot of developer's responsibility. That's why principles such as SOLID, works so good for Ruby - they prevent developers from wrong language using (take a look at my favorite examples - Hanami framework or DRY* gems family).
  • Clojure/ClojureScript - this is the language I plan to learn deeper. I wrote a small network data miner for myself using it, and it shows as a perfect data processor. Plus, ELisp as a free bonus :). Really interested to work on project using it to grow my Clojure skills!
  • Elixir/Phoenix - as most Ruby devs this pair, for me Elixir seems more natural to transit to. Elixir is what I'm currently actively learning, but can't find a project where I can land as a junior dev :( BTW, I started to learn Erlang about 15 years ago, but there was no demand in Erlang in Russia those days
  • Elm - crazy thing, and I just love it :) I used it for frontend part for one of my clients, but he disappeared suddenly, and the work stopped. Actually Elm is a language I'd like to use (for and if) SPAs
  • *sh - every developer must feel comfortable with at least one of them, and knowing their different tricks and edge-cases. *sh itself not very hard to learn. Much more important to learn common tools provided by *nix and tasks they allow to complete
  • PL/pgSQL - I love it! Actually it's my first declarative language I started to learn, looks a bit clumsy, but feels so powerful. There wasn't much tasks where I could learn it more, but every time it's an interesting experience.

The languages below (and their ecosystem) below I currently not planning to learn or not using anymore:

  • Go - had some experience, but well, though this one conquers the world, ultra-fast, blazing fast compilation time etc., I just don't like the language itself at the moment, feels weird to me. Probably my opinion will change someday. Really cool things created on it, but I like others in this list much more
  • Java/Kotlin - though I had some experience with Java many years ago (before C# came into scene), recently I realized what since then Java world changed a lot. Practically speaking I'm learning Java from the start, but thanks to C# experience this process is quite fast. Two goals I have: developing Android apps, and learn deeper Java SDK to use with Clojure
  • PHP - I don't use PHP anymore, but this was my primary language for more that 10 years. I stopped using it when PHP began to demonstrate features of solid language like namespaces, but that was too late for me.
  • C# - I don't use it anymore, but that was a great experience, and I believe it will help me with Java
  • Lua - using for creating custom ConTeXt writers for Pandoc (I love parsers and books! :). Easy to learn, have unusual RegExp engine, and not much popular...

Ruby gems

It's easier to list only major ones: Rack (hello, Plug :) ) Rails, Grape, Hanami, DRY* gems family, Statemachines (any), Devise/Warden, Pundit/Protector/Cancancan, OmniAuth, PDF generation gems, Capistrano, Sidekiq/SuckerPunch, RSpec, Webmock, VCR, Capybara, tons of them...

Databases

  • PostgreSQL - this is my favorite RDBMS since I begin to use Rails. My experience include: all the common stuff, administration/migration, triggers, rules, functions, materialized views, table patitioning, PL/pgPSQL, extensions like cube, uuid-ossp, hstore and so on. I'm not a PostgreSQL guru, but it's always interesting for me to learn something new about it.
  • MySQL - I do not use that one for years, but used since 1998. In other words I'm not interested in MySQL after I met PostgreSQL.
  • Redis - I began to use it in my own project when the trend of NoSQL started back to year 2010 (approx).
  • Elasticsearch - rarely met this amazing tool, and would like to have more experience with it
  • MongoDB - I began to use it at the same time as Redis, within the same project. Not a big fan of it, actually, though I understand where it fits best

API's integration (really tens of them, and list is incomplete)

  • Braintree - sales registration, settlement, void, webhooks. Features usually required
  • Firebase Authentication - used this one for authentication for a client with API project. I needed some additional features, so I created custom Warden strategy to handle JWT authentication. Also I've added Firebase Authentication to Android app prototype for the same project (Java).
  • Firebase Cloud Messaging - very good API understading (direct notifications/group notifications etc.)
  • Twilio - this API I learned very well since I was responsible to refactor complex communication part of recent project.
  • Apple Passbook API (Web, Pushes and Pass format itself). I used all of these while creating this app.
  • Slack - easy integration, nothing interesting: fancy bot messages with images and so on
  • Rollbar - error tracking service
  • NewRelic - famous easy and configurable app monitoring and analytics (used for Rails and Sidekiq app)
  • AcoustID - service providing search in music database by audio fingerprints
  • MusicBrainz - huge music database you can search against
  • Cover Art Archive - found track name? use this API to get vinyl cover image :)
  • Airbrake - very useful, but overpriced, service for tracking runtime errors
  • Papertrail - log management, easy to setup, nothing too huge here
  • Dead Man’s Snitch - small service for trackin' cron jobs running

DevOps

  • Tools
    • Terraform - yeah, this one took Cloud provisioning to the next level! Fantastic tool I'm using a lot for any cloud environment setup/configuration. The only my personal wish is to have elegant multi-env feature build-in. At the moment it's implemented quite clumsy, and because of that it becomes especially hard to support for really large projects
    • Ansible - this perl is my second #1 tool if I'm working on DevOps. It (or to be more specific one of it's galaxy's Ansistrano role) even replaced me Capistrano which was my favorite deploy tool for years.
    • Prometheus - a must to know what's going on in your infrastructure/app. Using it in my home lab
    • Grafana - Prometheus's friend, takes time to configure metrics, but we all love neat and informative dashboards :)
    • Capistrano - yup, Ruby's deploy workhorse. This was no-choice option for deploy for me for years (yes, I heard about Mina, but there's no sense to use it when you have Ansible now)
    • Nomad/Vault/Consul - perfect trio when you don't want feature-bloated k8s. In my opinion, Nomad is really underrated because of k8s hype. Hashicorp are really cool guys, I love their products!
    • Packer - if you need to spin up more virtual machines ASAP, Packer is a way to go, nice and easy tool
    • Vagrant - any fancy multi-machine configuration (very useful for networking prototyping). Paired with Ansible provisioning, these two form a very powerful tool.
  • Clouds
    • Google Cloud - my choice of cloud computing services. They took into consideration all AWS bad design decisions, and tried to avoid them. I had a very intensive use of every GC feature but k8S
    • AWS (gosh, I can't remember every one I worked with for these years :) )
      • Amazon EC2
      • Amazon S3
      • Amazon RDS
      • Amazon ELB
      • Amazon CloudFront
      • Amazon Route 53 - DNS, TLS certs management, etc
      • Amazon SES - including DNS configuration
      • Amazon Elastic Beanstalk
      • Amazon EC2 Containers
      • Amazon CloudWatch
      • Amazon CloudFormation - actually I needed it only once after migrated to Terraform
    • Linode - nice, cheap and my favourite cloud hosting for small projects if you don't want to pay for Heroku. Additionally they brought k8s support and Terraform module recently. Nice!
    • Heroku - perfect choice I recommend for new projects to deploy ASAP, Redis, PG, MySQL in a seconds. But very pricy for large projects
    • Azure - had no chance to used, but the tutors I saw showed there's nothing radically different there, so learning can be done just at the time of building cloud. We live in times then we can say "another regular cloud" :)

Operating systems

  • macOS - my primary every-day perfect OS
  • Debian family - my main OS (Ubuntu particularly) before I migrated to OS X in 2011. Now I'm using it for everything but desktop
  • Gentoo - because it's fun and healthy for brain :) Just love it, had it on laptop, but took too many time to manage. Not for servers, of course. Interesting experience to cross-compile it for Raspberry/Nano PIs :)
  • FreeBSD - if you need most proven network stack and native ZFS support - this is the choice. It was my #1 server OS in home lab servers until LXC became mainstream.
  • Windows - games only, nothing interesting there

Front end

There's a lot of frontend tools I use, but I use them for my personal projects, and not looking for frontend related job. Quick fixes, nothing more. So this section I'll keep empty

Testimonials

Multi-tenant Rails application stack upgrade

Great service from Ivan! Highly recommended for knowledge in RoR!
Crowd Trust Deed
There were a hand-made per-tenant theme application core feature that required special attention. Upgraded Rails v3.2 to v5.2, and holding frontend dependencies hell under control
coding upgrade

Port ESPN results scraper script to Ruby

Excellent developer and communicator, highly highly recommend
Take the scraper logic written on Python and make it work the ruby way with its amazing expressiveness. Since this is a scraper, heavy using of webmock/VCR done for testing
coding

Upgrade Rails application to be able run on Heroku's cedar-18 stack instead of cedar-14

I really enjoyed working with Ivan. He helped me meet my goals by making suggestions to change what I was originally asking for in a way that would better meet my goals than what I thought I needed. I really appreciated his ability to problem solve and to help get the job done right! I would absolutely recommend and hire Ivan again!!
devops upgrade

Various Active Admin/JS/CSS bug fixes and make layout mobile-friendly

Great work!
Remotech
Data normalization (including PG’s enum columns), search query performance improvements, Bootstrap v3 to v4 upgrade
coding performance upgrade

Help client with setting up OS X dev environment and fix well-known nokogiri gem build issue

He was very patient, very informative, and was a pleasure to work with. I would definitely hire Ivan again.
consultation

Quickly found and fix the issue related to Sabre API requests limit hit on production servers

Ivan was great! he was able to jump on a crucial situation with our production server and fix it in a short amount of time! great developer
Sixtravel
consultation

Add correct autodetection of different UTF encodings of imported CSV files

Ivan is very quick finding and proposing his solution. In addition he implements the best solution directly after agreement. Likely he has tested the solution in advance because the implementation works in one time flawless. Thanks Ivan and hope to see you on our next project.
Gerard Beugelink
coding

Another CSV encoding autodetection task

I had a headache solving a problem with reading badly formatted files containing foreign letters programatically. Ivan quickly helped me solve my problem, and gave great feedback as to what the actual challenge was. In addition to getting my problem solved, I gained valuable insight for use in later cases if or when I run into similar issues. Great work, thank you very much!
Bjorn Kristian Haugerud
coding

Make ridiculously old Ruby on Rails app work on modern stack

Ivan was a grad help to us in getting bag a legacy web system based on ruby. Good and open communication. Thanks a lot!
coding devops upgrade

Several bug fixes in Rail app (OAuth for several providers, routing)

Ivan gave me frank expert opinion and helped with project core things- i’m satisfied
coding

Adding new features to the gifmo application (kind of tik-tok)

WOW! Very Skilled RoR Developer!!!
coding

Refactor Ruby on Rails code to meet best Ruby/OOP practices

Ivan worked quickly and was very professional. Excellent refactoring work and knowledge of Rubocopy. Highly recommend!
coding refactoring

Upgrade Rails application to be able run on Heroku's cedar-18 stack instead of cedar-14

Upgrade RoR 3.2 project to 4.2 and Heroku cedar-14 to cedar-18 - excellent fast and good work - good availability and great response
coding devops upgrade

New Ruby on Rails app features development

Understood requirements of project, and executed on requirements based on terms agreed upon
coding

New Ruby on Rails app features development, deployment setup

Great job and fast work and good communication
coding devops

New Ruby on Rails app features development

Ivan was reliable and constructive member of our team. I highly recommend him to anyone looking for a developer
coding

My story

The beginning

I began to develop websites in 1998 year. It's all began with well-known PHPNuke CMS. While hacking it around and learning PHP, I began to understand that PHPNuke is based on very ugly spagetti code, and developers used all the bad programming habbits writing it. Anyway, thanks to PHPNuke, I learned PHP well, but began to look for something more elegant.

DotNet Developing

Thus, in 2003, C# and ASP.Net came into my life. I was very excited with C# and till now think it's one of the beautiful languages with strong toolkit, provided by .Net Framework and supported by amazing MS Visual Studio. To be honest, I think MS have only three products what world is really need to have: Windows 7, .Net, DirectX.

While learning C#, I wrote few desktop applications, and one simple site with MySQL connection. The more I develop on .Net, the more I tired to write all this huge amount of code need to do simple tasks. Even MSVS & Resharper didn't help much

This time my decision was to finalize desktop and Windows development, and get back to more interesting for me web backend development using PHP. At the same time I migrated to Linux from Windows, cause PHP developing on Linux is more natural.

PHP Again

After returning to web development, as any developer with few years of experience, I decided to develop my own framework, using all I knew, to make something handy for me in everyday work, and to consolidate all my knowledge. Inspired by great .Net libraries and many books I read till then, I began to work, and the final result was almost completely satisfy me - it had a simple ORM, routing system, and built a lot like MVC pattern. I've made two sites using it, but began to understand, that the whole architecture could be better: I had to wrote too many things to make it work, and should be a way to avoid it. And in that moment I stepped to the next level: I began to read others code.

In those days a boom of PHP frameworks happened: Zend, Codeiniter, Cakephp, an AST.net-style Qcodo & Prado. Looking at how they solves my framework's problems, a decided what my experiment with own framework was finished. It helped my a lot with understanding of how to design systems's architecture, how to make system more decoupled etc. Now I had to choose my favorite framework for every-day using, and learn it completely.

Kohana framework

After some experiments (and one site done on) with Qcodo, I've noticed dejavu: this is too familiar with ASP.net - again to much code, and actually this is not a PHP style of coding. And then, in 2008, Kohana (2.1 as I remember) came into my life...

This was it! Simple, elegant, great organized and designed, with excellent ORM... I loved it, and untill I become familliar with RoR and Ruby, I used only Kohana in my work.

TDD: Brain revolution

At those time the TDD & Agile concept became more and more popular, and this was my next step to another level. It was not so easy to completely change the way I used to work, and it took about a year to make it a habbit - write tests before code. But TDD, especially in complex applications, and if you do it right, really saves time as I noticed later.

The great RoR migration

Using Kohana, I often read that it's very basic PHP port of something called Ruby on Rails, written on mysterious Ruby language. Thus, finally, I decided to take a look at RoR, as if Kohana is so great, maybe RoR is something fantastic...

And so in 2011 I find a RoR video course at Lynda.com, and was excited how great RoR is. My dream became true: I can write so little code (thanks to Ruby) to do so amazing things.

I really regret I didn't met RoR and Ruby earlier, and that regret led to another experience level: since then, I'm trying to be on the edge of backed development technologies, to not to miss something really interesting and making my life simpler.

Spec the Ruby

After RoR inspiration and digging in its code, I've realised what I should learn Ruby language itself first, to read and understand what actually happening there. Since by that time I was a huge fan of TDD, I've started to search a tool for testing (and documenting my Ruby research at the same time), and find Rspec. That was another shock, comparable with RoR itself. I've fell in love with the expressiveness of Rspec (again, thanks to Ruby), and till today I can't imagine my work without it.

After few months of learning Ruby and RoR through Rspec & Capybara, I decided to forget about PHP, and completely switch to RoR, like many others PHP developers.

Nirvana

In the beginning of 2012 I felt I'm ready for my first RoR commercial project. And so was made quite simple abc-logistik.ru, and later pelesend.com, and higginsmd420.com. The internal complexity of applications grows in the same order.

It's been a long time since I've switched to Ruby and it's ecosystem, but still, every day I'm using it, I'm learning beautiful things, interesting ways of solving problems, finding myself, finally, at home.

Programming future

Today I'm learning Elixir/Phoenix and building own little service using them. It's always better to learn something by example. I'm creating only backend part now, and if things will go well, I will need web-client for it. This is the moment there I should decide which lang, CJ or Elm will be the best for me and project to use for front-end.

This website was created using Hugo 0.98.0, and Google Material Design Lite