In some applications there is a many-to-many relationship between types of objects that may be displayed to users, and formats in which they may be rendered. There may even be …
Episode #067: Moneta
In the last episode we gave a class the ability to cache HTTP responses in a Hash or something that behaves like a Hash. Now we'll introduce the Moneta gem, …
Episode #066: Caching an API
Web services are slow to request and often have rate caps. A cache can cut down on requests to remote APIs. But how best to design the interface between the …
Episode #065: FFI Part 7: The Last Refactor
Factoring out a high-level interface for PulseAudio.
Episode #064: Yield or Enumerate
A number of Ruby standard library methods return an Enumerator if no block is passed to them. In this episode, we'll learn how to emulate this behavior in our own …
Episode #063: Gem-Love Part 3
Returning to my Gem-Love project in this episode, I use TDD to drive out a client-side implementation for the first feature. In the process, I talk about message-first design. Check …
Episode #062: Fiber
In this episode we'll explore Ruby's lightweight concurrency primitive by using it to emulate the Enumerator class.
Episode #061: FFI Part 6: PulseFFI Awakens
Tieing methods together with the Composed Method pattern.
Episode #060: Ascend
Now that we've been formally introduced to the Enumerator class, it's time to apply that knowledge in a concrete way. In this episode we use Pathname and Enumerator to locate …