Ruby apps can use a lot of memory. But why? Various people in the community attribute it to memory fragmentation, and provide two “hacky” solutions. Dissatisfied by the current explanations and provided solutions, I set out on a journey to discover the deeper truth and to find better solutions.
Full-system dynamic tracing on Linux using eBPF and bpftrace
Linux has two well-known tracing tools:
- strace allows you to see what system calls are being made.
- ltrace allows you to see what dynamic library calls are being made.
Though useful, these tools are limited. What if you want to trace what happens inside a system call or library call? What if you want to do more than just logging calls, e.g. you want to compile statistics on certain behavior? What if you want to trace multiple processes and correlate data from multiple sources?
In 2019, there's finally a decent answer to that on Linux: bpftrace, based on eBPF technology. Bpftrace allows you to write small programs that execute whenever an event occurs.
This article shows you how to setup bpftrace and teaches you its basic usage. I'll also give an overview of how the tracing ecosystem looks like (e.g. "what's eBPF?") and how it came to be what it is today.
Self-awareness vs confidence
Some people I know tend to have an air of confidence around them. They wield their Steve Jobs reality distortion field, commanding attention and persuading people. They almost always act like they are certain of everything.
My natural inclination appears to be the opposite: I tend to be careful until I have done a careful analysis. I only act confident when I am sure, which can take a while. I think a lot about whether I am doing the right thing.
Experience has given me reason to believe that I am more self-aware than many other people. Yet I have also learned that this self-awareness comes at a price. Thus, I have been wondering why I am like this, and what I should learn from self-certain people.
Keeping your schema close to you with the 'annotate' gem
When developing a Rails app, have there been times when you’re wondering “what properties/columns does this model have”? The easiest way to find out is by inspecting db/schema.rb, but that gets annoying quickly. If only there’s a way to keep your schema closer to you. Enter the annotate gem.
Performance reviews considered harmful
There’s something wrong with the way most companies do performance reviews. Here’s why, and here’s how I do them.
Yes, communication is supposed to be hard
Lots of friction and frustration in teams are caused by miscommunication. How do these occur and what should be our attitude towards them?
Coding is not enough
Over the course of twenty years, I’ve noticed that my philosophy about software and the development thereof differs significantly from many other software developers and IT people. Here’s how, and here’s why I think coding should not be the most important thing.
John Sonmez on career paths, growth and building a personal brand
I was researching career path advice for software developers when I stumbled upon Software Development Career Paths by John Sonmez. It's an excellent blog post. John advises that you make several key decisions (e.g. on what kind of developer you want...
How Passenger 6 Generic Language Support is implemented
At Phusion, we recently unveiled an important feature in Passenger 6: generic language support. We also held a coding livestream and Q&A session on November 1st. Here’s wa recording of the livestream, as well as a overview and table of contents.
Running Chrome Headless, Selenium and Capybara inside GitLab CI and Docker
Selenium + Chrome Headless fail with mysterious errors when run in GitLab CI and Docker. Here’s why, and also how we fixed it.