Euruko 2019

Steal this talk

Steal this talk

by Aaron Cruz

In his talk "Steal This Talk" at EuRuKo 2019, Aaron Cruz shares his journey in the Ruby programming community while delving into the concepts of artificial intelligence and its application in generating talks.

Key Points Discussed:

- Community Impact: Aaron reflects on his experience at the EuRuKo conference, describing how it helped him connect with fellow Ruby enthusiasts and motivated him to start speaking at various events.

- Transition from Mindset: He discusses his turn from speaker to a phase where he struggled to come up with new talk ideas, leading to a temporary hiatus from public speaking.

- Creative Inspiration: After watching a YouTube video about generating rap lyrics using recurrent neural networks (RNNs), he decided to experiment with RNNs to create a talk for him.

- Neural Network Explanation: Aaron explains the concepts behind RNNs and convolutional neural networks (CNNs), demonstrating their roles in text generation and classification tasks.

- Practical Example: He outlines how a basic neural network works by using a picture classification example (windmills) to explain data processing and backpropagation effectively.

- Learning Process: The talk emphasizes the importance of data volume in enhancing the creativity of the neural network, leading to more coherent output as the network processes more information.

- New Talk Generation: Aaron shares that his AI-generated talk revolved around improving debugging in Rails 5, emphasizing teamwork and collaboration as essential elements for success in technical projects.

- Takeaway Message: He concludes by highlighting the significance of open collaboration and their collective impact on tech projects, encouraging the audience to foster teamwork over individualistic approaches.

Overall, Aaron's talk not only outlines his personal experiences but serves as a gateway into understanding how modern AI techniques can influence programming and community interactions in Ruby. He leaves the audience with a thoughtful reminder about the importance of collaboration in software development, making it clear that shared knowledge and teamwork drive innovation and success.

