Graceful.Dev's Avatar

Graceful.Dev

@graceful.dev

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

139
Followers
1
Following
96
Posts
08.08.2024
Joined
Posts Following

Latest posts by Graceful.Dev @graceful.dev

Preview
Assisted Refactoring In today's episode, we'll examine how the availability of tools to aid refactoring can change how we write code.

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...

03.03.2026 18:00 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Preview
Fail And Raise Today's episode is about a semantic convention for error handling that I learned from Jim Weirich.

Today's episode is about a semantic convention for error handling that I learned from Jim Weirich.
graceful.dev/courses/tapa...

24.02.2026 18:00 πŸ‘ 2 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Preview
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.

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...

17.02.2026 18:00 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Preview
Keyword Arguments Today's episode is a guide to transitioning various hash argument idioms to Ruby 2.0/2.1 keywords.

Today's episode is a guide to transitioning various hash argument idioms to Ruby 2.0/2.1 keywords.
graceful.dev/courses/tapa...

10.02.2026 18:00 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Preview
Two Refactorings Today's dish is a refactoring approached from two different perspectives. Enjoy!

Today's dish is a refactoring approached from two different perspectives. Enjoy!
graceful.dev/courses/tapa...

03.02.2026 18:00 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

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

30.01.2026 19:40 πŸ‘ 3 πŸ” 1 πŸ’¬ 0 πŸ“Œ 0
Preview
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.

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...

27.01.2026 18:00 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Preview
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.

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...

20.01.2026 18:00 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Preview
Macro When is it appropriate to metaprogram? Today's episode looks at one situation in which it may be a good choice.

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...

13.01.2026 18:00 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Preview
Schwartzian Transform Today's episode demonstrates a technique for speeding up the process of sorting some collections.

Today's episode demonstrates a technique for speeding up the process of sorting some collections.
graceful.dev/courses/tapa...

06.01.2026 18:00 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Preview
Ghost Load In today's episode we learn at how to implement lazy loading using the "ghost object" pattern.

In today's episode we learn at how to implement lazy loading using the "ghost object" pattern.
graceful.dev/courses/tapa...

30.12.2025 18:00 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Preview
Sequel ActiveRecord has become practically synonymous with SQL database access in Ruby, but it's not the only way to talk to SQL stores. Today we'll explore Sequel, a wonderfully rich tool for interacting with many different SQL RDBMSes.

ActiveRecord has become practically synonymous with SQL database access in Ruby, but it's not the only way to talk to SQL stores. Today we'll explore Sequel, a wonderfully rich tool for interacting with many different SQL RDBMSes.
graceful.dev/courses/tapa...

23.12.2025 18:00 πŸ‘ 1 πŸ” 2 πŸ’¬ 0 πŸ“Œ 0
Post image

Since Ruby 3.1 you can find out all of a class' subclasses dynamically--no extra metaprogramming required!

18.12.2025 15:46 πŸ‘ 3 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Preview
Identity Map In the last episode we looked at the problem of "aliasing", here there are multiple objects representing a single row in a database. Today, we'll look at one possible solution to that problem. Notes: DataMapper:Β http://datamapper.org/ Ruby Object Mapper (ROM):Β http://rom-rb.org/ Perpetuity:Β https://github.com/jgaskins/perpetuity

In the last episode we looked at the problem of "aliasing", here there are multiple objects representing a single row in a database. Today, we'll look at one possible solution to that problem.
graceful.dev/courses/tapa...

16.12.2025 18:00 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Preview
Aliasing Today we look at a perncious problem that sometimes plagues code which uses an Object-Relational Mapper (ORM). Documentation of the ActiveRecord inverse_of option mentioned in the episode can be found here:Β http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

Today we look at a perncious problem that sometimes plagues code which uses an Object-Relational Mapper (ORM).
Documentation of the ActiveRecord inverse_of option mentioned in the episode can be found here:Β http://api.rubyonrails.
graceful.dev/courses/tapa...

09.12.2025 18:00 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Preview
Dotenv In this episode we look at a tool that I've found invaluable for managing configuration in my applications.

In this episode we look at a tool that I've found invaluable for managing configuration in my applications.
graceful.dev/courses/tapa...

02.12.2025 18:00 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Preview
REPL-Driven Development In today's episode I cover a classic development technique that doesn't get enough press these days. Interactive, exploratory development was and is common in the Lisp world, and Ruby's dynamic nature is aptly suited to take advantage of this style of programming. Today I'll show you how I used REPL-driven development in Pry and Emacs to begin to build a video export tool. By the way, right after I made this episode I discovered that Conrad Irwin had done a RubyConf talk on REPL-driven development. You can watch it here:Β https://www.youtube.com/watch?v=D9j_Mf91M0I

In today's episode I cover a classic development technique that doesn't get enough press these days. Interactive, exploratory development was and is common in the Lisp world, and Ruby's dynamic nature is aptly suited to take advantage of this style of programming.
graceful.dev/courses/tapa...

25.11.2025 18:00 πŸ‘ 3 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0
Using Ruby Struct
Using Ruby Struct For basic mutable data structures, you can't get much quicker and easier than Ruby's "Struct" class!Get these tips in your inbox: https://avdi.codes/devseeds/

