Ruby

Ruby concurrency is hard: how I became a Ruby on Rails contributor 1

Ruby concurrency is hard: how I became a Ruby on Rails contributor

For the past several weeks, I’ve been trying to fix a cranky spec in Karafka integrations suite, which in the end, lead me to become a Ruby on Rails micro-contributor and submitting similar fix to several other high-popularity projects from the Ruby ecosystem. Here’s my story of trying to make sense of my specs and …

Ruby concurrency is hard: how I became a Ruby on Rails contributor Read More »

RSpec story about disappearing classes 5

RSpec story about disappearing classes

ActiveSupport#descendants can be slow. In a bigger system with layers of descendants, finding all of them can be time-consuming: puts Benchmark.measure do 100.times { Dispatchers::Base.descendants } end # 5.235370 0.015754 5.251124 ( 5.251069) In the code I’ve been working on, it meant that a single lookup was taking around 50ms. That is a lot, especially …

RSpec story about disappearing classes Read More »

Karafka framework 2.0 announcement 6

Karafka framework 2.0 announcement

I’m thrilled to announce the new and shiny Karafka 2.0. It is an effect of my work of almost four years. For those who wonder what Karafka is, Karafka is a Ruby and Rails multi-threaded efficient Kafka processing framework. Karafka 2.0 is a major rewrite that brings many new things to the table but removes …

Karafka framework 2.0 announcement Read More »

Reduce your method calls by 99.9% by replacing Thread#pass with Queue#pop 13

Reduce your method calls by 99.9% by replacing Thread#pass with Queue#pop

When doing multi-threaded work in Ruby, there are a couple of ways to control the execution flow within a given thread. In this article, I will be looking at Thread#pass and Queue#pop and how understanding each of them can help you drastically optimize your applications. Thread#pass – what it is and how does it work …

Reduce your method calls by 99.9% by replacing Thread#pass with Queue#pop Read More »

Controlling Elgato Key Light under Ubuntu with Ruby 24

Controlling Elgato Key Light under Ubuntu with Ruby

Recently I’ve acquired Elgato Key Light. It is a WiFi controllable LED lighting panel. The panel uses 160 LEDs to provide up to 2800 lumens of brightness and a color range of 2900-7000K. While you can control it from a mobile device, doing it directly from the shell makes the whole experience way more convenient. …

Controlling Elgato Key Light under Ubuntu with Ruby Read More »

Reading the uncompressed GZIP file size in Ruby without decompression 25

Reading the uncompressed GZIP file size in Ruby without decompression

There are cases where you have a compressed GZIP file for which you want to determine the uncompressed data size without having to extract it. For example, if you work with large text-based documents, you can either display their content directly in the browser or share it as a file upon request depending on the …

Reading the uncompressed GZIP file size in Ruby without decompression Read More »

RubyGems dependency confusion attack side of things

Note: This article is not to deprecate any of the findings and achievements of Alex Birsan. He did great work exploiting specific vulnerabilities and patterns. It is to present the RubyGems side of the story and to reassure you. We actively work to provide a healthy and safe ecosystem for our users. After reading the …

RubyGems dependency confusion attack side of things Read More »

How requiring a gem can mess up your already running application 26

How requiring a gem can mess up your already running application

Introduction Ruby’s dynamic nature is both its advantage and disadvantage. Being able to reopen system classes during runtime, while useful, can also lead to unexpected behaviors. This article presents one such case: how just requiring a gem can mess things up in a completely different area of the application. The bizzare error Recently, after connecting …

How requiring a gem can mess up your already running application Read More »

RubyGems Bitcoin Stealing Malware postmortem 27

RubyGems Bitcoin Stealing Malware postmortem

Introduction On the 7th and 13th of December, there were two malicious packages uploaded to RubyGems. Here’s the postmortem and analysis of the packages’ content. Diffend.io platform that I run closely cooperates with the RubyGems team, providing immediate insights into any gems that have “weird” characteristics. Thanks to that, the gems were yanked relatively fast. …

RubyGems Bitcoin Stealing Malware postmortem Read More »

The hidden cost of a Ruby threads leakage 29

The hidden cost of a Ruby threads leakage

Bug hunting Recently I’ve been working with one small application that would gradually become slower and slower. While there were many reasons for it to happen, I found one of them interesting. To give you a bit of context: the application was a simple single topic legacy Kafka consumer. I rewrote it to Karafka, and …

The hidden cost of a Ruby threads leakage Read More »