00:00:18.199
Hello everyone and welcome to the lightning talks! Thank you all for coming in. I assume there are a lot of people here; I can't see anyone right now because I'm utterly blinded. We're going to be doing five-minute talks. Please give a hand to everyone that comes up, and if they go over the five-minute mark, we'll be using the illustrious gong right here. If it looks familiar, it's the same one from RailsConf that Jonan got, so someone managed to keep it in a box somewhere, and now I get to use it too! Hopefully, I don't have to use it because I feel horrible whenever I do, but let's just go ahead and give a round of applause to Anna.
00:01:07.119
Hello everyone, I guess my time has started. Okay, so, has anyone heard about metaprogramming in Ruby? Raise your hands. Oh wow, cool!
00:01:16.080
Oh, and the presentation isn't working! Anyway, my name is Anna. I'm from Vancouver, and here’s my LinkedIn if you'd like to connect with me. Now, what is metaprogramming? It's a technique that allows you to write code dynamically at runtime. Basically, it's code that writes itself; pretty cool, right?
00:01:35.640
There is one really important and great gem that uses metaprogramming a lot. Does anyone know what gem it is? I want to do this talk justice, so I have to talk about the object. Here's a screenshot for you: long story short, in Ruby, everything is an object. Classes are actually modules, and, yes, you guessed it, they are objects. So, what problem am I solving? I was assigned a task to add some segment tracking to our newly built feature at work. Like every developer, I wanted to check how it had been done before me. Here's the pattern: a controller calls the persistence service, which in turn calls the service tracking module where the whole thing happens, which in turn calls the analytic service module to set up the entire analytics service.
00:02:22.640
I don't know about you, but I'm lazy, and building out a service tracking module and an analytic service module, plus two files, multiplied by two different classes, would make eight files. I'm not going to do that! So, where does the metaprogramming part come in, you would ask? Here, we have the old service tracking module, and on the right-hand side, you can see the one that I rebuilt using metaprogramming. As you can see, it's really similar with a couple of significant differences. The first one is the object name, which we grab from the class and create, thus making this particular class not specific at all.
00:03:15.879
So, what's next? I am running through my slides, but I'm skipping a lot of information for you folks. So, what's next? Having run these improvements by my colleagues, they asked me a couple of questions. For example, what if we have a specific method that only lives on a persistence service—for say a legal fee—but we don't need it for liens? These are legal terms. I have no idea what they mean, so don't worry! I thought that was a very valid question. Another question they asked me was, what if we don't want to track something? I thought to myself, why wouldn’t you want to track something if it comes for free? But, of course, I knew they were right, and I knew that I had to do something about it.
00:04:01.680
Thus, I hadn't used the heavy guns of metaprogramming just yet, which is "define method." Here’s how I decided to rebuild the class even further: from any persistent service, I would be calling the track analytics with the methods that I want to include, with the actions they will respond to and with the conditions. Then, I would rebuild the service tracking module to define these methods automatically. As you can see on your left-hand side, this is how the method will actually look. I only have three seconds, so on the left, you can see how it is right now—it's not specific enough—but rather more generic than before, but not super abstract. And on the right-hand side, you'll see how it will finally look. It's not production-ready yet. Anyway, here are the pros and cons of metaprogramming in Ruby. I'm hoping that you're going to give it a chance and enjoy it. Thank you!
00:05:28.280
So, hello everyone! I'm happy and excited to be here. I want to share a story about how, two days ago, at Hackspace, I contributed to a gem I've always loved and used for more than five years. I found out about Faker when I was taking the Le Wagon boot camp, a Ruby on Rails boot camp. I remember the first time I used it and was impressed by how you could simply ask for a random name, city, or country, and it would just give it back to you. I vividly remember adding it into my Gemfile and playing with it for the first time; it felt like magic!
00:06:13.680
After I finished the boot camp, as a student, I continued to use it throughout the years. It's one of those gems that I’ve always liked and enjoyed working with. Before getting to RubyConf, I knew that Stephanie and Chiago, core maintainers of the Faker gem, were going to have a space to contribute to the gem. When I saw that message, I immediately knew I wanted to be there and contribute. It simply felt right to give back.
00:07:02.919
As a side note, I've known Stephanie and Cho for almost a year. I took a course they were offering on their website, Hexsteps, and got to know them. They’ve been truly kind, attentive, and welcoming. So, thank you both for that. At the end of the day, we were able to put up a PR and add Benchmark to the gem. We’re trying to pin down the slowest generators and understand why that’s happening. Adding a benchmark felt like the first natural thing to do. The next step is to understand why they are slow and try to fix them. That’s what I'm going to be working on after the conference. I’m extremely happy to have been able to put a PR into the Faker gem, and I am more than motivated to share this with my students at Le Wagon.
00:08:17.640
I now teach Ruby on Rails at the boot camp, and I want to continue giving back to a community that has truly given a lot to me. It just feels like the natural thing to do. So, thank you all! I also want to mention that we are organizing a Ruby MX Meetup in Mexico City. If you happen to be around in January, please come!
00:09:00.680
I'm here to talk about bridging the gap between technology and creativity and my experience with that. I'm Jade, a recent addition to the Ruby community. I graduated from the Turing School of Software and Design in June of this year. Thanks! I've never really considered myself a technical person. Had you asked me about two years ago if I would be standing here, I would have replied very confidently, 'Absolutely not!' However, on the flip side, I've always considered myself a very creative person. As you can see from some of my art up on the screen right now, if you're into Animal Crossing, you’re cool, so come talk to me.
00:09:42.160
I’ve always delved into creating, and in short, that's what I love to do. For just a little bit more context, the year is 2021, and I'm working as an event manager for a venue in Denver, my home, using my MacBook for the first time. I found myself floundering— the guy in the picture actually had to teach me how to copy and paste! If there are hiring managers in the audience, don’t worry, I’m super good at doing that now! Fast-forward a few months, I'm struggling with my new role, not because of the computer but because I decide nervously to go to Turing, and it turns out that I can program. I end up graduating, but something was missing.
00:10:43.760
Spoiler: it was Art! Luckily, a friend invited me to collaborate on an interactive art exhibit at home. The opportunity to craft software for controlling hardware components within an art exhibit was too exciting to resist, and my response was a resounding 'Hell yes!' So now you’ll often find me immersed in the world of Ruby, orchestrating the dance of various hardware components throughout the exhibit. As I navigate this creative space, I'm not only focused on the present tasks but also daydreaming about innovative ways to elevate the exhibit and stimulate our minds. It's a thrilling journey of exploration and imagination, the missing piece of fulfillment that I was searching for.
00:11:56.000
You might be asking, 'That's great Jade, how exactly are you doing this?' That’s a great question! I would love to tell you. It’s kind of hard to describe. Who here is familiar with Meow Wolf? Cool! Awesome! Yeah, so a number of you are familiar. If you're not, it is an interactive art exhibit. It’s really cool. If you have the opportunity to go, definitely check it out. So, my work is kind of like that, but I work for the mom-and-pop version of Meow Wolf. My role is the driving force behind transforming creative dreams into real-world experiences.
00:12:53.680
I collaborate closely with our creative team and lead initiatives that redefine the boundaries of what's possible. We bring the vision to life in three ways: we integrate PLCs, programmable logic controllers. If you don’t know what that is, don’t worry—I didn’t either when I took on the project! So, we integrate these programmable logic controllers and leverage the power of bright authors. Who has been to a mall and seen advertisements on the screen? Yeah? Cool! Those are powered by bright authors. I also didn’t know that!
00:14:18.000
So, we use those for projection mapping, and finally we create a Ruby on Rails program to catalog and monitor events within our art space. This isn’t just technology; it’s an artful fusion that allows us to craft unparalleled experiences for our patrons. It’s a journey where our engineering team doesn’t just expand the limits of software; we are actively shaping it into the embodiment of our collective dreams. So, in short, let your freak flag fly to find your niche! I did, and it's working out really well for me!
00:15:06.000
I'm also looking for a more permanent role as a developer, so if you or someone you know could benefit from a creative mind like mine, you should connect with me. Thank you!
00:15:40.720
Hello! Let me just make this a little brighter for myself. My name is Amanda. I am new to the tech world. I just started learning Ruby about three months ago at Flatiron School, and I’m super excited to be here as a scholar! It’s been such an honor and delight. Previous to my engineering experience, I spent 10 years in health and wellness as a massage therapist and yoga instructor and a self-care advocate. Today, I want to bridge the gap between debugging your code and creating sustainable self-care practices.
00:16:41.760
I love Ruby’s error handling messages! Not in the beginning—I was like, 'Oh, these things aren’t working!' and it was terrible. I quickly learned that these are my helpers; they are my adversaries. I lean on them to learn more about the language and to understand what was happening and why my code was doing what it did. Similar to error messages and compiler warnings, your body is also giving you signals and messages. What that looks like might be when you're hungry, or your back hurts, or you have eye strain. Your body is constantly talking to you all the time.
00:17:35.480
And similar to your compiler warnings, you can ignore your body's messages, but that doesn't mean you should. It could have consequences later. I am so nervous, and you guys are so kind, I'm shaking up here! Oh my gosh, thank you! Thank you! So, let's not ignore these messages. Let's take a step and listen to what our body is saying. What does that look like? Sometimes it can feel overwhelming, but it makes sense. You sit at a desk all day, your back might hurt, your wrists, your eyes—all of these things.
00:18:46.760
But it doesn't have to be overwhelming; it can be a journey. I have been sitting and standing with you all over the past three days, and I’ve seen your tenacity and your curiosity and your zest for programming. What if you took a little bit of that and applied it to your body? What if you take it and listen to what your body is saying? And what does that look like? I don't know, maybe when you're running your test suites, you could do some squats. When you’re brushing your teeth, practice balancing. Everything matters, and everybody’s body is different!
00:19:39.760
Your journey into what your self-care looks like is going to be different, but I want to encourage you to take these concepts—you know you have them like your tenacity and your curiosity—and apply them to your own body. This is where you’re going to live for your whole life, regardless! It’s really important. Inevitably, we must take care of ourselves! Consistency is key here. None of us learned to program overnight, so learning how to care for your body and what it means when your back hurts is going to look a little different.
00:20:27.760
So, the stuff is my jam! If you want specifics of what I think might be helpful for you, I would love to talk to you! But otherwise, I trust that you all can find your own body’s answers. I want you to feel awesome, and I think that is totally possible. So, thanks for letting me up here and encouraging me! I appreciate you!
00:21:38.160
Today, I'd like to share a little bit about scripting in Ruby. I believe that a lot of the repetitive tasks we find ourselves doing over and over—both with software and in real life—can be automated with simple Ruby scripts. I want to show you how we can accomplish a lot with just a few lines of Ruby that you know and love. My name is Jared Reyes, and I'm a software developer who likes to build stuff with Rails and React.
00:22:21.840
So, what can we write scripts for exactly? Well, I have some ideas! Unorganized folders, for example, could be organized by accessing their file types or metadata. We could backup specific sets of data that are important to us. We could build something like a social media bot that posts customized content periodically for us. We can perform web scraping, then possibly generate a PDF from the data we gathered. Or, with gems like Twilio, our scripts can begin to take more complex actions like sending us custom text messages. If you'd like, you can also schedule your scripts to run at specific time intervals with tools like cron for Linux, launchd for macOS, or Windows Task Scheduler.
00:23:30.640
Beyond those listed here, try finding some tasks you can automate that are relevant to your life and work. Let's say we have a cluttered folder full of files of varying file types. We want to organize them into separate folders based on file type. You could manually make new folders and drag and drop several times, but this is tedious grunt work that we can write a Ruby script to handle for us instead. But how do we go about that? Well, if we take a look at Ruby's standard library, we find that there are some helpful classes and modules that we can leverage.
00:24:32.640
One such class is the File class. If we want to organize our files by type, maybe this File method to return the extension type is a good start. Ruby also has something called the FileUtils module. It's Ruby's primary interface for interacting with directories; we can use it to make new folders. We can take the file type returned by the previous File method, store it as a variable, and pass it to the FileUtils method to create a new directory. The Dir class can help us navigate into the context of a directory with methods like change_directory. Now that we know that Ruby has built-in tools to help us out, let's put them together in a Ruby script that we can run from the command line!
00:25:37.840
When it's complete, we can organize our messy folder. The command line arguments that we end up passing to that script are stored in the special ARGV variable, which we can access inside the script. Our script will take one argument: the directory containing the files we want to organize. We'll make two checks to ensure that the script is called the way we expected: first to confirm that the script was passed an argument at all and second if the argument passed correlates to a real directory.
00:26:48.560
Next, we'll enter the directory with Dir. We can further leverage Dir to grab all the files in the current directory with Dir’s glob method. The wildcard simply means we want all files, while the select block filters out non-files (i.e. directories). The group_by method groups a collection by the result of the block passed to it. It will return a hash with the file type as a key and arrays with the grouped files as values. We can then iterate over those grouped files using the each method and use the extension to create new folders based on the extension name. With our new folder in hand, we can begin moving our files into it one by one with the FileUtils move method. It takes two arguments: the file and the path to the new directory. The loop repeats until we've gone through all the files and prints a nice message to the console.
00:27:54.600
Here's the whole script. It might be hard to read, but if we run it, we get a squeaky-clean folder! That was just a basic script that you can easily whip up using the classes and methods Ruby gives you right out of the box. But if I had time to go further today, I would love to show off some of Ruby's awesome gems to accomplish a lot more. Here's just a few. I hope this served as a good intro to automating stuff in Ruby, and just know that there’s so much more that’s possible with Ruby’s awesome diverse ecosystem of tools. Thank you!
00:28:46.680
Hello everyone! Welcome to RubyConf 2023. My name is Eli Bero, a web developer based out of San Diego, and I’m very scared—I mean excited—to be here in front of you all. I just have to say that it’s been an extremely awesome journey to get here, and a lot of that journey has to do with facing my good old friend fear.
00:29:09.600
A little bit about me: I was a stay-at-home dad, and transitioning into tech was one of the scariest things I’ve done. After becoming a stay-at-home dad—which was super scary just becoming a parent in itself—staying home with the kids turned out to be something that was scary but also very rewarding. So, jumping into tech here, I decided to do a coding bootcamp with Learn Academy. About a year ago, I finished that. Thank you! It was quite the process to get out of the coding bootcamp. Unbeknownst to me, the hardest journey laid ahead after finishing was looking for employment and still developing my career to learn the programming languages I was applying for.
00:30:27.480
So why did I choose this topic? I believe that many of us struggle with this, and this is something that you may be familiar with—it may be useful to know that you’re not alone. Some of the strategies I’ve used to deal with fear include just acknowledging the fear. There it is! I’m scared right now, my knees are weak, and my hands are sweating. I don’t care because at the end of the day, no one’s going to remember this! I’m just going to do my best and share hopefully something that you’ve also learned and may come across.
00:31:17.240
When I’m dealing with things that are super scary, I also like to call on my friends and ask them questions. You know, ask them from experience how they got through this difficult time, how they solved this problem, etc. Even if they don’t give me the right answer, I know that I’m going to get help from my friends because at one point or another, we’re all scared, and then we learn, we figure it out, and hopefully, we can find a way to give back and help others along the way. Because that’s how life is. We have to learn from each other and learn from our mistakes. If we make mistakes, we own up to them and show everybody else: 'Hey, look, I made this mistake! Hopefully, you don’t have to make it too.'
00:32:48.480
Some of the tools I pull upon is when I get scared, I know that that’s the route I have to take—that’s the path I’m going to go down. If I’m scared, then it must be worth it! That’s the greatest reward: doing scary things. So I encourage you to find things that are not in your comfort zone that may stretch your limitations—that you may have to call your friends for help. And that’s how you know you’re in a good spot, and you’re going to grow. You might end up in front of people, like I am today at RubyConf!
00:33:29.120
So, a little CSS humor—that’s what I came up here with! But I tried! This is a very good quote, one that I like to think about a lot, and it's, "Alone we can do so little; together we can do so much." I’m a kind of person who likes to work on my own, but I’ve found always in the past that working together with people and developers who are also trying to do the same thing—pushing their limitations, doing things that there’s a high chance of failure—this is where most of the growth can happen.
00:34:06.600
Help each other out, build a community, and hopefully that helps somebody else who may be in a position like me and who’s scared to come up here. Maybe that’s all you need—is someone to give you the push. Thank you very much; I appreciate it!
00:35:06.640
Hello everyone! I’m Song Hon Jong, and I want to talk about building front ends in Ruby, specifically not just any Ruby, but in pure Ruby. Just to give everyone some context, last year's RubyConf introduced a new edition with Ruby 3.2, which is that the Ruby VM now runs on WebAssembly. The implication of this advancement is that we can potentially replace JavaScript with Ruby in the browser, opening the door to a fully-Ruby front end!
00:35:38.640
But we have two questions that naturally follow. The first is: Can we build it? The second, more important question is: Should we build it? I think the answer to the first question is a resounding yes! It’s been done before; C has already built a fully C-based web framework where you can program your front end in C—no JavaScript! If Microsoft did it with .NET, we can probably do it with Ruby too. The second question is a little trickier but I still think the answer is yes. I hope to deliver my point on this.
00:36:50.120
Can everybody raise their hands for a minute? If your team doesn’t build web apps, hands down please. Well, this is web technology. If your team has a dedicated front-end developer, hands down. If your web app doesn't need any reactivity, hands down. If your web app needs blazingly fast reactivity, hands down! So we can clearly see that it’s not for everybody, but I think we can tell that there are a fair number of people here, which is enough to warrant saying that maybe this is a possibility worth exploring.
00:37:32.320
Specifically, I think the audience for this is small teams with non-client-facing web apps because clients have to have quick load times. This could also be like a startup that wants to demo their product ASAP to investors or maybe you want to do a proof of concept to your manager and can't have anybody else working on it because it’s like a side project. I hope we can agree that these are moderately important use cases. Maybe we're not building GitHub or Shopify’s monolith, but this is still a use case for Ruby!
00:38:35.920
Now, there are two big hurdles: First, bundling. Second, rendering. With bundling, we want to be able to use gems on WebAssembly, which is not quite there yet, but we do have Shopify working on this, I believe, with a recent gem that came out, called Ruy. They pre-load and do some little tricks to make WebAssembly go faster. My gem, RB, aims to tackle the second hurdle, where we want to build DOMs with kind of a pseudo HTML syntax. RB essentially compiles ERB into valid Ruby code for Ruby WebAssembly and then it compiles it into valid HTML, SL—whatever code you need.
00:39:54.000
If you are familiar with Babel and React, this is what Babel actually does with JSX. I have a very quick demo. So, I have my to-do app here. This is based on Adam H.’s to-do app that he built as a side project. You can see we have active items, completed items, and we have event onclick events with lambdas. This is your Ruby, and then if you run RB to do, you get out a big script. You get a compiled script, and if you write that into index.html and reload it, you can see that it works.
00:40:48.560
So that was just a quick overview of my project, FR. I hope this was eye-opening to how we should rethink APIs. I'm excited to share the project with you all and I look forward to hearing feedback! So thank you for your time and attention!
00:41:28.040
Hello! Thanks for joining me today. My name is Doug, and I’m here to talk about the API that makes a dozen things better with Ruby. You might be curious to know how to fix the suffering in the world. I believe the answer revolves around redesigning APIs to enhance usability. APIs are everywhere, but they can be notoriously cumbersome, clunky, and hard to work with, often feeling more like an obstacle than a facilitator.
00:42:30.480
That said, we can still create smoother pathways for developers, enabling them to work smarter, not harder. Once I was faced with an urgent delivery problem, similar to an Uber model. Imagine having a kidney in New York that needs to reach a surgeon in Los Angeles quickly! It quickly turned into a logistical nightmare as we used various Google APIs to manage the deliveries.
00:43:25.720
However, each API had its own approach and didn't connect seamlessly, leading to increased wait times and inefficiency. Thus, I felt the urgency to create an API design that focuses on swift communication and effective data management. I firmly believe that if we optimize our APIs to make them more interconnected, we can solve real-life problems. That would enhance the impact of entire industries.
00:44:14.800
In summary, APIs can either impede development or propel it forward, depending on their design. I look forward to connecting and sharing more about this vision with all of you. Thank you!