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.