00:00:05.759 So speaking of cruises, back on board, here is Aaron, a prominent member of the Viennese Ruby community.
00:00:12.080 He’s about to tell us a little bit about plundering and thievery in Ruby. Aaron has been a chef, as well as a goat and sheep herder.
00:00:22.240 Wait, sorry, a goat and sheep herder. Not a hurter! Does our crowd of comics include animals?
00:00:36.960 Anyway, he once taught Mat’s on stage how to do a burpee. Do you know what a burpee is, Arnold?
00:00:49.120 Do I look like I know? Whatever it is. Maybe we should ask Mat’s what a burpee is.
00:01:02.000 Max, you want to tell us what a burpee is? No? Well, who do we have on stage? Aaron, what is a burpee?
00:01:14.080 It might come up in the talk, so we'll see if you get to do one.
00:01:26.220 I need a partner to do one with if we're going to do a burpee on stage. Arno, I've already done it. Is he lying? No.
00:01:37.759 Wow, this is happening right now, isn’t it? I haven't done them in a while, but... You squat down, then jump into a push-up position like this.
00:01:49.360 Then you go into a push-up and then jump back up, like this. You do that over and over again, like 20, 30, or 100 times, or even 500 times. Whatever!
00:02:05.119 Thank you! So that’s up there now. Before I start the talk, it’s pretty cool that we have a live feed right now.
00:02:12.560 This means that my mom is watching from home. So, could we all at the count of three, say 'Hi Debbie'? One, two, three - Hi Debbie! Awesome, hi Mom!
00:02:27.360 So there’s some weird stuff happening here with the slide, but we’re just gonna go with it. The talk is called 'Steal This Talk.' But I think I need to change the title.
00:02:40.160 I’m changing it to 'The New Programming is Imagining.' This is a joke that you'll understand later.
00:02:45.599 It's not funny right now, so I probably shouldn't have led with it, but it will make sense.
00:02:59.070 So, what's happening? Something is weird with the slides. Can I, uh, there we go. Perfect.
00:03:05.599 So, I’m from the States. This is actually how we dress there. Don’t trust the television shows that you watch.
00:03:11.120 I've been living in Austria for the last decade or so. This is me when I was three or some age. My mom, who's watching, probably knows how old I was.
00:03:22.560 And it's kind of a bit of foreshadowing for my life right now. I have worn lederhosen, and I have friends who wear them quite often.
00:03:39.599 Back in 2012, I was living in a tiny town in Spain, in the mountains. There were like 2,000 people there, and I was programming.
00:03:52.400 I couldn’t meet any other nerds. I met one, but he was a medieval furniture-building nerd, which is kind of the opposite spectrum of software development.
00:04:03.280 I attended various conferences, including JavaScript conferences in Spain, and being in Europe, I could travel farther.
00:04:15.360 So, my first Ruby conference was EuRuKo in 2013. I arrived at four in the morning, and I was so tired that I had to stand for the entire first day.
00:04:32.639 The community was special, and I liked almost all the talks, which wasn’t the case with JavaScript conferences I had attended.
00:04:46.000 I met one of my closest friends at that conference, which was awesome. So, at some point around there, I decided I wanted to start speaking at conferences.
00:05:01.360 I wanted to travel and meet new people, so I began speaking at as many meetups as I could.
00:05:08.639 If you're from Vienna or have lived there for any time, you’ve probably seen far too many of my talks.
00:05:21.199 If you raise your hand if you’ve seen too many of my talks.
00:05:26.240 It actually worked! I got the guts to put proposals out there and speak at conferences, and I ended up getting what I wanted.
00:05:37.040 I got to travel around the world. This was in the Philippines with Mat’s there. I also ran my first 5k on the side of a highway in India.
00:05:54.080 I went to Warsaw and hung out with Piotr and Toby during Christmas. This was beautiful.
00:06:06.720 I also had the opportunity to meet the author of one of my favorite Ruby books, Everyday Things with Ruby, and went to a castle with him.
00:06:20.640 I got to eat durian, which tastes... well, let's just say it’s unique.
00:06:29.200 I experienced some of the best food in the world in Tel Aviv and took an Instagram-style selfie on the tallest building.
00:06:42.240 One of my peak moments in my programming career—and possibly life—was doing burpees on stage with Mat’s, who is very good at them.
00:06:59.120 Later, there was Koichi, but it’s pretty blurry. I could say it was anyone! But then 2018 happened.
00:07:12.160 In 2018, I couldn’t come up with any more talk ideas. I thought I was solving interesting problems, but maybe I wasn’t.
00:07:24.080 I would give talks and feel depressed afterward for about a week. I decided not to give talks anymore.
00:07:36.000 This was the most frustrating part because I thought I’d never get to exercise with Mat’s again.
00:07:46.639 Fast forward to last year, and I found this video on YouTube where a guy generates a rap song using recurrent neural networks.
00:08:02.800 He had a hype man involved who changed the tempo and created some really crazy lyrics. The AI got surprisingly deep at certain points.
00:08:20.800 The emotional depth of the lyrics reminded me of where the term 'steep learning' might come from. I was very pleased that my pun worked!
00:08:35.360 After watching that video, something clicked in my mind. I thought, 'I can’t come up with a good talk. AI and recurrent neural networks? What should I do?'
00:08:46.720 I decided to create a recurrent neural network to write a talk for me! It would generate the title, description, and entire talk.
00:09:04.000 So, I built an application that could consume YouTube videos and find their captions. It was cobbled together with Elixir and Python binaries.
00:09:12.000 It’s a horrible thing, but I should open-source it so you can see! Now, I want to talk a bit about recurrent neural networks.
00:09:23.200 First, however, we must talk about convolutional neural networks, which were introduced in the closing keynote yesterday.
00:09:40.480 I’m going to do a little quiz. I brought some wafery things from Austria. They are very Austrian. If anyone here is Austrian, can you tell me whether these are very Austrian?
00:09:57.360 I have some titles here and one of them was generated by the recurrent neural network while the others were not. Raise your hand if you think you can guess which one was generated.
00:10:14.080 I see no hands so far. There's one hand in the back. That’s the first hand I see. Which one do you think is generated?
00:10:25.679 If you know, you still get a prize! Yes, it's number four. The impermanence of Ruby! That’s a pretty cool talk title.
00:10:36.559 Now something bad is happening, not terrible, just kind of something happened.
00:10:44.479 I’d like to give some examples to explain what exactly a recurrent neural network is, so let’s say you wanted to create a program.
00:10:55.920 That program would take in pictures and tell you whether it was a windmill or not, giving you a yes or no answer.
00:11:10.560 I picked a windmill because, you know, I had to pick something. One way to do this is to classify features of every object in the world.
00:11:23.039 For example, chairs have legs, rectangular backs, and seats. Monitors are rectangular, have screens, and stands.
00:11:39.679 But that approach is incredibly inefficient, as it doesn’t really make sense to categorize all objects by their features.
00:11:54.560 Let’s take a step further. If we have programs that can communicate, one program can know about windows.
00:12:07.679 So, we have a 'window program' and it can ask if something is a window. If it sees trapezoid shapes, it can identify buildings.
00:12:19.760 Eventually, we have a 'windmill program' that says if it's a building with blades, it’s probably a windmill.
00:12:31.679 The problem, though, is that it’s not practical to classify everything this way because new objects are always coming into the world.
00:12:47.920 This is where a neural network shines. It can randomly generate categories for you. You give it an input of numbers, and it creates patterns.
00:13:04.000 For example, let's simplify our situation. Take my image and lower the resolution to 32 by 32 pixels.
00:13:19.440 We will also get rid of color, so all we have is grayscale. We feed each pixel value into a neural network.
00:13:35.679 Each pixel has a grayscale value from zero (white) to one (black). Now we have a reasonable input into our neural network.
00:13:51.200 So, the network starts with input nodes and could potentially have multiple layers in between before reaching the output node.
00:14:02.640 In the end, we determine the level of confidence that this is a windmill. We also need to understand the concept of backpropagation.
00:14:18.279 All nodes are connected, and their connections can be strengthened or weakened. Backpropagation helps the network learn.
00:14:32.000 If you have a picture of a windmill and it guesses correctly, you go back through the line of nodes that created that guess and strengthen those connections.
00:14:50.560 If it guesses wrong, you weaken the ties of the connections that made that bad guess.
00:15:04.080 We have a different kind of problem here, where we’re generating new words based on a collection of other words.
00:15:22.640 While convolutional neural networks are great for image recognition, recurrent neural networks excel at text generation and voice recognition.
00:15:36.400 In a recurrent neural network, it recalls information about what it has seen in the past to help make future predictions.
00:15:51.120 For example, if I give you the word 'good,' I can predict it should be followed by words like 'food' or 'run.' Bad is usually not a good fit.
00:16:05.919 In a recurrent neural network, you can use information from the past to inform future decisions.
00:16:14.459 These networks have memory via their state machines. You train them by providing a set of known inputs.
00:16:30.400 If they predict correctly, they strengthen their connections. If not, they will adjust accordingly.
00:16:43.440 The intelligence of the network improves as you reduce what's called a loss function. So, let's break that down.
00:16:59.600 If I’m guessing the next character in a string, I would evaluate options A, B, C, or D for what should come next.
00:17:12.440 Let’s say my guess is B, but the actual next letter in the sequence is A. I subtract my guess from the actual answer.
00:17:27.759 When I do that, I get a number that reflects how close I am to the actual character. To enhance this further, we square them.
00:17:41.440 The goal is to minimize the loss to zero as much as possible. In the libraries I’m using, a loss value around one is considered good.
00:17:56.320 Here's a running example demonstrating the concept where the loss decreases over time as the data is processed.
00:18:12.640 At this stage, the network’s nodes have different weights, and each time they are trained, they adjust to improve results.
00:18:27.360 Initially, the neural network is making random guesses, gradually learning to balance inputs and outcomes.
00:18:43.360 A crucial detail is that the higher the volume, the more creative the network becomes, resulting in interesting combinations.
00:18:58.560 You can see it begins with nonsensical letters and as it progresses, it offers more coherent outputs.
00:19:03.360 As the training progresses, it starts producing combinations of common words along with completely made-up terms.
00:19:20.800 This reflects how exposure to a larger dataset allows it to recognize patterns and create new, unconventional ideas.
00:19:30.760 Now, let's say I wanted to share my new talk that my AI generated for me.
00:19:47.840 The essence of my new topic revolves around improving debugging in Rails 5, a necessity for effective production communication.
00:20:03.040 It discusses challenges the technical company faces along with the strategies we can take to minimize issues.
00:20:20.000 Eventually, we seek to produce an effective outcome that contributes positively to our respective domains.
00:20:36.000 The big takeaway I wish to convey during my presentation is to avoid being a selfish programmer.
00:20:50.080 In summary, teamwork and open collaboration on tech projects will significantly enhance our experiences.
00:21:05.440 I recently submitted this talk to an upcoming Ruby conf, where I hope to share this experience.
00:21:20.480 Thank you! It’s been an honor to be on the stage, especially after following the conference for so long.
00:21:33.120 So, thanks again to everyone involved!
00:21:44.760 Aaron, thank you so much! Thank you for the little bit of pirate treasure for you.