news, opinion, tutorials, about ruby, aggregated
Sources About
The Ruby Dispatch 

Pairing with GPT-4

GPT-4 can be helpful for beginner and senior Ruby developers, but it does have limitations. It won't write all of your software for you, but it will point you in a useful direction, especially if you prefer learning by doing.

Let's look at how well GPT-4 pairing works by picking an easy, but less well known project with some edge cases: downloading a RubyGem, parsing the docs via YARN, and dumping them into a Sqlite database.

The Initial Prompt

Create a Ruby script for me that downloads a RubyGem, parses the docs via YARD, and dumps them into a Sqlite database that's named #{gem-name}-#{gem-version}.db. The database should also include information from the Gem spec.

GPT-4 usually starts…

Awesome Ruby Newsletter 

💎 Issue 357 - 🐲💎 The DragonRuby Roadmap Announcement Overview

Mike Coutermarsh 

There was an error parsing Gemfile: windows is not a valid platform

I hit this error recently. To fix this, you need to update to a newer version of bundler.

gem update bundler

Good luck, hope this saved you some time.


There was an error parsing `Gemfile`: `windows` is not a valid platform.
Ruby Central 

Countdown to RailsConf 2023!

We’re just about a month away from RailsConf in Atlanta! We can’t wait to gather with you for this year’s exciting lineup of talks, workshops, and keynote speakers. You can still get a ticket here, although they are going very fast!

In the meantime, watch this space for the program schedule, and keep in mind these important dates and details to help you plan for your best conference experience:

Room reservation cut-off date

The last day to book a room at The Westin Peachtree Plaza, Atlanta, where RailsConf will take place, is Thursday, March 30 (5:00 PM ET).

Ticket sales and registration cancellation cut-off date

The last day to buy a conference ticket is Saturday, April 22 (11:59PM ET). The…

Ruby Weekly 

ChatGPT makes a contribution to Rails

#​646 — March 23, 2023

Read on the Web

Ruby Weekly

Parklife: Render a Rack App to a Static Build — Render a Rack app (Rails/Sinatra/etc) to a static site so it can be served by Netlify, Now, GitHub Pages, S3, or another static server. It can crawl your app following all links, or you can specify them yourself via a DSL.

Ben Pickles

📝 Ben has also written a blog post explaining the project.

How to Benchmark Your Ruby Gem — A look at the general approach to take an existing gem (most likely your own), measure its performance, improve that performance, and then eventually repeat that process.


🎈 Blog turns one year!

One year ago, on March 23 I rolled out a first article to this blog, and, looking back, it was a damn good decision! In this short post I’ll share some results and stats.


During the year I published 12 posts: 8 about Rails, 2 about Haskell, 1 about databaseas and 1 essay about architecture. Overall there were 26 300 unique visitors. Thanks for the attention 🙂

Top articles

🥇 Why Ruby has symbols

A post about Ruby internals, rolled out in April, which got most attention: about 11 000 unique visitors spending 5 minutes 30 seconds on the page! Moreover, it was translated to Japaneese, recognized as one of most popular posts in RubyWeekly and reached #4 on Hackernews.


🥈 Understad…

Ruby Rogues 

Pitchfork, Falcon, and Performant HTTP Servers - RUBY 587

Jean Boussier is a Staff Engineer on Shopify's Ruby and Rails infrastructure team. He joins the show to talk about pitchfork. He begins by defining the pitchfork and describing how the application concept works. Moreover, he explains the reason why he wrote it and tackles some of its useful features. 


Educational Links


Promoted Links


Akshay's Blog 

Understanding the Attribute Assignment API in Rails

Understanding the Attribute Assignment API in Rails

Here's a regular Ruby class with two properties and a constructor. To create a new instance of the class, you have to pass the arguments expected by the constructor, in the same order.

class Person
  attr_accessor :name, :age
  def initialize(name, age)
    @name = name
    @age = age

# create a new object
akshay ='Akshay', 31)

However, if you've worked with ActiveRecord models in Rails, you must have noticed that they don't include the initialize method. Still, you can create them using the new method, passing in a hash of attributes in any order.

class Post < ApplicationRecord

# create a new post
post = 'hello world', body: 'how are you?')

If you…

John Nunemaker 

How to benchmark your ruby gem

We made a huge push to make Flipper more performant the past week or so (results at the end). It wasn't that hard, but I realized I haven't seen any articles like the one I'm about to write. Most of them are "here are all the tools" and/or "a single example" of how to use that tool.

What I felt they were missing was a general approach of how to take something and make it faster. So here goes nothing...

A Folder

First, create a folder in your project root (or wherever) named benchmark. I stole this idea from jekyll and grant you full permission to thusly steal it from me. The goal of benchmarks is to live on forever and allow others to use and learn from them, so get it in your version…

Ruby Magic by AppSignal 

Authorization Gems in Ruby: Pundit and CanCanCan

Today, many web applications will feature pages that are publicly available — like a homepage — and more secure ones where a user has to log in to get access. The process of user registration, logging in, and tracking user session state is called "authentication".

At the same time, when dealing with logged-in users, it's necessary to separate actions and resources that are available to them depending on their user roles. For example, "admins" generally have more access than normal users. This process of separating authenticated user access is termed "authorization".

In this post, we'll explore two of the most popular authorization libraries in Ruby so far: Pundit and CanCanCan.

Let's dive…

The Ruby on Rails Podcast 

Episode 462: Scarpe Diem: Seize the Shoes (Brittany + Nick)

What is Nick? Well, Nick has a thing! He tells Brittany all about his new project: Scarpe. From there, Brittany steals some free consulting from Nick when she presents an authentication problem she is trying to tackle on a side project. Nick shares his experience at a coveted Sandi Metz workshop and they wrap on a personal update from Brittany.

Show Notes:

katafrakt’s garden 

Modeling business logic with ECS in Ruby

This blog post explores the possibility of using Entity Component System architecture to model business logic in a “regular business application”, like the ones we usually work with. It’s based on a talk I gave a few months ago in a local Ruby users group. I’d like to stress that these are notes from an experiment, I’m not saying that you absolutely should use this technique in your main production application. In fact, you probably should not.

Let’s start!

What is ECS?

