Program • RubyConf Mini

RubyConf Mini

November 15 - 17 Providence, RI

Keynote Speakers

Julia Evans

Founder of Wizard Zines

Nadia Odunayo

Founder and CEO of The Storygraph

Barbara Tannenbaum

Senior Lecturer at Brown University

Rose Wiegley

Senior Staff Developer at Shopify

Talks & Workshops

A Brewer’s Guide to Filtering out Complexity and Churn

Alan Ridlehoover, Fito von Zastrow

Mechanical coffee machines are amazing! You drop in a coin, listen for the clink, make a selection, and the machine springs to life, hissing, clicking, and whirring. Then the complex mechanical ballet ends, splashing that glorious, aromatic liquid into the cup. Ah! C’est magnifique!

There’s just one problem. Our customers also want soup! And, our machine is not extensible. So, we have a choice: we can add to the complexity of our machine by jamming in a new dispenser with each new request; or, we can pause to make our machine more extensible before development slows to a halt.

Anyone Can Play Guitar (With Ruby)

Kevin Murphy

I've got the blues. I've been looking for the perfect guitar tone, but haven't found it. To amp up my mood, let's teach a computer to play the guitar through an amplifier.

Let's string together object-oriented principles to orchestrate a blues shuffle. We'll model our domain with the help of inheritance, composition, and dependency injection. This talk will strike a chord with you, whether you've strummed a guitar before or not.

Crystal for Rubyists

Kirk Haines

Crystal is a Ruby-like compiled language that was originally built using Ruby. Its syntax is remarkably similar to Ruby's, which generally makes it straightforward for a Ruby programmer to start using Crystal. There are some notable, and interesting differences between the languages, however. In this workshop, let's learn some Crystal while we learn a little about the similarities and the differences between the two languages.

Empathetic Pair Programming with Nonviolent Communication

Stephanie Minn

Pair programming is intimate. It’s the closest collaboration we do as software developers. When it goes well, it feels great! But when it doesn’t, you might be left feeling frustrated, discouraged, or withdrawn.

To navigate the vulnerability of sharing our keyboard and code, let’s learn about nonviolent communication (NVC), an established practice of deep listening to ourselves and others. We’ll cover real-life examples and how to apply the four tenets of NVC– observations, feelings, needs, and requests– to bring more joy and fulfillment the next time you pair.

Explain It Like You're a Teacher

Amy Henning

"Explain it like I'm 5" is a common way of saying “help me understand.” The logic behind it seems sound, but it overlooks the skills needed to share knowledge in an accessible way. Yes, skills!

It can be hard to know what and how to communicate when explaining tricky technical concepts. At the same time, working from a shared understanding of complex ideas is critical to our work as engineers. In this talk, we’ll look at some core teaching principles to flip the script on “Explain It Like I’m 5” and level up on an oft-overlooked competency of engineering: helping others learn new things.

From Start to Published, Create a game with Ruby!

Cameron Gose

We'll be building a game in Ruby from start to finish using the DragonRuby GameToolkit. Finally we'll publish it so that your new creation can be shared.

Functional programming for fun and profit!!

Jenny Shih

Functional programming brings you not just fun, but also profit!

Have you ever felt curious towards functional programming (FP)? Were you, soon afterwards, intimidated by the mystic terms like monads and functors? Do you think FP is not related to your Ruby work and thus, useless? Guess what–you can actually apply FP to your Ruby projects and reap benefits from it before fully understanding what a monad is!

This talk will walk you through the powerful mental models and tools that FP gives us, and how we can readily use them to improve our apps in a language that we all love and understand.

Here Be Dragons: The Hidden Gems of Tech Debt

Ernesto Tagwerker

How do you find the most unmaintainable code in your codebase? What will you prioritize in your next technical debt spike, and why?

In this talk you will learn how you can use RubyCritic, SimpleCov, Flog, Reek, and Skunk to slay dragons in your next refactoring adventure! Find out how the relationship between churn, complexity, and code coverage can give you a common language to talk about code quality and increase trust in your code.

How We Implemented Salary Transparency (And Why It Matters)

Hilary Stohs-Krause

Depending on where you live, money can be a prickly topic in the workplace; however, survey after survey shows it’s also a conversation many employees actively want started. Data also shows that transparency around wages increases trust and job satisfaction and improves gender and racial salary equity.

