This video contains 15 individual talks

Lightning Talks
+15
See all speakers
See all 15 speakers

Sections in this recording




Summarized using AI

Lightning Talks

Noel Rappin, Zoe Steinkamp, Jeremy Smith, Sam Poder, Brooke Kuhlmann, Kelly Popko, Tia Anderson, Justin Bowen, Débora Fernandes, Shardly Romelus, Rachael Wright-Munn, Lucy Chen, Alan Ridlehoover, Yaşar Celep, and Cirdes Henrique • July 09, 2025 • Philadelphia, PA • Lightning Talk

Overview

The "Lightning Talks" session at RailsConf 2025 features rapid-fire presentations from a diverse array of community members, ranging from newcomers and scholars to seasoned contributors. Each speaker delivers a concise, under-five-minute presentation on a topic of their choice related to Ruby, Rails, and the broader software development ecosystem.

Key Points & Highlights

  • Community Building & Inclusion: Multiple talks highlight efforts to foster inclusivity and support for newcomers, such as the history and impact of Rails Girls São Paulo and advice for promoting psychological safety and overcoming fear of rejection (e.g., trusting relationships in teams).

  • Ruby and Rails Features: Presentations cover new and advanced Ruby/Rails functionalities, including:

    • The new Ruby Data class, its immutability, usage, and differences from Struct.
    • Analytics of Ruby gem downloads using ClickHouse DB and newly available datasets, including accessible tools like web SQL playgrounds and AI agents.
    • Innovations in open source and local-first solutions, like "Terminus" for rendering data to E-Ink devices with a Ruby stack.
  • Technical Concepts & Programming Paradigms:

    • Memory management explored via comparisons between C (manual via malloc/free) and Ruby (automatic garbage collection), and memory optimizations using libraries like Jemalloc.
    • Agent-oriented programming and integrating AI in Rails applications, exemplified with practical demos for chatbots and translation tools.
    • Insights into component design systems and UI libraries, and the journey from React to Hotwire, aiming for flexible, customizable components in Rails with projects like Flexi.
  • Fun, Gamification & Personal Projects:

    • Talks emphasize making programming engaging through gamified experiences, drawing lessons from programming games to enhance developer satisfaction and learning.
    • Presenters share personal Rails projects such as a mindfulness app (combining CRUD with self-care features), and a color-rating web app to blend technical learning with personal interests.
  • Linguistics and Human Factors: One talk bridges linguistics with programming, illustrating key language concepts (semantics, syntax, morphology) with Ruby and Rails analogies, highlighting the broader cultural and human aspects of software development.

Conclusions & Takeaways

  • The Lightning Talks collectively reinforce the Rails and Ruby community's spirit of sharing, inclusivity, and continuous learning.
  • Attendees and viewers are exposed to practical demos, best practices, and insightful reflections spanning technical, organizational, and personal growth domains.
  • The presentations encourage experimentation, openness to new ideas, and the importance of diverse perspectives in advancing the community and technology.

Lightning Talks
Noel Rappin, Zoe Steinkamp, Jeremy Smith, Sam Poder, Brooke Kuhlmann, Kelly Popko, Tia Anderson, Justin Bowen, Débora Fernandes, Shardly Romelus, Rachael Wright-Munn, Lucy Chen, Alan Ridlehoover, Yaşar Celep, and Cirdes Henrique • Philadelphia, PA • Lightning Talk

Date: July 09, 2025
Published: July 23, 2025
Announced: unknown

Rapid fire talks in under 5 minutes from the community. So much to inspire in so little time!

RailsConf 2025