Entity Component System is an architecture coming from the game development industry. It is sometimes dubbed an alternative to OOP. It concentrates on grouping traits and behaviours instead of putting things into (often…

Emmanuel Hayford 

I Started A Podcast: The Rails Changelog.

A lot of the time I wish could keep myself up-to-date on Ruby and Rails stuff through other means other than reading.

I work full-time with computers, 8 hours of screen time is more than enough. After work, I still want to know what’s going on with Ruby and Rails.

Maybe if there was a podcast that reported the news around Ruby and Rails in audio I could rest my eyes a bit and still stay abreast of Rails and Ruby developments.

This endeavour won’t reduce my screen time for sure, but someone else might find my podcasting useful and I certainly enjoy the process of creating content so why not.

How did I come up with “The Rails Changelog”? I didn’t. I spoke a lot about this podcast with Gre…

The Bike Shed 

376: Success and Fulfillment

Stephanie has a win and a gripe from her client project this week. In a previous episode, Joël talked about his work exploring how to model dependent side effects, particularly D&D dice rolls. He went from the theoretical to the practical and wrote up a miniature D&D damage dice roll app that you put in a few inputs. Then it will roll all the dice necessary and tell you did you successfully hit your target and, if so, how much damage you did.

Together, they discuss how they think about fulfillment at work and what brings them fulfillment as developers.


Evil Martians, an extraterrestrial product development consultancy 

AnyCable off Rails: connecting Twilio streams with Hanami

Authors: Pasha Kalashnikov, Backend Engineer, Vladimir Dementyev, Principal Backend Engineer, and Travis Turner, Tech EditorTopics: Backend, Full Cycle Software Development, Go, WebSocket, Twilio, Hanami, Ruby, gRPC

How to use AnyCable-Go as a library to control any WebSocket client from Ruby by example: analyzing Twilio Media streams with Hanami.

WebSockets has been around for years, but its popularity isn't showing any signs of fading. They still power most of the real-time web, primarily because they're supported by 98% of browsers in use today (Opera Mini users, we miss you). However, browsers, mobile applications, and other clients aren't the only ones using this technology. There can be…

Test Double 

Code boundaries vs seams

I recently found myself in a design discussion where I talked about how our code lacked seams, and another developer talked about boundaries. A third developer asked, “What’s a seam?” And this got me thinking.

What IS the difference between a seam and a boundary?

I wasn’t sure, so I did some research. And it turns out that the answer I gave was really about separation of concerns. Related, but different.

What are coding boundaries?

If you Google this, you get 535 million results.

A boundary is the line between your code and the code that you don’t control. Further, an external boundary is more literally code that you didn’t write and a third-party API, whether that’s a web API, a…

Saeloun Blog 

Kubernetes cluster on AWS EKS, Part 4: Setup Elastic Stack ( ElasticSearch / Kibana / APM Server ) on Kubernetes

This is a series on setting up Kubernetes clusters in Amazon EKS.

In this post, we will set up Elastic Stack on AWS EKS Cluster.

We will be setting up

  1. Elastic Stack (7.17)
  2. Nginx Ingress Controller (Shared)
  3. Certificates for all Ingress Services

ElasticStack installation will consist of

  1. Elastic Search
  2. Kibana
  3. APM Server

Note: The same setup will work for the latest version of Elastic which is 8.6.2 at the time of writing. APM Server does not work with version 8, as Elastic has deprecated APM in favor of ElasticFleet


  • AWS EKS Cluster
  • EBS CSI Driver Setup for PVC
  • Nginx Ingress Controller
  • Cert Manager

1. Elastic Search Installation


Saeloun Blog 

Kubernetes cluster on AWS EKS, Part 5: Root domain redirection using Caddy Server with Automatic SSL

This is a series on setting up Kubernetes clusters in Amazon EKS.

In this post we will setup Root Level Redirection using Caddy Server.

Setting up root domain redirection can be rather tricky, given the following points:

  • Root domains @ can only have an A-Record under DNS therefore can only point to an IP Address. This causes issues if you are using something like AWS and are not using their DNS Name Servers using Route53.

  • With default Nginx Redirection, https redirection does not work, unless a custom SSL is installed.

  • ALIAS records, do not work unless extra plugin’s are installed for SSL.

  • SSL Certificates with Nginx requires extra installation…

We want to achieve the following: => =>

Caddy Installation Ubuntu

SSH to the Ubuntu Server and add the necessary dependencies with

sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https -y

add the official Caddy GPG key

 curl -1sLf '…
Saeloun Blog 

Kubernetes cluster on AWS EKS, Part 1: Setup Kubernetes Dashboard with AWS EKS

This is a series on setting up Kubernetes clusters in Amazon EKS.

In this post, we will setup Kubernetes Dashboard on AWS EKS Cluster.


Have Amazon EKS Cluster ready. For more information please visit Getting started with AWS EKS. This set up has been tested on Kubernetes Cluster V1.24

1. Deploy Kubernetes Dashboard

Apply the dashboard using the following-

kubectl apply -f

The output is as follows

namespace/kubernetes-dashboard created serviceaccount/kubernetes-dashboard created
service/kubernetes-dashboard created secret/kubernetes-dashboard-certs created…
Saeloun Blog 

Kubernetes cluster on AWS EKS, Part 3: Setup NGINX Ingress Controller with Cert-Manager on AWS EKS

This is a series on setting up Kubernetes clusters in Amazon EKS.

In this post, we will setup Ingress Nginx Controller on AWS EKS Cluster.

AWS recommends using ALB Controller for EKS Cluster but in our experience we found NGINX to be more useful for the following reasons:

  1. Ingress Nginx Controller is much simpler to setup then compared to ALB Controller
  2. One Network LoadBalancer can be shared between multiple applications
  3. Let’s encrypt SSLs using Cert-Manager are possible. For ALB you have to use Route53.

1. Add HELM Repository

$ helm repo add nginx-stable
$ helm repo update

2. Install the Nginx Controller

helm upgrade --install ingress-nginx…
Saeloun Blog 

Kubernetes cluster on AWS EKS, Part 2: Setup EBS CSI Driver

This is a series on setting up Kubernetes clusters in Amazon EKS.

In this post, we will setup Elastic Block Store on AWS EKS Cluster.

EBS is required for EKS PVC.

1. IAM Policy for EBS

  • Go to Services > IAM on the AWS Web Dashboard
  • Select “Create a Policy”
  • Select the JSON tab and paste it below
  "Version":  "2012-10-17",
  "Statement":  [
      "Effect":  "Allow",  
      "Action":  [  
  • Review the same in Visual Editor
  • Click Review Policy
  • Name: Amazon_EBS_CSI_Driver
  • Click Create Policy

2. Associate with Worker Node IAM Role ARN

Use the following command to obtain the ARN from the aws-auth configmap

kubectl -n kube-system…
RubyGems Blog 

3.4.9 Released

RubyGems 3.4.9 includes enhancements, bug fixes and documentation.

To update to the latest RubyGems you can run:

gem update --system

To install RubyGems by hand see the Download RubyGems page.

## Enhancements:

  • Improve TarHeader#calculate_checksum speed and readability. Pull request #6476 by Maumagnaguagno
  • Added only missing extensions option into pristine command. Pull request #6446 by hsbt
  • Installs bundler 2.4.9 as a default gem.

## Bug fixes:

  • Fix $LOAD_PATH in rake and ext_conf builder. Pull request #6490 by ntkme
  • Fix gem uninstall with --install-dir. Pull request #6481 by deivid-rodriguez

## Documentation:

  • Document our current release policy. Pull request #6450
Akshay's Blog 

Progressive Application Development with Hotwire

Progressive Application Development with Hotwire

If you're a web developer, you must have heard the terms Progressive Enhancement and Progressive Web Apps (PWAs). What about progressively building your web application, introducing advanced techniques only when needed?

I recently listened to an episode of the Full-Stack Radio (Building HEY with Hotwire), where David Heinemeier Hansson talked about progressive web application development using Hotwire:

Start with the absolute simplest. Don't even do Frames, don't even do anything. Do Turbo Drive to start, just build the thing with normal forms, normal everything, and when you run into issues like... this part is reset everytime I add new stuff. What's the smallest thing I could do to fix… 

How GoodJob's mountable Rails Engine delivers Javascript importmaps and frontend assets

GoodJob is a multithreaded, Postgres-based ActiveJob backend for Ruby on Rails.

GoodJob includes a full-featured (though optional) web dashboard to monitor and administer background jobs. The web dashboard is included in the good_job gem as a mountable Rails Engine.

As the maintainer of GoodJob, I want to make gem development easier for myself by innovating as little as possible. That’s why GoodJob builds on top of Active Record and Concurrent::Ruby.

But, the frontend can be a beast. When thinking about how to build a full-featured web dashboard packaged within a Rails Engine within a gem, I had three goals:

  1. Be asset pipeline agnostic with zero dependencies. As of Rails ~7.0, a Rails…
Ruby Central 

February 2023 Monthly Update

Hello! Welcome to the monthly update. During February, our work was supported by Zendesk and many others.

Ruby Central News

In February, Ruby Central's open source work was supported by 35 different companies, including Ruby member Zendesk.

In total, we were supported by 124 developer members. Thanks to all of our members for making everything that we do possible. <3

RubyGems News

This month in RubyGems, we released RubyGems 3.4.7 and Bundler 2.4.7.

The following improvements and fixes are included in these releases (see the changelog for more information):

  • added a --gemfile flag to the bundle init command to configure the gemfile name to be able to generate a custom name - #6046.
  • added a warning…
Ruby Central 

Ruby Central seeks Graphic Designer!

Ruby Central is a non-profit organization dedicated to Ruby support and advocacy of the worldwide Ruby community.

We organize the annual RubyConf and RailsConf software conferences, support community growth, and provide vital infrastructure for the Ruby programming language.

To support our conferences and programs, we're looking to hire a freelance graphic designer! We'd love to have you come work with our small but dedicated team.


  • Create a brand and style guide for each conference
  • Applies to web and print design
  • Style guide includes logo, color palette, typography
  • Support team with social media assets
  • Design and help build the conference web site (Framer)
  • Conference print design…


  • Figma
    Used for early design ideation, collaboration with team, feedback cycles, and production artwork
  • Slack
    For communication and remote-first…
Become a Ruby hero 

How to not get into trouble with Active Record

Active Record is a layer, in the Rails application, that makes database manipulation easier but can also harm your applications performance and reliability if not used properly. This article is a list of good practices that you should follow, and harmful practices that you should avoid.

Improve the performance, produce fewer bugs, and make the code responsible for database communication readable and testable by selecting the right Active Record features for the given scenario.

Messing with one million

All examples included in this article are tested against one million of records in the database. I did this so you can see what is the difference in memory usage and execution time for the…

GoRails Screencasts 

Rails Initialization Internals

In this episode, we will learn about how Rails initializers work internally.
Test Double 

How my experience as an engineer made me a better recruiter

Several years ago, a manager introduced me to the Subreddit “r/recruitinghell/” after we exchanged screenshots of recruiter messages. Many felt generic and were completely off: “Hello Colleen, you’d be the perfect fit for a Senior Software Engineer - Python role my client has available. The role is on-site in downtown Charlotte. Let’s chat!” Okay, maybe they weren’t that bad, but sometimes they sure felt like it. I’d get dozens a week where I felt like the recruiters hadn’t taken the time to look at my profile, I couldn’t get a good sense of what they were looking for, or both. I was only a few years into my career as a Front End Developer, and one thing had become clear to me:…


Using ViewComponents with Turbo

This article is part of my effort to write about some of the real-world development challenges I encountered during the development of my application. In this article, I’ll show how I used a ViewComponent to represent the status of a background job while updating the view using TurboFrames. If you haven’t had a chance to check out ViewComponents, I’d highly recommend you take a lo...
Ruby in Source Diving on Medium 

Debugging Lock Wait Timeouts (in Ruby on Rails)

Photo by FLY:D on Unsplash

Lock Wait Timeouts mean frustration for users. If a request ends with a Lock Wait Timeout error, that means a) we failed to fulfil a user’s intended action, b) there was a long delay before the failure, and c) some other transaction was also slow, potentially meaning another user waited a long time.

