00:00:17.080
I found Sandy Metz's keynote inspirational and moving. This session will not be that. So, if that's what you're looking for, you're in the wrong spot. We are aiming for wacky fun here.
00:00:32.960
We are going to play a game. I don't want to call it Jeopardy; I don't know if we can do that, so we'll call it Peril. We're going to play with some Ruby trivia.
00:00:53.320
Before we do that, I have to thank my contestants. I basically emailed them, and they said no. I bugged them until I talked them into saying yes and got them to come up here to let me make fun of them on stage, which is so cool.
00:01:07.479
So, help me welcome them. Our first contestant has one thing all Rubyists wish they had: great hair. But no, seriously, more often than we see his hair, we hear his voice as a regular panelist on the Ruby Rogues podcast, as the producer of The Amazing Ruby Toas screencast series, and as the author of many books that help us write confident code.
00:01:22.159
Please welcome OBD Gri. My second contestant wrote the book that changed all our lives, Programming Elixir. You just don't know it yet. Before he did that, he also wrote a book you may have heard of called Programming Ruby. And before that, he wrote a book known as The Pragmatic Programmer. As a signatory of the Agile Manifesto, there's little doubt how much influence Dave has had on our day-to-day development.
00:01:54.920
Please welcome Dave Thomas. My third contestant is a born teacher, and I know we all learn things from him every day in philosophy. When he's not teaching us that, he is usually saving open-source projects, continuing a wise legacy, or triaging Rails issues, among a million other things. I'm pretty confident he does not sleep. Please welcome Steve.
00:02:26.720
The first category is 'People in History of Ruby.' The second is 'Syntax of Ruby,' so things like operators and keywords are fair game. The third is 'Core Methods,' which includes anything in Ruby that you can use without requiring a statement. Any version of Ruby is fair game, up to and including Ruby 2. Then we have 'The Standard Library,' which is anything that ships with Ruby that you can access with a require statement.
00:03:01.680
Next is 'Rails,' which covers any version of Rails up to and including Rails 4, the newly released version. Finally, we have a free-for-all category, and I'm not going to tell you what's in there—just choose it and find out. That's my advice.
00:03:30.320
Here's our game board. So, we have 200, 400, 600, 800, and 1000. I guess we usually choose randomly who goes first, right? Someone write a random number generator quick. Your programmers—come on!
00:03:44.930
What seems to be random? Dave Thomas, we'll slide you in first. I'm not here to answer questions—I'm here for advice on hair care products. You came to the wrong place? Yeah, I guess so. What do I have to do here? I have to start with a category, and at the top, is that right?
00:04:04.220
Any spot on the board except for Jeopardy? That's right. Is it this stupid thing where you have to ask a question as the answer? Yes. I'll give you the answer; you give me the question.
00:04:44.969
Okay, so you are off to an excellent start. Can you explain the RO St? Wait, I have an assistant. I had to bring in an assistant. Do you see my children's toy? I'm a dad, so I solve problems with children's toy ways. This is our buzzer, and Dana is helping me out with that. Dana, give us the rules of Jeopardy.
00:06:04.240
Okay, so basically, you call out the category and the points you want. For example, if I were playing and wanted to play Off Topic, I would say: Off Topic for 200, which means 200 rubies. No, it's 200 Ruby symbols.
00:06:43.680
Okay, so 200 rubies. Then James will read the answer, and all contestants must push their buttons. Whoever hits it first will light up, and the other two will be disabled. That person who has their light on gets to ask the question that corresponds to the answer.
00:07:09.400
If you get it correct, you get that many points, and you get to ask again. If you get it wrong, someone else can repeat until somebody gets the answer or until James takes pity on you and gives it to you. Whoever has the most points wins. Is it cool?
00:07:41.840
All right, let's start gently. I'll take Syntax for 200.
00:08:05.279
The answer is the company named after this operator will be pleased to hear that the rumors of its death in Ruby 1.9 are exaggerated. Steve, what is a hash rocket? That's it. Where does the hash go? Okay, Steve, your choice.
00:08:38.879
I'm intrigued, so I'm going to take Off Topic for 600. Wow, if you're going to do the weird thing, you might as well completely go for it. This is the technique of personally cooking food so that it can be finished later. His lesson treats now. Dave, what isn't freezing?
00:09:38.720
No, not it. Why not? Not? I mean, she read the rules. I understand the rules.
00:09:53.320
Steve, what is par baking or par cooking? We'll take it.
00:10:05.400
Yes, what is par cooking? Steve, again.
00:10:47.200
Let's do Rails for 200 rubies. This is the only command you don't need to prefix with bundle exec. Steve, what is rails new? I think we'll take it.
00:11:27.960
What is rails in Rails 4? Any other command other than rails new has to be bin Rails whatever the command is. Okay, that's a fair point.
00:11:52.240
That's the reason why I said clarification. See, we're all learning things here, including me. Okay, so we will take that. Steve, your choice.
00:12:12.720
I should just push the advantage and go with Rails for 400.
00:12:27.640
If you had a JavaScript event trigger in your application that is misbehaving after the 4, this new feature might be to blame.
00:12:46.240
Steve, what is Turbolinks?
00:13:18.720
Oh, how did he know that? Steve, your choice again. Let's just keep doing it for 600.
00:14:02.920
The routing feature can restrict matches to requests on a specified subdomain or using a given protocol.
00:14:42.640
Steve, what is constraints? Yes, that's it!
00:15:53.680
All right, finishing off with 800. Just keep going. This no longer documented automation will reverse then reapply the last set of database schema changes. Dave Thomas, what is db:migrate:redo?
00:17:20.320
There we go, it's db:migrate:redo. Now, Dave, your choice would you like to do Rails for 1,000? You sure? Because I don't know the thing about it.
00:19:45.120
Yeah, I'm going to get it out of the way. Rails for 1,000. Let me know when it's over.
00:20:47.760
This rarely seen flag to the association macros gives Rails the hint to reuse an in-memory Ruby instance. Oh, see, we took this out and you said any version now I'm like, what is it?
00:22:55.799
Who guesses going once? OBD, what is inverse?
00:23:49.520
There we go, what is inverse? So, inverse of is not out?
00:25:02.640
I thought we were talking about the map.
00:25:06.160
So, don't worry, inverse of is not going away.
00:25:07.679
That's awesome. Steve gave everybody a yes.
00:26:07.480
Your choice. I'll take Standard Library for 200.
00:27:32.490
This library gives Ruby's cryptic global variables much more readable names. What is English?
00:28:16.960
Steve, your choice. Let's do Ruby Standard Library for 400.
00:28:43.360
This library can be used to generate random byte strings of hexadecimal characters, UUIDs, and more.
00:29:09.920
What is SecureRandom?
00:29:36.640
Yes, that’s correct!
00:29:53.640
Right, he said he didn't know anything about the Standard Library; remember I watched Ruby Toas a lot.
00:30:14.480
All right, Steve, does that mean I get half points? Let's do Core Methods for 200.
00:30:49.760
This mixin isn't as popular as Enumerable, but it adds several methods for ordering objects. Dave Thomas, what is Comparable?
00:31:36.240
Yes, it's Comparable, that's right!
00:31:48.240
Dave, your choice. Oh gosh, um, next one down, whatever that is, 400 Core Methods.
00:32:42.480
This iterator was added as an alternative to inject when the same object is always returned from the block. Dave, what is each_with_object?
00:33:26.720
That's right.
00:34:24.160
Core Methods for 600. This method flips some common iterators from greedy to conservative, allowing for the construction of infinite data pipelines. Dave Thomas, what is lazy?
00:35:55.440
Yes, that’s the one.
00:36:09.920
Dave, please come back! That's hilarious; we lost Dave Thomas.
00:37:17.280
We'll add an Elixir category. Dave, we miss you!
00:38:00.080
Do we have anyone who duck types as Dave Thomas? Ah, he went after refreshments!
00:39:10.000
It's definitely debatable if two does allow that. I think it does, but it wasn't the answer I had in mind. For a second, I was afraid you were going to say you were thinking of enum 4, which is an alias that would have been really mean.
00:40:36.520
All right, Steve, your choice. We haven't done any people in history, so let's do that for 200.
00:41:59.440
These were the first two books published about Ruby in English. Dave, I would guess Programming Ruby and The Ruby Way right?
00:43:16.800
That's correct. Programming Ruby and The Ruby Way!
00:43:30.720
You know, this one's interesting because I could not remember which of these actually published first and I did my best effort because I had a suspicion it was The Ruby Way, but maybe I remember that wrong.
00:44:50.440
And I tried to find out, and the internet just does not agree on which one hit first. They were really close, like I think Programming Ruby was published first.
00:45:36.160
Okay, they hit very close to each other in 2001.
00:47:34.240
Whatever you choose next, keep going down there, please. Okay, people in history for 400.
00:48:42.080
August 19th, 2009. Steve, don't T.T. that. That was Dave! So now I have to guess the phrasing you picked. What is Why Day?
00:50:33.440
We'll take that. What is the day Why the Lucky Stiff withdrew from the Ruby community?
00:51:43.800
Yeah, same thing. Why? And there's that.
00:52:56.360
All right, Steve, your choice. Let's do Off Topic for 200.
00:54:05.840
Rising to the challenge 8 dictates that there can be no interference with the internal development of aliens.
00:55:38.480
OB, what is the Prime Directive?
00:56:44.760
That's it! Now what do you mean, that's on topic? All right, your choice.
00:57:49.240
Oh yeah, points for... Up, sorry! Syntax for 400.
00:58:21.680
This operator was added to support method-like parameters but has data in Ruby even after block parameters were enhanced.
00:59:24.080
Dave, what is the stabby proc?
00:59:32.240
Yes, the stabby operator, stabby land, stabby proc—yes!
01:00:47.040
Dave, your choice. Oh great! Let's keep going down the syntax.
01:01:26.520
This abuse of another operator is generally relegated to scripting hacks that involve quick and dirty filtering of data.
01:01:59.920
Dave, are you talking about the flip-flop operator?
01:02:32.640
Well, filtering of data, it's not very nice.
01:03:20.240
Okay, Dave your choice again: why bother?
01:04:00.280
I'll go for syntax again, 800.
01:04:36.160
These expressions have an implicit 2s tacked on their results.
01:05:46.160
Steve, what is string interpolation?
01:06:18.560
That's correct! What is interpolation?
01:07:33.360
Steve, your choice. Uh, let's do Off Topic for 400.
01:08:26.760
Though their motto is 'Live Music Capital of the World', this city hosts a yearly Ruby conference. Steve, what is Nashville?
01:08:44.920
No! Totally worth it!
01:09:24.480
Anybody else want to take a stab? Dave, what's New Orleans?
01:09:42.920
OBD, you've got a shot if you'd like to take it. Yes, Austin!
01:10:50.480
Yes, yes, you are right! Yes, you're right! There was a question mark at the end!
01:12:11.079
OBD, your choice again.
01:14:06.960
Let's go for some abuse: People in History for 600.
01:14:38.720
He holds the all-time record for Rails commits ahead of David Hein, Hansen, Aaron Patterson, and more. Steve, who is Jeremy Keer?
01:15:28.520
That's correct!
01:16:09.240
Jeremy Keer, and Steve, your choice again.
01:16:42.080
Let's do Standard Library for 600.
01:17:32.800
This library gives user-level access to Ruby's parser.
01:17:37.680
What is Ripper? Yes, it is!
01:18:37.360
Let's stick with Standard Library for 800.
01:19:32.640
It got considerably easier to get the size of the terminal Ruby is running in when this standard library was added.
01:20:09.280
What is Console IO? Yes, what is IO console?
01:20:43.280
All right, bring it all the way up to 1000.
01:21:37.920
Not it's primary purpose. This library gives us a great L banker for launching a web server. Oh, man, nobody knows about this one.
01:22:57.080
The examples always use Python. What is gserver?
01:23:47.440
Dave, you want to take a shot?
01:24:29.680
No, I don't remember. No. I don't think this one's even documented in Programming Ruby.
01:25:42.560
I mean, the library is decorated, but this use of it is not documented.
01:26:38.760
What is... This is the one that primarily gives Windows commands.
01:27:30.880
The examples always use Python.
01:28:47.680
What is the programming library?
01:29:58.480
No, I'm thinking of something else.
01:30:24.200
What is abductive reasoning?
01:30:42.220
Thank you all for your efforts! Let's take something from each of you and see who knows what!
01:31:37.960
Let's finish off everyone right now. All right. Last question! Off Topic for 800.
01:32:47.360
This parenting practice aims to send the message that all feelings are okay, even the worst ones.
01:33:54.800
Dave, what is spoiling? I'm tempted to give him that, but no, it's not spoiling.
01:34:29.440
Any other ideas? I have a bunch of vague thoughts, but none of them are cohesive.
01:35:40.160
What is emotion coaching?
01:36:52.640
Another Star Trek reference—yes! So the final explanation, we ended up with a tie at 4,400.
01:37:24.720
Can we give the contestants a round of applause?
01:38:36.820
Um, but this program, it's a Rails port application and it's on GitHub under my name, J2, it's Peril.
01:39:12.680
If you want to check it out, play around with it, use it at other conferences—go for it! You're free to do it.
01:39:44.440
I'll put the game file of this game there up next time there's working internet.
01:40:26.000
All right, thanks, everybody. That's it. Bye!