-
The REPL: Issue 56 - April 2019
Technical Debt Is Like Tetris
Eric Higgins makes an analogy that resonates: Technical debit is like a Tetris. It accumulation can always be seen, but it not necessarily detrimental until there is enough of it. At some point it can make it impossible to make progress, or even to keep the game going. I guess starting a new game is equivalent for rewriting your software :-).
Storing UTC is not a silver bullet
One doesn’t have to program for long before encountering the sharp edges of date, time, and time zones handling. For a lot of use cases, storing date/time in UTC is a good solution. In this post, Jon Skeet explains why it doesn’t solve all the possible problems. The biggest takeaway is that Time zone definition changes constantly, and if your code doesn’t account for it explicitly, it will do so implicitly – sometimes with unexepcted results.
Using GNU Stow to manage your dotfiles
I manage my Unix dotfiles with care, manage them with source control, and take them with me from machine to machine. I spend a lot of time in my Unix environment and my configuration allows me to be productive. Until recently, I managed my dotfiles with a hand-crafted script that created symlinks. In the past I tried a few different solutions for the same problem, but nothing worked well for both files, directories and arbitrary locations. In this post, Brandon Invergo explains how to leverage a new-to-me utility: GNU
stow
. It’s purpose is to manage symlinks, usually in the context of activating different version of the same software in the same system. It works great for dotfiles! -
The REPL: Issue 55 - March 2019
What causes Ruby memory bloat?
Hongli Lai writes a provocative post about his research into Ruby memory bloat. Long-running Ruby process, typically grow in their memory usage over time. It’s common to see Ruby servers being re-started once a day (like on Heroku) to avoid this very issue. In this post, the author proposes that the reason behind memory bloat is not memory fragmentation, like a lot of people in the community assume. Instead, he points to the memory allocator (
malloc
) not releasing memory. I am not very familiar with memory allocation, so I am left wondering if other languages that also usemalloc
suffer from the same issue as Ruby.HIML
Akira Matsuda released a new templating engine with a novel take. The standard template engine in Ruby is
ERB
. It’s the default in Rails when rendering HTML. A user typically starts with HTML and sprinkles in special tags that get processed as ruby and replaced. HAML, is an alternative that was designed to avoid writing inline code in a web document. It always generates valid HTML, because it functions as a DSL. The down-side is that one must learn the new syntax. That is where HIML comes in: It produces valid HTML and provides some of the conveniences of HAML (e.g. autoclosing tags), but as intuitive as HTML and ERB.<section> <!-- This will auto-close! --> <div> <!-- As will this --> <%= post.content %> <!-- Standard way to interpolate ruby code -->
Defining a Distinguished Engineer
Jess Frazelle explains the qualities that a distinguished engineer or technical fellow should exhibit. The list is solid and resonates with my views. My only bone to pick is with the often-repeated adage: Have strong opinions, loosely held. I don’t think that is quite accurate. Opinions held in strength proportional to the weight of the evidence doesn’t have the same ring to it. I understand if it doesn’t catch on. Note that the actual description under the heading is spot on:
They do not need to have opinions on everything, that would be pedantic. Technical leaders should be able to use their experience to help others succeed, while also empowering others to own solutions.
-
On Being Efficient: My Mac Setup
As a Software Engineer, I spend most of my day working on a computer. Over the years, I’ve come to customize my setup to align better to the way I work and become more efficient. Efficiency is important because of the time you save, but not because you can do more with the time saved. It’s allows you to keep focus on what you want to accomplish, instead of the mechanics of accomplishing it.
-
The REPL: Issue 54 - February 2019
Move fast and migrate things: how we automated migrations in Postgres
Vineet Gopal from Benchling writes an interesting post about their approach to running migrations on highly-contested databases in production. A new concept for me was that they automatically retry migrations that fail due to lock timeouts. This reduces the number of failed deployments and manual intervention steps.
Rescue from errors with a grace
In this post Paweł Dąbrowski shows how to leverage Ruby’s value equality (
===
) method, and overriding the default functionality in custom exceptions. The results is cleaner exception handling code.Distributed Phoenix Chat with PubSub PG2 adapter
Alvise Susmel writes in detail how to use Phoenix Chat PubSub implementation using the
pg2
library. The result a distributed, multi-node chat service that does not have an external dependency to a separate system (like Redis). -
Dragons in benchmark-ips
My go-to tool for analyzing ruby performance is benchmark-ips. It’s an enhancement to Ruby’s own stdlib tool
Benchmark
. It’s easy to use, and reports meaningful information by default.