 Welcome to Bikeshed Live with your dancers, Adam Keyes and Evan Phoenix. Good evening, good evening everyone. This is Bikeshed Live. Not related to the podcast. To this event, apparently yes, there's a name for everything like this. We were going to do play by play. That's also a thing. So this is Bikeshed. It was going to be Platypus. That was also a thing. So we were running out of names. So what this is, is we're going to have three people on stage pair programming. Three people pair programming. One of them will be able to tag out any given time. And what we are going to do is provide a sports play by play style broadcast narrative. Some commentary, maybe some constructive criticism. Probably not constructive criticism. Some outright insults. And we're just going to have some fun with it. Maybe some audience participation at some point. They'll probably be stretching at one point in time. Yeah, they'll be stretching. Maybe dance routines. We'll hear from some of our sponsors. Other things. Really excited about our sponsors tonight. On the Bikeshed NBC network. And so we'd like to bring out our coders today. Hailing from beautiful Seattle, Washington. You might know him on the internet as that guy with the cats and the keyboards. It's Aaron Patterson. Welcome on stage. He's a first year coder out of Red Hat Software. Previously of AT&T has a really solid career in fixing all of our bugs. A lot of our security bugs. He's done some really great work there. And in the community. Big community player. Big community player. Great beard on this one too. His beard work is really strong. Very strong. Really strong. Really nicely. He's keeping it clean though. Absolutely. Next. Our next participant. Victim. Hailing from state. Eileen. Eileen is a second year developer out of 37 signals in Chicago. She hails from upstate New York. And is also fixing many of our bugs and making our things quite fast. Quite fast. Just unbelievably, imperceptibly fast. I cannot even... Did that just happen? I've tried hundreds of milliseconds. I've tried to... I carry around a long piece of wire. 100 milliseconds just to visualize it. Yes. It's so hard to know. It is. And finally wrapping out our stellar team from Cornell University. It's Mike Parham. You might know Mike. Go ahead. Yes. Please. Get round of applause. I need an extra chair I realized. I'll get that in a sec. Mike Parham is the monkey in the middle. He works on Sidekick, which you probably use in your application. He also maintains the Dolly MimCash gym. So Mike is all up in your infrastructure making that really nice, really great as well. As you might have noticed, we have... We are pair programming with three people. What we're going to be doing is that we'll be having one of them tag in and out basically at random. We're just going to make up the rules as we go as to whether someone is tagged in or out. Put a lot of time into prep for this. Can you tell? If you and the audience feel like someone should tag out, just yell. Be nice about it, but you know, let us know. It's all audience participation. And that's basically the rules. I believe what they're going to be working on today is a fallout solver. So in this new...in this game, fallout 4, there are puzzles, many puzzles in the game where you have to hack a computer terminal that has a bunch of words on it and you have basically a limited number of guesses to figure out which word is the password. You do it by trial of elimination every time you guess it will say you got three letters right or you got two letters right. So as I've played this game, I've sat there studiously trying to hack these terminals without dying in the game, thinking it is such a waste of my time that I sit here manually solving these puzzles instead of writing a program to do it because I'm capable of writing a program and I should. So that's what they're going to be doing today is writing me a program. Let's do some quick pre-game interviews. Mike, how are you feeling about this matchup today? Not really strong. Not strong. No, not strong. You haven't been practicing this week? I have no idea what I'm doing up here. Okay. You're in good company, my friend. Eileen, how are we feeling today? I was feeling a lot better before we had him on the team. This should make for an interesting matchup. There's a lot of drama in the locker room this week. The press conferences were very tense, very tense. Lots of speculation on the fan sites and in the media. Bleacher Report had a very damning interview with the coach earlier this week. And Aaron, any last words before we begin? No. Always one for brevity. Well, now we know who our... Dude, increase the font. Okay. There you go. Now we know who Marshawn is on the side here. Okay, so let's let them go ahead and just take a second to get set up. Part of this whole thing is not just us entertaining you, which hopefully we're doing that sufficiently, but also to be able to watch some people pair program and kind of learn from them a little bit too. So let's just take a second while they get stuff set up. It's very important you see this screen. So if you can't see the screen right now, let's... Are we having a hard time seeing it? Anybody want changes to it? Colors, sizes? Bigger. The bike shedding has begun. Truly. So let's bump it up, font size at least. The editors that I don't like to use are Emacs, Pico, Ed. So this is actually kind of an interesting thing that we're looking at here. Why do I keep from swearing on stage? You don't. Just swear away, my friend. We're all adults here. No, there's actually not adults here. I'm reminded of myself. There's a minority of non-adults. Yes. So... We just got back from Disneyland, so... Go easy. Yeah. You know, this is actually a very interesting point to look at in the evolution of some code because we have... They have just reversed the color scheme. That is a real pro move. Yeah, what a... The presenters. Not a lot of people know what's going on when that happens. We've got some third year developers here. Is there something wrong with this food that I just ate? Why did the colors scheme just completely shift? So we've got the empty files, which are always a place... a scary place to be at the very beginning of the project. So let's see how this plays out. Where are they going to begin? They want backups in already. Let's let them get started before we do the backups. Back bug. So they're going with Minitest here, which is clearly already a controversial decision. It's a bit like opening the game with an on-site kick. It's really... It's really Beatles versus Rolling Stones. And then who is your favorite? It is. Or the monkeys. Paul. Paul, no, the monkeys are worthless. There's a shade of the Beatles, let's be honest. But Paul, definitely the best Beatles. Who performed in the Super Bowl several years ago? He did, actually. The Super Bowl of football, not of coding. We should have a Super Bowl of coding. That would actually be quite good. This is the Super Bowl of coding. This is the big game, the world championships. How much am I making for this, then? The world championships. So now they're in a shell. Which is a nervous place to be when you're coding in front of a bunch of people. And we've started over. Burn it to the ground. That was a really excellent prototype. The best prototype is just the blank file. Ah, I'm done with this one. The strong move. When you know you've gone down the wrong path and you just say nope. So one thing that we did not point out early on, I actually can't do this all that well, is Aaron is using a very controversial keyboard that he's brought with him. He actually travels everywhere with this keyboard. It is multi-colored. Aaron, would you hold up that keyboard for the audience to see for a moment here? Could you tell us a little bit about that keyboard? No. He likes brown keys. That's what we can learn from it. I built it myself. It was designed. It's a handmade artisanal keyboard. Yes, it's a handmade locally grown, organic keyboard. Actually, Phil designed this keyboard. Oh, good old Phil. Where is Phil these days? Phil Hegelberg. Formerly of the Ruby community. I hear he's pretty big in the closure community. That's what I hear too. So we have, oh crap, an assertion, a passing test on accident, I assume. Did we write any code? I was too busy talking about Phil. What is it? They got a constant working. That's what you want to get. That's where you want to start. You want to get a real quick win right out the back. You want to show that code, who's boss. Somebody is feeling good over here. You really want to dictate to the code, to the computer what's going to happen here. And you start out, yes. Strong move. With that fall out. I think my keyboard crashed. That one constant. So the one thing about artisanal keyboards is that they sort of are artisanal. The great thing about computers is that if you really love computers, you can put a computer in your keyboard and then your keyboard can crash in opportune times. So if you hate computers, that's another thing. Then keyboards are for you, I don't know. I think we're going to do one more test here and I think we're going to do a tag. So now we're going for that controversial second test. Which is where you have to either remove the constant or fudge it. We'll see what they do here. Now they're using the, also, control versi inducing Seattle style here. Well, they're mixing it up a little bit here. They're mixing it. With our third equal. You've reminded him. They've gone without the parents. Now we're going whole hog Seattle style. We're back to Seattle style. Boo, no, no, no, no. What did parents ever do to anybody? How did the Seattle... Evan, you have lived in Seattle. Can you tell me how the Seattle style was born? Ryan Davis was very lazy. And the paren key was too far away for his fingers. Very, very short ring and pinky finger. It's really because the parents can't reach the parents. It's easier to get to. Statistically speaking, yes. Actually, we should interview Ryan. Let's do that. You go ahead. All right. So he's testing a score here. So what they're trying to do, I'm guessing what the game plan here is that they are trying to get themselves a baseline algorithm so they can figure out what... How far a word is incorrect to perhaps sort the score of the list so that they can figure out the next guess. Because this game is sort of like Hangman in that every time you guess, you lose a point, but you also get some more information. So you want to maximize, so you want to choose a word like bar with three distinct letters instead of foo where you only get two letters to figure out what letters might be in the correct guess. So I'm out here on the field with... Eventually what we'll do is we'll have a list of... With a retired Army general, Ryan Davis, could you tell us a little bit about the origin of Seattle Style? Have one more sip of coffee and then I want a real answer. Classic Ryan Davis right there, folks. I'm just copying Aaron. What do you want to know about Seattle Style? When did you start doing Seattle Style? Seattle Style was actually influenced by Jim Warrick. He wrote a blog post way back in the day, and I don't know if it is in the archive anymore. That removed all of the alphanumeric characters from a Ruby file and showed all of the parens and commas and colons and everything else. We're tagging ourselves around. And talked about the minimization of noise. And in so doing, he influenced Seattle Style, because what we want to do is we want to remove all of the extraneous characters that actually don't contribute to the semantic meaning of the code. There you have it, folks. Seattle Style, I mean, we do it to annoy people. Success then, my friend. It kind of looks like small talk. It does. Well, that's, you know, from Ryan, that's not all that. That's, I think, part of it. When you're writing Seattle Style's code, you're saying, I wish I was writing small talk. It's like the, I'd rather be coding small talk bumper sticker of Ruby. My other language at the time is small talk. Okay. Speaking of saving yourself, we've already, we've had an impromptu tag while you were, during the interview. Oh, look at this. Eileen has taken... Perum has tagged himself in and is now trying to figure out what is actually going on here. You're not supposed to write the test and the implementation. I think it's your right. My parents is confused. Ping pong's paying for playing ping pong against a wall. Different kind of exercise. Eileen has tagged back in. Let's see how Aaron's feeling right now. Aaron, are you feeling 100% right now? 50%. And I noticed that you're known for your cats and there are no cats here. Is that affecting your performance in any way? It's really, really improving my performance. His keyboard is free of cats. He's not sitting on my keyboard. Here, cats, what is their preferred performance position? Do they like to sit on your arms and your lap on the keyboard, on your mouse? I usually have one on the lap, one on the keyboard. That's an excellent setup. The lap cat, I personally have that at home as well. My other cat will sit directly in my line of sight. Not a team player. So you've got one team player and one... Are they both team players? Sometimes they like to stare at the mouse on the screen. I think it's really cute. And then I just move the mouse around and I forget what I was doing. But then it... A position. Do they like to sit on your... They'll sneeze onto my screen and I'm like, ah, it's gross. Have you considered writing a hacker news linkbait post about the productivity advantages and disadvantages of having a cat because hacker news folks are really into not getting interrupted by managers, but cats are sort of like managers. Yeah, I've actually written an article like that several times and posted it, but I just keep getting downvoted. So... That is unfortunate. Thanks for your time there and we'll let you get back to the game. Where is the sports center music? That's it. That is what sports fans consider music. For one of our sponsors, this part of our broadcast sponsored by Bundler. At first you hated it and then you kind of liked it and now you realize that it's just way better than NPM. Bundler. Because dependencies are just a part of life. So I think we've moved on to four tests now and we still have hard-coded constants. This is a strong move. Moving into sort of the middle part of the game here and we still actually haven't written any productive code. They've got one conditional there. Well, really they have three or four with those OR statements. We'll see if that's going to come back to bite them in the future. Well, clearly it's going to come back to bite them because they've just hard-coded a bunch of junk in there. So that's going to have to change in the future. I do always find when you're doing the old test first as we're doing here today, how far can you go with just hard-coding the implementation directly to the tests? Evidently, they're proving today very far. I've always found it a little frustrating personally when I get from doing the real hardcore TDD part where you're getting these tests in place with completely bogus tests and data towards actually solving the problem that I need to solve. It's a big gap to jump. It takes a real pro. It does take a real pro, sometimes realizing that you're here to actually write code and not make test pass. There's so few businesses that just need foo and bar. I do hear there's a business that they're called Test Double. I always imagine that they just code for tests. They probably just cornered that market. That's it. The foo's and the bar's. This broadcast brought you by Test Double when you need tests and lots of them. And when you need twice as many tests, Test Double has got you covered. So one thing we didn't go over is what version of Ruby we're using here. Aaron, what version of Ruby are we using here? Ten. Version ten. Actually, we didn't know this. That was actually a time-traveling cad brought Ruby version ten back from the future. Oh. That was a tag. That was the nerdiest tag I have ever seen. We're going to have to work on high-fives a little bit later. Not sure what the morale on the sideline is here. Oh, no way. That was a fire drill. That was a fire drill. Aaron has become distracted. He's managed himself into not knowing what he's doing. Is this a common problem? How often does it crash in a day? Too often. So they're using Ruby ten, which I presume has some amazing version of refinements in it. That people use. And an operator for rescue nil instead of just the question dot operator. That's actually a good time. Why don't we take some questions from the audience? Maybe, you know, recently was introduced, and I'm sure Matt will get into this a little later today, this new question dot operator. Have anybody seen this show of hands for seeing this? It got changed to dot or and dot. And dot. It's now and dot. Anybody's heard of this? I'd love to hear some opinions on it. Maybe raise your hand and Adam will come around and get an opinion on it. Jason, what's your opinion on this question dot operator? It's like the try method in active support as far as I understand. What's your take? Actually, could I ask the contestants a question? That is untraditional, but yes you can. Do you guys like websites? Websites? Yeah. Yes. Alright, thanks. Let's hear it for websites. Paying most of our bills since a long time ago. This episode was brought to you by websites. You've used them. Websites, you can make one on GeoCities except not anymore. Anyone else with opinions? Websites, internally under construction. Or operators. The question dot operator opinions. We have an opinion coming right at me. You remember when you gave that talk? That was great. That was a real opinion. They're not all winners, folks. By that I mean comments, not people. I'm sure he is a winner in life. Personally, I'm a big fan of adding extra syntax to avoid using design patterns. Take that, gang of four. Stop putting so many freaking nils in your code. If you liked it, you should have put a facade on it. All the singletons. Sorry, I should have led with the singletons. All the singletons. We've moved on now to a whole lot of failing tests. I see that Perum is trying to solve the quandary of not just hard coding a bunch of answers in the implementation file. I'll be honest that when Adam and I talked about doing this, we figured we'd be further into the implementation by now. We figured code would be written. That's okay. I'm just learning this. The competition is going both ways. To be honest, we had some awards that we picked up for our contestants. But at this rate, we may keep them. We may be the real winners here. Oh, we've got strife amongst. We don't have a lip reader here, but it looks like on the sidelines that Aaron is either pumping up the team or yelling profanities at the coaches. It's a very Des Bryant move. We're getting passive aggressive in the tests. This is always a really strong move to your coworkers. When you find one test that you find... Aaron, maybe the tallest amongst them, so a very Des Bryant move on his part. Being tall and good at coding. Let's see what they do with this. Mike is stupid test. Mike is the worst. That seems out of scope. You guys really need to be working on that. I've got really high priority tickets here. Maybe you should stay within the scope of the problem. And get that on my desk by Monday morning. Thank you. We have a mail-in question from Ernie. I'll repeat it. Oh, have I considered hacking time? When I do hack time, this is what I'm going to do. I'm going to use my time machine to go back and talk to IceT and IceCube and let them know that in their future, they will be actors in a police procedural and a number of 21 Jump Street spin-offs, respectively. I really think it's going to blow their world when 1985 IceT hears that he plays a cop on CBS. This episode, you're by acting careers. They take you strange places. So we're struggling now with the test. This is always a really good point when you're pairing where the two or the three of you are just staring at the test trying to figure out, what were we doing again? Now seems like a good time for a half-time show. Let's all take a quick break here. Take a knee for a couple minutes. Stretch. There we go. Mike's really working it out. Stretch that out. There we go. Did no one prepare dance routines? Aaron is not taking... He's skipping half-time. He figures that's the best way to win the match up. He can't stop, won't stop. Good friend, Nathaniel Talbot. So this is a controversial technique when you're working on your tests. By adding the five times, you basically say, if it didn't work the first time, maybe it'll work the next few times. Computers not deterministic. I don't know if you knew that. 20% is good enough for everyone. It's sort of like asking your cat if they're hungry. You ask them a couple of times and they say no, and then the last time they scratch your eyes out, yes, they're hungry now. You don't have a talking cat? Well, you know, mine does talk to me. So I'm here with... That might be me now that I think about it. I'm here with longtime RubyConf attendee Nathaniel Talbot. Nathaniel, how many... Is your streak still alive? This is just confirming to me that ping-pong pairing is annoying as I usually find it to be. Nathaniel, do you know how questions work? Close. He says no. Very close. Nathaniel, how many RubyConf have you attended? 15. And what was your streak? 15. This is your 15th in a row. You've attended 100% of them. Let's give a round of applause for Nathaniel Talbot. A little-known factoid about RubyConf, we actually offer free tickets to Nathan and a couple of other people who've been to all of the RubyConf. We started doing that a couple years ago as sort of a thank you for our long-time listeners, first-time callers. So just a little factoid there for you. Put that one in the old noggin. That's another thing to do if you successfully invent a time machine, go back to the first RubyConf, attend to all of them, and now for all your effort building a time machine, you can go to RubyConf for free. For free. Let's go to another one of our sponsors, innumerable, because writing a for loop is awful. So we're getting into the five-minute warning here, and currently our method can return a one or a zero, 20% of the time. But we have written no production code, no actual implementation. So it's a little cliche in the realm of competition to say we have taken 100%, 110% of the time, but here 20% clearly enough. Now we're getting very interesting. I think maybe someone has pulled out the big guns in order to do this one. We're using... I believe they've gone with our sponsor, innumerable. That's right. Now Zip, Zip is a thing that I just don't understand. How often do you use Zip? I use Zip never because... There was this one time in 2008 I think I used Zip. Yeah? So you understood it one time in 2008? Perhaps. Now I understand that it like pulls two arrays together. Let's get Aaron to just explain it to us. I believe it's called Zip because it works like a zipper. Pulling the elements together. Lots of consulting going on here. I'll let them keep reviewing their playbook. They're really up against the wall here with the five minute warning and I think they've realized that they need to go ahead and look at the implementation they did last week. Time and keyboards are conspiring against them. That's right. Seattle style isn't just about parentheses. It's about wasting a lot of time. And prep work. And prep work. Well, prep between me and Aaron. We left Mike out. So we've actually moved on to a new test here. I'm wondering if we're actually going to... We've moved on beyond constants, which is just amazing, frankly. I'm stupefied that we've moved beyond constants here. We're using an assert. I think that's going to come back to bite them. Maybe not. I'm really excited to have Mike on the team. I think he makes a really good sidekick. Now we're just lucky this isn't the Ruby Game Show because that would have almost certainly been a buzzer. His evil feeds on your applause. Don't give him what he wants. Tonight on NBC News, we'll have an exclusive interview with tech billionaire and entrepreneur Paul Graham. Paul Graham has recently discovered the music of Taylor Swift and will be discussing with our interviewer the statistical veracity and the game theoretic implications of whether haters will always be hating. That's tonight. Tonight. Paul Graham on NBC Tonight. We switched again and we're back to the crashing keyboard. So this probably will not go well. It appears they're both typing. Aaron continues to be the negative Nellie on the sideline giving me the side-eye. So what do you think this fallout.hack method is going to do, Evan? Well, it looks like it takes an array. That is what it looks like. And this particular array is a heterogeneous array of a string and a number. Well, you can say what you want about the Ruby Grammar, but it's pretty clear when there's an array. It's right. Unless it's a function call. It could be a call to a lambda. This section brought to you by Square Brackets. Sometimes there's actually a hash inside there, too. Square Brackets. That segment brought to you by, when your coworkers use that weird hash thing where you can create a hash from an array with Square Brackets, that weird thing with a hash when your coworkers really don't like you. So now we're moving into another kind of interesting twist here going on. Now we're actually mixing what we'll call... I don't want to call... Eileen has corrected the Seattle style. Oh, no! We've gone back. We're actually fighting over style now. Let's see who prevails. It's a battle of wills. It's a classic blunder while pair programming and not agreeing on where to put the parentheses. Or how to name your arguments evidently. You've got to set ground rules. Now I think renaming it to T could be a strong move because the thing I really dislike when I'm programming is when I see something, a variable named after its type, which is almost certainly useless unless you're implementing a generic data type. Oh, with the old app. I like this move. This move is confirming all of my biases. And I really like Inject. Inject has got to be one of my top five favorite methods in Enumerable. Enumerable is definitely my favorite module. I think we're going to give them 30 more seconds before we call this particular game. That's the 30-second timeout. The 30-second warning, which means there's really five minutes left in the game. Except not. Is there... Not yet... Okay, they've changed. There's no dot minus or minus dot operated yet. But if there were a minus dot, what would it do? It would be something from Haskell. It would be something from Haskell. It would be something from someone's graduate thesis. Technically, I think you can actually do dot minus because it's a method call on the right-hand side and you can have a space... Can you still have a space between the receiver and a dot? Okay, there we go. Dot minus when you hate your coworkers. I think we're brought to you by parse.y when you have insomnia. And I think we're going to go ahead and say that this expression is going to call it. So however we end here, this is going to be it. Okay, hands off the keyboard. Run your tests. That's really taking expression recursively. That's okay. He's still got an open parent. I'm going to let him be syntax-complete here. Yes, let's let them fix... Let them fix all their syntax errors here. Oh, so we've almost gotten into actually using one of the methods that we wrote previously. Now they have an opportunity here. It's also very important when refactoring is to actually use the methods you write and not just have a jumble of methods unrelated to each other. They had an opportunity here to code golf the last line to get under our one more expression rule. I would say that that unpack... the block argument unpacking kind of qualifies as golfing something here. Yes, using unpack when you're doing something really serious or really dumb. There it is. Managing the clock here. Oh, there it is. That's a series of running tests. I think we're going to go ahead and call it. Let's give them a hand, everybody. So, now that you've seen our contestants' program, this has actually been a secret competition the whole time. We're going to have the audience rank them by means of applause meter third, second, and first place. And then we have special awards for the winners. So, I will be the applause meter. Okay. Let's begin with... Let's start with... let's go in alphabetical order. If Aaron, you think, was the champion... applause. applause and hoot and holler now. That's strong. And finally, Mike, applause now. All right. The applause has spoken. Eileen is number one. Mike is number two. And Aaron is number three. There's always the question of people if people know how to use an applause meter because the prize is... the prize is... the prize is... the prize is... people know how to use an applause meter because the first person is always screwed in that case. This is where I applaud. How are they really going to and never use an applause meter with Paul Graham because he... he can't get over it. Thanks for that, Adam. This segment brought to you by my need to make fun of Paul Graham. Eileen, please stand up. We have some amazing gifts for you from the sponsors in the mall. We have an owl cup, a pug cup, unicorn cup, and my personal favorite, a nice Siamese cat cup. You can do it, everyone. All right, thanks for tolerating us for 45 minutes. Thanks, everybody. I think we've got a break, a little break now, and then session, so thanks, everybody. Thank you.