 Lauren Boswinkle. All right, so I'm gonna do a brief rundown on Ruby and polymorphism, so there's my information. But basic lessons that you learned in college, like cat, dog, and lion are all subclasses of animal. That's kind of not the full spectrum of what you can do in Ruby. Polymorphism in Ruby is not just that. It's a duct tape language, so that means that you can actually work around just objects. You can have things that simply act like objects. So again, what if you needed to handle different types of objects differently and you have no consistent API? I've seen this and I've done it myself. Do something, case statement, widget, sprocket, gizmo, gadget, whatever, otherwise raised an unknown type. And then you start seeing it somewhere else and at another place. But it works, you're good, awesome. Oh god, new requirement. It should be quick, right? So this is logical branching. Methods now have two or more functions. Code is more brittle and difficult to make quick changes. And really, this just makes Happy Cat sad. Happy Cat has run out of happy. Polymorphism doesn't necessarily mean subclasses, in dynamically typed languages. Interfaces, APIs, et cetera, are a fantastic way to deal with this. You can call the same method regardless of the type being handled and compartmentalize special cases to the classes and modules concerning the behavior of those types. What I mean by that is you can build these APIs into your objects. But sometimes our objects don't really want to follow that one specific standard API, like they're often used for different things in different places. So you can just build some adapters or interpreters and build those with the API in mind so that you can use them together. And you can utilize namespaces if you need to. So modules or just wrapper classes are fantastic for that. This was written on Y days, so it's a little weird. But you can just throw a method into a module that actually just, you can just call without saying anything and then have these adapters in that file or in their own files or whatever. And then this is what that code turns into. The case statement is in one place so that when you need to add something else, you can just add it in that one place, add a new adapter, you're good to go. There's plenty of ways to do this, it's just one. Like really, Ruby is fantastic that if you can just think of a way to do something, chances are it's gonna work. It's kind of wonderful like that and kind of horrible like that. And really, temperance is key. If you've only got one case statement or one nested if or something, don't worry about this, just do that. If you start seeing that case statement or if statements start appearing more times, try thinking about a different way to do it. And again, this is a suggestion, it's not the right way. Look, a puppy, that's my contact information. All right. I want my lawyer, hi everybody. I wanted to talk about being social, not living social, being social. And I originally wanted to talk 45 minutes, very long conversation. My wife suggested that I give this a talk to all of you because she thinks I'm a very social individual that I talk to a lot of people. And it's sort of the reason why I've lost my voice now because of the GitHub drink up yelling at random people that I had never met before last night. And I spent a lot of time talking to people. I've done it most of my life and it terrifies me, probably like it terrifies most of you. I don't, I'm the one in the middle. I'm wearing the same shirt to help you out. I'm wearing the jacket solely because I have some pitting going on. That's the one tip that I've learned. Wear a jacket if you're gonna pit a little branch. It's also a good social tip to like, you know something about yourself, like you're pitting right now, people feel more comfortable about you. But that's not one of our two tips. That's a little side. I'm Franklin Lover, I work at Jumpstart Lab. Ow! Jumpstart Lab, come. So the scenario is you wanna meet some people. You're at a conference or some brilliant presenter or some intelligent people. There's some of your heroes that perhaps you read their book and they changed the way that you did Ruby or worked with Ruby. And, or maybe there's just some sexy men, am I right? That last one on the end there, that's a sexy man. Maybe you wanna just talk to him. I'm gonna say, hey, so I was like, here you are, guys. What do I say to this guy? He is so gorgeous and you're uncomfortable about what you wanna do and how you wanna express yourself. And so, Mike, whoa, whoa, whoa, whoa, whoa, whoa, whoa, whoa. You got a preview. Most people say or suggest perhaps like, think about people in their underwear. It might be awkward, even more awkward. You might come back and be like, oh God, I really don't know what to say to people. My suggestion is I look at everybody and I think about them as if they're my grandmother. This is my grandmother right here. What I mean to say is I look at people that I don't know and I imagine that they're actually someone I do know. I pretend, when I talk to every one of you, that we're cousins or you're my uncle or I'm your uncle or we're weird second cousins in its Christmas time and we haven't caught up in a while. That works really well, I think, for a lot of people. You can't say be comfortable, be relaxed. What I do find comfortable is using some way of tricking your brain into thinking, oh, I know what this speed is. And so that's what I suggest. That's my biggest tip. Right there, if you're comfortable and you're easy with other people, everything else usually comes much easier after that. Because it's very awkward standing there talking to awkward people. I just wish I was once. Yeah, so here's me and I'm thinking about Randall now but I'm thinking about him as my grandmother but I still don't know what to say and maybe he starts thinking about me and Drax and that way, okay, now we can talk to each other. That's not a question at all. And so usually I go, we ask these questions like where are you from? All these things that don't go anywhere. Like, oh, you're from California? Where in California? Oh, I lived in Sonoma. Oh, that's great wine there, I've heard. I haven't had that conversation. Like, you've actually gone and then you just the conversation usually didn't even go anywhere. The other questions you might ask are something like, I'll share a story about a trip to a vacation and then you'll share a story about a trip and vacation and we sort of just talk at each other and that's something that happens a lot too. And what I suggest really is that you ask more questions. Martin alluded to this, if you pretend to be interested in people by asking questions or if you actually are interested in people, just asking questions would make it so much more a better conversation. And what I mean by asking questions the same way from some of those dead-end ones where you expect a particular answer. It's kind of like interviewing people the same way. You don't want those dead-end questions because then the interview turns awkward. So, believe it or not, practicing being social. So besides those two tips, there's two things or there's three things I thought about earlier. I'm not suggesting that you join the pickup artist community but they go into a lot of detail about this stuff and there's some amazing, interesting things that they've done because they're looking at some of these social areas. They're really these really bad nerds doing these things but some things are good about that community and what they're looking at. I don't mean what they're trying to do with the necks and all this other stuff but I'm really interested in them. Take improv classes after Jesse and other people. It's amazing because you just play and you learn how to play with people. And particularly, you're at a conference with a bunch of people that all are like you or very similar to you and have interests like you so please talk to them. So remember my grandmother, think about her and ask questions. So I really enjoyed that talk by Martin Atkins and one of the things he said was be grateful and I really am grateful that I'm not following him directly after his presentation. So he also mentioned building your own Great Wall of China and I kind of consider this project to be my Great Wall of China and I want to share it with you and see how you can help and if you want to do something similar. So I have this technique, a systematic technique for dramatically improving your knowledge of a topic or just achieving a goal and I call it one up. So it's applicable to any goal. My goal is to become a world-class developer in one year but it's not necessarily just for this kind of guy. It's really just like for anyone. So the general overview is you pick a goal. It's you give yourself like a year. You break down the year into intervals. Like for me it's two-week intervals and you pick some topics that you want to hit within one topic for two weeks. You practice to liberally get mentors and teach others and if I break that down, go to his upside down. I don't know if he likes that but he says, he says on a house owner it's like without haste without rest. It's like a star moving across the sky and it gets there because it's going consistently. I guess we have the tortoise and the hare so the Germans have nothing on us but so I think make your goal really impressive. You've got a year, so don't let me down. Break it down into two-week intervals. What's nice is it's small enough to stay urgent. If my goal is become a world-class web developer and a year is going by, it could be like it's Saturday, I'm tired, whatever but if it's like this is the end of my two weeks and I haven't written a blog post yet, you got to get on that. So it's really helpful to do it like that. So the new intervals absorb all the ones as well. So if you have something you don't like you'll get past it, you'll get to the next thing. Intervals are cool because pre-planning them helps you achieve balance. It's really easy to go down some kind of rabbit hole when you get into a topic, like I definitely get into topics and it would go way beyond two weeks but if I have the chance to plan what I want to hit I can definitely hit it as long as I plan ahead and I can share my list of topics with other people who are experts and they can help me out and say that's not relevant. Just being able to show other people yourself helps them to help you and it helps you time, timing, timing, the shorter feedback loops and then looking ahead for applicable conferences, meetups, whatever so that when you think, I thought to myself, the Git workshop's coming up. I'm gonna be learning Git, that's one of my things. And so I'm gonna time it so by the end I'll kind of know Matthew McCullough a little bit and help out with his stuff and it's good timing. You don't learn it if you can't teach it and I find that what I do is I just sign up. I'm gonna give a talk at a bar camp or whatever it's gonna be and when you sign yourself up, like here I am, you have to describe it and it's gonna make it really more clear and consistent in your mind to be able to explain it better. So just the order and clarity. Another thing is not just giving talks but writing and I call it fighting the ruler because when you have a big blank page in front of you, you gotta fill it up and just that empty writer's blocky feeling shows that I mean beyond the practice of learning how to write, it shows how much you know about a topic. If the words are just spilling out, well you know a lot and it kind of gives you some more feedback that way. So another thing is you change. This is really, this is Bruce and he was all about, when he wasn't writing about cross-dressing sadistic dukes, he was talking about how people change and when your life is changing, you don't know it after a while. There may be inaccessible job or inaccessible romance but once you're there, it feels totally normal and that freshness is gone. So the time you wanna write, the best time is when you know the topic but it's still fresh for you. So write at the right time like I said in transition. The thing about writing that can trip me up and some people gave me some good advice about this. They said, you don't have to write for your ideal future self. That's someone who knows all this stuff. Oh man, that's too easy. You can write stuff that's easy to you. Totally easy, it's whatever. It's kind of boring almost but for some people that's vitally important, vitally interesting. So believe me, people are out there and it can be really useful, especially if it's boring for you that means you know it really well. This one's tough. Be the worst in the room. There's several difficult things about it. One is getting other people who are the best to allow you in the room so you can be the worst there with them. But I think people like to help from when I show people my list of things and they know about a topic, they seem really genuinely ego to help me so I really like that. Yeah, bring an empty cup. This is a pseudo Eastern story. Every software talk needs some kind of Zen story. So this is this one. There's a monk that goes to a new monastery and he's like, he's a novice. The master shows how they meditate. He's like, oh, we do that kind of differently. We stand up and blah, blah, blah. He's going out with his stories. By the end of this thing the master brings them to the tea room. He puts down the tea cup, he starts pouring it and he just keeps going and starts going all, it just flows all over the floor and then the novice is like, what are you doing? And the master's like, if you don't have this empty cup it's just gonna flow out. So that's that story. Practicing deliberately is a big aspect of these topics because if you are on the job you're being paid because you know how to do something. You know, they don't want you to, I mean, obviously there's some learning with every project but for the most part they want you to be pretty good and know what you're doing. So I, I mean, I'm working on like a client project. It's like a chess clock has started in your mind. You can't get too deep. If you're getting too deep you gotta kind of pull up and say how can we change these requirements or what's necessary, how can we do things differently? But we're gonna pull a nooth when we're doing this. Someone said, why don't you use email? He said, well, because you guys are trying to stay on top of things. I'm trying to get to the bottom of them. So that's what Knuth is all about. So get out and co-work. I think it's important because you don't even know the questions you don't know enough to ask. So like when I started working at Bendyworks I work at Bendyworks here in Madison. I didn't know their workflow with like get and the way they do things like adding things bit by bit. Anyway, they do it surgically and I didn't even know enough to ask that. So it's important that you get out and be immersed. And telling the world because when you work secretly it's less fun and I think it amounts to less. SeekReceived is like the dev null of life. Whatever you put in there just kind of goes away. Like it's way more fun, you get more out of it if you're sharing it. So the detail intervals pay off. Like I said, people, you can say specifically I'm working on this, this and this and people can connect on that. So like I said, real quick story. I spent some time on a failed startup. By some time I mean several years and it's one thing coding and coding and feeling like you know what you wanna make but until you go out and do the hard thing and talk to the audience, talk to the businesses, you don't know what really counts in the world. And so I think it's the same thing with your own personal goals and learning too. It's not gonna be as good unless you like get out there. Be prepared, make some like business cards you can give out. Oh damn it, I'll go up really fast, really fast, really fast. This is my one year goal. If you guys wanna have your own, tell me about it. That's cool. If you go to oneup.begriffs.com that's gonna be my list of things that I wanna learn and you can help me out. Thank you. Hey guys, my name's Steve Balkner. That's the helpful Steve on Twitter. I work for murphy.com. Quick pitch for that. We're a startup here in Madison. We're actually hiring. We're looking for two Ruby devs. So if you're looking for a job and you want an awesome job to start up, come talk to me. Just about a block away. My claim to fame is I went to the South Pole once. So that's me, near the South Pole. So this talk is meta, meta programming. A few years ago when I started Ruby I had been programming for about six months. I had no idea what meta programming was. And then some people at a Ruby meta were like you should check it out, it's really cool. And I went home and Googled a bunch and read a bunch of blog posts. And it was definitely one of these big kind of moments. It was like whoa, this is so cool. And I had no idea what to do with it, right? It was one of these things that I could see the power but I absolutely had no clue how it was gonna help me. So fast forward a few weeks later I finally found an area here at murphy. We needed some analytics done, right? So basic web app, we need all these analytics for all these different things. And they kind of are all a little bit similar. They have similar properties but they apply to lots of different models and lots of different areas in our rail stack. So I decided to apply meta programming to this although there's probably definitely other ways you could do it. So for murphy, our music startup, we have albums, right? So I was kind of sketched out this meta programming idea and I'm actually gonna walk you through how I did it real quick for anybody that's not ever seen any meta programming before. I said I wanna write a module that I can just plug in that's gonna be my analytics module. And I wanted to find methods on that module that will define analytics. And then I wanna very easily take all those methods and run them and package it up on JSON and send it to our analytics server and it's gonna be amazing. So this is kind of what I wanted to do. I also wanted to do time-based stuff. So the previous one was account. This is an account based on time. So this is what I wrote. I basically started with creating a hash that's kind of infinitely nestable. There's like gems that will do this for you. Don't worry about it, if that's, don't know what's going on. And then this is the first thing I did. I was like, let's take this analytics module and let's look at all the constants that exist inside it. So this is every model that will be in my Rails app. And then for each of those classes, we can actually create a string and constatize that string and create a new instances of that class, all right? So this is, this was like the first, like everything I'd done with Metaprogram and I thought it was so freaking cool. So now I have these basic collection of new objects. And then for each of those objects, I'm gonna look at all the instance methods. That's that count method I was talking about before. And then for each of those methods, I'm gonna look at the number of arguments in that method. So if it has no arguments, it must be a count. If it has some arguments, then it must be some time-based metric. And you're gonna do some stuff with that. I'm gonna downcase stuff and I'm gonna intern it and turn it into symbols and send it all into a hash and it's gonna be amazing, right? So this is what I wrote. This is the actual code. And the cool part is, is then it got really easy to write metrics because it was like, same thing. I just was like, I wanna do a genre metric, right? So let's create a method in genres and I wanna do a time-based metric on artists. And so I just wrote this and it was dead simple. It packages all this stuff up into JSON and actually sends it to a server. And then I actually took it, make sure I don't have time off. I took it one step further. I actually, on the other end on the server, wrote metaprogramming there that would look at the JSON and figure out how it should display the metric based on how many parameters it had. All kinds of cool stuff. The truth is it was terrible. So basically this is my first foray in metaprogramming and the meta-meta on metaprogramming is be careful. So the system I wrote that you just saw is not flexible whatsoever. It's extremely difficult to maintain. As soon as some of the other programs on the project started poking at it, they were like, what the hell is going on here? They couldn't understand it. And basically nobody had any idea how to use it and so we ended up throwing it away later in favor of some other methods. So that's kind of my warning for metaprogramming. But I highly recommend checking it out if you've never tried it before. It's actually really, really cool. This book is really cool. Where is he? Is he in the room? Oh, hey, what's up? It's kind of cool how stuff like that happens with these things. But yeah, so this is the book on it, right? If you want to learn how to do it, you should go check this out because it actually really is interesting and it came very helpful. The other last thing I'm gonna leave you with is that it really will help once you start looking into actual source code for gems. I really didn't understand any gems or even their Rails internals until I learned how to do some metaprogramming and then I was able to actually go in and look at Rails and say, okay, I can understand what's going on here because Rails itself uses a lot of metaprogramming. That's it. So this is a lightning talk I've done a couple times and every time I change the slides around and try to make it funnier, I'm pretty sure that it's gotten less funny over time because I'm less drunk each time I do it. And I'm sober this time so it's probably gonna suck. That's all right. So I quit my job and I started a consultancy that does Ruby and kind of .NET even though we're kind of done with that mostly. This is a hilarious slide. I actually just wanted to see a picture of my baby that was 15 feet tall so hold on a second. That's fantastic. This is what I call the rrrr face of my daughter. I'm gonna make an assumption here that all of you write software for a living, you kick a whole lot of ass at it and that you're prolific, you go in, you solve problems and you get along with human beings generally. This is a picture of the day that I left Madison Ruby last year. I got in that car, drove home for three hours, really hung over and got sunburn. The beginning of it seemed nice though. So let's think about all the reasons that we might quit our jobs. One is that you might be underpaid and underpaid is kind of a relative thing because of where you live and all that kind of thing but none of that really matters. The idea is you could quit your job and go get more money and for instance, my friend went and worked for Redbox and did the worst work that he has ever done in his life and then he bought a giant sailboat with cash. That couldn't have happened without being tortured badly at Redbox for a year. This is a view from our office. It's sick. The slides really don't matter. I mean, the pictures don't. So let's say that you have a commute. For somewhere to the tune of eight years, I was driving an hour each way to work every day. For a while it was an hour and a half. That's hell on wheels. If you have to do that, kill yourself. This is a website that we put together, styleseek.com. It's got a lot of really cool stuff in the back end. We put it together, delivered it. It's awesome sauce. Let's say you don't have enough vacation. I worked somewhere for four years and they gave me a third week of paid time off which is just kind of sad when it comes down to the fact that that's what we should be living for. We should be rating great software and then getting out there and relaxing and having an okay time. This is something that's timeless. It's the exact opposite of timeless. It's a boom box with a tape player and a radio thing that's actually a PA and it's awful. As previously stated, picture slides aren't really that cool. So the other thing is the market is sick. Every single person that comes up here is gonna say, oh yeah, and by the way, we're hiring. Oh yeah, and by the way, we're hiring. This is a combination of pictures of this guy who built this entire circus out of paper mache. It's at the Museum of Science and Industry. It's totally ridiculous, but it's amazing that he did that. It's clear that he's absolutely insane. One of my jobs actually made me work all sorts of overtime and I came to find out that I was actually worse at my job because I was working more hours because I was just less happy and I didn't have enough time to kind of fulfill my life of drinking too much and that made me unable to release and have a good time. If you haven't seen this photo, then I don't believe that you write software for a living. Another good reason to quit your job is that you are the best person at your job or you're just cocky and maybe you need to quit your job so you can have somebody that's really awesome to learn from, but the main part is is that you should always be learning from someone above you and having those kind of mentor relationships. This is a 27 pound gummy bear that we gave away in a raffle. It's disgusting. It's 27 pounds. What do you think you're really gonna do with that other than freeze it, pour vodka through it and get drunk? One of my favorite reasons to quit your job is that you get to stop staring at that code you've been staring at for so long. That's one of my favorites and it's one of the reasons that I've always liked consulting is because sooner or later I'm gonna go, okay, I need to get out of here. I'm burning out. Please remove me. And then I can leave that meta-meta-programming behind for other people to deal with. Subtle callback. This is another picture of my progeny saying no you didn't about a carrot. Sometimes it's good for a change. We're a small company. We came from the enterprise and it's an amazing change. We learn a lot about ourselves and about our employees and we can expand and we can do startup work which is really rewarding. Here's another 15 pictures of my child. One with Kenny G. If you work a place where all your friends work then you should probably quit there too because you're gonna find better friends somewhere else. Pictures of shot glasses and a fisheye. Benefits aren't that big of a deal. You can find insurance, ehealthinsurance.com, do some freelancing, have a good time, enjoy your lives. I'm Brad from DevMind. It's not Comic Sans. It's the default one for this theme. It's called Chalkboard. Yeah, so I had to include the Twitter logo because I don't wanna be in violation of their new terms. So I wanted to talk about Objective C. So starting out with memory management because you still get to do that with Objective C. So there's the rules of C memory management. If you don't know them, you allocate memory and you deallocate it when you're done with it basically. The base class that you use in Objective C is NSObject. It's used in both Cocoa and Cocoa Touch for Mac and iOS development. It's not actually part of Objective C. Programming an Objective C on its own is a pain in the ass because you start by writing your own base class. So the memory management in Objective C is you allocate your object and then you can retain and release it. So it's a reference counting language. Yeah, or you could use ARC. If you want the object, you need to take ownership by retaining it or allocating it. And when you're finished with the object, you release ownership. It sounds really simple. It's not, which is why we have ARC. So the point I was going to get to is object orientation is a complete lie. It's a bunch of structs in C. So this is some Objective C syntax if you haven't seen it before. Objective C uses dynamic dispatch, just like Ruby does. So that means that you can change methods around at runtime. Not to the extent that you can on Ruby, but kind of because it has to run through a compiler also which kind of makes sure that things are there. So dynamic dispatch is a lie. It's just a nice wrapper around a C function. It's the same thing in Ruby, at least as far as I know, I could be wrong. Superclasses are also a lie. The super keyword just points to self but sending a message to super will reorder the list of methods to put the methods that are inherited above your own methods. So if you actually check self equals equals super will be true, they'll be the same pointer. I'm not sure if I got the apostrophes right because it's possessive plurals. English is stupid. Just kidding, superclasses are real. Every object has a is a. It is a object of its class and every class struct has a superclass. And you can look at your superclass as superclass is superclass and then get its superclass. I don't know what happens. Yeah, I think they made a movie about that. So this is the structure for an object. It really weird. So any instance variables you have in your object actually changes the size of the struct which for my experience in C is something that you should not do but apparently they do that. And here is the structure for a class. So it has its is a, it's superclass. It's weird that a class has is a also. So you can take the class and look at what class the class is and also what class it's superclass is. That makes no sense to me but they probably did it for a good reason. And you can get its list of instance variables, its protocols, you can get a list of the method lists. Implementations aren't real. Implementations are actually just a type def of a function pointer. I copied from the docs there. I could read it, but I only have 50 seconds left. I guess I, you can read it. There you go. Got the timer started? Okay. All right, so my name is Aaron Kalin. I work at Treehouse. We teach web design development, iOS, all that stuff. And I'm here to give you some bartender tips. I was having some trouble figuring out which lightning talk I wanted to give but since we're all gonna be going out drinking or at least I'm assuming that. I heard there's gonna be whiskey and cheese tasting. There may be alcohol involved in that. So that's my Twitter handle up there if you want to follow me. But so and also my awesome ideal bar. I've got a hot bartender. Before he went crazy. So I'm here to give you some tips about being a patron in a bar because to give you a little background about me in a short period of time here. My family owns and runs a lot of restaurants and bars in Chicago. So I, you know, it almost set up for me to be like a third generation owner of that but I wanted to do this computer thing. And they said, you know, get a real job. So I just went and worked for hash rocket and now Treehouse. So I learned a few things about the bar and restaurant business and I try to share those at conferences I go to because they have these huge drinkups. Apparently you guys like drinking. You know, it's a new thing to me but it also makes me feel more at home with all of you. So let me show you just a few things at a bar that you normally see. This is typically how they're set up but believe it or not there's some advertising going on here. And up here, the top shelves and everything next to this hot guy is the call drinks. So these are what you might hear is top shelf liquor. It's also the higher price. So there's pricing going on here. And if you want the cheap stuff or if you call out like a type of liquor like I want vodka or gin it'll come from down below or the wells as they call it. So it's much cheaper. And it's also much cheaper to drink up here. I love that. But there's also some ordering lingo. There's like Starbucks aficionados here. I'll admit it. I'll happily admit it. Like I know how to order a ground able blah blah. Oh, come on. First step in admitting you have a problem is to admit you have a problem with that. So let's start off. So we got shorter tall drinks but they can also be rocks or high ball glass. If you go with an up drink it's my favorite, martinis. Oh yeah, there we go. That's also why I go buy martini soft. But I have a feeling with the whiskey thing you guys will be ordering it neat which means don't touch it throw it into a nice small glass. Don't put any water in it. You know nothing I don't want ice in it. Don't care. So how about this? Is there any home brewers in the house? Yeah? Do you guys know how to pour a beer? Do you? Well this is fun at a party. So if you wanted to learn how to pour a beer let me give it to you in less than two minutes. So start off at a 45 degree angle. Make sure the glass is clean like wash it out on the inside. Aim for the bottom third of the glass because your object here is not to create any agitation because you don't want to start making the, you want, you know, get a little bit of agitation going but not too much. All right, and then about halfway full I'm gonna slowly tilt the glass upright and then when you get to almost full there you want to shut that tap off and back away. So because you want to build this head up and the head is where all that flavor and smell comes from. It's that good part of the beer that everyone loves. So make sure when you get to that full part back away from the tap, turn it off. You don't want to over pour it and you want about two fingers length of head. You don't want to go too high or too low then it won't be just right. But the big thing I'm trying to get across here too is there's customer service involved with being at a bar. So it's a two-way street, okay? So when you're a customer, like the two best tips I can give when you're there is introduce yourself to the bartender. So when you order a drink before you really get into that, like shake their hand and introduce yourself. Get on a first name basis with them and like say, hi, I'm so-and-so, you know, blah-blah, let me order my drink. And then when you come back or at least when the bar gets packed by all the people wanting their free drinks from the sponsored drink up, you can call out that bartender's name and say, hey, you know, Bob or Steve, you know, can I get another drink please? You know, they'll hear, you know, their name being called out and you might get some faster service. And then along with that, if you, especially if you are going up there for a lot of whiskey or whatever, make sure you tip well. It's a two-way street. So if you tip well, generally the service will get much better towards, you know, towards if you don't tip at all on anything, I know some of these events, the tips are pre-arranged but still giving a little bit extra helps. But that's all I got. Thanks.