 It's great to see everyone here. So many good faces, thank you for coming. It's been a while since I've seen most of you. Some of you, it's been only a few hours since we last tweeted, so I just wanna start out by saying I'm back. My name's Zach. I work at a company called Shutterfly. I'm supposed to tell you this. In San Francisco, where we are number one in first world problems. But this talk isn't gonna be about me. We're here for this guy. I'm not just gonna show you a bunch of pictures of my cat. I don't have any time for that. If he was gonna present this talk, maybe he'd start with this slide. I'm supposed to have his kanji, but I forgot it. Some of you here probably know Nobu. And you've probably seen him around at various conferences, different places, or maybe you've just seen that guy. Who is this guy? Is my mic on? I can't tell. If we start out looking at his GitHub profile, he's contributed quite a lot to a lot of projects. He's the number one committer all time to Ruby. And his number of commits far surpass everyone else. My lot. And if we look at commits per day, we can see that he doubles everyone else in number of commits each day since January, which is amazing. But I couldn't help. When I saw this graph, Shohei was gracious enough to give me these graphs for my talk. And I couldn't help, I noticed a name on here and I decided that I'd throw this section in here. It's called Random Committer Spotlight Time. I was looking at this graph and I noticed the name Martin Durst, who is a, if you don't know Martin, Martin's a committer and he lives in Japan. He has a master's from Zurich in computer science and a PhD from Todai. And I couldn't help though when I saw his name on this list. I couldn't help but think that growing up with that last name must have been the worst. But Nobu is very special to me. He's someone that I try to imitate in my work. And he's the one that coined the phrase ZZAC Shaving. He's someone that I see in myself. And we go way back. But I don't know if I completely trust Nobu. I saw this tweet, this was last year and I looked at the picture and I couldn't help but notice that that's my phone. Who is this guy? I tried to find out. So, you know, I wanted to get to know Nobu. I needed to be ready for this talk. So, I started out, I asked his coworkers. And at first I started out, I asked Keiko and she just like, oh, Chame. I have no idea who that is. I asked Koichi, but it was in Japanese and I can't really read that. So, I decided to ask Terrence and he just tried to get me to help him fix Make Snapshot. So, then I asked a complete stranger and he's just like, that guy's drunk. So, I did what any reasonable person would do and I asked the internet. And I found this video from Fabio Kida about three years ago. And it says, an interview with Nobiyoshi Nakada and better known as The Patch Monster. So, I'm gonna show you the first few minutes of this video so that you can get to know Nobu a little better. Okay, this is Fabio Kida again for Ruby Kaigi and I'm gonna interview Mr. Nobiyoshi Nakada who is a Ruby Committer, a very long time Ruby Committer. And together with me is Akira Matsuda, a Rails evangelist who's gonna help me translate from Japanese to English back and forth. So, Nakada-san, as a first question which is always the first question, how did you get involved in the Ruby development? How did you first met Ruby and decided that you want to contribute? The table for character conversion, Japanese books to UTF-16. That's what I did. I used a Perl 4. I used a Perl 4, but I didn't use a Perl 5. So, I thought I'd use a Perl 5. That video is great, but I have no idea what you're saying. The whole thing's in Japanese. And Akira's there to translate, he doesn't say a word the whole damn time. I really like his Led Zeppelin shirt. The hard-to-reach household. I kept searching and I found this. It's a PDF file. It's pretty cool. Actually, I'll be honest, I made this. I'm also a little bit drunk still on the lot board. Turns out that I don't know you that well so let's just keep this simple. Nobody knows Nobu. It starts out about a hundred kilometers southwest of Tokyo in the heart of the Honshu Island, where Nobu was forged. Deep in the fires below Mount Fuji. After his creation, baby Nobu crawled his way down this mountain. He made his first friend. A large cat made his first friend. Wasn't sure at first who this guy was. And until Nobu let out a loud roar, the cat was convinced this guy was probably pretty cool. And they took off down the mountain together. It wasn't long though, baby Nobu got hungry and he started crying, he was hungry, he needed something to eat. And you could hear actually his wails off in the distance, not far, where a young couple was studying together in the forest around Mount Fuji. A young woman who was out there studying bugs for her graduate studies in entomology actually, accompanied by none other than Oki-doshi or Professor Oak. They quickly ran to go help young baby Nobu and the cat just like took off. He's like, I'm done with this guy. They tried to make him feel better and all they had was beer. So he just like went through that pretty fast. But you could tell this baby was special so they decided to keep him. And they went back home to their home in Tochigi in northern Japan where they continued to teach Nobu everything they know about math and science. It wasn't until he joined the physics club in high school where he really started to excel. His love for math and knowledge just kept growing until one summer afternoon just before going to university, this says right here. They're out of picnic. And his friends seemed pretty preoccupied with the foods and stuff. But Nobu was just astounded by these floating balls in the air. Didn't know what they were so he just wanted to find out. And this is really where his initial love for hot air balloon flying started. Little do you know. During his university years, he joined the hot air balloon club and got his first taste of computer science where he taught himself to architect hot air balloons using the computer hide and seek programs. He spent so many nights doing this, perfecting his programming skills in order to build the best hot air balloon he possibly could so that one day he could fly off into the distance and leave all of his troubles behind and go back to Mount Fuji where he belongs. But not all as well. Poor Nobu spent so much time hot air ballooning that his grades fell and he actually flunked out of university. So he had to get a job, right? And this is where his skills from hot air ballooning come in. He lives at home with his family, three daughters, and he gets to work on Ruby full-time for Heroku. And that's the true start, Nobu. I wasn't kidding when I was gonna tell you who this guy is. We can actually learn a lot from him, too. Specifically how Nobu works. I'm surprised he's not up here hacking right now, to be honest. But he works on a MacBook Pro 13 inch from, or 15 inch, sorry, 2013. And he uses a 70, and he uses Emacs from MacPorts. Apparently, Homebrew doesn't work on his computer. I have no idea. For multiplexing, he uses tabs. And Ebisu is his favorite beer. He's also got a pretty sweet prompt. This is his prompt. I don't understand what it says, but looks cool. He also occupies the patch booth from time to time and he practices BDD. Nobu knows a lot of crazy tricks. I saw this tweet from Aaron. He was asking how to run Ruby's tests without going through make test. And Nobu replies, use test runner, we actually have a runner in there. And I tried it out on DRuby. It worked out pretty well. But I imagine that Nobu must have known, like if you look at the tweet, he's like, test runner fiddle. He must have known that Aaron was working on this ticket to remove DL. Somehow he just has magical powers. And he uses Git SVN because we're still on subversion. Apparently that's the best way to do it. He uses GitHub sometimes and I thought this was interesting. I went on there and I looked up how many times he's submitted pull requests and there's like almost 30 just right now. And mostly I think just using them to run like Travis tests and just have a patch ready for whatever reason. You can see some of those are features that he was implementing and some bugs. He likes to work on all kinds of parts of Ruby basically. I went through and I started looking at like the commit log to find out, what does this guy actually like to commit to so that I could have something to talk about while I was up here. And I found this commit seemed pretty important, right? Zero change files, zero additions, zero deletions. Such patch. I did a search for all of these types of commits and I found a lot of them. It just keeps going. There's exactly 213 right now. That's almost more patches than me. He also has this removed trailing spaces. So this says SVN, but that's just because we switched the key. But he has 107 of those. And basically how this works is he has a script that runs. And it just has this key so he can push or whatever. But it goes through and it starts out with the make file and the read mean. It starts there and then it grabs all these other source files. And then starting out with the change log, it goes through and just fixes the encoding issues, any encoding issues and then strips the white space from the rest of the files and then commits it. He's done this over 300 times. That's amazing. I also found this commit pretty interesting. If you read it, it says should not require other files when dump option is given. So I wasn't really sure, but Ruby C file is like the executable to run Ruby programs. And basically when you give it this flag, you shouldn't see the run part looking at the tests that he committed. I can estimate that. But I couldn't help though, honestly, when I saw this commit, this is all I thought of. But I had to keep looking. I kept searching for more patches and I found at a period of like one day there was all these similar commits. Like fixing leaks. Apparently Nobu patches a lot of leaks. One such example in this builder file here is moving the temp file on link into the insure block just to make sure it gets collected and then I reverted this commit to run the test to see what he is working with and then you can see right in the test suite when we run the test it shows him that there's a leak thread there or a leak temp file. And this is built into Ruby's test runner. Basically goes through all the assertions and uses this leak checker and passes the test name and class into the leak checker. This leak checker is kind of cool. It does all kinds of stuff with file descriptors and temp files and threads. And first when it's initialized, it checks what's already on the stack basically. And then for temp files it uses this check temp file method. If we look at that we can see that, yeah it takes the initial temp files and then calls find temp files given that count and subtracts them to find the difference. Looking at find temp files, you can see the initial counter class there. You can look into that for more just basically does this. It looks at object space and finds any instances of temp file and then just returns them as an array. And so if there's any temp files left, it prints this message that we see. That's kind of neat, that's a really helpful one. I think Nobu has had like a bunch of patches fixing those so that our tests can run better. Another bug that I found interesting was this flip-flop thing. There's a test failure on Windows and if you don't know what flip-flop is, basically just Google it. I'm kidding, I'll tell you what it is. So as an example, we're just taking this data on the bottom and we're going through each line and then once we hit start, the bit flips and then once we hit end, bit flops. So until we hit end, it's flipped. And you can see here when we parse that text. There's also some pretty good docs on it in the Ruby tree. If you use this command you can see more other control expressions. But looking at this ticket, there was a test failure that was reported and it says flip-flop, the bit should be separated per thread and it came with this test. Turns out that it actually has nothing to do with flip-flop but it's a threading bug in Win32.0.le. And Nobu makes an email here. He mentions that it's probably not a bug like using this example you can see that on Windows this works. But literally five minutes later, not kidding, five minutes later he commits this patch. It's like oh, sorry it wasn't a bug but guess what, I fixed it. I rewrote it using tracepoint instead of thread and I just flipped a table. But don't, he's sleeping. Don't flip the table while he's sleeping. But it doesn't work just on patches. Nobu works on a bunch of other features like I showed on GitHub such as object itself, super method and deprecate constant which is, I don't think that's merged yet but he has a patch for it. And you can often find like, for example in Olivier's talk, I think it was yesterday, mentioned that he came up with this idea for hash contains and Nobu came up with a patch like instantly basically. And so he basically, I guess he just works on whatever the frig he wants and that's kind of cool. But we can learn a lot from Nobu and basically to sum up how I feel about Nobu I think he works really hard. He's a very humble person. Humble enough to be sleeping on stage while there's a talk given about him. And he's always patching and enjoying his life and I think that's very, very noble. And thank you.