Sign in

Graceful.Dev

@graceful.dev
157 followers 1 following 137 posts

A garden of courses to deepen and mature your coding practice, lovingly tended by @avdi.codes & friends. graceful.dev

PostsRepliesMedia
Graceful.Dev @graceful.dev · 29/09/2026
Today we learn about Ruby gem that makes it easier to build immutable value objects. graceful.dev/courses/tapastry/modul…
graceful.dev
Adamantium
Today we learn about Ruby gem that makes it easier to build immutable value objects.
000
Graceful.Dev @graceful.dev · 22/09/2026
In which Jessitron and Avdi admit that nobody — themselves included — is ever fully caught up on the AI news cycle, and dig into why an email can smell like Claude wrote it before you’ve even finished the first line. graceful.dev/podcast/its-called-eti…
graceful.dev
It's called etiquette, and we don't have it yet.
In which Jessitron and Avdi admit that nobody — themselves included — is ever fully caught up on the AI news cycle, and dig into why an email can smell like
000
Graceful.Dev @graceful.dev · 22/09/2026
In episode 205 we introduced the spaceship () operator, but we also introduced an incompatibility with how Ruby's builtin comparisons work. Today we'll address this oversight. graceful.dev/courses/tapastry/modul…
graceful.dev
Spaceship Revisited
In episode 205 we introduced the spaceship () operator, but we also introduced an incompatibility with how Ruby's builtin comparisons work. Today we'll address this oversight.
000
Graceful.Dev @graceful.dev · 15/09/2026
Today, a story about a refactoring that went south, and turned out not to be a refactoring at all. graceful.dev/courses/tapastry/modul…
graceful.dev
Redesign
Today, a story about a refactoring that went south, and turned out not to be a refactoring at all.
000
Graceful.Dev @graceful.dev · 08/09/2026
In today's episode, we explore a practical application of the famous "tell, don't ask" principle. graceful.dev/courses/tapastry/modul…
graceful.dev
Tell, Don’t Ask
In today's episode, we explore a practical application of the famous "tell, don't ask" principle.
000
Graceful.Dev @graceful.dev · 01/09/2026
Today we look at Ruby's grep method, and explore the idea of matching objects by example. graceful.dev/courses/tapastry/modul…
graceful.dev
Grep
Today we look at Ruby's grep method, and explore the idea of matching objects by example.
020
Graceful.Dev @graceful.dev · 25/08/2026
Today we puzzle through a design problem that threatens to result in dozens of extra methods.  graceful.dev/courses/tapastry/modul…
graceful.dev
Conversion Ratio
Today we puzzle through a design problem that threatens to result in dozens of extra methods. 
000
Graceful.Dev @graceful.dev · 18/08/2026
Today's topic is "conversion protocols", an extensible way to enable safe, automatic conversions between types. graceful.dev/courses/tapastry/modul…
graceful.dev
Conversion Protocol
Today's topic is "conversion protocols", an extensible way to enable safe, automatic conversions between types.
010
Graceful.Dev @graceful.dev · 11/08/2026
Today's episode deals with a small matter of style, one that can have an impact on how easy it is to refactor code. graceful.dev/courses/tapastry/modul…
graceful.dev
More Of Same
Today's episode deals with a small matter of style, one that can have an impact on how easy it is to refactor code.
000
Graceful.Dev @graceful.dev · 04/08/2026
The distinction between "public" and "private" method visibility in Ruby is pretty obvious. But when should we use "protected" visibility? This episode attempts to answer that question. graceful.dev/courses/tapastry/modul…
graceful.dev
Protected
The distinction between "public" and "private" method visibility in Ruby is pretty obvious. But when should we use "protected" visibility? This episode attempts to answer that question.
000
Graceful.Dev @graceful.dev · 28/07/2026
Have you ever wondered why Ruby has both #to_i and #to_int methods? Or both #to_a and #to_ary? In today's episode we'll answer this question, and look at how we can use implicit conversion methods to our advant graceful.dev/courses/tapastry/modul…
graceful.dev
Implicit Conversion
Have you ever wondered why Ruby has both #to_i and #to_int methods? Or both #to_a and #to_ary? In today's episode we'll answer this question, and look at how we can use implicit conversion methods to our advantage.
000
Graceful.Dev @graceful.dev · 21/07/2026
In this episode we look at how to convert our Feet objects back to core numeric types. In the process, we gain the ability to use our Feet objects in format strings. graceful.dev/courses/tapastry/modul…
graceful.dev
Explicit Conversion
In this episode we look at how to convert our Feet objects back to core numeric types. In the process, we gain the ability to use our Feet objects in format strings.
000
Graceful.Dev @graceful.dev · 14/07/2026
For core types like Float, Ruby has both conversion methods (#to_f), and conversion functions (Float()). When should we use one vs. the other? This episode attempts to answer that question. graceful.dev/courses/tapastry/modul…
graceful.dev
Lenient Conversions
For core types like Float, Ruby has both conversion methods (#to_f), and conversion functions (Float()). When should we use one vs. the other? This episode attempts to answer that question.
000
Graceful.Dev @graceful.dev · 07/07/2026
In this episode we create a function for converting arbitrary values into Feet objects. graceful.dev/courses/tapastry/modul…
graceful.dev
Conversion Function
In this episode we create a function for converting arbitrary values into Feet objects.
000
Graceful.Dev @graceful.dev · 30/06/2026
Ruby generally doesn't allow mixing of types without explicit conversion. So have you ever wondered why it's possible to multiply 2.3 (a float) by 5 (an integer)? In today's episode we'll discover how Ruby's implicit coer graceful.dev/courses/tapastry/modul…
graceful.dev
Coercion
Ruby generally doesn't allow mixing of types without explicit conversion. So have you ever wondered why it's possible to multiply 2.3 (a float) by 5 (an integer)? In today's episode we'll discover how Ruby's implicit coercions work, and how to apply them to our own custom numeric-like classes.
000
Graceful.Dev @graceful.dev · 24/06/2026
New for subscribers: @jessitron.bsky.social demystifies system prompts! youtu.be/Db6OacUxf9U?si=WeEZK79xA_S…
youtu.be
System Prompt is the First Message (Teaser)
New for subscribers: Jessitron demystifies the system prompt!
011
Graceful.Dev @graceful.dev · 23/06/2026
In this episode we meet a Ruby standard module that makes it easy to make classes comparable and sortable. graceful.dev/courses/tapastry/modul…
graceful.dev
Comparable
In this episode we meet a Ruby standard module that makes it easy to make classes comparable and sortable.
000
Graceful.Dev @graceful.dev · 16/06/2026
New episode for subscribers! This time, we're adding "hands" to our nascent coding agent. 👐 graceful.dev/topic/chat-p... youtu.be/_Xsa0alWiWY
youtu.be
Chat Plus Tools Equals Agent (Preview)
YouTube video by GracefulDev
001
Graceful.Dev @graceful.dev · 16/06/2026
Building on the previous episode on hash tables, today we tackle the concept of hash equality: how Ruby decides if two objects are the same for the purpose of use as hash keys. graceful.dev/courses/tapastry/modul…
graceful.dev
Hash Equality
Building on the previous episode on hash tables, today we tackle the concept of hash equality: how Ruby decides if two objects are the same for the purpose of use as hash keys.
000
Graceful.Dev @graceful.dev · 09/06/2026
Today's dish is an exploration of how Ruby is able to quickly look up keys in hashes. graceful.dev/courses/tapastry/modul…
graceful.dev
Hash Table
Today's dish is an exploration of how Ruby is able to quickly look up keys in hashes.
000
Graceful.Dev @graceful.dev · 02/06/2026
Today's episode deals with the concepts of identity and equality - what makes one object equal to another. graceful.dev/courses/tapastry/modul…
graceful.dev
Identity And Equality
Today's episode deals with the concepts of identity and equality - what makes one object equal to another.
000
Graceful.Dev @graceful.dev · 01/06/2026
In which Jessitron and Avdi discuss using LLM agents to make improvement to development environments for both LLM and human coders. Also: the vindication of microservices?? graceful.dev/podcast/we-need-more-s…
graceful.dev
"We need more scaffolding"
In which Jessitron and Avdi discuss using LLM agents to make improvement to development environments for both LLM and human coders. Also: the vindication of microservices??
000
Graceful.Dev @graceful.dev · 31/05/2026
In which Jessitron and Avdi discuss using LLM agents to make improvement to development environments for both LLM and human coders. Also: the vindication of microservices?? graceful.dev/podcast/we-need-more-s…
graceful.dev
"We need more scaffolding"
In which Jessitron and Avdi discuss using LLM agents to make improvement to development environments for both LLM and human coders. Also: the vindication of microservices??
001
Graceful.Dev @graceful.dev · 26/05/2026
In this episode we learn how mutability can lead to bugs in Value Objects... and how we can eliminate these types of bugs once and for all. graceful.dev/courses/tapastry/modul…
graceful.dev
Immutable Object
In this episode we learn how mutability can lead to bugs in Value Objects... and how we can eliminate these types of bugs once and for all.
000
Graceful.Dev @graceful.dev · 19/05/2026
In today's episode we take a look at a storied problem in software: defects caused by accidentally mixing-up the units of measurement used in calculations. And we kick off a multi-part series exploring how to build object graceful.dev/courses/tapastry/modul…
graceful.dev
Quantity
In today's episode we take a look at a storied problem in software: defects caused by accidentally mixing-up the units of measurement used in calculations. And we kick off a multi-part series exploring how to build objects that represent physical quantities.
000
Graceful.Dev @graceful.dev · 12/05/2026
Today's episode demonstrates an easy way to build big regular expressions out of little ones. graceful.dev/courses/tapastry/modul…
graceful.dev
Regexp Union
Today's episode demonstrates an easy way to build big regular expressions out of little ones.
000
Graceful.Dev @graceful.dev · 11/05/2026
Jessitron and Avdi discuss using an agent with Obsidian, Change Implementation Records, and closing the verification loop. graceful.dev/podcast/how-do-we-give…
graceful.dev
"How do we give it eyeballs?"
Jessitron and Avdi discuss using an agent with Obsidian, Change Intent Records, and closing the verification loop.
000
Graceful.Dev @graceful.dev · 11/05/2026
@jessitron and @avdi.codes discuss using an agent with Obsidian, Change Intent Records, and closing the verification loop. graceful.dev/podcast/how-do-we-give…
graceful.dev
"How do we give it eyeballs?"
Jessitron and Avdi discuss using an agent with Obsidian, Change Intent Records, and closing the verification loop.
011
Graceful.Dev @graceful.dev · 07/05/2026
To work effectively with LLMs as coding assistants, we must first understand what they are… and what they aren’t. New full episode for subscribers: graceful.dev/topic/llms-are-complet… youtu.be/5btarU8JVHA
youtu.be
LLMs are completion machines - Teaser
Get two weeks of Graceful.Dev Pro for free: https://graceful.dev/youtube
001
Graceful.Dev @graceful.dev · 05/05/2026
In today's episode we look at a potential complication of using the Decorator pattern, and discuss how to resolve it by enforcing Command/Query Separation. graceful.dev/courses/tapastry/modul…
graceful.dev
Decorator Transparency
In today's episode we look at a potential complication of using the Decorator pattern, and discuss how to resolve it by enforcing Command/Query Separation.
000
Graceful.Dev @graceful.dev · 28/04/2026
Today we explore the Decorator pattern, with the help of the SimpleDelegator standard library. graceful.dev/courses/tapastry/modul…
graceful.dev
Decorator
Today we explore the Decorator pattern, with the help of the SimpleDelegator standard library.
000
Graceful.Dev @graceful.dev · 23/04/2026
Avdi and Jessitron talk about brown M&Ms, ASCII trumpets, and why we need telltales to ensure our agents haven't missed something important. graceful.dev/podcast/no-poop-candy
graceful.dev
"No poop candy!"
Avdi and Jessitron talk about brown M&Ms, ASCII trumpets, and why we need telltales to ensure our agents haven't missed something important. Jo
002
Graceful.Dev @graceful.dev · 21/04/2026
Have you ever wanted a way to customize the format of certain generated strings, but felt like ERB or some other templating language was overkill? If so, today's episode should satisfy! graceful.dev/courses/tapastry/modul…
graceful.dev
String Templates
Have you ever wanted a way to customize the format of certain generated strings, but felt like ERB or some other templating language was overkill? If so, today's episode should satisfy!
010
Graceful.Dev @graceful.dev · 14/04/2026
Following on from the last episode, today we look at some more advanced uses of Ruby's string formatting features. graceful.dev/courses/tapastry/modul…
graceful.dev
Advanced String Formats
Following on from the last episode, today we look at some more advanced uses of Ruby's string formatting features.
000
Graceful.Dev @graceful.dev · 07/04/2026
Sometimes Kernel#puts and string interpolation doesn't give us the level of control we want over our program's output. When we need to control numeric formatting and field widths, we need to understand string formats graceful.dev/courses/tapastry/modul…
graceful.dev
String Format
Sometimes Kernel#puts and string interpolation doesn't give us the level of control we want over our program's output. When we need to control numeric formatting and field widths, we need to understand string formats. And that's what this episode is all about!
000
Graceful.Dev @graceful.dev · 06/04/2026
In which Jessitron and Avdi discuss the merits of larger and smaller LLMs, and the challenges of code review in codebases with a lot of history. graceful.dev/podcast/historically-i…
graceful.dev
"Historically is like six months ago"
In which Jessitron and Avdi discuss the merits of larger and smaller LLMs, and the challenges of code review in codebases with a lot of history.
032
Graceful.Dev @graceful.dev · 31/03/2026
While the File methods are great for occasional use, for programs that deal extensively in filenames we need to bring out the big guns. Today we'll get an overview of Pathname, Ruby's swiss army knife for path manipulatio graceful.dev/courses/tapastry/modul…
graceful.dev
Pathname
While the File methods are great for occasional use, for programs that deal extensively in filenames we need to bring out the big guns. Today we'll get an overview of Pathname, Ruby's swiss army knife for path manipulation.
000
Graceful.Dev @graceful.dev · 30/03/2026
Introducing... "Machines of Code and Grace" - the official Graceful.Dev podcast! In this inaugural episode, Jessitron explains how she's using AI Feature Owners to avoid accidental regressions. graceful.dev/podcast/ive-often-wish…
graceful.dev
"I've often wished I could fork myself…"
Jessitron and Avdi discuss defining AI "Feature Owners" in order to avoid accidental breakage.Watch the video versionShow notesJessitron's
000
Graceful.Dev @graceful.dev · 24/03/2026
Ruby provides a lot of tools for breaking filenames into their component parts, but they aren't always well documented. Today's episode combines goes over some basics as well as a tip you might not be familiar with. graceful.dev/courses/tapastry/modul…
graceful.dev
Filenames
Ruby provides a lot of tools for breaking filenames into their component parts, but they aren't always well documented. Today's episode combines goes over some basics as well as a tip you might not be familiar with.
000
Graceful.Dev @graceful.dev · 17/03/2026
When loading domain objects from an external service, it can be expensive to load up associated objects with them. Today's episode takes a look at a pattern for transparently lazy-loading such associations. graceful.dev/courses/tapastry/modul…
graceful.dev
Virtual Proxy
When loading domain objects from an external service, it can be expensive to load up associated objects with them. Today's episode takes a look at a pattern for transparently lazy-loading such associations.
001
Graceful.Dev @graceful.dev · 10/03/2026
Today we look at the humble String#gsub method, and learn that it has some surprising tricks up its sleeve. graceful.dev/courses/tapa...
graceful.dev
Gsub
Today we look at the humble String#gsub method, and learn that it has some surprising tricks up its sleeve.
000
Graceful.Dev @graceful.dev · 03/03/2026
In today's episode, we'll examine how the availability of tools to aid refactoring can change how we write code. graceful.dev/courses/tapa...
graceful.dev
Assisted Refactoring
In today's episode, we'll examine how the availability of tools to aid refactoring can change how we write code.
000
Graceful.Dev @graceful.dev · 24/02/2026
Today's episode is about a semantic convention for error handling that I learned from Jim Weirich. graceful.dev/courses/tapa...
graceful.dev
Fail And Raise
Today's episode is about a semantic convention for error handling that I learned from Jim Weirich.
020
Graceful.Dev @graceful.dev · 17/02/2026
Today we go a little deeper into keyword arguments in Ruby 2.0/2.1, covering a few use cases we didn't cover in the last episode. graceful.dev/courses/tapa...
graceful.dev
More Keyword Arguments
Today we go a little deeper into keyword arguments in Ruby 2.0/2.1, covering a few use cases we didn't cover in the last episode.
000
Graceful.Dev @graceful.dev · 10/02/2026
Today's episode is a guide to transitioning various hash argument idioms to Ruby 2.0/2.1 keywords. graceful.dev/courses/tapa...
graceful.dev
Keyword Arguments
Today's episode is a guide to transitioning various hash argument idioms to Ruby 2.0/2.1 keywords.
000
Graceful.Dev @graceful.dev · 03/02/2026
Today's dish is a refactoring approached from two different perspectives. Enjoy! graceful.dev/courses/tapa...
graceful.dev
Two Refactorings
Today's dish is a refactoring approached from two different perspectives. Enjoy!
000
Graceful.Dev @graceful.dev · 30/01/2026
Graceful.Dev stands in solidarity with immigrants and migrants - our friends, colleagues, students, vendors, and heroes without whom coding work would be immeasurably poorer. I'll be donating the first month of all subscriptions started today to the MICA project here in St. Louis. - Avdi
031
Graceful.Dev @graceful.dev · 27/01/2026
Recently we looked at the Sequel library for interacting with SQL databases. Today, we'll use Sequel again to play with the native JSON support in PostgreSQL 9.3. graceful.dev/courses/tapa...
graceful.dev
Sequel, Postgres, JSON
Recently we looked at the Sequel library for interacting with SQL databases. Today, we'll use Sequel again to play with the native JSON support in PostgreSQL 9.3.
010
Graceful.Dev @graceful.dev · 20/01/2026
We've used the "ghost object" pattern to lazily load attributes of a model object. And we've made a macro to easily declare "ghost-loadable" attribute accessors. graceful.dev/courses/tapa...
graceful.dev
Extracting Ghost Load
We've used the "ghost object" pattern to lazily load attributes of a model object. And we've made a macro to easily declare "ghost-loadable" attribute accessors. Today we complete the generalization of ghost loading by extracting a module that makes it easy for any model object to declare lazily-loaded attributes.
000
Graceful.Dev @graceful.dev · 13/01/2026
When is it appropriate to metaprogram? Today's episode looks at one situation in which it may be a good choice. graceful.dev/courses/tapa...
graceful.dev
Macro
When is it appropriate to metaprogram? Today's episode looks at one situation in which it may be a good choice.
000