However, just because folks want something doesn’t mean getting there will be smooth sailing (as we discovered when we instituted wage transparency three years ago). In this talk, we’ll discuss why salary transparency matters, ways it can manifest, and how to pitch it to the rest of your company.

Inclusivity: Hiring is just the beginning

Andrea Fomera, Julie

What does it mean to be inclusive in a world where people often hide who they are? How do you bring your authentic self to work without hiding parts of you?

In this talk we will share two real-world experiences from a Senior Engineer and a Junior Engineer navigating a world in which differences often set them apart. You’ll leave this talk with concrete strategies for promoting authenticity and inclusion in your workplace based on common themes from our stories.

Knowing When To Walk Away

Lindsay Kelly

Picture this: the job you've always wanted. Doing exactly the kind of work you want. Having great coworkers and management. But then something shifts, and the dream becomes closer to a nightmare. How do you identify these things happening? How do you raise concerns in an appropriate way? And as a last resort, how do you know when it's the right choice to walk away?

Looking Into Peephole Optimizations

Maple Ong

Did you know Ruby optimizes your code before executing it? If so, ever wonder how that works? The Ruby VM performs various optimizations on bytecode before executing them, one of them called peephole optimizations. Let’s learn about how some peephole optimizations work and how these small changes impact the execution of Ruby’s bytecode. Do these small changes make any impact on the final runtime? Let's find out - experience reading bytecode is not needed!

Making .is_a? Fast

John Hawthorn

Until Ruby 3.2 the `is_a?` method can be a surprising performance bottleneck. It be called directly or through its various synonyms like case statements, rescue statements, protected methods, `Module#===` and more! Recently `is_a?` and its various flavours have been optimized and it's now faster and runs in constant time. Join me in the journey of identifying it as a bottleneck in production, implementing the optimization, squashing bugs, and finally turning it into assembly language in YJIT.

RubyGems.org MFA: The Past, Present and Future

Jenny Shen

What do Ruby’s rest-client, Python’s ctx, and npm’s ua-parser-js have in common?

They all suffered account takeovers that were preventable. Attackers aim to take control of a legitimate RubyGems.org user account and then use it to upload malicious code. It might dial home. It might steal your keys. Perhaps it will encrypt your disk. Or all of the above! Don’t you wish it couldn’t happen?

MFA prevents 99.9% of account takeover attacks. Come learn about MFA, the history of RubyGems.org MFA support, the new MFA policy for top gems, and what’s on the horizon.

Shopify Sponsor Session: Ruby Office Hours with Shopify Engineering

Rose Wiegley, Ufuk Kayserilioglu

Curious about Shopify’s relationship with Ruby? Got questions on projects Shopify Ruby on Rails Engineers are currently working on? Join Rose Wiegley (Sr Staff Developer), Ufuk Kayserilioglu (Production Engineering Manager), and other Shopify Engineers for a 30-minute office hours session dedicated to answering your questions on Ruby, Shopify’s relationship with Ruby, and life at Shopify! Feel free to start dropping your questions on this Slido link: bit.ly/Shopifyminiofficehours

Solo: Building Successful Web Apps By Your Lonesome

Jeremy Smith

Whether by choice or by circumstance, you may find yourself developing a web application alone. Congratulations! You've got the house to yourself and no one telling you what to do. But at the same time, there's no one to share the burden or make up for your shortcomings. How do you build well and ensure project success? We'll look at the pros and cons of working alone, what kinds of projects are well-suited to solo development, strategies for professional growth, and development and operational processes that will save you time and help you sleep better at night.

Splitwise Sponsor Session: Declare Victory with Class Macros

Jess Hottenstein

How can we write classes that are easy to understand? How can we write Ruby in a declarative way? How can we use metaprogramming without introducing chaos?

Come learn the magic behind the first bit of metaprogramming we all encounter with Ruby - attr_reader. From there, we can learn how different gems use class macros to simplify our code. Finally, we’ll explore multiple ways we can make our own class macros to make our codebase easier to read and extend.

Splitwise Sponsor Session: Game Night

Come play some board games! Join the Splitwise team at AS220 (located at 115 Empire St, an 8-minute walk from the hotel) for pizzas, drinks, and games from 6-9pm. We’ll have Magic Maze, Kingdomino, Splendor, Carcasson, Bananagrams, and many more. Please bring your conference attendee badge for entry.