00:00:19.600 How's everybody day been? Among many other things, here at this final Rails Conf, I am fulfilling a 15
00:00:26.800 years long dream of speaking on the conference stage as an official representative of the conference. Thank you to everybody for showing up here and
00:00:33.600 supporting our lightning talks. Uh this has always been a way for people new to the community or people new to public
00:00:39.280 speaking to uh take a chance and get up in front of people and tell us what they know. And it's always been one of my
00:00:46.239 favorite parts of the conference. And I hope that we will have a great hour and a half together with our amazing Lightning speakers. Some of whom are
00:00:52.800 scholars, some of whom are longtime community members, all of whom have been brave enough to come up here and give
00:00:57.840 what is probably a talk on less preparation than they would like because that's how lightning talks go. But it's going to be great for everybody and
00:01:03.840 we're I hope that we will show the uh support of the Ruby community. Everybody's going to have five minutes
00:01:09.840 and if they don't, I have a keep things moving along gone which hopefully we will never have to strike. Uh, thank you
00:01:17.040 so much for being here. And I will introduce our first speaker, Zoe Stein Cam.
00:01:26.960 I forgot to get my photo. There we go. All right, we're good. All right. So, my
00:01:32.079 name is Zoe Steinamp. I work for a company called ClickHouse DB. We are an analytical database. I'll do the speech
00:01:38.000 later on, but basically, we created an open source Ruby gem analytics on top or
00:01:43.119 rather embedded within our database. The information is there. So, let me go through it. So, SQL Analytics on Ruby
00:01:49.280 gem downloads. So, we have every gem ever downloaded. All that information is here. It's free to use completely for
00:01:55.520 the community. You can I'm going to actually do a demo so I can show you where you can run it. We're actually soon going to have a website. It should
00:02:01.680 be out in like the next week or two, I want to say. I've been watching the PRs on it. Fast SQL queries. So, if you know
00:02:07.759 SQL, you can query it. I'm also going to show you how to query it with our AI agent. And you don't have to know SQL.
00:02:12.879 It'll do it for you. reliable and secure. That's just because ClickHouse Cloud is secure. There's nothing
00:02:18.080 particular about the Ruby gem downloads being secure. So, what can you ask it? You can ask what are the most downloaded
00:02:24.480 gems? What are emerging gems? Downloads over time, downloads of a Ruby version over time, downloads by system, blah
00:02:31.120 blah blah. Very exciting. Uh, so just for context, at first there was Python. So, let me really quick open this link.
00:02:37.599 This is the analytics for Pi Pi packages. And very soon this will be the same kind of website we're building for
00:02:42.800 Ruby gems. It's just not yet done. But basically what you can do is you can do something like here's the top repo right
00:02:49.280 here. I don't know what this one is, but clearly it's very popular. And you can do super cool stuff like this. Like this is querying Clickhouse right now in real
00:02:56.720 time. And it's doing it this quick. I just picked some random time frame. Obviously I didn't do anything super
00:03:02.000 fancy, but yeah, all these graphs are being uh basically filled in by click and that's how fast it is and that's how
00:03:08.239 good it is for analysis. So anyways, at first there was this Python library. Oh yeah. Then we got an email from Ruby
00:03:15.280 Central from Dale and or no, sorry, to my co-orker Dale from Marty. Just for reference here, Dale actually built this
00:03:21.440 out, but he's recently had arm surgery and it's not really great to fly when you've had surgery. So he asked me very
00:03:27.360 nicely, "Hey Zoe, can you please go represent our awesome Ruby Gems project for me here at the conference?" So
00:03:33.040 that's how I landed here. But basically, he got an email and he was like, Marty was like, "Hey, this is pretty cool for,
00:03:38.319 you know, the Python community, but what about us, the Ruby community? What do what are we getting out of this? Come on. And so we did it. We went ahead and
00:03:46.080 got all this data into ClickHouse Cloud. We went ahead and loaded it in in multiple different ways for you to
00:03:51.120 access it. And like I said, very soon there will be a UI interface to interface with as well. We got three
00:03:56.959 data sets. When we did this, we have the download logs, the daily aggregate downloads, and the weekly data dumps.
00:04:02.720 And this is all the information as to where this all comes from. Most of it's covering data all the way back to 2013
00:04:08.799 is some of the oldest stuff for the download logs. I think it's just from 2017 because they might not have been uh
00:04:15.120 you know tracking them any any earlier than that. But basically to do it you could do the SQL playground. I'm going
00:04:21.840 to show like basically what that would look like in the terminal. Um but you can also just use here. Let me pull up
00:04:27.680 my terminal here. Yeah, this is Oh, this is really tiny. Give me a second. This
00:04:32.800 is There we go. a little bit bigger now. So, basically what I've done here, and this has already been pre-loaded just
00:04:39.199 because I get nervous with internet, but basically I went ahead, I loaded in the Ruby gems. I asked it, this is a very
00:04:46.000 like this is a SQL query obviously, so this is a little bit longer, but I was basically asking for how many downloads there were in a specific week and
00:04:52.880 basically the past uh I think this is asking for the past six weeks or past eight eight weeks. Basically, how many
00:04:58.400 downloads there have been. And I don't know why there was such a slow week right here. maybe it was a holiday or something, but on average it's getting
00:05:04.320 between, you know, 13,000 to 20,000 give or take. Uh, and you can see the overall
00:05:09.520 downloads. So, that's one way to do it. That's probably not the most like easy way to do it. We also have the SQL
00:05:14.720 playground. This is uh available online. It's web- based. You can basically come here and come on the left hand side.
00:05:21.360 Sorry, it's a little small to see, but basically you'll see the words Ruby gems, which then I just clicked on and
00:05:26.400 closed. You'll see Ruby gems. You can click on something like emerging gems. You can run it and you will see some of
00:05:32.560 the emerging gems. For example, GitLab crystal ball. I don't know what this does, but it's emerging. It's getting
00:05:38.400 more downloads. It's getting more popular. Great. You can hit on any of these and be able to see that. And
00:05:43.680 finally, this is the agent house that I was talking about. So, this is llm.clickhouse.com.
00:05:48.960 Anyone can access it. It has data from a few different sources. Like you can see some of my old queries here are about
00:05:55.120 like flight data. In fact, this one specifically flight data for Chicago to New York and how commonly it's delayed
00:06:01.360 and all this other stuff. One of these is actually really funny because it noticed COVID and put like a black dot
00:06:06.479 on it and was like, "Look, there was no delays during this time period." And you're like, "Yes, there's no flights. Congratulations." But basically with
00:06:13.440 Ruby Gems, you can do the same. So yesterday, for example, I asked it um I
00:06:18.560 think I asked it, yeah, how many downloads this week on Ruby gems? And then specifically, I think I also asked it a really dumb question. Yeah, I also
00:06:24.960 asked it what is Ruby gems just for the I just was testing agent house. I really wanted to know and then we also wanted
00:06:30.639 to know how many times the bundler gem had been downloaded. But what this is doing on the background is it's actually
00:06:36.000 running select queries. So it's writing the SQL it's querying click house but when you ask it questions like here let
00:06:42.800 me go grab let me go grab this. Okay, can I copy this? I really hope I'm
00:06:48.160 copying it. Yeah, there we go. There's some lines in
00:06:55.840 here I should probably get rid of. With my luck, that will break agent house.
00:07:02.479 I realize now I just asked a horrible question. How often? What does often mean? Well, anyways, it's going to run
00:07:08.000 it. It's going to go run the select query. It has been downloaded almost a million times total. Um, that's quite a
00:07:13.919 specialized gem compared to the bundler. I think that's my Yep, that's the gong. All right, my demo's done. I really
00:07:20.240 quick just wanted to do this. So, we're doing a social after this event wraps. If you grab this QR code here, you are
00:07:26.639 welcome to join us. Uh, thank you, Zoe. Next up, Jeremy Smith.
00:07:34.080 Hey, everybody. This talk is called Programming in the Low Memory Environment of Your Brain. Or
00:07:39.759 it might just be mine. We'll see. Uh, when I saw the lightning talk sign up, I thought, "Oh, I'd like to do
00:07:45.520 that." But, uh, I don't know what I'd give a lightning talk about. And if I just trusted my memory, I wouldn't be
00:07:50.720 standing here. Lucky for me, I don't. I keep a doc called conference talk ideas. I scan the list and this one popped out.
00:07:58.080 And I had totally forgotten that I had shared this idea on Twitter last year and Rails OG Ben Orinstein had
00:08:03.599 encouraged me to to uh start with even the smallest version of this to begin with. And then it clicked. Oh yeah, a
00:08:09.520 lightning talk is the perfect small version of this. So I want to ask you, is it possible that you might be
00:08:15.039 limiting yourself by an overreiance on your memory? All of us are dealing with the
00:08:20.240 relatively small context window of our working memory. In addition to natural limits, our memory is impacted by a
00:08:26.479 whole slew of things, many of which are totally outside of our control and can change very suddenly. And chances are at
00:08:32.880 any given moment, we don't realize the severity of the limitations because we don't remember what we've forgotten.
00:08:39.440 Thankfully, that doesn't have to spell doom as we humans are tool using animals. But in my experience, tools are
00:08:45.920 not the hard part. The hard part is getting over our resistance. Here are
00:08:51.120 all the objections I've I've used to have to relying less on my memory and what I would say to my past self now.
00:08:58.320 I should I should be able to do it on my own. Uh except your fallible memory. There are no points awarded for doing it
00:09:03.519 the hard way. What worked uh for you when you were younger may not scale with greater life demands and difficulties and greater responsibility and
00:09:09.519 criticality. If it's important, I will remember it. You will sometimes, but your hit rate
00:09:14.560 will be much lower than you uh realize. I have plenty of experiences now that show me differently. I won't be doing
00:09:20.800 this again. Sometimes this is clearly untrue, like filing taxes or installing that one package with homebrew. And
00:09:27.600 sometimes you are playing the odds, but more based on hope than on evidence.
00:09:33.040 The cost of relying on tools will be higher than the benefit. It's possible, but you are likely overestimating what's
00:09:39.440 enough to be effective and underestimating the future time saved. You can make tiny experiments to build
00:09:45.040 confidence. I will be collecting too much information or hoarding. Storage is
00:09:51.440 cheap. Spending hours looking for something you've lost or trying to reproduce something that you've done before is expensive.
00:09:57.680 I don't want the record, personal record of my life to consist of the minutiae of all the technical work I've done. Uh
00:10:04.240 this is just life. We all toil and struggle through daily challenges, most of which are mundane and trivial in the
00:10:09.680 grand scheme. But don't diminish the dignity of your labor by believing that it's not worthy of recording.
00:10:16.000 So, with that in mind, here are the tools that I currently use. Project logs, summary, videos, reference
00:10:21.519 materials, and publish content. Let me talk about each one. I keep a log of nearly every project I work on. To
00:10:27.519 borrow from getting things done, a project is anything with more than one step. I'll usually have one main note per
00:10:33.600 project with highle tasks and details at the top and at the bottom, an appendon section with each day I've worked on
00:10:39.760 that project and all the notes that from that day. This will include questions I've had, decisions I've made, tasks
00:10:45.040 I've accomplished, snapshots of current understanding or opinions, errors I've hit and how I resolved them, excerpts of logs from bugs and incidents, all the
00:10:52.000 links related to a research session, snippets of code, commands I ran, and plan next steps.
00:10:58.079 Note, the project logs are for you. Keep those separate from what you put in company project management tools. You
00:11:04.720 want to own these, and you don't own what others can block your access to. I work with two to three clients at a time
00:11:11.040 and the context switching can be a real challenge. By Monday, I've often forgotten completely what I was working
00:11:16.880 on for the first client the week before. Uh I'm increasingly making video walkthroughs of features, proposals, and
00:11:23.519 research for my clients. What has surprised me is that I'm almost always coming back to watch these videos again
00:11:29.760 myself, often several times. They help me find my place again much faster than just looking over code or notes. Most
00:11:36.560 videos are under 10 minutes. making playback at 2x cheap. I use Loom and I
00:11:41.920 think it's absolutely worth paying for a tool that uh reduces friction for recording and sharing.
00:11:48.320 Many things don't fit into a project frame and are more like research topics,
00:11:53.360 areas of study or inquiry or ideas and notes for future projects. Have a collection bucket for each of these and
00:11:59.600 get in the habit of throwing everything you think of in there. It should become ne second nature.
00:12:05.279 The pinnacle is published content. When you publish, you reinforce and generalize your knowledge and provide
00:12:10.800 benefit to others as well as your future self. Publishing doesn't have to be high cost. There are many scales. You can
00:12:17.360 spend five hours on a video, three hours on a blog post, 1 hour on social media thread, or 15 minutes on a GitHub gist.
00:12:23.760 I built Rails Inspire as an intermediate between gists and technical blog posts as an it's an easy way to share code
00:12:30.720 samples with contextual explanation. I have yet to regret the time I spent on
00:12:36.079 publishing content. It always rewards me, often in surprising ways. In all this, keep in mind the goals. Build
00:12:42.720 context quickly. Figure out where you left off. Remind yourself of past diffic uh discoveries and decisions. Provide
00:12:48.240 evidence for past actions. Have materials already collected for creative work. Reinforce your learnings. Increase
00:13:01.920 Next up, we have Sam Pter. Hi. Uh, my name is Sam and this is a
00:13:10.160 crash course on linguistics uh with references to Ruby and Rails. Um, so
00:13:15.600 yeah, as I said, my name is Sam. I'm a CS and linguistics student at Berkeley and in the Rails world, I hope help
00:13:21.360 maintain HCB, which is a open source neo for nonprofits.
00:13:26.880 Cool. So, uh, what is linguistics? Uh, linguistics is the study of language. Uh
00:13:32.000 it's a study of how we speak. Uh how we pronounce words, how we structure our sentences. Why do we study it? Because
00:13:38.399 uh language is one of the most important tools we have as humans. Uh it's how we all communicate to each other. Look at
00:13:43.760 us at a conference communicating with language. Uh and it is also a very interesting thing to study because there
00:13:49.200 are a bunch of puzzles. And I don't know about you all, but I really like solving puzzles. So that's why I like it. Um
00:13:56.160 there are four kind of key branches of linguistics. Uh we have phenology, morphology, semantics, and syntax. I'm
00:14:02.720 going to run through each of these briefly with reference to some sort of Ruby or Rails feature. Uh and they each
00:14:09.440 build on top of each other. So we'll start off with phenology. And here we
00:14:14.560 have the IPA. Does anyone want to try having a shot at what these words are?
00:14:20.639 Yes. Perfect. Uh I maybe chose slightly too easy to guess words. Um but this is
00:14:26.240 the IPA. It's not exactly the like the Latin alphabet, but it's an alphabet we
00:14:31.760 can use to uh communicate how we pronounce things. Uh you'll notice that there are two pronunc pronunciations for
00:14:37.839 Philadelphia. Uh it's cuz that varies throughout the world. Cool. Next up, we
00:14:42.880 have morphology, uh which is the study of the structure of words. How many of you have a concern in your
00:14:49.120 codebase that ends with the like? Yeah. Awesome. Well, that's an example
00:14:55.519 of uh a morphe, which is a subunit of a word that has meaning. So, in attachable, we have the word attach and
00:15:02.959 the like suffixable. All morphes have meanings. For example,
00:15:08.160 uh I pulled a concern that's like has tasks. The has has a meaning. ID has a
00:15:13.519 meaning. And the most simple morphe is the plural morphe, which is just an s in most cases, but indicates that something
00:15:19.920 is a plural. Um, and we can break these down. um into
00:15:25.360 roots which is attach and then suffix of abble um and there's a bunch more you can do with more themes. Each of these
00:15:32.079 is like a semester worth of university content that I'm trying to cram into a minute. Um next up we have semantics
00:15:39.279 which is like the meaning of sentences and phrases. Um one common way of studying sentences and their meaning is
00:15:46.720 uh to have sentences derive their meaning from a series of truth conditions. basically a collection of
00:15:51.759 facts that if all true make that sentence true. For example, the truth conditions of a um
00:16:00.079 a sentence like this, Rails is an awesome programming language would be Rails is awesome and Rails is a
00:16:05.440 programming language. I am now realizing I meant to write Ruby. Uh so this sentence is actually not true.
00:16:13.199 Um so uh if we were to write this in Ruby um you have uh you could write a
00:16:19.519 function like this is true which takes the context of what we're speaking about uh a series of truth conditions and just
00:16:26.000 loops through them and if one of them is false the sentence is therefore false. Um now what do these truth condition
00:16:33.600 functions look like? Well actually the most common way of of understanding these is that they are set inclusion
00:16:38.639 functions. So for example, Rails is awesome would be Rails is in the set of
00:16:44.320 awesome things. Here I have a couple of other things I think are awesome. Um and
00:16:49.360 you could think of those uh a little like this. Um so the second one would be false. Uh so TLDR you can think of every
00:16:57.519 sentence as one or more characteristic functions uh using the set theory version of characteristic functions.
00:17:04.480 Lastly we have syntax um which is the structure of sentences. There are a couple of common ways that language
00:17:10.880 languages structure their sentences. Uh you have subject verb object subject object verb and then verb subject
00:17:17.439 object. Um subjects are the person doing the action. Verbs are the action.
00:17:23.039 Objects are the thing that the action is being done to. Uh it is debatable whether Ruby is SVO or so. Um here's a
00:17:31.760 piece of Rails code that uh you could argue is so you have the subject the user table. uh you're creating uh a the
00:17:39.679 object which is a user called Sam and then but you could also write so for
00:17:45.200 example here you have again uh the user who is taking the action of building a new hobby onto them there isn't a great
00:17:52.720 answer and honestly this is because I'm trying to compare a programming language to a human language um but at the end of
00:17:58.880 the day linguistics is descriptive and not prescriptive uh that's one of the key principles is that you don't as a
00:18:05.039 linguist you don't prescribe rules You try and describe rules. So here I am trying to describe Rails as a Ruby as a
00:18:11.120 human language. So thank you so much.
00:18:16.320 Next up we have Brooke Kman. Thanks.
00:18:22.720 So hey everyone um just really happy to share uh with you Terminus. Uh before I actually talk about this though, I need
00:18:28.799 to give you some context. I work for a company called Terminal with all the valves taped out and we do e- in devices
00:18:34.640 and that's what you're seeing here. E- in devices uh are just a simple technology, right? Just a simple
00:18:39.919 hardware construction. It's a dumb device uh that basically just renders image information. So you can send anything down to this and we'll render
00:18:46.160 it for you. And what's really nice about this is that you can get really creative in terms of like what you want to uh
00:18:52.320 create. Think of whatever kind of data that you want to put onto this device, you can do it very easily.
00:18:58.320 So what is Terminus then? Well, Terminus is our open source solution. uh we call
00:19:04.960 it BYOS so build your own server and this is our reference implementation so that you can have an open source
00:19:10.400 solution to actually uh uh render data on these uh in devices it's private and
00:19:15.840 secure kind of by default right because you get to run the server locally you have your device locally it's all on your own network so it's kind of a
00:19:21.360 closed system it's 100% open source which I'm really proud of it's something that I've cared
00:19:27.039 about for many years I've been doing open source for over uh almost two decades now and the other thing that
00:19:33.039 ties into this is is the unbreakable pledge as a company. Uh something I'm also very proud of because basically
00:19:38.400 what we're saying is hey if we ever go uh under or um can't uh sustain
00:19:44.320 ourselves anymore or just get bought out like we'll open source everything uh so that you'll have everything in addition
00:19:49.840 to all the open source stuff that we're doing right now. So in terms of text stack uh it's
00:19:55.360 basically built on Ruby of course. Uh but the thing that I love about it most is it m it it blends the best of Ruby in
00:20:01.440 my opinion which is object composition with functional composition. This lends itself really well because for the text
00:20:07.440 or the web stack we're using Hanami that blends in really well with that kind of design philosophy. As for the front-end
00:20:13.840 type stuff we try to keep it really light in terms of JavaScript. We're using HTMX, so we can just send uh partial information server rendered uh
00:20:20.320 back and forth and then just using pure CSS because modern browsers have come along so far that you can actually lean
00:20:26.480 into that and have a really good clean design without actually having to bring in a really complex uh uh framework.
00:20:33.360 Lastly, if for some reason, I know we're all rub rubious, but if you just don't want to deal with any of that, you can just grab the Docker image that we build
00:20:40.159 and you can run it that way. In terms of architecture, uh, uh,
00:20:45.360 Terminus sits right here in the lefth hand quadrant of our entire architectural stack, uh, which is the
00:20:50.400 DIY, uh, web server. And that allows you to communicate and send information to your device. What's really nice about
00:20:56.080 this is you can also proxy uh, between uh, uh, Terminus and the core server.
00:21:01.280 And you can actually bring in images and all the uh, plugins and recipes and stuff that we have in the core server
00:21:06.320 down to your device as well. In terms of setup, setup's actually uh fairly simple. Um when you get your
00:21:13.600 device and you unbox it, um you're going to want to connect to the uh Captive Wi-Fi portal. It's going to show up as
00:21:19.280 TRML here. Uh you'll connect to it with your SSID of your network. Uh fill in your password. And the critical thing
00:21:25.520 here is you're going to put in your server address. Uh because by default, the device is going to want to talk to our core server, and you want to talk to
00:21:32.720 Terminus that's running locally. And so you put in your IP address, connect to that and then uh uh it starts syncing
00:21:39.840 and the the syncing it's doing is actually a basic JSON data API. It's very very simple actually. Uh it just
00:21:47.120 wakes up the device D says hey Terminus what's the next image? Uh Terminus sends that JSON response down with a URL to
00:21:53.760 the image and then that renders on the device and then you can just go through multiple screens that way. In terms of
00:22:00.559 uh web UI uh it's very simple at the moment. We're working on making this better and a better uh uh usability uh
00:22:07.200 better pleasant experience for you to uh to to use in your home server, which is a a dashboard to kind of keep stats on
00:22:13.919 things. Uh devices, so you can actually look at the logs, edit them, delete them, add new devices, whatever. Um
00:22:20.640 there's also a little bit of a designer in there. This actually uses HTMX to do serverent events. So as you uh modify
00:22:27.440 your HTML code, you can see the new uh screen render on the lefth hand side. And then you can use that information to
00:22:32.799 actually hit the screens API and uh build a new image that actually gets sent to your device.
00:22:38.880 So uh new features are already uh are being built uh weekly. Uh this is kind of basically my primary job. Uh super
00:22:45.919 excited to be working on this and actually being able to provide something that the community can really enjoy. Uh
00:22:51.360 thanks so much for letting me speak and you can find the slides and uh feel free to reach out and contact me. I'm happy
00:22:57.280 to talk more about this. So, thanks.
00:23:02.960 Next up, Kelly Popco. All right, I'm here to talk about when you might want to use the data object.
00:23:08.320 Uh, data is a relatively new Ruby class introduced in Ruby 3.2. Use data when
00:23:14.720 the intent is to store an immutable atomic value and when you want to define simple classes for value alike objects.
00:23:21.760 Cool. So, how do we use it? um we use uh data.define and we pass it
00:23:29.520 keyword arguments. So here we're using it on a book as an example. We can also
00:23:35.200 optionally pass it a block if we have behavior like methods that we want to add to it. Um
00:23:43.520 then creating an instance of uh the book. Uh notice that we can either call
00:23:49.120 new or use bracket bracket braces bracket and we can
00:23:54.720 optionally use either keyword or positional arguments. So here we're doing one you know both
00:24:02.320 all four combos. Now how does this compare to its arguably closest neighbor
00:24:07.520 strruct? Uh let's take a look at that. Uh in terms of syntax just uh using the
00:24:13.679 uh similar kind of house example uh we use data.define to instantiate the data
00:24:19.200 class uh keyword arguments. Uh with strruct we're going to say strruct new. Um now what is one of the main
00:24:27.039 differences between the two. One of the main differences is going to be mutability. Um let's try out some
00:24:33.200 renovations here. Uh we're going to look at strruct. We have created a house using strruct. Uh we we've created a
00:24:40.320 ranch house with one uh one floor and we're going to try to add a floor. Make it a two-story ranch. We get yeah two
00:24:48.240 floors. Uh and we can also check is ranch frozen. It is not frozen. Let's
00:24:53.360 try to do the same for with data. We're going to define the data the house
00:24:58.880 using data. Uh here we have a ranch house. Um and then we're going to try to increment floors. Notice that we get a
00:25:05.279 no method error raised. Uh we also note too from the error that there's no uh writer method. So what would happen if
00:25:13.600 we define a uh define a writer method? We can define the writer method when you
00:25:20.400 when you when we try to use it though we get a a frozen error. So we can also
00:25:25.440 check is ranch frozen. Yes, ranch is frozen. And just as a as a sideby-side
00:25:30.799 comparison, we're looking at data methods and struck methods and then each
00:25:35.840 respective instance methods. Um you can see the strruct just has way way more that's built right in. Um and then if we
00:25:44.400 compare the diffs of methods, we also can notice that strruct only has one method that data does not whereas uh the
00:25:52.559 reverse is certainly not true. Cool note about width though. with we
00:25:58.159 can create a copy of that instance and change any or all of the attributes um
00:26:03.200 and make a new instance. So to data or not to data we want to
00:26:08.640 look at mutability, behavior and communication. Um when do we want to use
00:26:13.760 data? When do we want to use something else? Uh if we want a lot of methods, if we want to be able to change values, we
00:26:20.559 probably want class. Data is not going to be what we want. If we want to create
00:26:25.679 that simple class for a value object, if we want a well- encapsulated object uh
00:26:30.720 where those changes uh those values once created cannot really be mutated, that's
00:26:36.240 when we want data. Um is data is an instance of data truly completely immutable though.
00:26:43.200 We have some immutability workarounds we can look at. So the instance of data is frozen but the attribute values if those
00:26:50.799 are mutable, they are still mutable. So we can sort of work against the intent of data if we really want to. So just
00:26:58.400 looking at an example where we have um a hash. So we're we're creating a data
00:27:04.640 object color counts where we're passing a hash red blue green and we want to
00:27:10.480 increment say the red count by five for I didn't really think about why but we
00:27:16.320 totally can if we look at it red now has five. So um yeah, so we can update those
00:27:23.440 values. How are we doing? Uh just really another similar version with uh with uh array uh we can also you
00:27:32.000 know knock one of the one of those out with pop or we could push to that array because the array itself is mutable. So
00:27:37.679 just a caveat I suppose. So bringing it all together you might want a data
00:27:43.039 object if you want to avoid a muted a mutated value on the object coming back to haunt you. Um that said there are
00:27:50.240 work workarounds. Um so it's not foolproof. Thank you so much as well. Oh
00:27:56.000 also about communication. Okay. Thank you so much. That was a flyby of the Ruby data class.
00:28:01.919 Thank you so much. Thank you. Next we have Tia Anderson.
00:28:15.520 Okay. Hello party people, all eight million of you.
00:28:23.120 Hello. My name is Tia and I am a Rails Comp 2025 scholar and this is peace,
00:28:30.000 love, and crud. A journey, a Rails journey to calm. So, I totally believe
00:28:36.399 that a lack of internal peace is fueling a whole lot of the chaos and calamity
00:28:41.600 that we're seeing in society right now. from burnout to road rage to constant
00:28:47.679 conflict, we're all kind of running on fumes. Maybe not all, but you know what I mean. Um, and I kind of wanted to
00:28:53.600 change that because that's a lot. Uh, in a world that kind of feels like like it's spiraling politically, socially,
00:29:00.559 and even in just day-to-day interactions. This is my journey to reclaim peace through code.
00:29:09.840 Okay, this is the first thing that you land on when you go to my app, which is POM, which stands for peace of mind.
00:29:18.080 Okay, and it was just made to be soft tones, uh, simple choices, long inner
00:29:23.120 sign up, no extraness, no extra chats or all that kind of stuff. No pressure,
00:29:28.640 just come on in and catch these vibes. Um, I built this during a time of like
00:29:33.840 really really big life changes for me from like being laid off to watching what looks to me like the world burning
00:29:40.880 down and people treating each other like complete garbage routinely. So, I didn't really want more noise. I wanted to a
00:29:48.640 place that was going to let me pull away from the chaos and like center myself again.
00:29:54.880 All right. So when you first log in, you get to the dashboard and um
00:30:01.840 it's just common and simple like everything else. And right now it just offers the two options of journal and
00:30:07.760 gardens, but eventually will offer recipe tracking and the ability to couple recipes andor your plants with
00:30:14.799 journal entries because inner peace doesn't come from doing more. It comes from focusing on what actually matters
00:30:21.440 out here. Now, next we'll go into the gardens. Uh, you can set up several however many
00:30:28.320 gardens you want to and do the notes in the plants and everything like that.
00:30:33.919 Okay. Um, you can track the progress of your plants within there. Uh, and it's
00:30:40.880 the thing is that I don't feel like it's just plants being tracked. It is, you
00:30:47.039 know, you're tracking your care, your progress, your intention, watching something grow over time. Even when you
00:30:54.159 feel stuck, it's kind of a reminder that you're not. And really and truly, sometimes we feel stuck because we need
00:31:01.760 to look inside and grow from literally right where we're planted.
00:31:07.200 All right. And this is what it looks like on the show page for one of the plantings, which is a a user, a plant,
00:31:14.159 and a garden. Um, and you can see that you can add progress notes and things
00:31:19.600 like that so that you can watch it. Uh, and there's timestamps and things like that. Um, honestly, it's a little bit of
00:31:27.200 a metaphor. You know, these little logs added one by one to show your effort, your setbacks, and your joy. Uh, does
00:31:34.799 sound familiar? It's kind of crud, but mindfulness and presence crud.
00:31:40.799 All right. And then we have here's the journaling space.
00:31:47.120 This is, you know, just what it looks like when you first land on it. You can scroll through. This is a screenshot, so
00:31:52.880 I should probably stop trying to scroll. Uh but but this is where um you can actually
00:32:00.880 scroll down and you get all of the months for which you have an entry and it's you know that the first little
00:32:07.200 three accordiums are kind of popped open but you can look at any of them. Um,
00:32:14.000 so entries are organized by month for now, but in the future they'll also be
00:32:19.039 able to be grouped by like category or like event, emotion, stuff like that.
00:32:24.720 Um, there's no way to get like likes or comments. Nobody's looking at it, so there's no pressure, which is amazing.
00:32:31.039 Just thoughts and reflections. Um, because we need somewhere to put the weight that we just we randomly pick up
00:32:38.799 and carry. uh we need to unpack those thoughts and feelings that will otherwise become baggage thus leading to
00:32:46.320 this lack of peace that we're seeing everywhere. The idea here was kind of minimalism and choice. Um all right. So
00:32:54.320 also some days we don't know where to start and we potentially end up avoiding journaling at all. So I integrated chat
00:33:01.760 GPT to generate prompts. So, Rails handles the flow. Open AI brings the
00:33:07.200 idea and you bring the truth. Um,
00:33:12.720 let's see. It's just a little spark to get your gears going.
00:33:20.480 Are you okay? It's just a little spark to get your gears turning when you don't know where to start. Uh, and I do want
00:33:26.559 to say that I I did I came to Rails late in the game after years of working on a
00:33:31.840 front-end platform that runs on Rails. Uh, but learning to build from scratch
00:33:37.039 kind of changed everything. It gave me confidence. It gave me skills. And honestly, it helped me find peace.
00:33:45.679 In closing, peace isn't loud. It isn't flashy. It doesn't go viral, but it changes everything. Because when one
00:33:52.399 person finds calm, it ripples outwards. It changes how we show up in our homes, in our jobs, and even on the road. Peace
00:33:58.880 spreads. But you have to choose it. If even one person chooses to build peace, they give others to uh the permission to
00:34:05.919 do the same. And that is how we begin to change the world. You can find my app and contact info on this final slide. I
00:34:13.520 am Tia Anderson, Rails Comp 2025 scholar, and I wish you peace, love, and
00:34:21.040 crud. Thank you for coming to my TIA talk.
00:34:27.440 Next up, uh next up we have Justin Bowen. Sweet.
00:34:37.200 Okay, I'm Justin Bowen and as most of you have probably already guessed, I'm going to
00:34:42.480 be talking about Rails and AI because that's what I do. Uh, I've been doing
00:34:47.599 Rails for 17 years now. Uh, the last 10 years though, I've been doing a lot of Python computer vision. Uh, this is my
00:34:54.399 cat, Laouie, past and present. She's 17. She's been with me by my side the whole
00:35:00.400 time. And yes, like I said, since Railscom 2021, I have been talking about AI uh and Andrew Kane a lot. Um
00:35:10.480 there was actually Marco one video missing uh from Ruby events. And that is
00:35:17.119 uh again me and Looie thanks to Arena. You guys might have seen that picture twice. I didn't get to see it. So there
00:35:23.839 are a lot of tools missing in our Ruby toolbox if you're familiar. Um, one in particular is not really AI but does
00:35:30.960 kind of have that connotation which are i Ruby notebooks, live notebooks, Jupyter notebooks if you're familiar.
00:35:36.560 GPU accelerated runtimes for inference and training. Onyx runtime Ruby does now
00:35:42.000 support CUDA thanks to Andrew Kane and I just made an issue. That's the word opensource frameworks for AI development
00:35:49.599 and that's what we're going to talk about. Agentoriented programming is actually not a concept I made up. The
00:35:55.760 paradigm was coined like 30 years ago. Wikipedia, this is also sort of from the Wikipedia, but we're not here to talk
00:36:02.400 about vibe coding, and we'll get to that later if there's a little time. But we're here to talk about cool features
00:36:08.079 in your Rails app that are AI powered, like an object. Agents give you
00:36:14.079 functionality, but can decide how to use that functionality where it's not just a
00:36:19.200 lifeless object representing some kind of data structure. It is a lifeless object representing some kind of
00:36:26.640 complexity. Uh active agent compresses that complexity into something that you
00:36:31.839 might be familiar with. Uh it should be MVC models, views, and controllers.
00:36:38.560 Actions render prompt templates uh using action view and uh the prompt context is
00:36:44.240 the model and the agents are controllers. I didn't read the highQ. I probably won't have enough time. This is
00:36:49.680 actually just from the Rails guides uh controllers, you know, NVC. I just
00:36:56.960 slapped an agent class in there. So now you can have a controller, too. And your
00:37:02.000 public methods become actions that can be called. You get cued generation just like you would with action mailer. If
00:37:07.599 you've ever used a controller, you should be pretty familiar with this. Uh two major things that we've probably all
00:37:14.480 attempted to do at this point are interactive conversational AI like chat bots. everyone wants it. They're not
00:37:20.079 that great. Uh, autonomous operational agents. Interesting. Again, chat bots
00:37:25.599 are like long form wizards, and you'd probably be best off just using a form. It's faster and a better user
00:37:31.520 experience. Uh, and then, yeah, interacting with third parties with MCP or tools. That's a thing you can do.
00:37:36.640 Actions can also be tools. Today, we'll be talking about both concepts with translations as a background task that
00:37:43.280 you can do. Uh, okay. This slide is just to indicate that it's demo time. So,
00:37:48.400 we'll get into the code uh in a second. Let's just do the demo real quick and hopefully the internet still works. Uh
00:37:56.079 this is about cat. So, mau I didn't spell it right kind of on purpose. So, we can ask what can you do
00:38:04.400 and hopefully get streamed results back. And it says that it can show cute cat
00:38:10.560 images, which I didn't promise at the beginning, but I will hopefully deliver. Uh, and you can say, "Show me a cat"
00:38:17.280 without the A, but it should still do it hopefully if the internet's good.
00:38:23.040 There's a job running. That's good. Um, ah, cat, it worked.
00:38:30.880 I did break it multiple times today during the hack space. Uh, we also have translate and I do want to get into
00:38:36.400 code, but we only have a minute left. So, let's see. Uh, yeah, this is your agent class. The translate agent has a
00:38:43.119 simple translate action that renders a translate text herb file that you guys
00:38:48.400 have probably felt before or used before. It should feel familiar. You also get before generation after
00:38:54.640 generation call back similar to 40 seconds left. Uh
00:39:00.960 similar to what you would see in action mailer with the deliver uh callbacks
00:39:07.119 and then the chat that you just saw is all just going through the support agent which just gets the content from the
00:39:12.880 message the user typed the chat ids the context and generate later like we were talking about. There's also in the
00:39:19.359 support agent a action called get cat image that goes to
00:39:26.400 cat image as a service to get you that cat from cat as a service and every time
00:39:34.240 you go there it just gives you a random cat and in that agent we also have a
00:39:40.079 call back that we can use for handling stream chunks. Uh, like you saw in the stream chat, on stream callbacks give
00:39:46.720 you the ability to render each of those chunks as they come back. Uh, and before a after actions. 10 seconds left. Hold
00:39:54.160 on. It's going off. And, uh, I'm tons of fun. Uh, if you didn't already catch that on GitHub and
00:40:01.119 tons of fun11 on most of my socials. Uh, the hack space was very inspiring for me. If you're interested Oh, I'm
00:40:07.599 overtime. Okay. Yeah. Scan. Thank you.
00:40:14.240 Next up, Deborah Fernandez.
00:40:19.359 Hi everyone, I'm Deborah. I've been working with Ruben Railos since 20 2012.
00:40:26.160 Now work at power. Please check our booth. And now I'm here with you guys to
00:40:31.359 celebrate the 10 years of Rails Girl S. Paulo. Yay.
00:40:38.400 And what do you have to celebrate? In 2015, two women in S. Paulo had a dream.
00:40:45.520 We had we want to bring more women to technology with rails. Nowadays, people
00:40:52.320 came across long distance to live this experience from the whole Brazil and
00:40:58.880 beyond. And we just really recommend you should try. On the last 10 years, we reached about
00:41:07.440 500 people, 500 women to teach and to develop their careers using ruban rails
00:41:15.040 or another language. We have been empowered human around the Brazil and
00:41:21.119 beyond. And our most common feedback that is
00:41:26.160 most important it is that our space is one of the safest one to then overcoming
00:41:34.720 their fears and be more in several aspects. Another special thing is that
00:41:42.800 often these girls come back as mentors because they ha they want to give back
00:41:49.200 to community the p the power that they have received.
00:41:55.520 Our main goal is that women truly truly believe in themselves and we have
00:42:02.160 reached that. Ray's girls is not just about programming is about changing reality
00:42:09.440 and behind the scenes it would be possible possible if regular people like
00:42:16.240 all of us dedicate themselves to change the world. And this is my invitation for
00:42:23.359 you today. Help people around you, 500 or just one. Want to start something
00:42:30.640 new, a workshop, a small group? Start very small. Be an ally. Find allies.
00:42:37.920 Look for people known for perfection.
00:42:43.440 Be wrong on perfection. It's so funny. We are here here to help Camila, myself,
00:42:49.440 Karolina, Daniela, Eline. We are here to help you of course to receive help too
00:42:56.640 and cheer on you on the next 10 years. There's no great success that change the
00:43:12.000 Thank you. Next up we have Charley Ramulus.
00:43:19.760 Awesome. As I said, uh my name is Charlie Ramlers. I'm a full-sack developer based out of Boston. Uh I
00:43:25.280 learned to code with Ruby, uh which is a garbage collected language, which means that memory is managed automatically for
00:43:31.599 us. Um I've been curious about how memory used to be managed uh pre pre- Ruby and pre- garbage collection. So I
00:43:39.200 took some time to play around with uh C which is the language that Ruby was built on one of the languages uh and uh
00:43:45.680 build some like small small apps and and play play with memory. So uh do manual
00:43:51.920 memory management uh so this talk is going to be about some uh about some small things that I've learned.
00:44:02.079 So, so just as a trivial example, let's say uh we were asked to build like a a
00:44:07.599 small seats management application for like a conference room. Uh let's say the uh the requirements is the the room can
00:44:14.720 only have uh start to start can can only have 20 chairs and uh for attendees and
00:44:21.040 if we were to get more signups, we would we would uh get more chairs to
00:44:26.800 accommodate all these attendees. So if you were to implement that in a C program
00:44:36.079 um uh so so before we we get to that so uh C has uh three main ways to main uh
00:44:44.640 methods to uh kind of like manage memory manually. Uh we have maloc which stands
00:44:50.319 for a memory allocation. It takes one parameter that's that's an energy that
00:44:55.599 you pass to it that kind of like uh you can ask it um returns uh like uh a list
00:45:02.960 of contiguous memory block so that you can store whatever data you want. So if you were to use that uh implementation
00:45:10.000 to uh create uh our little program here. Uh so as you can see in on the right we
00:45:16.079 passing 20 to maloc means that we are like um so the twin chairs initial 20
00:45:21.920 chairs we're passing and we all multiply that by the number uh some number of characters here which is um the the name
00:45:29.440 of the chair so I decided to call each chairs like chair one chair two. So that
00:45:35.680 multiplication would return about like uh 60 uh 60. So that would be um 160
00:45:44.640 bytes that Malo would would return. So we can store all stores all those 20 chairs. Uh so now let's say uh we have a
00:45:52.240 bunch more people like our talk is very popular a bunch more people uh end up signing up for a talk. We can't just
00:45:58.640 just like add all these uh 50 extra people to um uh to our initial like uh
00:46:06.000 room. We like in C. If we do that, we'll potentially um overwrite memory and
00:46:12.319 causing uh issues issues in our program. So, so there's another method called
00:46:17.599 real lock that allows you to uh take the initial u printer slash uh variable
00:46:24.400 variable that we had and you can use it to uh it takes two parameters. you pass
00:46:30.000 in the first pointer that you have and then the second parameter is the amount
00:46:35.760 of memory more memory that you want to add to that. Uh so that's that's what
00:46:40.960 we're doing here on the on the second block and then once you're done let's say the talk is over and then um we need
00:46:49.119 to return uh we need to return the chairs that we had borrow borrowed to to
00:46:54.160 accommodate the extra uh people that were attending. uh so in C the same way
00:46:59.359 we we need to make sure that we we free the memory that we're using so that other parts of the program can use it.
00:47:06.319 One of the main thing that happens if you not do that we can easily cause memory leaks and uh in the past couple
00:47:12.800 of years uh uh the US government have been actively asking um asking uh the
00:47:20.720 the company that they work with to uh to to uh to add u
00:47:27.920 um to add road maps to to their to their uh
00:47:33.119 to their website to to tell them how exactly you they're going uh they're going to um
00:47:40.880 to improve uh so that they can prevent uh their uh any type of memory issues
00:47:47.839 from the program. So uh so if we were to implement the same thing in Ruby
00:47:53.760 sorry so if we were to implement the same thing Ruby in Ruby so like it is it is
00:47:58.880 very very simple uh like we were doing before before we start with a room which
00:48:04.000 is the area that we have and we add the 20 uh chairs that we want to add to it and then um so once more people come to
00:48:13.119 the room we just add the 50 more people that we want to add which is the 70. So
00:48:18.400 we add that and we don't have to worry about calling Maloc or or Kok or free
00:48:23.839 because uh we have garbage collection that takes care of that for for us in the background. Um so um Ruby is a
00:48:32.079 amazing language that's one reason all of us loves it and um so um and this is
00:48:39.440 it. Thank you.
00:48:45.599 Next up, Rachel Wrightman. My name is Ra. Hello.
00:48:54.880 My name is Rachel Wrightman. I go by Chale Codes online and this is gamified developer experiences. I want you to
00:49:01.599 have as much fun in your day job as you do playing a programming game. But first, we need a definition. So, a
00:49:07.599 programming game is any game where a core mechanic is creating or modifying programs. and they can look very
00:49:14.400 different. For example, this one is Battles Snake. So, it's a multiplayer snake game where you build your own
00:49:20.480 where you have your own server deployed and what they do is they send you the board state and you reply with what move
00:49:27.440 you want to make in under 500 milliseconds or your snake just keeps trucking along in the direction it was going. This one is exopunks. You are
00:49:34.319 infected by a disease that is slowly turning your organic parts into machine parts. An AI is giving you nonsensical
00:49:41.599 programming tasks in exchange for medicine to slow the progression of your disease. You're writing programs for
00:49:47.040 exos which are tiny robots that can spawn more tiny robots. Your documentation is a hacking given and you
00:49:53.599 can program your new and you have to program your new machine parts to function as your old organic ones did.
00:49:59.200 This red gift, by the way, is you reprogramming your hand. So, this last one is the most beautiful or uh
00:50:04.480 atmospheric storydriven programming game I've ever seen. It is my favorite, and that is not because I am in it. The
00:50:10.400 reason that I like it is because I played the demo, got involved, not the other way around. So, this is a very
00:50:15.839 meaningful game. It's storydriven and it's heartfelt. So, in this one, uh the
00:50:21.359 coding that you do mostly involves setting and copying variables and getting creative with their usage. And
00:50:27.599 uh so you can actually walk around in this one which is unsurprisingly pretty rare in a programming game. All right,
00:50:32.960 now let's get into why programming games are fun and how we can take this into our day jobs. So there are six topics
00:50:39.200 here and I think we have time for three of them. First of which is the immediate feedback that you can get and the last
00:50:44.880 two we're going to cover purpose and autonomy. So in programming games you can get immediate and visible feedback.
00:50:51.520 So this is what code execution in Exopunks looks like. At any given moment, you are aware of what line you
00:50:57.280 are in, what value is in each of your registers, and you have a representation of your code's execution that is very
00:51:03.119 visible. In fact, if you look at the tape decks over in the feed, the digicam feed up there, you can actually see the
00:51:09.359 correct one rotating whenever you are loading the file. So, this is before we even talk about the fact that your code
00:51:15.520 is run past 100 tests in order to ensure robustness. This is a dream developer
00:51:20.640 experience. you have immediate feedback and unparalleled visibility into execution. So, how do we bring this into
00:51:27.040 your day job? So, I think one of the first things you can do is test-driven development. Red green is uh I think one
00:51:33.599 of the most satisfying ways to write code. You have clear feedback, easy to manipulate parameters, uh immediate
00:51:40.240 regressions, and you don't have to write tests at the end because they're already done. The next one is live reloading. So, we talked about that visibility and
00:51:46.720 feedback. When I'm working with my Jackal blog, I have my code on one side and then I have the uh site on the other
00:51:53.440 one. So every single time I make a change and save it, I can immediately see that feedback on the other side. And
00:51:58.559 the last one is your debugging tools. So I want you to think about your debugging tools like how close can you get to that experience that you have in Exopunks
00:52:04.880 where you know exactly which line you're executing, what each of the values are and the uh parameters and uh everything
00:52:11.119 that you can see in them. So our next topic is going to be purpose. So, in games, there's always this larger story
00:52:16.800 or purpose that you're taking part in. In uh I mentioned that in One Dreamer,
00:52:23.760 this is a story that made me cry. You're exploring what happened to Frank. You're exploring his history. You're
00:52:28.880 understanding what happened. That story is what draws you through your tasks and gives it meaning. So, how do we apply
00:52:35.200 this to your job? The first thing that you can do is you can talk to customers. You can talk to product owners. You can
00:52:40.319 start to understand how your work impacts the users that you're working with. Next, you can do meaningful work.
00:52:45.839 So, I always feel good about contributing to Ruby for good because I know that that's an organization that is helping to make the world a better
00:52:51.599 place. The last thing you can do is you can learn something new. So, sometimes we can't work on something inspiring and
00:52:57.200 helpful to the world, but at the bare minimum, you can work on something that's interesting and new to you. All of these points are really about caring
00:53:03.599 about your work because if you don't care, why bother? And that's no fun at all. So, our last one is a meta point.
00:53:10.240 So with programming games, you are choosing to sit down and spend your time on it. This really comes down to autonomy. This is relevant for cases
00:53:18.079 like Battlesnake where it's your own hosted code. It's your own development environment. It's the test cases that
00:53:23.520 you're running. And I think we see this with advent of code as well. I think this applies particularly in cases where
00:53:29.200 you're looking at side projects and open source. I think that this autonomy is part of the reason that you enjoy it.
00:53:34.880 It's more fun when you have a choice. expanding on that. I think that's one of the things that can potentially cause
00:53:41.200 maintainer burnout. I think maintainer burnout can happen when a product project becomes an obligation instead of
00:53:46.960 a choice. So, how do we apply this to your job? I'm not sure. 20% time uh open
00:53:53.440 source contributions. If you know and you figure it out, please let me know. I go by Chale or Rachel. You can find me
00:53:59.839 at chale codes. Chale. For all the social media platforms, hello at chale.codes for my email. Also, I'm
00:54:06.079 looking for work and you can find my resume at that link right there. Thank you very much for your time.
00:54:16.559 Next up, we have Lucy Chen.
00:54:22.640 Hi everyone. Um, I'm Lucy. I'll be talking about Ugly Colors, how I built a
00:54:28.559 web app to rank ugly colors. So, a little bit about myself. I'm a
00:54:34.720 born and raised New Yorker, a Rails scholar, and a firsttime Rails Conf attendee. I studied fashion design in
00:54:41.520 college, and I just started learning programming on my own about six months ago. It felt overwhelming at times, but
00:54:48.880 also very rewarding. Today, I'll be sharing my Oops. Today, I'll be sharing
00:54:55.280 my project color. It's a Rails app I built that lets people vote on whether
00:55:00.480 colors are ugly or nice. Basically, it's hot or not, but for colors.
00:55:06.559 It's a little silly, but it was the perfect way for me to practice Rails.
00:55:12.800 So, the reason I chose to build this app is because colors are a big part of my life as both an artist and a designer. I
00:55:20.079 tend to love a wide range of colors from soft pastels to overly saturated neons, even though I wear black all the time.
00:55:27.520 So, I wanted to build something fun, visual, simple, and fully Rails to see
00:55:32.720 how far I could take a playful idea and learn as much as I could along the way.
00:55:40.000 How it works is in the homepage there are two color rankers, one for single colors and one for color pairs. You vote
00:55:47.040 on whether you like what you see. If you're not sure, you can generate a new color using the buttons or just click on
00:55:52.880 the color itself. Both ugly and nice colors go to a
00:56:00.640 leaderboard, and you can reorder them if you think one is uglier than the other.
00:56:14.400 And if you mess up, you can delete it and revote on another. And to keep
00:56:19.440 things short, there's a voting limit. Just three votes per list. And when you reach the limit, you get a little
00:56:25.839 surprise. If you log in, there's a personal
00:56:31.520 history page called my votes where you can see every color you've ever judged.
00:56:39.040 I track votes by session and user, and I use controller logic to make sure the
00:56:44.319 same color doesn't show up twice, even if it might look the same.
00:56:51.119 So my future steps is to get a deeper understanding of user authentic authentication. Allow sharing profiles
00:56:58.319 both individual and blending color profiles between two users. Create different dual color visual formats such
00:57:05.680 as polka dots or stripes instead of just color blocks. Allow users to input custom hex codes
00:57:12.960 and make my web app uh mobile friendly.
00:57:20.000 It's a simple Rails app, but it's taught me so much. Not just technically like writing custom controller logic and
00:57:26.640 working with models and device, but also patience, debugging, writing really ugly
00:57:31.839 code, and that I could build something I'm really proud of.
00:57:38.000 It's been a lot of fun and I'm excited to meet others during the week and learn about your experiences. If you have any
00:57:44.559 questions or advice for me, I would always love to learn more and get to know you better as a person, too. Thank
00:57:50.799 you all. Okay, next up, Alan Rattlever.
00:58:03.520 Fear. It's not something we talk about, but it's here. It's here with us because
00:58:09.920 we take it with us everywhere we go. Now, fear leads us to build emotional fortresses around our true selves so
00:58:16.799 that we can cower behind them with our imposttor syndrome. Or is that just me?
00:58:22.720 Hi, I'm Alan Ry Hoover and everything I have ever wanted has been on the other
00:58:27.839 side of fear. Fear comes in many shapes and sizes, but what I want what I want to talk about today is the fear of
00:58:34.559 rejection. Like a virus, it causes us to put on masks and wear and and practice social
00:58:41.920 distancing. It lies dormant within us until we approach a new person or a new situation and then it flares up rapidly.
00:58:50.240 For example, do you remember the first time you ever wanted to kiss someone?
00:58:55.280 You likely in that moment experienced anxiety triggered by a fear of rejection
00:59:00.480 alongside a rush of intoxicating endorphins caused by Cupid. Now, even
00:59:06.319 with Cupid's support, asking that question, "May I kiss you?" is an incredibly vulnerable act. You're
00:59:12.960 putting yourself out there. Asking for intimacy.
00:59:18.079 If you fear rejection at all, you won't ask the question, and fear will have kept you apart. Now, at work, we
00:59:24.640 experience it differently. Many of us have imposttor syndrome. Some of us who
00:59:29.760 have been there like myself uh know how know how it affects them. I fear people
00:59:36.880 are going to discover that I'm a fraud. I that my accomplishments will be discredited
00:59:42.640 and that I will be shunned. And ultimately it all boils down to that fear of rejection.
00:59:48.559 It leads me to fortify those defenses that prevent me from connecting with my colleagues. So how can I get past this?
00:59:55.440 How can we all get past this and truly connect with each other? The key is
01:00:01.280 trust. Trust is the vaccine for fear. A large enough dose can inoculate us,
01:00:08.319 mitigating fear's worst symptoms, but it's not free. It comes at the cost of vulnerability.
01:00:14.880 Someone must take a leap of faith, let their guard down, and share something of themselves. But then, crucially, someone
01:00:22.240 else has to reciprocate that vulnerability. Now, often people express vulnerability
01:00:27.920 in the form of a question. For example, if I were to ask, "How does that work? I'm revealing the fact that I don't
01:00:34.000 know." That's a risk in an environment where people don't trust each other.
01:00:39.520 It's a vulnerable act. Now, a few years ago, I observed a co-orker named Stephanie do something magical in this
01:00:45.760 situation. She was teaching a class at work, and when someone asked a question, she responded with, "I don't know. Let's
01:00:52.400 figure it out." Now, I love that. It was such a beautifully humane way of answering the question. Stephanie
01:00:58.880 acknowledged that the person might be feeling vulnerable by reciprocating and admitting her own lack of knowledge.
01:01:05.839 Then, she invited them to participate in finding the right answer together. Now, Stephanie leveraged that small
01:01:12.240 small expression of vulnerability to build trust. She made it easy. She made it okay to not know. And that's the
01:01:19.200 foundation of psychological safety. That's what gives teammates confidence
01:01:24.720 that they won't be humiliated or punished for sharing an idea, asking a question, or making a mistake. And
01:01:31.520 without that safety, teams won't perform at their best level.
01:01:36.720 Now, I want to acknowledge there's not always a Stephanie in the room. If your teammates aren't reciprocating your
01:01:42.160 vulnerability with their own, you could try being more explicit about what you're doing by asking or saying
01:01:47.200 something like at the risk of being vulnerable. You can talk to your manager about the lack of safety on your team.
01:01:53.599 But if the situation's beyond repair, if vulnerability is seen as a weakness
01:01:59.359 rather than the strength that it is, you may need to find a safer team. When
01:02:04.799 you're looking for one, try answering an interview question like this. I don't know. Can I look it up and see how they
01:02:11.680 respond? And remember, you're interviewing them as well as them interviewing you.
01:02:17.280 Ultimately, I believe that the fear of rejection prevents us from truly seeing each other and actually being there for
01:02:23.280 one another, which is a shame because we all have so much to offer. The way past
01:02:28.640 that fear is to build trusting relationships through vulnerability. That's what will guide us to the
01:02:34.400 psychological safety on the other side of fear. So go ahead, ask the vulnerable question
01:02:41.359 because everything you've ever wanted is on the other side of fear. And who knows, you might even get kissed.
01:02:55.760 Uh, next up we have Yashar Shell.
01:03:03.040 My name is Yashar and I'm from Turkey. If you're not pronouncing it correctly, it doesn't matter. You can call me as
01:03:09.599 Yasha or what you want to do. It's okay for me. So, uh, today I'm here for
01:03:16.400 saving your coffee money in your pockets and I'm one of the organizers of uh,
01:03:22.880 Rubier and also one of the scholars too. So,
01:03:28.640 let's ah before to start I have a disclaimer. Um, first things first. So
01:03:34.880 sorry my English because I was in New York City for just few days. So I'm
01:03:42.160 nervous about it. So uh today's thing about memory management. Yeah. Uh like
01:03:49.200 shortly already mentioned about it. There is something to do about your
01:03:54.720 memory. Yeah. Right. And Ruby handles for it uh for us. So, uh,
01:04:05.440 sorry for that. Uh, they just trying to, uh, keep it really, um, optim uh, sorry
01:04:14.480 for that. Let me rephrase. Um,
01:04:26.240 thank you. Uh actually Linux managed your memory re pretty well
01:04:33.039 and doing just all of the stuff keep similar things closer and remove the
01:04:38.079 unused ones and reorganize it regularly. It's just really good and it done by
01:04:46.000 Melo. It's pretty fine and it works really good. It comes with gypsy and
01:04:52.480 it's good but it doesn't work really good Ruby I think just some cases so we
01:05:01.359 can figure it out and optimize in a way we just setting things before of that we
01:05:09.520 have to uh take um actually you have to measure before and after uh maybe it's
01:05:17.680 not a thing for your case or your stuff etc. And maybe you can set malocar max
01:05:24.480 2. It's popular thing. Everyone knows and it's a really easy thing. Uh what if
01:05:31.440 it already had been done by someone else? There is one thing to do is J
01:05:38.960 malog comes from the stage. So uh actually they are looking for new
01:05:45.200 maintainers or new forks. Maybe you already heard about it and there's a blog post about it. I have to suggest to
01:05:53.119 you look for it and maybe you already seen about these
01:05:58.559 screenshots over the net. Uh for example from Nate Baropek or somebody else they
01:06:05.760 has lots of savings with using GMAL. So if you want to using GMAL log jalog
01:06:14.400 or uh how can it be done in your codebase
01:06:19.599 too easy actually it comes by default with uh 7.2 to rails and if you if
01:06:28.079 you're using docker file it works perfectly but if you're not it's easy
01:06:33.280 install lip gml 2 on your server how can it be done you can you if you're using
01:06:39.119 uh heroku just add this this build pack it works pretty perfect and you have to
01:06:45.359 just set a flag which galo enabled too it works pretty well and if you're using
01:06:52.000 docker file or something else just uh just one line and after that you have to
01:06:59.359 uh flag it uh where it comes from. So that's all uh thanks and tesar.
01:07:07.520 Yeah.
01:07:13.440 So our last one is Enrique and Goen.
01:07:20.640 Hey guys, I'm really happy to be here. So I will share my journey from react to
01:07:25.839 hotwire real quick. Um I am one of the organizers of proc on rails. So it's a
01:07:31.599 rails conference in Brazil. Everyone's invited. We were going to have a really nice t-shirt if you go. So besides that
01:07:40.720 I am also a founder of a company called Linkana. And back then when I was
01:07:46.319 starting my first company, uh, I went to that clickbait saying that I would be 10
01:07:51.920 times faster using GraphQL and Apollo. Thanks, Adam. I don't know him, but
01:07:57.359 yeah, I fell on that. But it ends up that I learned a nice few
01:08:04.799 things, you know, the things that we actually don't have on the Rails ecosystem like Radix and Redless UI.
01:08:13.599 That's our component library that is unstyled. That means that they doesn't
01:08:19.839 have CSS. They just handle the hard parts, the behavior of components and
01:08:27.199 the accessibility. The accessibility is for the the the most difficult part of
01:08:33.679 crafting uh a component. So uh because I was working with React, I had the
01:08:39.279 opportunity to to learn that and learn a little bit of tailwind and I end up
01:08:46.799 learning uh knowing uh a component library called Chad CN. I don't know how
01:08:52.480 many of you have already heard about it, but it's a very popular component
01:08:57.679 library in the JavaScript world. In a couple of years, they uh went from zero
01:09:04.400 to more than 80k stars on on GitHub. Everyone seems to
01:09:11.600 really love it. And it's a little bit weird because for the alert that you
01:09:17.759 guys are seeing over there, you have to define the arlet the terminal that is
01:09:23.759 the icon, the artlet title, description, and everything else. It's weird weird
01:09:30.000 for us that are used it to just call a hander or a helper and everything is
01:09:37.520 there just in one line. But there is a reason for that and a few people
01:09:43.199 understands why that component library are doing that is because uh everyone
01:09:49.759 remember the bootstrap era that every websites used to look the same and
01:09:56.159 people say oh I have to craft my own uh component library my design system
01:10:01.440 because I don't want to look like bootstrap. So because of that uh component libraries
01:10:09.040 like um Chad CNN does that every component is
01:10:15.199 HTML tag. So with that it's very easy to just put tail in and customize a little
01:10:23.199 piece of that component. So it's meant to be customized. So that's why it's
01:10:29.840 that weird. And another thing is that instead of you
01:10:36.800 have that dependence there, it's meant to be ejected. You just copy and paste
01:10:42.320 the code and put in your own project. And I end up having that code, you know,
01:10:51.280 it's supposed to be a Ruben Rails code, but it's end up to be a JavaScript code.
01:10:57.440 That was my reality back then using React. So, uh, I decided to look for
01:11:03.600 alternatives out there and I find out that project flexi. Maybe some of you
01:11:09.360 guys have seen on Reddit people fighting or it's faster, it's slower than ERB,
01:11:14.719 but doesn't matter. It's not the point. Uh, but I have find out that project. I
01:11:19.760 didn't start the project, but they had everything that I was looking for. Uh,
01:11:25.760 it was 100% open source using flags. I will not I will not try to sell flex for
01:11:32.400 you guys not talk about flex but it's using hot wire it was inspired by Chad
01:11:38.560 CN and I start contributing to that project and I change everything you know
01:11:44.960 the language to look very similar to what I was used it to with the react
01:11:52.400 part you can see that's very similar and one year later I have a rails
01:11:59.280 project again and now we have more than 43 components ready to be used. I'm
01:12:06.800 using in production in my own company. The looks look and feel are awesome.
01:12:11.920 Everything is hotwire based. So I invited you guys to use it and to go to
01:12:18.320 tropical rails next year guys. That's it.
Explore all talks recorded at RailsConf 2025
Kayla Reopelle
Jenny Shen
Gannon McGibbon
Justin Wienckowski
Tia Anderson
Alicia Rojas
Albert Pazderin
Rhiannon Payne
+77