I recently learnt — through an investigation that rumbled on for a while — that it’s not always straightforward to work out what’s causing Lock Wait Timeouts. So here, I’m going to share how that investigation unfolded, focusing on the techniques that helped.

First though, what is a Lock Wait Timeout?

Some database transactions¹ need to lock one or more rows in a table. A…

Short Ruby Newsletter 

Short Ruby News - Edition #34

You can jump directly to a section:

👐 Our Community

👉 All about Code and Ruby

🧰 Gems, Libraries, and Updates

🤝 Related (but not Ruby-specific)

More content: 🎥 🎧 🗞 (articles, podcasts, videos, and newsletters)

🤗 Founding Members supporting this newsletter

✋ I am part of the organizing team for Friendly.rb conference:

There are early-bird tickets available and the call for speakers is still open in case you are considering submitting a talk proposal.

👐 Our Community

👐 is part of ShortRuby's effort to aggregate resources about Ruby. You can find there a good collection of books, courses, screencasts, newsletters, podcasts, communities and Youtube channels

If there is a resource that…

Stefan’s Blog 

Rails: Cleanup after a big rewrite - find unused views, Javascript assets, routes, translations, Ruby files

Recently, we had a big refactoring of one of our major Rails apps. In the process, we redid a lot of views, removed part of functionality, and also switched from a hybrid Sprockets+Webpacker to a Vite/Vue3 frontend package. In that kind of process, that will come sooner or later to many long running apps, there is always a lot of stuff, that will be left over. Especially when you are not sure, what views, what assets, what files are still used, it is difficult to decided, what is safe to delete.

Luckily, there are a lot of great tools and recipes to help out. In this post, I want to present a couple of tools that we used.

First: Make sure to have a good test coverage

Without a good…

Tender Lovemaking 

Bitmap Matrix and Undirected Graphs in Ruby

I’ve been working my way through Engineering a Compiler. I really enjoy the book, but one part has you build an interference graph for doing register allocation via graph coloring. An interference graph is an undirected graph, and one way you can represent an undirected graph is with a bitmap matrix.

A bitmap matrix is just a matrix but the values in the matrix can only be 1 or 0. If every node in your graph maps to an index, you can use the bitmap matrix to represent edges in the graph.

I made a bitmap matrix implementation that I like, but I think the code is too trivial to put in a Gem. Here is the code I used:

