Ivan Rublev

I’m an Elixir Engineer

I make backend services in Elixir/OTP and use Phoenix as a Web framework. I apply contemporary technologies like a Phoenix LiveView to implement interactive Web-sites.

I follow Test-first Development, Domain-driven Design principles, and prefer to build backend software using the Hexagonal Architecture by Alistair Cockburn.

Pair and Mob programming combined with individual programming time is the work style I value.

Formerly an iOS and macOS developer and consultant

I wrote apps in Swift and Objective-C with the XCode and used the CocoaPods as the package manager.

In imperative, Object-Oriented programming, I follow SOLID principles and prefer to build software using Clean Architecture by Robert C. Martin.

As for me, following the business value is one of the possible recipes for good software. I prefer to use an Agile software development process.

I’m keen on sharing knowledge and taking part in IT conferences and meetups regularly. Some examples are ElixirConf EU, and hh.ex Hamburg Elixir Meetup.


  • LinkedIn
  • GitHub
  • SpeakerDeck

Elixir works

Twitter Wall

A microservice in Elixir that displays a mixed feed of liked and posted tweets from a specified account. Here is the source code.

It aggregates liked and posted tweets, sorts the mix by date, takes first N, and renders them into Html to be displayed.

An example of the microservice's output that is a mix of four tweets from the author's Twitter account, is shown below on this page. A JQuery AJAX call integrates the microservice, see the browser's console for details.

Another representation of the mixed feed is in the LiveView backed website where the length of the feed can be set interactively.

Methodologies

Test Driven Development, Hexagonal Architecture, Heroku's Twelve-Factor App.

Tools

Elixir 1.9.x, Erlang 22, Phoenix 1.4.x, Phoenix LiveView, Mix, Git, VSCode, Coveralls (for the test coverage), Credo (for syntax analysis), Sobelow (for security static analysis), direnv (for environment variables management), Dialyzer, Distillery, Bash, Docker, TravisCI, Gigalixir (hosting).

Hex packages and technologies

Twitter API 2.0, Tesla (HTTP client), oauther (OAuth 2.0), joken (JSON Web tokens), corsica (Cross-Origin Resource Sharing headers), GenServer, OTP Supervisor, timex (Time calculations), mox (Mocks generation), knigge (Dependency injection)

Accomplishment

In this backend application, I aggregated Twitter API endpoints authenticating with OAuth 2.0 and serve processed tweets in two ways. As an interactive Web-page, and, as of a microservice HTTPs endpoint. The endpoint expects a request to be authorized with a JWT token signed with a defined secret. The processed result data is cached. Two GenServers were used to keep the result data in memory and to refresh the cache on a set period appropriately. OTP Supervisor was used to make the cache GenServers survive unpredicted crashes. The outcome is a secure and highly available web-service with the average answer time of 142ms.

The application was deployed as a Distillery release within a Docker image locally, and publically on the Gigalixir platform.


iOS works

Ringer app

Universal app for iPhone and iPad. Made it just for fun.

It’s like repeating timer app but for only one most important thing. In contrast to the native Timer app, it alarms with sound and then repeats the countdown automatically unless the Auto Stop time comes.

Ringer app

Methodologies

Clean Architecture, SOLID principles.

Tools

Objective-C, XCode, iOS 9.x-10.x SDK, CocoaPods, HockeyApp (for crash reporting), GoogleAnalytics, Unit Tests via Quick/Nimble.

iOS frameworks and technologies

Local Notifications, UserNotifications, Background Content Download, Background Execution, CoreSpotlight, MediaPlayer, AVFoundation, GCD, NSOperationQueue, NSURLSession, CallKit, CoreTelephony, StoreKit, State Restoration.

Accomplishment

In this app I’ve implemented the Clean Architecture by Robert C. Martin. As consequence new features can be inserted faster, the code was covered with unit tests easily.


macOS work

Video recording app

App for my client working in macOS 10.9-10.11.

This app records video and uploads it to Amazon AWS S3.

Video recording app

Methodologies

Model View Controller approach, SOLID principles.

Tools

Swift 2.3, XCode, OSX 10.11 SDK, CocoaPods, HockeyApp (for crash reporting), Unit Tests via Quick/Nimble.

macOS frameworks and technologies

AppKit, Alamofire, ObjectMapper, REST, JSON, AmazonS3RequestManager, AVFoundation, CoreMedia, GLKit, GCD, NSOperationQueue, Darwin level file reading, Custom Framework with UI controls.

Accomplishment

This is a production app mostly written in Swift with small portions in Objective-C.

In this app I made video stream to be resized on the fly via OpenGL during recording. I’ve written the multipart file uploader to Amazon AWS S3. It uploads video file chunk by chunk during the recording. So at the end of the recording video is almost there.


Inquires

Please, send work requests via personal message on LinkedIn.