For basic mutable data structures, you can't get much quicker and easier than Ruby's "Struct" class! But do you know everything it can do? Full screencast, now free to all!
youtu.be/0fei3uDkjNE

30.10.2025 16:57 πŸ‘ 1 πŸ” 1 πŸ’¬ 0 πŸ“Œ 1
Preview
Site News #26: Policy, Structure, and Memoization Hi there, graceful devs! Here’s what’s new in the garden…Content UpdatesThere are two hefty new episodes since the last update! The first one, Pol

Hi there, graceful devs! Here’s what’s new in the garden… Content Updates There are two hefty new episodes since the last update! The first one, Policy as Structure, introduces a powerful approach to architecting your code for flexibility and change.
graceful.dev/site-news-26...

02.07.2025 17:00 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Preview
Site News #26: Policy, Structure, and Memoization Hi there, graceful devs! Here’s what’s new in the garden… Content Updates There are two hefty new episodes since the last update! The first one, Pol

We've been busy in the Graceful.Dev garden. Here's what's new!
graceful.dev/site-news-26...

01.07.2025 18:22 πŸ‘ 0 πŸ” 1 πŸ’¬ 0 πŸ“Œ 0
Pluggable Selector Pattern in Ruby
Pluggable Selector Pattern in Ruby Originally captured in Kent Beck's classic book "Smalltalk Best Practice Patterns", Pluggable Selector is an under-used strategy for making methods more flex...

Originally captured in Kent Beck's classic book "Smalltalk Best Practice Patterns", Pluggable Selector is an under-used strategy for making methods more flexible. Learn how to use it in Ruby, in this classic Graceful.Dev episode now free to all!
youtu.be/rMsL3ZH4A2s

30.06.2025 16:16 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Resist Memoization (Teaser)
Resist Memoization (Teaser) Memoization of a complex object can seem like a free optimization... but there are always trade-offs. Full episode now up for members: https://graceful.dev/t...

Memoization of a complex object can seem like a free optimization... but there are always trade-offs. Full episode now up for members: https://graceful.dev/topic/resist-memoization/
youtu.be/t5UjASNKChQ

21.05.2025 21:14 πŸ‘ 1 πŸ” 1 πŸ’¬ 0 πŸ“Œ 0
Post image

Class @@variables are conventionally avoided in modern Ruby. Refine your #Ruby style with Graceful.Dev courses!

28.04.2025 14:19 πŸ‘ 4 πŸ” 1 πŸ’¬ 0 πŸ“Œ 0
Subclassing Array in Ruby
Subclassing Array in Ruby Sooner or later you will be tempted to subclass one of Ruby's core collection classes. Learn why that's a bad idea - and a better alternative!Get these tips ...

Learn why subclassing core Ruby classes like Array and Hash is a bad idea, and what to do instead. A classic from the Graceful.Dev archives, now free!
youtu.be/Zc_OdXLCT4M

25.04.2025 15:45 πŸ‘ 7 πŸ” 4 πŸ’¬ 0 πŸ“Œ 0
Policy as Structure (teaser)
Policy as Structure (teaser) Get two weeks of Graceful.Dev Pro for free: https://graceful.dev/youtube

Don't let your codebase come down with flag-itis! Model your operating policies as composed structure, rather than as tangled conditionals. Full episode now live for subscribers: https://graceful.
www.youtube.com/watch?v=KvQ07O75XSU

16.04.2025 17:48 πŸ‘ 4 πŸ” 2 πŸ’¬ 0 πŸ“Œ 0
Post image

Know your Ruby division operations, and pick the right one for the job! Learn more in the "Crystaline Ruby" course on Graceful.Dev

07.04.2025 14:40 πŸ‘ 4 πŸ” 1 πŸ’¬ 0 πŸ“Œ 0
Preview
Site News #25: Filter Map and Snippets Celebrate Spring with new videos and new code snippets

Celebrate Spring with new videos and new code snippets

Get 2 weeks of Graceful.Dev Pro Free: https://graceful.dev/bluesky
graceful.dev/site-news-25...

01.04.2025 18:04 πŸ‘ 0 πŸ” 1 πŸ’¬ 0 πŸ“Œ 0
Post image

With Ruby 3, it's easier than ever to compose objects with forwarded methods!


Get development tips in your inbox: https://graceful.dev/devseeds/

31.03.2025 16:52 πŸ‘ 17 πŸ” 4 πŸ’¬ 0 πŸ“Œ 0
Pay it Forward
Pay it Forward Originally published in October 2012 as RubyTapas #17, this dense episode deals with Ruby, mockist testing, and the concept of Command-Query Separation. Ther...

Full episode now free! Originally published in October 2012 as RubyTapas #17, this dense episode deals with the UNIX "at" commands, Ruby, TDD, how mock-object pain can give us insight into code smells, and the concept of Command-Query Separation.
youtu.be/gQUC-5lbQm0

28.03.2025 16:02 πŸ‘ 1 πŸ” 1 πŸ’¬ 0 πŸ“Œ 0
Post image

Know your Ruby conversion protocols, and pick the right one for the task at hand! Learn more in the "Crystaline Ruby" course, on Graceful.Dev

24.03.2025 17:15 πŸ‘ 5 πŸ” 2 πŸ’¬ 0 πŸ“Œ 0