---
title: "An interview with Ruby ETL expert Thibaut Barrère"
publication: "Ruby Weekly"
issue: 499
published_at: "2020-04-30"
canonical_url: "https://rubyweekly.com/issues/499"
---

This week's Ruby news, views, and libraries.       

#499 — April 30, 2020 

[Read on the Web](https://rubyweekly.com/issues/499)   

💬 Occasionally we run interviews in Ruby Weekly and we're back with another one.. with long time Rubyist and Kiba maintainer, Thibaut Barrère. Be sure to check out the bottom of this issue to read it, especially if you ever run ETL jobs with Ruby! 😄  

Ruby Weekly 

[![\](https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60/dapjvxkxxcsmyw3fmnch.jpg)](https://www.youtube.com/watch?v=F5hA79vKE_E)   

▶[Let's Build a Twitter Clone in 10 Minutes with Rails, CableReady, and StimulusReflex](https://www.youtube.com/watch?v=F5hA79vKE_E) — You _know_ that cloning Twitter in 10 minutes is impossible, but what about the core mechanism of the idea? After a slow first minute, this video does a pretty good job of showing off some techniques you might not have used before. 

Nate Hopkins   

[discuss.rubyonrails: The Rails Project Discussion Forum](https://discuss.rubyonrails.org/) — Basically a Web version of the Rails mailing lists and a worthwhile place to head if you want to suggest features, ask questions, etc. 

Ruby on Rails Discussions   [![\](https://copm.s3.amazonaws.com/a69dcb7d.png)](https://www.cloud66.com/rails/move-from-heroku/?utm_source=-&utm_medium=-&utm_campaign=RubyWeekly-q2-2) 

[Easy Rails Deployments](https://www.cloud66.com/rails/move-from-heroku/?utm_source=-&utm_medium=-&utm_campaign=RubyWeekly-q2-2) — Deploy your Ruby, Rails, Sinatra, and Rack application to any cloud or server. Cloud 66 offers a scalable Heroku alternative that doesn't lock you in. Try it free and get extra $66 free credits with the code: '`Ruby-Weekly`'. 

Cloud 66 sponsor   

[sequel-activerecord-adapter: Allows Sequel to Reuse an ActiveRecord Connection](https://github.com/janko/sequel-activerecord-adapter) — If you want to use more Sequel or migrate in that direction, this makes it easy. 

Janko Marohnić   

[Ruby Adds Experimental Support for 'End-Less' Method Definitions](https://blog.saeloun.com/2020/04/27/ruby-adds-endless-method-definition-experimental.html) — We’ve [touched on this](https://bugs.ruby-lang.org/issues/16746) in a previous issue, but if you fancy a proper blog post with examples, this is more accessible than digging through feature tracker discussions. I’m not a fan of this syntax myself _yet_, but Prateek does a good job of selling it. 

Prateek Choudhary   

[CableReady: Trigger Client-Side DOM Changes from Server-Side Ruby](https://github.com/hopsoft/cable_ready) — If you skipped the video above _because it’s a video_ (and I know many of you do 😄) CableReady is still worth checking out. It aims to “complete the ActionCable story” by providing a way to directly interact with clients over ActionCable WebSockets. The [docs](https://cableready.stimulusreflex.com/) will help you get the idea. 

Hopsoft  

💻 Jobs  

[Find a Job Through Vettery](https://www.vettery.com/tech?utm_source=newsletter&utm_medium=cooper-rubyweekly&utm_term=tech&utm_content=grouped&utm_campaign=ad-77583) — Vettery specializes in tech roles and is completely free for job seekers. Create a profile to get started. 

Vettery   

[Security Engineer (Remote)](https://angel.co/company/shogun/jobs/805334-security-engineer) — Are you an engineer with experience in Rails and/or Go? Join our team and help secure our apps and cloud infrastructure. 

Shogun  

ℹ️ _Interested in running a job listing in Ruby Weekly? There's [more info here](https://booking.cooperpress.com/jobs)_. 

📘 Articles & Tutorials  

[A Practical Use for `PStore`](https://blog.arkency.com/practical-use-of-ruby-pstore/) — [PStore](https://ruby-doc.org/stdlib-2.5.3/libdoc/pstore/rdoc/PStore.html) is one of the older parts of Ruby’s stdlib and lets you persist (and restore) a Ruby hash to disk. I haven’t seen it in Ruby code for _years_ but Arkency have found a neat, modern use case. 

Paweł Pacana   

▶[Drag and Drop Sortable Lists with Rails and Stimulus JS](https://gorails.com/episodes/rails-drag-and-drop-sortable) — How to wire up drag and drop lists with a Rails app using [Sortable](https://github.com/SortableJS/Sortable), Stimulus and `acts_as_list`. 

Go Rails   

[Setting Up Multi-Factor Authentication for RubyGems.org](https://guides.rubygems.org/setting-up-multifactor-authentication/) — If you’re a registered user of the official Ruby Gems repository, you should have had an email this week about securing your account using 2FA. This is just my own reminder that this is a good idea _especially_ if you publicly publish widely used gems! :-) 

Rubygems.org   

[Let’s Explore Big-O Notation With Ruby 🕵](https://www.honeybadger.io/for/ruby/?utm_source=rubyweekly&utm_medium=email&utm_campaign=ruby) — Learn to use Big-O to look at an algorithm and easily discern its efficiency, without having to run a profiling tool. 

Honeybadger sponsor   

▶[Discussing Docker and Kubernetes with Kelsey Hightower](https://railswithjason.simplecast.fm/kelsey-hightower) — A worthwhile show to listen to if Kubernetes and Docker intimidate you but you want to know a little more. Kelsey is good at breaking these things down into understandable pieces. 

Rails with Jason Podcast podcast   

[Rails System Tests in Docker](https://hint.io/blog/rails-system-test-docker) — We’re seeing an uptick in articles about system tests in Rails. Here’s how to integrate them into your development Docker setup. 

Hint.io   

[The Difference Between System Specs and Feature Specs](https://www.codewithjason.com/difference-system-specs-feature-specs/) — If you’ve felt the difference between RSpec’s “feature specs” and “system specs” is quite subtle, this explanation will help. 

Jason Swett   

[Why Rubyists Should Consider Learning Go](https://www.honeybadger.io/blog/rubyist-learn-go/) — If you want compilation and a type system, [Crystal](https://crystal-lang.org/) is probably a better fit for Rubyists, but Go is undoubtedly a neat language and ecosystem (and if you _do_ end up in the Go world, [check out our Go weekly!](https://golangweekly.com/?utm_source=ruby&utm_medium=email&utm_campaign=cross-promo&utm_content=499) 😄) 

Ayooluwa Isaiah   

[Building a Ruby CLI with Thor](https://marsbased.com/blog/2020/04/27/building-ruby-cli-thor/) 

Daniel Gómez  

🛠 Code and Tools  

[git curate: Peruse and Delete `git` Branches Ergonomically](https://github.com/matt-harvey/git_curate) — Got a repo cluttered with branches here and there? `git curate` aims to cure the pains of getting those branches back under control. 

Matt Harvey   

[MessageBus: A Reliable and Robust Messaging Bus for Ruby and Rack](https://github.com/discourse/message_bus) 

Sam Saffron   

[Are You Spending Too Much on Heroku?](https://railsautoscale.com/spend-less/) 

Rails Autoscale sponsor   

[bootstrap_form: A Rails Form Builder for Bootstrap v4-Style Forms](https://github.com/bootstrap-ruby/bootstrap_form) 

Bootstrap Ruby   

[ActiveModelAttributes: The Active Record Attributes API, but for Active Model](https://github.com/Azdaroth/active_model_attributes) — Brings some of the goodies of the [Rails 5 Active Record attributes API](https://blog.bigbinary.com/2018/12/11/rails-5-attributes-api.html) to ActiveModel too. 1.6.0 just dropped. 

Karol Galanciak        ![Thibaut Barrère](https://res.cloudinary.com/cpress/image/upload/v1588067181/bcabcrhh9w4o34ao1dso.png) 

💬 A Q&A with…
Thibaut Barrère
Creator of Kiba ETL  

Thibaut Barrère is a long-time Rubyist and data engineer who built and maintains the popular Extract, Transform, and Load (ETL) framework [Kiba.](https://github.com/thbar/kiba) We asked him some questions about his work: 

What inspired you to create Kiba? 

A lot of my work since ~2005 has been focused on data integration (making systems speak together), data aggregation etc. I sometimes used GUI-based tools like Microsoft SSIS which, while powerful, are quite far from the coding experience. 

I was already using Ruby at that time, and was happy to discover [activewarehouse-etl](https://github.com/activewarehouse/activewarehouse-etl) (maintained by Anthony Eden, who runs DNSimple now) providing a Ruby DSL to declare data pipelines. I used it for a while with very good success to implement data extractions and business intelligence ETL, and ultimately took over the maintenance. 

In the long run, though (as I explained in [a recent Paris.rb talk](http://youtube.com/watch?v=yv1EnYTXIeA)), the balance between the the cost of OSS maintenance and the usability for my billable and non-billable use-cases proved to be not good enough, which made me decide to stop the maintenance, sadly. 

I still wanted to use Ruby to write data pipelines, but I needed to cover more use-cases and reduce the OSS maintenance burden at the same time. This ultimately led me to write and share (in 2015) [Kiba ETL](https://github.com/thbar/kiba), a focused DSL for declarative processing, matching those criterias. 

Do you find yourself adding more features while in quarantine? 

Before the quarantine, I directed my Kiba bandwith and focus on finalizing Kiba v3 and rewriting the documentation from scratch, to properly encourage best practices I’ve been discovering. I also created experimental branches for Ruby 2.7/2.8 keywords. 

During the quarantine, I've reduced client work and OSS work too, to focus on shipping Kiba Pro v2 (which I’ll announce shortly officially). I’ve extracted and generalized (from real-life projects) very useful components, such as a “batch SQL lookup” (useful when replacing relationships keys during data migrations and datawarehouses sync code, in batch rather than row by row), a “file lock” to ensure a single job runs at once, and a “parallel transform” to achieve easy concurrency for things like HTTP queries. 

What's the wildest ETL that you've encountered? 

Getting the data out of a system which is actively not acting in that direction is always a bit wild.. One can see all types of fancy stuff on the field. For instance, it is not uncommon to have an ETL process start a headless browser, jump through pages, just to get to the CSV/PDF/Excel file that you will then use as your data source! 

You can also end up having to figure out ways to read or write very old file formats at times. Recently I wrote a Kiba component to generate a COBOL delimited file, for instance. In large companies, a very widely used I/O is good old SFTP, far away from modern APIs and formats. 

Can you tell us how to say your last name? 😉 

I had to deploy a page to my blog to answer that question properly 🙂. You’ll find out [how to say my name here](https://thibautbarrere.com/how-to-pronounce/). 

_Merci Thibaut!_   

You can read some of Thibaut's posts on his [blog](https://thibautbarrere.com/) and find out more about Kiba ETL [here](https://www.kiba-etl.org).          

Curated by [Peter Cooper](https://twitter.com/peterc), [Glenn Goodrich](https://twitter.com/ruprict) and [Cooperpress](https://cooperpress.com/). 

[Change your email address](https://rubyweekly.com/edit_subscription/*|UID|*) or[Stop getting this newsletter](https://rubyweekly.com/leave/*|UID|*) 

© Cooper Press Ltd · Fairfield Enterprise Centre, Louth, LN11 0LS, United Kingdom
