Vanja is a fast learner most interested in projects that combine a multitude of technologies with development best practices. He adores Elixir and anything Elixir related and has a special interest in software craftsmanship and personal development, both in the field and in life.
GitHub, Linux, Elixir, Git, Jenkins, Heroku, IntelliJ IDEA
The most amazing...
...thing I’ve accomplished is seeing the Jenkins plugin for Gitlab I made being widely adopted.
Senior Software Engineer
- Improved on a communication module responsible for delivering text messages, emails, and snail mail letters to customers. Integrated with various external services like (but not limited to) MailChimp, Nexmo, Twilio, Pingen, Postmark, and others.
- Developed sports club core management modules, including things like court availability, member management, etc.
- Developed APIs and API clients for the above-mentioned modules, to be used by other web-based products in the company as well as external clients like mobile apps.
- Developed internal tools for integration testing across several modules/apps, using GraphQL.
- Worked on the financial module, responsible for communication with banks and performing crediting and debiting both club members and clubs themselves.
Senior Software Engineer/System Integrator
- Introduced Apache Storm into the technology stack for the purpose of processing incoming (big) data streams in real time to (e.g.) prepare in advance the data for user dashboards to improve user experience; reached a processing power of about 100,000 messages per second with a small cluster.
- Led the core web team, responsible for developing an internal framework based on Restify to help develop consistent web related APIs across ten teams. Also introduced React to the UI development and set it as standard.
- Helped develop a set of internal tools used by the support team and developers alike that monitor existing services, alert on various conditions, display metrics and related graphs, etc.
- Led a team of developers in charge of integrating the above mentioned Apache Storm and monitoring tools into the company's stack; also worked as product owner for the related products.
- Managed and maintained the entire CI flow for about 150 developers throughout the company, using Stash as a Git server (previously used TFS and GitLab), Jenkins as build farm, Artifactory as repository, and JIRA and Confluence as project management tools; helped integrate Java (Maven) and other types of projects (Node.js, Ruby, .NET) into the flow.
- Wrote a custom Jenkins plugin for integration with the Git back-end to improve build start times, written in JRuby and open sourced to the community.
- Created the base tools for automated deployments and maintenance of Java and other types of services by writing a Bash (Linux) and PowerShell (Windows) set of deployment scripts that support automated deploys, upgrades etc.
- Led coding dojos within the team; taught new candidates the basics (SOLID) within our developer workshops (used to bring new talent to the firm).
- Created an internal tool for validating SQL schema for the entire platform and for automated building and seeding of various databases needed to run related services in a staging environment.
- Integrated the website with Oracle Eloqua and Drupal back-end systems.
- Built a web API for fetching custom Drupal data.
- Created a web API for fetching contact/form data from Eloqua.
- Developed a generic React/Redux component and flow to render custom Drupal data and related contact forms.
Google App Engine Web Developer
- Created http://storie.com web, running on Google App Engine.
- Integrated the web with the back-end API, also on Google App Engine, using URLFetch GAE service.
- Created a build system for client-side scripts.
- Implemented caching of main resources from the back-end API, to speed up page load times.
- Created a mechanism to work with models both on server and client side.
- Supported video playback using a customized JWPlayer.
Full-stack Rails Engineer
Soma, Inc. (via Toptal)
- Helped develop a declarative admin interface called Deckhand, similar to RailsAdmin but more Google-like in usage, Ruby backed with Angular on the front end.
- Helped untangle largely coupled business logic, e.g., for various billing and shipping use cases, and separate it in distinct concerns, easier to compose and test.
- Reorganized and fixed a large portion of specs, making them faster by skipping database calls where not needed.
- Decoupled several background jobs from ActiveModel into Whisper gem's style of publish/subscribe model, helped with decoupling logic from models.
- Generally worked on improving business cases, whether by adding new features or updating the existing ones to match the changing business needs more closely.
Senior RoR Developer
HootRecruit (via Toptal)
- Integrated with FullContact API for both live and background contact importing, respecting request rate limits.
- Reorganized and made the deploy process simpler, allowing for sandbox and production deployments on the same target server.
- Fixed various UI issues related to displaying on various mobile devices, and Bootstrapped the remaining pages.
- Added support for indexing and full text search of uploaded candidate's resumes (PDF and MS Word) along with other candidate data.
- Exposed an API for resolving contact details given an email; integrates with FullContact API, used on the UI to fill data for manually entered contacts.
Analyst, System Integrator
- Incorporated the company's ERP solution into the client's business process.
- Led various efforts to create custom modules for the ERP product, e.g., for newspaper publishing or the textile industry.
- Gathered and analysed client requirements and created solutions within the given ERP product.
- Educated various teams at the client's site to work with the ERP and present solutions.
- Created design templates for various ERP components.
Lead Developer, Systems Engineer
- Created a reusable framework for dynamic addition of custom medical documents to the system (important because most doctors have their own idea about how to handle and write patient documentation).
- Created packaging and distribution tools and procedures to speed up deployment of new versions and fixes; also enabled seamless deployment (users not interrupted in their work).
- Integrated the product (medical system) into a number of hospitals; migrated existing data and flows and developed the missing functionalities.
- Created a reusable framework for administration, e.g., registering new document types; enabled fast addition of new data types to the UI.
- Worked on various stand alone (not incorporated into the main product) but medically related products.
Distributed React Talk at Infobip Annual Conference 2106https://www.youtube.com/watch?v=yfO-_a4EJV0
- 20+ distributed teams
- A web product with 10+ related modules
- 100+ microservices
The challenge is how to organize it all and have the same UI experience all over and share code between teams. This is where React comes and solves major problems. The talk gives a broad overview of the idea and the benefits that come from it.
Related slides can be found at https://www.slideshare.net/vax/distributed-react.
Apache Storm Overview and Integration Lecture at DORS/CLUC Conference 2104https://www.youtube.com/watch?v=UeAnxXmx8s0
- The basics: Why it was created and how it is usually used
- Motives for usage in Infobip's technology stack: Real-time processing of incoming data stream
- Integration: Using Kafka and MS SQL
- Issues and challenges: DB throughput, Java (de)serialization performance bottleneck, etc.
Related slides can be found at SlideShare: http://www.slideshare.net/vax/storm-integration.
Jenkins GitLab Webhook Pluginhttps://github.com/elvanja/jenkins-gitlab-hook-plugin
For GitLab, there is an existing solution that might work for you. You can just use the notifyCommit hook on Git's plugin like this: http://your-jenkins-server/git/notifyCommit?url=
But, with a large number of projects that are mostly polling (no hooks), the project might actually be built with a great delay (5 - 20 minutes). That is where this plugin comes in. It gives you the option to use build_now or notify_commit hooks, whichever suits your needs better. Recently, it was used to trigger Stash commits as well.
A pet project used to try the Clean Ruby way of developing a web application. Currently uses Rails but is intended to be decoupled from any framework at all.
- Book_of_orcharding - Contains all the domain/business rules about fruit management
- Orchard - Serves as the persistence layer for the orcharding rules
- Tutti_frutti - Exposes orcharding rules as a JSON API
- Smoothie_mixer - Rails project that consumes the API and delivers delicious fruit smoothies
- Basher - Command line API client
Express.js, Ruby on Rails (RoR), GAE, Flux, Bootstrap, Mockito, JUnit, PowerMock, Gaia, Bootstrap 3, Spring, Angular, Google Guice, Restlet, Redux, Phoenix, Sinatra, Windows PowerShell
Restify, Node.js, React, Guava, Nokogiri, Amazon Product Advertising API, Devise, Google Maps, Sidekiq, Facebook API, Highcharts, Twitter API, Java RMI, Google API, jQuery, D3.js
Apache Maven, Git, Jenkins, Apache Storm, RSpec, IntelliJ IDEA, Jira, GitLab, Artifactory, Stash, Adobe Photoshop, Rake, VCR, Vim Text Editor, GitHub, Grunt, Cucumber, Magnolia
Continuous Integration (CI), REST, Agile Software Development, Refactoring, Test-driven Development (TDD), Object-oriented Design (OOD), Metaprogramming, Lambda Architecture
Factual, Google App Engine, Linux, WordPress, Heroku, Apache Kafka
JSON, Microsoft SQL Server, PostgreSQL, MongoDB, MySQL, Memcached
HAL, HATEOAS, Merb, GitFlow, Big Data
Masters Degree in Computer Engineering
Faculty of Electrical Engineering and Computing Zagreb - Croatia