class BitMatrix
  def initialize size
    @size = size
    size = (size…
RichStone Input Output 

Testing grab bag and smashed brain

Testing grab bag and smashed brain

Recent (positive) events have smashed my brain. As a result, some things need to be modified for the coming month — more on that, most probably next week.

Curious Coders Chronicles

The Chronicles have continued again. Last week we even had two episodes:

  1. API and OAuth Authentication on Rails with @BorjaGVO
  2. Market Yourself as a Developer Part 2

You can subscribe at with your favorite podcast app (if your favorite podcast app is Spotify or Apple Podcast) and get notified about the next episodes coming out. ✅

RailsConf Update

I've booked an AirBnb room for 21/04 - 27/04 near the Plaza (10 min walking distance). The host says it's a "very big apartment and really nice and in a…

Posts on Kevin Murphy 

Programming Guitar Greatness

Anyone Can Play Guitar Series 🔗

  1. Enumerating Musical Notes
  2. Revisiting Calling Sonic Pi From Ruby
  3. Programming Guitar Greatness

I use heavy strings, tune low, play hard, and floor it. Floor it. That’s technical talk.– Stevie Ray Vaughan

Stevie Ray Vaughan is one of my favorite guitarists. Unfortunately, I can’t play anything like he can. To make up for it, let’s teach a computer to play guitar like him and see what we can learn.

Hit play for some background music or inspiration, and let’s get started.

Use Heavy Strings 🔗

Guitars have many strings (typically six) that you manipulate to make different sounds. To build a system to play guitar, it needs to know about strings. To avoid any potential…

Ruby on Rails 

TestFixtures#fixture_path deprecation, FinderMethods#find support for composite primary key values, etc.

Kaixo! Long time no see. Emmanuel Hayford here. This week, a lot happened in Rails, so much so that to keep this edition short, I’ve had to cut some equally good pull requests out. Here’s what I have for you today:

Allow querying by the whole record for composite query constraints Suppose you have defined an association between two models, BlogPost and Comment, with composite query constraints using the has_many method:

class BlogPost   has_many :comments, query_constraints: [:blog_id, :blog_post_id] end

You can now query blog posts that are associated with a specific set of comments by passing the comments objects as a parameter to the where method:

comments =…

Ruby Central 

RailsConf 2023 Members Discount

If you register for RailConf 2023 (April 24-26, 2023 in Atlanta, Georgia USA) use code TOGETHERR23, you'll get a 20% discount on individual tickets! Please do not share this publicly, this is an exclusive offer for paid members of our lovely Ruby Together community.
The RubyMine Blog : Intelligent Ruby and Rails IDE | The JetBrains Blog 

Performance Improvements in RubyMine 2023.1

Hello everybody,

The new release is fast approaching, so it’s time to unveil the performance enhancements you can expect from RubyMine 2023.1.

Faster code completion

When developing and supporting RubyMine, we analyze a great load of anonymized usage data. A lot of recent data pointed to the fact that code completion wasn’t working as fast as we had anticipated. We dug into the code to identify the causes of this slowness and fixed a major performance issue, which allowed us to increase the speed of code completion drastically.

The graphic below shows how code completion has improved with the introduction of our performance fixes – from ~400 ms down to ~162 ms.

Please note that the…

Code with Jason 

Binary search debugging

Diagnosing bugs by guessing

When faced with a bug they have to diagnose, many developers will start making guesses as to what the problem is.

Guessing can be fine, especially when the guesses are good ones and when the guesses are inexpensive to test. But often, the guesses quickly degrade into long shots and the developer spends his or her time flailing around randomly rather than progressing steadily toward a solution.

Diagnosing bugs more methodically

One of my principles of debugging is that it’s almost always easier to determine where the cause of a bug is than what the cause of the bug is. When I need to diagnose a bug, the first thing I ask is not “What is the problem?” but “Where is…

Remote Ruby 

Pagy and Beginner Bounties

On this episode of Remote Ruby, if you’ve never heard of The Cannonball Run, Chris explains what it involves, Andrew is down for it of course, and Jason tells us Vin Diesel recorded a song and Andrew celebrated his birthday!  In the Ruby world,  we’ll find out why the guys are all fans of Pagy, and we’ll hear about a fun hack day project that the talented guys from GoRails built called, Beginner Bounties.  Basically, if you’re a Junior Developer and you need to build your resume and want to stand out, you can use this platform to list small engineering projects for other people and get paid for it. Also, the guys discuss why shipping is such a great skill to have, finding the right…

Hi, we're Arkency 

How to write a good incident postmortem

How to write a good incident postmortem

Sometimes, not everything goes smooth when introducing changes in your application. When it happens, you introduce hotfix as soon as possible, usually followed by the coldfix. Such situations are great to take a learning from.


The postmortem serves a purpose of finding the root cause of an incident, providing insights to the team to make the system more resilient in the future.

It ain’t cheap

It costs time, but you should consider this as an investment. Sometimes it can be hard to find the origin of the problem which occurred in your system. However, fixing the effects of incident without deep understanding of its origin is putting patches…

The Ruby Dispatch 


MRSK was introduced last month and it truly is a game changer. From the announcement:

It sits on top of basic Docker, and harvests all the benefits you get from isolated containers with a sliver of the complexity associated with most other solutions. Instead of sending the deployment pipeline off to servers in the cloud, it runs entirely on your own machine. Just like Capistrano did.

And it appears that the admiration is mutual:

DHH Praise Tweet

Aw, shucks. Makes me want to blush. I suspect that much of the admiration is due to the fact that shares more in common with your local data-center than with most cloud providers. We transmogrify Docker containers into lightweight micro-VMs and run…

Awesome Ruby Newsletter 

💎 Issue 356 - Did you know that a GitHub bug once made every user without a profile picture show Yehuda Katz's photo? (understanding nil and object ids in ruby)

Felipe Vogel 

Parsing text in Ruby, part 1

I made a new Ruby gem: Litter. It’s for avid trash-picker-uppers like me who keep a log of interesting litter that I collect.

(Surely there are other people who do that… *does some googling* See? I’m not alone!)

But I had another reason to make this odd gem: I wanted to explore a more structured approach to text parsing than what I’ve come up with on my own so far. So I used the Parslet gem, and I thought it would be worth writing this post on how it went.

Regular expressions: not…

Shopify Engineering - Shopify Engineering 

Lessons From Linguistics: i18n Best Practices for Front-End Developers

Here are a few internationalization (i18n) best practices to help front-end developers avoid errors and serve more robust text content on multilingual websites and apps.


Ruby Weekly 

Deep dives into Rails routing and WASI

#​645 — March 16, 2023

Read on the Web

Ruby Weekly

Understanding the Rails Router — The routing of requests is a fundamental feature of most webapp frameworks and Rails’ router has become particularly powerful over the years. Akshay digs deep into it here.

Akshay Khot

Awesome Ruby: A Curated List of 900+ Libraries and Tools — Every year or two, we link to this epic, categorized collection of (useful!) Ruby goodies. It continues to be updated frequently with new entries added (like VideoInfo, just today) and you’re encouraged to contribute your own projects too.

Marc Anguera Insa


Ruby Rogues 

Web Hosting and Maintaining - RUBY 586

Dave and Valentino join this week's panelist episode to talk about important points to remember in web hosting. Dave begins by discussing ways to prevent security breaches in your system or data and prevent any ransomware attacks. He shares his own experience on how he maintains his website and the resources he is currently using. 




Honeybadger Developer Blog (Ruby Articles) 

Working With Markdown in Ruby

Imagine that you and your colleagues are working on a cool new project at work. Everyone's churning out code and firing on all cylinders, and everything seems to be going well, but then you remember that documentation also needs to get done for the project.

What do you choose? HTML could work, but it feels a bit clunky having to write all those tags. What about word processors or something like Google Docs? Well, these are fine, but for this project, you'd prefer something that's as close to your code as possible.

Thus, what should you use? A perfect (or near-perfect) documentation tool meets the following criteria:

  • Has simple syntax that most of your team can learn to use and thereby…
Posts on Kevin Murphy 

Speaking at Blue Ridge Ruby

I’m thrilled to be part of the program for Blue Ridge Ruby 2023 in Asheville, North Carolina.

I’ll be speaking about Ruby’s Coverage module. I hope you can join us!

Felipe Vogel 

Parsing a litter log

I made a new Ruby gem: Litter. It’s for avid trash-picker-uppers like me who keep a log of interesting litter that I collect.

(Surely there are other people who do that… *does some googling* See? I’m not alone!)

But I had another reason to make this odd gem: I wanted to explore an approach to text parsing that doesn’t rely so much on regular expressions. So I used the Parslet gem, and I thought it would be worth writing this post on how it went.

Regular expressions: a problem?


Evil Martians, an extraterrestrial product development consultancy 

Cool frontend arts of local-first: storage, sync, conflicts

Authors: Pavel Grinchenko, Frontend Engineer, and Travis Turner, Tech EditorTopics: Frontend, Design, Full Cycle Software Development, Product Launch, CRDT, JavaScript, Lean Software Development

Web applications often require an internet connection, but a fair chunk can also work offline. We show frontend engineers how to gracefully implement the big 3 local-first solutions: storage, synchronization, and conflict resolutions.

Years ago, apps were offline only. Nowadays, they're mostly dependent on internet connections, but some allow you to work offline. When developing a “local-first” app, even if it relies on data stored online, it should still work. But, for frontend engineers, when it…

Ruby Magic by AppSignal 

A Generalized User-local Container for UI State in Kredis

In our last post, we persisted and restored a collapsed/expanded UI state with Kredis. However, the great pain point with this is that we have to invent a lot of Kredis keys.

This time, we'll see how we can avoid this by developing a generalized solution for any DOM node whose attribute states we want to track on the server side.

Let's dive straight in!

The Challenge

Remember that we had to concoct a Kredis set key (open_department_ids) on the user model in the previous post. Now, following our example, imagine a user might be associated to the products they bought via has_many. Assume that each of these products has a details page which also has some ephemeral state attached.

All of a…

Test Double 

Which D&D character class makes the best software consultant?

Classes, classes everywhere, but not a single one will do

As a Double Agent at Test Double, I am surrounded by people who are excellent software consultants and enjoy playing Dungeons and Dragons™ (D&D). One late evening, while thinking about running a game for my colleagues, my mind began to wander.

I started to imagine what kind of D&D character class would make the best software consultant. I flipped through my mental catalog of character classes and the pros and cons for each as a software consultant.

First, I eliminated some obvious classes…


Who wants someone who will wait till you’re not looking, stab you in the back, and then take your gold?


Someone who is…

The Ruby on Rails Podcast 

Episode 461: ccyalater and Merge Conflict Hit the Track! (with Colleen Leonard)

Colleen Leonard has been working in tech since 2015, first as a Front-End Developer and then as a recruiter. She is currently a Technical Recruiter at Test Double. She joins Brittany to chat technical recruitment in Part 1 and then roller derby in Part 2. Let's roll.

Show Notes & Links:

You can follow Colleen on the following platforms:

You can follow Test Double on the following platforms:
Read the latest at

Sponsored By:




CVE-2023-27539 (rack): Possible Denial of Service Vulnerability in Rack’s header parsing

There is a denial of service vulnerability in the header parsing component of Rack. This vulnerability has been assigned the CVE identifier CVE-2023-27539. Versions Affected: >= 2.0.0 Not affected: None. Fixed Versions:, # Impact Carefully crafted input can cause header parsing in Rack to take an unexpected amount of time, possibly resulting in a denial of service attack vector. Any applications that parse headers using Rack (virtually all Rails applications) are impacted. # Workarounds Setting Regexp.timeout in Ruby 3.2 is a possible workaround.

CVE-2023-28120 (activesupport): Possible XSS Security Vulnerability in SafeBuffer#bytesplice

There is a vulnerability in ActiveSupport if the new bytesplice method is called on a SafeBuffer with untrusted user input. This vulnerability has been assigned the CVE identifier CVE-2023-28120. Versions Affected: All. Not affected: None Fixed Versions:, # Impact ActiveSupport uses the SafeBuffer string subclass to tag strings as html_safe after they have been sanitized. When these strings are mutated, the tag is should be removed to mark them as no longer being html_safe. Ruby 3.2 introduced a new bytesplice method which ActiveSupport did not yet understand to be a mutation. Users on older versions of Ruby are likely unaffected. All users running an affected release…
Closer to Code 

Kafka topics as code – declarative Kafka topics management in Ruby

Kafka topics are a fundamental concept in Apache Kafka. Topics are logical names or labels representing a stream of messages that Kafka clients can produce and consume.

What makes them interesting is the variety of settings that can be applied to them. These settings, amongst others include:

  • Partition count: The number of partitions that a topic should be split into.
  • Replication factor: The number of replicas that should be maintained for each partition.
  • Retention period: The time that messages should be retained in the topic.
  • Minimum and maximum in-sync replicas: The minimum number of replicas that must be in sync before a producer can receive acknowledgment for a write operation.
  • Cleanup…

When looking from a management perspective, topics are similar to database tables. They have names, a set of settings that apply to them, and their constraints. And on top of all of that, they need to be managed.

Declarative topics management

The management approach that I like and support in Karafka is called Declarative…

Fullstack Ruby 

Episode 9: Preact Signals and the Signalize Gem

What are signals? What is find-grained reactivity? Why is everyone talking about them on the frontend these days? And what, if anything, can we apply from our newfound knowledge of signals to backend programming? Is it possible to use signals in Ruby? (Yes!) Learn all about signals, the Preact Signals library, and the new Signalize gem right here in the latest episode of Fullstack Ruby.


Become a part of the Fullstack Ruby community and learn how to put your Ruby skills to work on the backend AND the frontend. Know…

BigBinary Blog 

Running React Native dependent animations on UI thread using Reanimated


Here we have a slider. When user slides the slider then the loader needs to showhow much is loaded. We want to animate the loader component when the slidermoves. In other words the loader animation is "dependent" on the slideranimation.

This is an example of Dependent Animations on the UI thread. DependentAnimation is when one view is animated based on some another element.

first we need a gesture handler to detect the slider events. Then based on theslider events we need to animate the progress of loader component.

Building gesture handler to detect the slider events

const [width, setWidth] = useState(200);const x = useSharedValue(0);const gestureHandler = useAnimatedGestureHandler({  onStart:…
BigBinary Blog 

Redirecting URL using cloudflare redirect rules

At BigBinary we had been using AceInvoice as our time tracking and invoicingtool for years. Last year we migrated all the data toneetoInvoice.

All this time the website of AceInvoice was not redirecting to neetoInvoice.Today we did that using Cloudflare. The URL forwardingor redirecting withpage ruleis a neat feature of Cloudflare. Below are the screenshots of the steps taken toredirect the urls. More details are covered in the video.

Handling www version

WWW version

Handling no www version

No WWW version

<iframewidth="560"height="315"src=""title="YouTube video player"frameborder="0"allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope;…

Shopify Engineering - Shopify Engineering 

Tophat: Crafting a Delightful Mobile Developer Experience

Shopify created tooling that provides a seamless and interactive manual testing experience (aka tophatting) to contributors. We built a desktop macOS application called “Tophat” that lives in the system menu bar.


Test Double 

How to tell if AI threatens YOUR job

As a young lad, I developed a habit of responding to the enthusiasm of others with fear, skepticism, and judgment.

While it never made me very fun at parties, my hypercritical reflex has been rewarded with the sweet satisfaction of being able to say “I told you so” more often than not. Everyone brings a default disposition to the table, and for me that includes a deep suspicion of hope and optimism as irrational exuberance.

But there’s one trend people are excited about that—try as I might—I’m having a hard time passing off as mere hype: generative AI.

The more excited someone is by the prospect of AI making their job easier, the more they should be worried.

There’s little…

The Bike Shed 

375: Deleting Code

thoughtbot had an in-person Summit in the UK! Joël recalls highlights. Stephanie is loving daily sync meetings on a new project.

The idea of deleting code has been swimming around in Stephanie's brain recently because she's been feeling nervous about it. Together, Joël and Stephanie explore ways of gaining confidence to delete code while feeling good about it.

This episode is brought to you by Airbrake. Visit Frictionless error monitoring and performance insight for your app stack.


STEPHANIE: Hello and welcome to another episode of The Bike…

Giant Robots Smashing Into Other Giant Robots 

A journey towards better testing practices

Tests have always been part of my journey with Ruby and Rails. We benefit from a great ecosystem and community, implicated in writing maintainable software. Along the way I have learned good practices, anti-patterns and trade-offs, and I keep learning new practices and tips every day.

When I peek at old code snippets, such as the ones I wrote a few years back, I can’t help but notice how much my tests have evolved, practices I now try to keep away from and goals I work to reach.

Join me in a small journey from anti-patterns to good practices.

Moving away from RSpec DSL

I used to try to use as much RSpec features as possible, thinking these features must be useful to my work…

Ruby on Rails 

Rails and have been released!

With apologies to those starting daylight savings time this week, we are pleased to announce the release of Rails and These two security release include fixes for two potential XSS vulnerabilities.

While these vulnerabilities are not considered high-risk, we still recommend that all Rails users upgrade to this latest version as soon as possible.

Once again the 6.0 series now only receives updates for serious vulnerabilities. We’d encourage users on that release to upgrade to a fully supported version.

Below are the shas for the released versions:

$ shasum *-*
ad394e33d5d5c7448ad9a370929f8aa310ad1479 …
Sandip Mane 

Schedule unique jobs in Sidekiq

In one of the projects I work, there was a requirement to schedule only one job for a record at a time. If someone wants to schedule another one for the same record, the system should clear the old schedule for it and schedule the new one.

To do this, we are going to add some helpers to app/workers/base_worker.rb using Sidekiq API.

Be careful with the following method when dealing with 10,000+ jobs, you could look at Sidekiq Pro for efficiency.

Add the following helper

This helper deletes the jobs from sheduled set that match with the worker name and the arguments. Tweak the following helper as per the requirements to optimize the performance.

def self.delete_matched(worker_name, argume…
Short Ruby Newsletter 

Short Ruby News - Edition #33

Short Ruby Newsletter 

Short Ruby News - Edition #33

You can jump directly to a section:

👐 Our Community

👉 All about Code and Ruby

🧰 Gems, Libraries, and Updates

🤝 Related (but not Ruby-specific)

More content: 🎥 🎧 🗞 (articles, podcasts, videos, and newsletters)

🤗 Founding Members supporting this newsletter

✋ I am helping organize the Friendly.rb conference:

There are still a few (but not so many) early-bird tickets available and of course, the call for speakers is still open in case you are considering submitting a talk proposal.

👐 Our Community

📢 Proud to announce that ShortRuby is growing bigger: is now becoming part of ShortRuby. Read more in the announcement I published 👇

Short Ruby Newsletter
First step toward more ShortRuby

👐 James Adam asked for…

Short Ruby Newsletter 

First step toward more ShortRuby

I am excited to announce that is now part of ShortRuby.

Leonid was kind enough to transfer my ownership of in exchange for only supporting the expenses he has made for the website so far. So I think I put some part the money that I received so far from people that decided to upgrade to paid to good use.

The reason why I wanted to get that website is that I anyhow was thinking of building somewhere a collection of resources that I encountered every time I do a new edition of the newsletter: books, courses, videos, newsletters, and, more important the people that are sharing all those fantastic stuff.

Vision and some plans

Please take the following ideas more…

Andy Croll 

Assign a default value to an attribute in Active Record

If you ever needed to set a default value in an instance of an Active Record model, you probably used a callback.

Since Rails 5.0 there’s been a better way. I had missed it until recently! (Thanks Moses!)

Instead of…

…assigning a default value in a callback:

class Message
  before_validation :assign_delivered_at

  # ...


  def assign_delivered_at
    delivered_at ||=


…the Attribute API from Active Record:

class Message
  attribute :delivered_at, default: -> { }

  # ...


Callbacks can be confusing to understand even when there’s a good reason to use them. Generally, the less you use them the fewer surprises you’ll… 

Recently, March 12, 2023

  • Work has been complicated, recently. Layoffs, as a general idea, were announced a month ago; it was the same week I came down with a bad cold. I’ve been fairly low energy since and have had trouble differentiating the two. I’m supremely proud and confident that my team is doing the most important work possible. We’ll see!
  • The week prior to all of this, my dad came to visit and stay with us. Having an easier time hosting family was one of our goals in getting a 2nd bedroom. Success.
  • Wow, it’s nearly been a year since I left my last job. I’ve had a number of former colleagues asking for help in leaving, in addition to talking with folks being pushed out: I was surprised to see Code for…
RichStone Input Output 

Coming projects - Known unknowns

Coming projects - Known unknowns

I planned to spend less time on, but you know how life is. In, I have an admin user. An actual human who uses the admin part of the app. They uploaded images they created in the UX hell of an admin area.

  • I did not have a namespace for admin (PegsController etc.), which was utterly insecure.
  • The app is in production and visited by some lost souls.
  • I did not have a monitoring tool enabled, which I preach to do once you hit production.

So the admin kickstarted the whole chain of tackling needed changes 🧨

And I spent one whole weekend morning fixing the UI, refactoring, and noting down some learnings 💣

But it wouldn't be a side project if you wouldn't know that there…

RichStone Input Output 

Roadmap to roast Toptal with Ruby

Roadmap to roast Toptal with Ruby

Beating Toptal's coding challenge is similar to passing a coding challenge at a FANG interview, from what I've researched.

If you are a total coding challenge sausage like me, you will probably face about 3 stages that have their weight on different aspects of the whole process of preparation:

(I'll skip step 0 which is something like confusion about life that I explain in the project kickstart post)

  1. create a routine and learn solving coding challenges
  2. solve a lot of coding challenges
  3. final spurt to solve the final boss coding challenge
This project is on hold because I was accepted as a speaker at this year's RailsConf 2023 in Atlanta. I need to focus on it full steam 🚂

To be continued in May…
RichStone Input Output 

Coding Challenge Sausage Goes Toptal with Ruby

Coding Challenge Sausage Goes Toptal with Ruby

I became a developer freelancer for the first time four years ago. After getting my profile up to Upwork and codementor, I thought it would be easy to get to Toptal. The first soft skills interview round went great. The second round was the end of my dreams.

This project is on hold because I was accepted as a speaker at this year's RailsConf 2023 in Atlanta. I need to focus on it full steam 🚂

To be continued in May 2023 🔮

I never fully have gotten over it. Did this mean I am not in the top 3% of developers?

Even worse, I was not even in the top 7.4% of developers:

Coding Challenge Sausage Goes Toptal with Ruby

At least I was in the top 26.4% of all freelance developers 💪 But I still have more potential, right?

However, getting back to…

Akshay's Blog 

Understanding the Rails Router: Why, What, and How

Understanding the Rails Router: Why, What, and How

Do you ever get the feeling that you know a topic is important and that you should know well, but you only understand it superficially? Ever since I got into Rails, I've had that feeling with the Rails router.

Transitioning from ASP.NET, I knew the concept of routing and got comfortable with the router after reading the docs. However, at the back of my mind, I've always had that nagging feeling that I don't REALLY understand the complete picture. I could make the basic routes and resources to get by for the simple CRUD tasks, but whenever I wanted to do something complicated, I found myself fumbling in dark.

Well, after over a year of fumbling and trying to skim the docs and StackOverflow…

RichStone Input Output 

Your Road To a Top Developer Contract

WTF is a top developer contract!?
Your Road To a Top Developer Contract

A top contract is relative to each one's situation and current preferences. Depending on where you are and what your goals are, your dream contract can vary in the following elements:

  • hours
  • salary
  • team
  • meaningful work
  • skill-based work
  • product
  • workplace environment
  • location
  • support
  • tech stack

As a junior, you might get an offer for a high-end junior salary from a start-up, but if you don't get any pair programming time and tech support, you might instead opt for a cozy learn-all-day company with great mentors 🛋️

As a mid, you might want to deepen your infrastructure tech stack and work with the best teams, even if that means moving to a full-time on-site gig in Nebraska…

RichStone Input Output 

Motivation and Plan for a Top Developer Contract

WTF is a top developer contract!? A top contract is relative to each one's situation and current preferences. Depending on where you are and what your goals are, your dream contract can vary in the following elements...
RubyGems Blog 

February 2023 RubyGems Updates

Welcome to the RubyGems monthly update! As part of our efforts at Ruby Central, we publish a recap of the work that we’ve done the previous month. Read on to find out what updates were made to RubyGems and in February.

RubyGems News

This month in RubyGems, we released RubyGems 3.4.7 and Bundler 2.4.7.

The following improvements and fixes are included in these releases (see the changelog for more information):

  • added a --gemfile flag to the bundle init command to configure the gemfile name to be able to generate a custom name - #6046.
  • added a warning on self-referencing gemspec dependencies - #6335.
  • fixed inconsistent behavior of zero-byte files in one of the archives…
Evil Martians, an extraterrestrial product development consultancy 

“Design first, then build”: let’s bury this myth forevermore

Authors: Roman Shamin, Head of Design, and Travis Turner, Tech EditorTopics: Design, Frontend, Product Launch, Lean Software Development

Waiting to build your mobile or web app after all the mockups and designs are complete is an increasingly obsolete model. Let’s present an alternative that we've used to great success.

Since, seemingly, the beginning of the time, pretty much every startup founder has adhered to an enduring cliche of product development: waiting to build their new mobile or web app after all the mockups are ready. Bottom line: this is wrong. My team has a much more productive method we’ve successfully used for years, helping clients spend less and get to market faster. And…

Shopify Engineering - Shopify Engineering 

Unlocking Real-time Predictions with Shopify's Machine Learning Platform

Ruby on Rails 

This Week in Rails: Improve custom namespace autoloading, Object#with and more!

Hi, this is Greg, bringing you the latest changes in the Rails codebase.

Lockdown rails app in production for security
Current Dockerfile generated by Rails runs as a non-root user which prevents modification of the operating system but leaves wide open all gems and the application itself. This change locks down the application gems and only opens up access to the following directories: db, log, storage, tmp.

Improve support for custom namespaces
This patch improves support for custom root namespaces, and consolidates a direction in the design of the integration of Zeitwerk in Rails. There is a great explanation of the why on how on the pull request.

Add class name to…

Remote Ruby 

Ruby Language Server with Vinicius Stock

On this episode of Remote Ruby, Chris came down with what he thinks was food poisoning this week, Jason brings up Ghost Kitchens which seem to be a thing these days, and Chris applied to be a Guide at RailsConf 2023. Also, Jason and Chris are excited to have a guest joining them because they’ve always talked about how they wished for better tooling for day-to-day Ruby development, so they brought on Vini Stock, who’s a Senior Developer at Shopify. Shopify has created the Ruby Language Server (LSP) to make it easier to implement features such as code definition and auto formatting for Ruby across different editors. We’re so lucky to have Vini with us to discuss the Ruby LSP and some…

Giant Robots Smashing Into Other Giant Robots 

Stubbles - Stubbing and Doubles innit. 🧔

As you start to get more familiar with automated testing, at some point you will likely hear other developers say things like:

“You know you can just stub that method, right?”

“This is a great candidate for a double!”

And at the beginning these things can be confusing to understand. 😕

So let’s start by defining each term, followed by their practical use, in specific relation to rspec within a rails project.

Definitions 📖

One of the tricky things I have seen when these concepts are defined is that they are often defined within the context of testing.

For me, that just adds a layer of complexity.

It is true that these concepts are often used within the context of testing,…

All talk but no code 

Translating XML/Epub using DeepL & ChatGPT

I developed two ruby gems last year:

Originally they started out as one simple script to call DeepL API. However gradually my use cases grew, and the script became very unmaintainable, with lots of duplicated code and similar method names. I needed something flexible, so I restarted from scratch.

My goal was to make it very customizable to the user:

  • Swappable components:
    • translation engine
    • plugin, e.g. glossary substitution
  • Configuration of components at different level:
    • Static config which is reusable
    • Overridable at call time
  • User friendly

A typical UNIX…

Hanami Mastery newest episodes! 

#43 Connect your ruby app with google drive.

In the world of amazing technology pace, integrations between services are the key to success and the same applies to ruby projects. In this episode, we integrate our Hanami application with Google drive.
Awesome Ruby Newsletter 

💎 Issue 355 - RailsCasts Retrospective Part 1: The Fuel

The Ruby Dispatch 

Little Gestures of Confidence Make Our Tools & Community Better

The world is a much better place when we say "please" and "thanks" as we go about our daily lives. The same should be true for the tools, frameworks, documentation, and code we use in Ruby—and a little effort can go a really long way to build confidence in people who are just getting started.

Rails is the 500lb gorilla in the Ruby world, so lets pick it on for a second. As of Rails 7.0, here's what people see when they run rails new on their command line.

$ rails new hello-rails
Ignoring rbs-2.8.2 because its extensions are not built. Try: gem pristine rbs --version 2.8.2
      create  Rakefile
# ... A bunch of stuff happens here ...
Ryan Bigg's Blog 

Open Letter to the Rails Foundation

I sent this email to Amanda at the Rails Foundation this morning.

Hello, my name is Ryan and I run the Gem Foundation:

(Just quietly between you and me, id rather you answer this email than David. We’ve got… history.)

I’ve also written several books on Ruby, including the same Rails book 3, almost 4 times: Rails 3 in Action, Rails 4 in Action and Active Rails 1st and 2nd editions. Oh and I wrote a bunch of the Rails guides too. And contributed enough on Rails answers on Stack Overflow to earn me 100k rep, as well as a cool SO T-shirt and socks. I also took over the #rubyonrails IRC channel there for a time.

Point is: I have written…

Engineering Blog 

Smart Maintenance Conversational AI

If you’re a property manager or a landlord responsible for a portfolio of properties, you know the importance of providing high-quality, prompt maintenance service to your tenants. Maintenance issues - if not dealt with in a timely manner - can affect tenant satisfaction, tenant retention, and ultimately your company’s revenue.

Here we will show how AppFolio’s Smart Maintenance simplifies the maintenance process, helping tenants resolve their maintenance requests conveniently and efficiently. To demonstrate how tenants report maintenance issues using Smart Maintenance, let’s take a look at a hypothetical scenario involving Sandy, a tenant who discovers a clogged drain when doing the dishes…

Ruby Weekly 

RubyGems' answer to npx

#​644 — March 9, 2023

Read on the Web

Ruby Weekly

RJIT: A Pure Ruby JIT Solution — A mixed bag of results performance wise, but seeing a core Ruby team member take another approach to JIT is always exciting. This (merged) PR has many benchmarks where RJIT outperforms MJIT across the board and the Rust-based (and already production ready) YJIT in some cases. Seems like Ruby is still getting JITty with it…

Takashi Kokubun

If you want to learn about this stuff from basics, Aaron 'tenderlove' Patterson gave a talk at RubyConf 2021 about ▶️ how JIT compilers work and making one for Ruby. He also stepped in on Hacker…

Ruby Rogues 

Developing Video Games with Ruby and DragonRuby - RUBY 585

Brett Chalupa is a hobbyist game maker, creative dabbler, and professional software developer. He joins the show alongside the Rogues to talk about creating video games. He dives into how he got started with DragonRuby, the games he created, and his experience as a game developer. Moreover, he talks about his book, " Building Games with DragonRuby".





Honeybadger Developer Blog (Ruby Articles) 

How to Create Notifications in Laravel

When building applications, notifications are essential because they improve user experience and interaction. It would be helpful if you frequently alerted users to various changes or activities while they use applications. It can involve sending an SMS about their login activity for security purposes or email notifications when an order status changes. Often, these notifications only offer a brief explanation of the state changes. Laravel supports several delivery channels for sending notifications, including emails, SMS, and Slack. Additionally, notifications may be kept in a database and displayed on your Web interface. Here are a few things you'll learn in this guide:

  • What are…
Gusto Engineering - Medium 

Testing in Android With Robolectric

When I first started working on Gusto’s Android app, I was surprised by the Android community’s consensus that testing is hard. Or that tests are too slow. Or that it simply isn’t worth testing the UX or visual components. Many signs point to the emulator as the cause of this testing pain.

By default, unit tests only have access to the Android SDK API without an underlying implementation. Typically, the emulator or device itself would provide this underlying implementation, but in unit tests, we don’t have access to either. Roboelectric solves this by providing an API-compatible implementation of the Android SDK, allowing us to write fast and efficient tests, without an emulator, that run in… News 

JRuby Released

The JRuby community is pleased to announce the release of JRuby

JRuby 9.4.x targets Ruby 3.1 compatibility.

Thank you to our contributors this release, you help keep JRuby moving forward! @k77ch7, @andsel

Ruby Compatibility

  • __callee__ now properly returns the name under which a method was called, which will be the new name in the case of aliased methods. #2305, #7702
  • More use cases for keyword arguments have been fixed to behave correctly and avoid extraneous warnings. #7637, #7645, #7657, #7658, #7670, #7672, #7686
  • Array#pack now supports more cases, passing nearly all specs. #7663
  • Compat…

Standard Library

  • irb is updated to 1.4.2. #7690, #7691
  • open-uri is updated to 0.3.0. #7701
  • io-wait is updated to 0.3.0. #7701
  • stringio is updated to 3.0.5. #7701
  • strscan is updated to 3.0.6. #7701
  • open3 is switched to using the gem at 0.1.2. #…

Platform Support

  • Exception backtraces now default to color output when the controlling terminal is a TTY. Disable using -Xbacktrace.color=false or equivalent in…


The Amazing Blog 

Rails File Naming Conventions

Rails File Naming Conventions

One of the best things about Rails, that it gets right over so many other frameworks like React, is its Directory Naming Conventions. You can jump into any Rails app written in the last 15 years and no immediately where to go to start exploring. Where's the routes? Database Models? Controllers and Views? Every app keeps them in the same place, so once you learn it, you can easily transfer that knowledge to another project.

That's for types of objects that come with Rails though (Models, Controllers, Jobs, etc...). Modern best-practices have a variety of extra Service Objects like Queries, Adapters, Commands, and more. Where do you put those? Unfortunately,…

RubyGems Blog 

3.4.8 Released

RubyGems 3.4.8 includes enhancements, bug fixes and documentation.

To update to the latest RubyGems you can run:

gem update --system

To install RubyGems by hand see the Download RubyGems page.

## Enhancements:

  • Add TarReader::Entry#seek to seek within the tar file entry. Pull request #6390 by martinemde
  • Avoid calling String#dup in Gem::Version#marshal_dump. Pull request #6438 by segiddins
  • Remove hardcoded “master” branch references. Pull request #6425 by deivid-rodriguez
  • [Experimental] Add gem exec command to run executables from gems that may or may not be installed. Pull request #6309 by segiddins
  • Installs bundler 2.4.8 as a default gem.

## Bug fixes:

  • Fix…
The Ruby on Rails Podcast 

Episode 460: The State of Rails Hiring in 2023 (Brittany + Brian)

In 2022, Rails Hiring is Still Hot was our most listened to episode! By popular demand, Brian is back to give us the state of the Ruby on Rails hiring market for 2023. Brittany and Brian discuss his clients, advice for those who have a job and advice for those who are seeking a role in this weird market.

Show Notes & Links:

Sponsored By:


Status Pages now come with incident management! Build confidence with a public status page that shows your live service status, incident history, and more—and bring your own domain! Transparency inspires trust—when your next outage happens, communication…


CVE-2023-27530 (rack): Possible DoS Vulnerability in Multipart MIME parsing

There is a possible DoS vulnerability in the Multipart MIME parsing code in Rack. This vulnerability has been assigned the CVE identifier CVE-2023-27530. Versions Affected: All. Not affected: None Fixed Versions:,,, # Impact The Multipart MIME parsing code in Rack limits the number of file parts, but does not limit the total number of parts that can be uploaded. Carefully crafted requests can abuse this and cause multipart parsing to take longer than expected. All users running an affected release should either upgrade or use one of the workarounds immediately. # Workarounds A proxy can be configured to limit the POST body size which will mitigate this…
Prathamesh Sonpatki 



I have started a project for maintaining glossary of all terms and definitions related to Observability.

It is called

The GitHub repo can be found here

The contents are available at

This is an open source project aimed at beginners like me who don’t know a lot of observability and reliability. The idea is to learn about these terms and note them down at one place, so others can benefit from it.

Here are few next set of terms that can be added --

  • MTTR
  • MTTD
  • MTBI
  • Incident
  • Alert
  • Metric
  • Samples
  • Cardinality
  • Log
  • Span
  • Event
  • Exceptions
  • Serverless
  • SRE
  • Platform engineering
  • PromQL
  • Service Discovery

I am looking for help while making this project…

Hanami Mastery newest episodes! 

#42 Best way to work with Front Matter in Ruby!

If you want to work with front_matter in Ruby, you need to know the front_matter_parser gem. Here is everything you need.
Julia Evans 

Some possible reasons for 8-bit bytes

I’ve been working on a zine about how computers represent thing in binary, and one question I’ve gotten a few times is – why does the x86 architecture use 8-bit bytes? Why not some other size?

With any question like this, I think there are two options:

  1. It’s a historical accident, another size (like 4 or 6 or 16 bits) would work just as well
  2. 8 bits is objectively the Best Option for some reason, even if history had played out differently we would still use 8-bit bytes
  3. some mix of 1 & 2

I’m not super into computer history (I like to use computers a lot more than I like reading about them), but I am always curious if there’s an essential reason for why a computer thing is the way it is…

Rails, PostgreSQL Performance Audit and Tuning Consultant for Hire 

How to Find, Debug and Fix N+1 Queries in Rails

Fixing N+1 issues is often the lowest-hanging fruit in optimizing a Rails app performance. However, for non-trivial cases choosing a correct fix could be challenging. Incorrectly applied eager loading does not work or even worsens response times. In this blog post, I describe tools and techniques I use to simplify resolving N+1 issues.

How to simulate N+1 issues in development

I doubt the Rails blogosphere needs yet another introduction to N+1 queries. You can check out my previous post for a quick recap.

Instead, let’s discuss how to establish a repeatable routine for spotting N+1 issues before they start manifesting in production. It’s common for developers to work with a minimal local…

The Bike Shed 

374: Discrete Math

Joël is joined by a very special guest, Sara Jackson, a fellow Software Developer at thoughtbot.

A few episodes ago, Stephanie and Joël talked about "The Fundamentals" and how many of the fundamentals of web development line up with a Computer Science degree. Joël made a comment during that episode that his pick for the most underrated CS class that he thinks would benefit most devs is a class called
"Discrete Math." Sara weighs in!

This episode is brought to you by Airbrake. Visit Frictionless error monitoring and performance insight for your app stack.


thoughtbot is thrilled to announce our own incubator…

BigBinary Blog 

How to use JWT to secure your GitHub OAuth callback endpoint

JSON Web Tokens (JWTs) have become a popular way to manage user authenticationand authorization. In this blog, we will explore how to use JWTs in the GitHubOAuth process, including how to encode additional parameters in the JWT toimprove the security and functionality of your GitHub OAuth integration. Let'sstart by looking into what OAuth is.

OAuth 2.0

OAuth 2.0 is an authorization framework that enables an application to accessdata from a server on behalf of a user. For example, OAuth enables applicationsto access data from Google, Facebook, GitHub, etc., on behalf of users havingaccounts in that service.

Let's say you have an application that requires access to a user's data onGitHub. The…

The RubyMine Blog : Intelligent Ruby and Rails IDE | The JetBrains Blog 

RubyMine 2023.1 Beta Is Out!

You can now download and test RubyMine 2023.1 Beta. In this build, you can find and test a range of new features. Please try it out and share your feedback in the comments or by using our issue tracker.

New UI updates

Our team has been working on enhancing the user interface, and we’ve made several improvements in the latest build. We encourage you to continue providing feedback so we can keep refining the new UI.

In the current EAP build, you’ll notice the following UI updates:

Revamped Run widget

We’ve given the Run widget, located at the top of the IDE window, a complete overhaul. The icons are now green, making for a more subdued and visually pleasing appearance, as…

The Ruby Dispatch 


You've been a model developer. You've placed your source code under version control and posted it to GitHub. You've got a suite of tests, and they run green. You've deployed your software to production.

That's a lot of work. You deserve a break. Let's automate these tasks. The goal is to only deploy changes that pass the tests that you have defined. The good news is that GitHub actions makes this easy.

To get started, place the following in .github/workflows/ci-cd.yml:

name: CI_CD
on: [push, pull_request]
    runs-on: ubuntu-latest
    - uses: actions/checkout@v3
    - uses: ruby/setup-ruby@v1
        bundler-cache: true
    - run: rake test:all
Test Double 

How we support Double Agents with onboarding buddies

In 2021, as Test Double celebrated its tenth anniversary, we found ourselves asking: “How do we maintain a collegial, collaborative culture and cut down on tacit knowledge during rapid growth in a 100% remote organization?”

Test Double has been completely remote since we started in 2011. There are a lot of things that we do right as an organization to make that possible (and encourage others to do those things too!). And being 100% remote works really well for our folks for a variety of reasons. We’ve been growing pretty quickly, aiming to expand our impact towards helping improve how the world builds software. We recently fielded an Onboarding Buddy program to ‘pass the torch’ by…

Short Ruby Newsletter 

Short Ruby News - Edition #32

Short Ruby Newsletter 

Short Ruby News - Edition #32

You can jump directly to a section:

👐 Our Community

👉 All about Code and Ruby

🧰 Gems, Libraries, and Updates

🤝 Related (but not Ruby-specific)

More content: 🎥 🎧 🗞 (articles, podcasts, videos, and newsletters)

🤗 Founding Members supporting this newsletter

✋ I am helping organise the Friendly.rb conference:

There are still few (but not so many) early-bird tickets available and of course the call for speakers is still open in case you are thinking to submit a talk proposal.

👐 Our Community

👐 📢 I am launching a new section in this newsletter called Community. The main purpose of this section is to publish content related to this newsletter or to have calm conversations about important topics about the…