Start a Ruby Internship

Adam Cuppy, Chelsea Kaufman

Starting an internship doesn’t have to reduce your team's progress. On the contrary, a quality internship can benefit interns and senior folks. And, it doesn't take much to set up and start. We've done over 100!

You’ll use our established blueprint to draft a successful internship program throughout this workshop. We'll walk through all the planning phases and help you set up the templates so you're ready to make it a win for all involved and "sell it" to management. By the end, your internship program will be prepared to hit the ground running, so your interns will be productive on day one.

Syntax Tree

Kevin Newton

Syntax Tree is a new toolkit for interacting with the Ruby parse tree. It can be used to analyze, inspect, debug, and format your Ruby code. In this talk we'll walk through how it works, how to use it in your own applications, and the exciting future possibilities enabled by Syntax Tree.

TDD on the Shoulders of Giants

Jared Norman

Getting started with TDD is hard enough without having to also navigate a programming language barrier. Many of the best books on testing focus on very different languages like Java, making it tricky to apply their advice in Ruby, especially if you're new to testing. I'll go through the most important practices and techniques that we can pull from the testing literature and show how they can be applied in your day-to-day Ruby development. You'll learn how to make the most of testing in Ruby using the patterns, practices, and techniques that popularized TDD in the first place.

Teaching Ruby to Count

Joël Quenneville

Ruby has some of the best tooling in the business for working with iteration and data series. By leveraging its full power, you can build delightful interfaces for your objects.

In this case-study based presentation, we’ll explore a variety of problems such as composing Enumerable methods, generating a series of custom objects, and how to provide a clean interface for a collection with multiple valid traversal orders. Beyond just the beloved Enumerable module, this talk will take you into the world of Enumerators and Ranges and equip you to write objects that bring joy to your teammates.

The Three-Encoding Problem

Kevin Menard

You’ve probably heard of UTF-8 and know about strings, but did you know that Ruby supports more than 100 other encodings? In fact, your application probably uses three encodings without you realizing it. Moreover, encodings apply to more than just strings. In this talk, we’ll take a look at Ruby’s fairly unique approach to encodings and better understand the impact they have on the correctness and performance of our applications. We’ll take a look at the rich encoding APIs Ruby provides and by the end of the talk, you won’t just reach for force_encoding when you see an encoding exception.

WNB.rb Networking Reception

If you identify as a woman or non-binary person, join WNB.rb at Rooftop at the Providence G (100 Dorrance St) for drinks and light appetizers! WNB.rb is a virtual community for women and non-binary Rubyists. When not hosting IRL events at conferneces, they organize initiatives such as a monthly virtual meetup, a weekly book club, and more!

We Need Someone Technical on the Call

Brittany Martin

A DM. The dreaded message. “They want someone technical on the call.”

If that statement is terrifying, never fear. Being effective at these interactions can be a big opportunity for your career. Learn tactics on when to commit to calls and how to execute them while empowering your team, conserving your time and acing the follow through.

Weaving and seaming mocks

Vladimir Dementyev

To mock or not mock is an important question, but let's leave it apart and admit that we, Rubyists, use mocks in our tests.

Mocking is a powerful technique, but even when used responsibly, it could lead to false positives in our tests (thus, bugs leaking to production): fake objects could diverge from their real counterparts.

In this talk, I'd like to discuss various approaches to keeping mocks in line with the actual implementation and present a brand new idea based on mock fixtures and contracts.

Who Wants to be a Ruby Engineer?

Drew Bragg

Welcome to the Ruby game show where one lucky contestant tries to guess the output of a small bit of Ruby code. Sound easy? Here's the challenge: the snippets come from some of the weirdest parts of the Ruby language.  The questions aren't easy. Get enough right to be crowned a (some sort of something) Ruby Engineer and win a fabulous, mysterious prize.

Zen and the Art of Incremental Automation

Aji Slater

Automation doesn’t have to be all or nothing. Automating manual processes is a practice that one can employ via simple principles. Broad enough to be applied to a range of workflows, flexible enough to be tailored to an individual’s personal development routines; these principles are not in themselves complex, and can be performed regularly in the day to day of working in a codebase.
Learn how to cultivate habits and a culture of incremental automation so even if the goal is not a full self-service suite of automated tools, your team can begin a journey away from friction and manual tasks.