Java Developer in Pula, Croatia
Senior Software Engineer2017 - PRESENTClub Collect
Technologies: Elixir, Phoenix, Erlang, Heroku
- 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 Integrator2010 - 2017Infobip d.o.o.
- 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.
Full-stack Developer2015 - 2016Butchershop Creative
Technologies: Node, Express, React, Redux
- 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 Developer2015 - 2016Storie, Inc.
Technologies: Google App Engine, Java, Google Guice, Restlet, Jade, jQuery, SCSS
- 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 Engineer2014 - 2014Soma, Inc. (via Toptal)
Technologies: Ruby, Ruby on Rails, Angular, Angular UI, Sidekiq
- 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 Developer2014 - 2014HootRecruit (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 Integrator2003 - 2010QiQo d.o.o.
- 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 Engineer1998 - 2003Grad d.o.o
Technologies: Visual Basic, MS SQL
- 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 2106 (Other amazing things)https://www.youtube.com/watch?v=yfO-_a4EJV0
Gave a talk on introducing React to a situation with:
- 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 2104 (Other amazing things)https://www.youtube.com/watch?v=UeAnxXmx8s0
Gave a lecture on Apache Storm and related ecosystem with following topics:
- 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 Plugin (Development)https://github.com/elvanja/jenkins-gitlab-hook-plugin
Enables GitLab web hooks to be used to trigger SMC polling on GitLab projects.
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=<URL of the Git repository for the GitLab project>
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.
- Dealesque (Development)https://github.com/elvanja/dealesque
Finds the best combination of sellers and postage options for a selection of Amazon products.
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.
- Roar Example (Development)https://github.com/elvanja/roar_example
An example of a working ecosystem of services and client applications that interact using roar and roar-rails gems. The main idea is to show how one might use those libraries to build such a system.
- 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
- Vanja is a mentor in the Toptal Global Mentor’s Program. This program is a partnership between Toptal and General Assembly to provide high quality mentorship for students from minority and low income backgrounds who are looking to begin their careers as professional software engineers. Vanja shows commitment to diversity in tech by mentoring a General Assembly student every week for a year, covering everything from coding tips and tricks to advice on making it in the industry.
FrameworksExpress.js, Ruby on Rails (RoR), GAE, Flux, Bootstrap, Mockito, JUnit, PowerMock, Gaia, Bootstrap 3, Spring, Sinatra, Windows PowerShell
Libraries/APIsRestify, Node.js, React, Guava, Nokogiri, Amazon Product Advertising API, Devise, Google Maps, Facebook API, Highcharts, Twitter API, Java RMI, Google API, jQuery, D3.js
ToolsMaven, Git, Jenkins, Apache Storm, RSpec, IntelliJ IDEA, Jira, GitLab, Artifactory, Stash, Adobe Photoshop, Rake, Git Flow, VCR, Vim Text Editor, Grunt, Cucumber, Magnolia
ParadigmsContinuous Integration (CI), REST, Agile Software Development, Refactoring, Test-driven Development (TDD), Object-oriented Design (OOD), Metaprogramming, Lambda Architecture
PlatformsFactual, Google App Engine, Linux, WordPress, Heroku, Apache Kafka
StorageJSON, Microsoft SQL Server, PostgreSQL, MongoDB, MySQL, Memcached
OtherHAL, HATEOAS, Big Data
- Masters degree in Computer Engineering1993 - 1998Faculty of Electrical Engineering and Computing Zagreb - Croatia