We're sorry but this page doesn't work properly without JavaScript enabled. Please enable it to continue.
Feedback

Nobody Knows Nobu

00:00

Formal Metadata

Title
Nobody Knows Nobu
Title of Series
Number of Parts
65
Author
License
CC Attribution - ShareAlike 3.0 Unported:
You are free to use, adapt and copy, distribute and transmit the work or content in adapted or unchanged form for any legal and non-commercial purpose as long as the work is attributed to the author in the manner specified by the author or licensor and the work or content is shared also in adapted form only under the conditions of this
Identifiers
Publisher
Release Date
Language
Producer

Content Metadata

Subject Area
Genre
Abstract
Nobuyoshi Nakada is the most prolific contributor to Ruby. He is the all time leader in commits to the CRuby source code. With over 10,000 commits, he leads second place by double the number of commits. Leading to his psuedonym "Patch Monster". Allow me to introduce you to the man, the myth, and the legend that is nobu. You will learn the true story of how nobu came to be, and witness exactly how he earned that psuedonym and why everyone loves nobu. We will also show you what it takes to make it in ruby-core using nobu as an example.
39
Cone penetration testSinc function
NumberMultiplication signComputer-assisted translationComputer animation
Patch (Unix)TwitterWebsiteMultiplication signComputer-assisted translationDifferent (Kate Ryan album)Slide rulePresentation of a groupComputer animationLecture/Conference
Computer animation
EmailPlot (narrative)Total S.A.Self-organizationProfil (magazine)Projective planeCommutatorVulnerability (computing)NumberSheaf (mathematics)Graph (mathematics)Computer scienceMultiplication signElectronic mailing listOnline helpGraph (mathematics)RandomizationSinc functionComputer animation
HypothesisComputerData transmissionData compressionLocal GroupExpert systemGroup actionWorld Wide Web ConsortiumComputer-generated imageryNeuroinformatikOnline helpMeeting/Interview
Computer animationMeeting/Interview
Digital photographyTwitterForm (programming)TwitterOnline helpMeeting/InterviewComputer animation
Computer clusterOnline helpCone penetration testLecture/ConferenceComputer animation
Complete metric spaceVideoconferencingInternetworkingInheritance (object-oriented programming)Key (cryptography)Lecture/ConferenceComputer animation
Patch (Unix)Monster groupRevision controlYouTubePatch (Unix)Monster groupLecture/Conference
Software developerRoutingCommutatorAreaMultiplication signMeeting/Interview
MereologyTable (information)Meeting/Interview
EmpennageVideoconferencingMultiplication signWordComputer fileComputer clusterMeeting/InterviewComputer animation
BitProbability density functionWhiteboardComputer clusterWord
Lecture/Conference
Musical ensembleHypermediaComputer-assisted translation
Computer-assisted translationDistanceForest
Online helpForestSoftware bugObservational studyComputer-assisted translationEngineering drawing
Computer-assisted translationMathematicsPhysicalism
PhysicalismMathematicsUniverse (mathematics)Computer animation
Computer programmingUniverse (mathematics)NeuroinformatikComputer scienceComputer animation
Universe (mathematics)NeuroinformatikComputer programmingOrder (biology)Drawing
Multiplication signGradientUniverse (mathematics)Goodness of fitPlanningProcess (computing)FamilyRight angle
Physical law
Video game consoleMacro (computer science)NeuroinformatikFigurate numberTDMAComputer animationLecture/Conference
Multiplication signBinary decision diagramTwitterComputer animationLecture/ConferenceDiagram
Software testingComputer configurationError messageSoftware testingTwitterPower (physics)Network topologyComputer animationLecture/Conference
OctahedronTask (computing)Repository (publishing)Standard deviationTrailMilitary operationComputer configurationCloningWeb pageClosed setOpen setRippingQuery languageElectric currentSoftware testingPower (physics)MereologyMultiplication signRevision controlFamilyComputer animation
Computer fileMathematicsType theoryRight angleComputer file
SpacetimeType theoryKey (cryptography)
ExplosionRevision controlTime zoneCompilerFormal languageContent (media)Data typeSet (mathematics)Codierung <Programmierung>Computer fileCore dumpComputer configurationKey (cryptography)Reading (process)Scripting languageSource codeCodierung <Programmierung>Core dumpComputer programmingComputer fileMathematicsSoftware testingComputer configurationSpacetimeMereologyOnline helpFlagComputer animationLecture/Conference
Core dumpComputer fileComputer configurationLeakThread (computing)Codierung <Programmierung>LeakFrequencySoftware testingLink (knot theory)Block (periodic table)Computer fileMultiplication signComputer animation
LeakBuildingLemma (mathematics)Software testingError messageClosed setSuite (music)Social classInformationThread (computing)Electronic mailing listSoftware testingLeakSuite (music)Computer fileThread (computing)Software bugLink (knot theory)Block (periodic table)Social classSpacetimeObject (grammar)Instance (computer science)Message passingDifferent (Kate Ryan album)Flip-flop (electronics)Bit rateMultiplication signTerm (mathematics)BlogWindowPRINCE2Computer animation
FLOPSCore dumpComputer virusLink (knot theory)Thread (computing)Revision controlClosed setWebsiteMaxima and minimaInformation managementWindowSoftware testingBitLine (geometry)Computer animation
Line (geometry)FLOPSBitGame controllerExpressionComputer animation
Flip-flop (electronics)Computer programThread (computing)CodeSoftware testingGame controllerExpressionNetwork topologyFlip-flop (electronics)Moment (mathematics)WindowReading (process)BlogSoftware bugThread (computing)BitComputer animation
Thread (computing)Point (geometry)Closed setBlock (periodic table)AliasingSystem callTable (information)Point (geometry)Object (grammar)Inheritance (object-oriented programming)Computer animationLecture/Conference
Open setClosed setInheritance (object-oriented programming)Revision controlElectric currentNormal (geometry)Core dumpAbelian categoryHash functionSummierbarkeitLevel (video gaming)Computer animation
Video gameLevel (video gaming)Computer animation
Graph (mathematics)Staff (military)Hacker (term)Patch (Unix)SoftwareEvent horizonVideoconferencingMeeting/InterviewXML
Transcript: English(auto-generated)
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, and 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 of all time to Ruby,
and his number of commits far surpass everyone else, by a 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 a 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 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's 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 MakeSnapshot. 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 Akita about three years ago, and it says, an interview with Nobuyoshi 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 Akita again from Ruby Kaigi, and I'm gonna interview Mr. Nobuyoshi 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 tables for character conversion, Japanese books to UDF 16. The first one was Faro 4. Faro 4 is the first one, Faro 5 is the first one,
Faro 5 is the first one. That video's great, but I have no idea what they'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, though, I'm gonna tell you something. 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 100 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, right?
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 as friends. 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. And a young woman who was out there studying bugs for her graduate studies in entomology, actually, accompanied by none other than Okidoshi,
or Professor Oak. They quickly ran to go help young baby Nobu, and the cat just 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 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 at a 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 and writing C 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 is 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, from 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 it 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 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 remove trailing spaces. This says SVN, but that's just because we switched the key. But he has 107 of those. Basically how this works is he has a script that runs, and it just has this key so he can push or whatever.
It goes through and it starts out with the make file and the read me, and 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 the Ruby C file is 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 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 ensure 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 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, or 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 really helpful. And I think Nobu has had 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, you know, 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.le. And Nowu makes an email here. He mentions that it's probably not a bug. 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 a trace point instead of a 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 instantly, basically. And so I guess he just works on whatever the Friggy wants, and that's kinda 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 noble. And thank you.