 My name is Kristen. I am the COO at a new company called Vectra, which is the brainchild of this guy named Evan Phoenix. You might see him around. He's really weird and usually like hides away from people. Hi, I'm Jessica Settles, Founding Engineer at Vectra. We're working on a deployment solution. If you'd like to hear more about it, you can find us later. So we weren't planning on doing a lightning talk, but we realized that there's kind of a big issue out there. A lot of people don't know how to use a kazoo. Makes me kind of sad because it's, I think, a big part of my childhood, and maybe you never learned or your childhood is just gone, but we're here to bring it back to you. Yeah. A lot of people don't know how to use a kazoo like this guy right here, but he's trying to use his arm. It's not even kazoo. Yeah, it's not. That doesn't work at all. Luckily, you have the parts to use a kazoo. Dogs don't. They'll never get to use one ever. So I know a lot of you have kazoos. Take them out. Hold them up. Represent. Thank you. Let's start first. The wide end goes in the mouth. Second, you don't just blow. You hum or say who? Let's do it together. And then you celebrate. Yeah. Okay. So I think you're all ready for a little call and response. So I'm going to call and then you respond in case you've never done that before. You ready? All right. That was good. So I think you guys are ready for the advanced one. Some of you might know Mario. That is from the childhood. And let's see if we can do this a little more. I'm going to I'm going to call and then you respond a little more complicated, even for professionals like me. Maybe we should try that again. Okay, one more time. Let's all do it together. One, two, three. Okay. So I think that our talk was very successful. But for posterity sake, I want to do something that would be kind of cool, especially on the video. A din of kazoo. So we're going to start really low and quiet. And then as we raise the arms, we're gonna get louder and higher. You guys ready? All right. If you want to alpha test Vectra, come see us. We're in the hallway creeping today and tomorrow. Thank you. Hi, everyone. My name is Claudio. And you've heard my last name. So I'm not going to repeat it. I did. I did well. Was that perfect? Yes. I'm going to talk about a gem that's open source. It's called BH bootstrap helpers for Ruby. So if you've ever used a bootstrap, you know, it's very convenient because you write less CSS because it's in bootstrap already. But you have to write some HTML to make your HTML looks like what bootstrap asks. With this gem, you write less HTML as well. That's what it does. And there's the link to the GitHub page. So this is the example. This is I work for a company called full screen. This is one of our apps. This is the sign up page without any CSS. It looks kind of bad. If you add bootstrap CSS, it's centered. The button is blue. The form is very nice. But this is the HTML you come up with. You have to add all these classes, your divs, your roles, and all of that. And even if you use, for instance, in Rails, form for the helpers, you still have to add all these classes, attributes, and so on. If you use BH, this is what you end up with. It cleans up your views. Basically, you add this one attribute to your form for that's layout horizontal because that's one of the layouts that bootstrap gives you for forms, horizontal form. And then you, you know, all those divs, all those extra attributes that kind of pollutes your views, they're gone. And it still looks like this. And one of the advantages is that if suddenly your designer says, you know what, I don't want the form to be horizontal anymore, meaning there is that label on a line and then the submit button below. I want an inline form now. If you have to go and change all that HTML, it takes a while. Instead, you can just do layout in line. And that's it. And you can add, for instance, context success. And then the button is going to be green instead of blue. Just one more example, alert box. So if you want a button that says, what is gorilla? I guess you're all curious about that. And then when you click, it shows a model on top of your window. This is all you need. There's a helper called model. You specify the body and the title. And that's really all there is to it. And if you didn't have BH, this would be what? If you go to the documentation of bootstrap, it tells you that you have to write. You have to type a button and the div and so on. So I try to include as many bootstrap components. That's how they are called. So you have panels, you have navbars, models, dropdowns. And they're all pretty easy to use. For instance, if it's a dropdown, the helper is just called dropdown. Same with icon and so on. And it doesn't change your CSS. You can just drop it in your app. It works with Padrino. It works with middleman. It works with Rails 3 and 4. It doesn't overwrite anything by default. So you can just put it in and then start using this together with your own normal code. And it has a GitHub page, code coverage, test it, everything you need. And that's all. And still, because I have one minute left, I'm just going to say thank you to the organizer. And everybody has talked about how Ruby makes people happy. So if you want to make me happy, go there and start my project. All right. Hello, everyone. My name is Richard Schneemann or Schneem's. So he actually said Schneemann, which is how you mispronounce Schneemann. It's very strange. Yeah, it's okay. Does anybody know what this is? Okay. This, reticulated Python? Wow, that's very specific. That was a Python. Does anybody know the biggest difference between Ruby and Python? One is a snake. Okay. Why would, like, in general, why would you choose one? A little background. I am a Ruby developer. My wife, her name is Ruby, but she is a Python developer. And I talk to, I work for a company called Heroku. There's a lot of people who run Python apps and who love Python. And I ask them all the time, like, why do you love Python? Why choose it over Ruby? And, you know, like, is it white space? Is it speed? Is it libraries? I just want to talk about flow control and milk for a second. So my experimentation with Python, there's a function that looks for an element in an array. And if it's not there, what does it do? It throws an exception. In Ruby, if it's not there, it's just like, oh, hey, we don't have this thing in the array. And it's basically like, hey, Ruby, go to the store and get me some milk. And Ruby's like, oh, the store didn't have any milk. In Python, you're like, hey, go to the store and get me some milk. And it's like, oh, they didn't have any milk. So I burnt the thing down. So that is not the answer to why people love Python. Python programmers love docs. Every single Python programmer I've ever talked to is like, oh, my gosh, the docs are amazing. Like, have you seen the docs? They have all these doc tools and all these doc sites. And generally, in just Ruby programmers, we don't consider a project published until it is fully tested or at least reasonably tested or at least run tested. It ran one time, that one time. Yeah, no, I swear this, it worked at one point. It works on my machine. In Python, it's cultural that you don't, a project is not published until it has, is fully documented. So I was wondering, I was like, well, okay, that's like, why can't we have better documentation in Ruby? What is out there that is preventing us from doing that? And in general, writing docs is too hard. Especially right now, we already have a ton of undocumented code out there that is just like, whoa, what is going on? Also, you know, reading docs is hard. Like, where do you, where do you start to do that? So I would like to introduce something. That was amazing. Thanks. Thank you all. I called docsdoctor.org. It is intentionally the most difficult to pronounce name I could come up with. And if you go to docsdoctor.org, you can sign up to say, get documented methods in your email inbox every day from, say, like Rails slash Rails or Ruby slash Ruby. Or basically anything it uses, it uses Yard, thank you very much, Lauren, to parse documentation and it can send you a documented method so you can learn more about a library and you can be like, oh cool, I didn't even know Rails had this method. Or you can also use it to write documentation. If you, if you ask, it will send you undocumented methods. So there's a gentleman in the, in the front row. You might know him. He has a lot of commits on a project. I challenge you to beat him in this number of commits in nothing but documentation commits. Using this tool. And the world will actually be a better place for it. Like we need, there's a lot of places where the documentation does kind of fall short. So, and this is kind of a sister project to another one that I've been working on called Code Triage. You might be familiar with it. But if you, if you, if you walk away from this lightning talk with only three things to remember. It's docsdoctor.org, docsdoctor.org, docsdoctor.org. And one last thing. Docsdoctor.org. Thank you. Hey, I'm Shannon Skipper or Havenwood on the Githubs, and I'm talking about transducers. So, Rich Hickey, I'm sure some of you who've seen his talk, did a talk, and what I learned from it was they're burritos. But this burrito isn't a transducer, because the cheese isn't on top. So, let's look at a typical Ruby burrito. I put an underscore in front of map and select, just because they're, to show that they're not a real map and select. But you see they have a block, they have the source collection, etc. But on the inside of this burrito is shoveling onto an array. So, there's a lot of reducing methods on enumerable, but they all shovel onto an array. So, what Rich Hickey pointed out was this piece in the middle, you can't get at from the outside. You're appending onto the array, and that's what you have to do with map, with select, and with a lot of the other reducing methods. So, what might it look like to put that on the outside? These are mapping and selecting. So, on these methods, the initial object and the reducing step is available on the outside. So, what would that look like using it? Like that. So, you could, the first one, array dot mapping, is a lot like, I mean it's exactly like, array, map, and next. But you start seeing a difference when you put a set in there. So, instead of building an array, it builds a set. Or, if you switch out the reducing function to on queue, you could build a queue. And then just for fun, you could have the initial object be standard out and print to it. But you could do this with other methods on enumerable. This is an example of rejecting and taking while. But is that really a transducer? So, transducers are powerful composable ways to build algorithmic transformations that you can use in many contexts. So, we're not quite there yet. But here's an example in Ruby we don't have a compose method like Clojure does. But we can build one pretty easily just by opening up the proc class. And so you can have something like add one, square it, and then add 42. And with this transducer style, you could build any type of object from an array to a set to whatever you want to build. But it's still not a transducer. Because you can only be mapping or selecting or taking while. And the idea is to compose a little bit of each of those together and be able to apply it to a number of different scenarios. So, can you do it for real? You can. There's a transducer's gem that Cogitech released for Ruby, as well as JavaScript, Java, Clojure. And they're going to release it for more languages. But it doesn't really look like Ruby. Instead of the source collection being first, it's last. They just completely reverse the order. So, what might it look like if it was more Ruby-ish? Down at the bottom, you can see what it might look like to transduce in a more Ruby style. And here's an example of what we can already do. So, the burrito analogy is basically the idea that we have all these ingredients. But we have them in a different order. We don't have the cheese on top. So, maybe it's nice to have the cheese on top. That's it. Thank you very much. Hello, my name is Sean Culver. And today, I'm going to tell you about the five finger secret to success. And I work at Zeal. I love to come to work every day because of great, all of my great coworkers and all the fun projects we do there. But this one secret is quite powerful. So, everyone calm down. It won't be as profound as Sandy Metz talk today and inspiring or will it? There are several secrets involved with this. And the first is enthusiasm. The second will make you feel happy. And it's also a great way to start your day. And it's something you do when you have a success. So, but before I tell you the secret, which is the lifeblood of our company and decades of research went into this, I'll let you know that it's kind of small and it's so small it might blow your mind. High, stellar, high fives. So simple and yet so powerful. They bring a sense of accomplishment, belonging and connectedness. And that's our secret. It's very simple. What are the rules? Putting on your shirt is one rule. When you figure out a very complex problem, it's great to give somebody a high five. When they make a great refactor, give them a high five. Any small achievement, please give them a high five. When your pair comes up with an awesome idea, give them a high five. You can high five a stranger. It's okay. Jumping high fives are awesome. That's not actually a rule, but this is a lightning talk, so give everyone a high five in your group and never leave anyone out. That's really important. And you can high five just about anything. And even cats enjoy high fives. I would not suggest high fiving a killer whale. Superheroes love high fives, unless you're the Hulk. High fives can go terribly bad. They can go terribly wrong. Now I'm going to teach you how to give stellar high fives. The first step is look someone in the eye. The second step is caulk your arm back and your elbow should be about here. Let your body announce that you're going to give a high five. Then fire your hand looking towards the elbow. That's a secret actually, is looking towards the elbow. And that's it. It's as simple as that. So now that we've learned it, it's your turn for glory. Everyone stand up please. I know I'm making everyone stand up, but on the count of three, everyone's going to use what they learned and give an awesome high five. A stellar high five. Hold on, hold on. All of you, rock thank you so much, and please let this not be me. Do great things, bring enthusiasm, passion and joy to your work and your life, and give stellar high fives. We have the first hundred people to register, get free t-shirts. We created website stellarhighfive.com. Go there quickly before they're all gone. Thank you very much. Thank you. I'm Stephen Talcott-Smith. Like all of you, I love to code. Like many of you, I spend a lot of time thinking about how to make my own and my team's efforts more efficient and how to deliver value faster. In this respect, I sometimes see code as the enemy. When I code myself, I try to write code that eliminates other code. I want my teams to produce more value and reduce or eliminate the low value activity. One thing that many people have noticed is that the imperative style of procedural logic tends to multiply code. So how do we reduce or eliminate that? At the right level of abstraction, a DSL can cut out a lot of low value handcrafted logic. I look for places where we're feeling a lot of pain and where a lot of low value code is being produced. In Rails apps, I think the most neglected place seems to be the view. In hundreds of applications that I've come across, the chaos rains most completely in the view. I've been circling this problem for years in different ways and finally I began to work this year on a gem called Express Templates. Here's an example of an Express Template. It's a subset of Ruby. It uses Ruby's block structure and execution order to indicate the nested structure of a document and the configuration of components. Conditional logic and statements are strongly discouraged here. Ruby statements that you see reference components or tags. This particular template generates a page that looks like... Maybe I can't show it to you. In any case, the components are built also in a declarative style and this demonstrates reusable logic patterns as well as embedded template code which is there in the form of a stabby lambda or proc. It's just Ruby. This works, you know, contrasts with Hamel, ERB and Slim. They all compile a special grammar which contains embedded Ruby code into a bunch of code that works with strings to produce markup. This code is then evaluated in the context of the view. Express Templates adds a step. I call expansion sort of analogous to a macro system. The expansion results in a tree of nodes which all respond to compile. Components, tags and wrappers for helpers are all in the tree. At the end of that process, once you call compile, you end up with again Ruby code that works with strings that's evaluated in the view. The real power of this approach is that it facilitates the development of component libraries, something commercial application platforms have long enjoyed and something that I miss when I personally develop GUIs. I'm working on different components right now including table four, tree four. I've working on some advanced form components and I think that this concept maps very well to something that I've seen out there in HTML5 which is the web components. We can also include JavaScript frameworks and behaviors along with the components. So you again have the server driving the layout of the code. All of these things can be extended in object-oriented fashion. Check it out, it's up on GitHub. I'm hosting the BoF session tonight about the Rails view although I'm also interested in engines. We're using this in our admin framework. It's on GitHub, Alogica Express templates. I'm expecting to release a production-ready version in Q1. I'm Stephen Talcott-Smith. My company is Alogica. We have great software teams for hire. I'm based in Lake Tahoe and Manila. I also recently published a book, Level Up Tips and Techniques to Become a Better Professional Software Developer. There's a coupon code there for RubyConf 2014. And lastly, this last year we sponsored the first Ruby Conference in the Philippines. And next year, 2015, it is going to be held in Boracay Island, which is a fantastic beach resort. Go ahead and submit a talk proposal if you want to go there and check it out at rubyconf.ph. Thank you very much. So this is the five minute version of a talk I'm working on, Investigative Debugging, Conducting a Criminal Investigation in Your Code. My name is Brandon Rice. I'm a software developer at Optoro in DC. And as of the beginning of November, I am entering my second anniversary, my second year as a professional developer. Before I was a developer, I was a cop. And being a cop is a lot about imagery. It's about a facade. It's about convincing everyone in the general public that you and your all of your cop friends are a lot more like Colin Farrell when you might really feel more like Jonah Hill. So that being said, when I was a cop, I had a very specific job. I was an investigator. I investigated arson crimes. And investigating arson crimes is a lot like showing up at this, and your job is now to figure out, in all of this mess, where the remains of the candle were that ignited the curtains. Or maybe you need to figure out where the remains of the gasoline trailer were with the matches that actually ignited the curtains. And you better rewrite because the difference means someone going to jail for 20 or 30 years. So the methods that you use have to be proven. They have to be repeatable. They have to stand up in court when you're an expert witness testifying to a bunch of people and a judge. So the methods that you use, the message, in this case, one of the methods that we use obviously the scientific method. And I think that a lot of these principles can be applied to the things we do as developers, especially when debugging. And quickly I'm going to take kind of a whirlwind tour to how I approach a lot of these debugging problems drawing from my past experience. So stating the problem, this is the easy part. Jira, Pivotal, tickets, user stories, someone's probably already done this for you. Doing the research, all of these are techniques that I use on a weekly, if not daily basis, to gather all of the research before I make any assumptions. I think the big one in all caps at the bottom talking to the stakeholders is probably something we don't do a lot as developers. Talk to your business associates, your clients, other people that aren't developers. And probably the one that I do last, which is probably not good, is talking to my co-workers and peers. I like to exhaust all my resources before I realize that I'm stupid and go talk to my co-workers. So I probably shouldn't do that. So hypothesizing is pretty much the same whether you are an investigator or a developer and it's really just a nice way of saying you're standing around bullshitting with your friends, which is true. Experimenting red-green refactor, we all know how to do this. It's also kind of the easy part and the part you actually probably spend the least amount of time doing. Analysis, this is actually probably what I consider to be the most important part. Establishing a timeline, so the things on the right are the approach I took as an investigator. But in developer terms, it basically means coming up with a good solid explanation of what you did, why you did it, and how you did it. And that means maybe writing an email, maybe putting it in your ticket comments, but whatever it is, you need to be able to clearly state what you did, why you did it, how you did it. And that's important because if you introduced a bug while you were fixing a bug, then someone's probably going to have a bad time and want to know what you did and how to repeat what you did. Oh, so yeah, at the end of the day, maybe the reason you've uncovered, which is the illness and not the symptom of your problem, is not really fixable in the day and a half that you have or whatever to handle a ticket. So I call that considering a plea, which is maybe you fix something smaller and then make a new ticket. So at the end of the day, I embrace this methodology when I'm working on bugs. I strive to fix illnesses, not symptoms. I think that developers should be held to a higher standard of proof because the development community gets some flak for not having certification, allowing things to ship out that are filled with bugs. So why don't we, there's no perfect way to certify a developer really, so why not take it on ourselves to embrace that higher standard of proof? And that's all I have, thanks. And the question I usually get most is why and how I left law enforcement to become a developer. And it's a long story, but the short answer is happiness. And if you want to know the longer version, you can come talk to me. I love being happy in a career that I'm happy in and I will gladly explain how I got there. So thanks. Thank you. So hi, I'm Alex. I work for Amazon Web Services. I actually am relatively new to Ruby. I was in the Java world for quite a long time. And this is a little bit of a beginner lightning talk. I just want to discuss one thing that I found tricky when I first came into the Ruby world and how I got through it and hopefully it'll be useful to someone. So we're talking about duck typing. Everyone who talks about duck typing has to make this joke, so anyways. Coming from the world of Java, there is a whole lot of boiler plate and ceremony code. Yes, this is a real class name. So not having to write this in the world of Ruby has brought me a lot more happiness. So I wanted to go through a quick example of what this looks like. So this, can we see this clearly? Good. So this is a very simple class for illustration. It takes a hash, it writes it to a file as JSON and it can read it back. What you'll notice is the handler for file writing is passed in. So all we expect is that it takes a write signature of a certain type and a read signature of a certain type and as long as that acts like file IO it will work. So we have a test class here which shows you one way of doing it where we pass in a stub handler because you probably don't want to have side effects like file writing or network access breaking your tests. So this will simply say write it and read it from an in memory hash treating that like your file system. So that works and one thing you'll realize is raise your hand if you've programmed in Java before if you came to Ruby from Java. Leave your hand up if you're looking forward to the interface setup you would have to do to get this to work without code duplication. One guy's hand is up but I think he was actually patting his head. So nobody. Here's the neat thing. You can just as easily have an Amazon S3 backed file system and as long as you write a short adapter to handle write and read the same way it just works. So here's the live coding part. So we have a path to a file in a hash. So if I create a new IO writer using the file class joys of live demos never do it. So you can write the file read it back it works of course it works because it's built for file IO. Does it work when we back it with Amazon S3? We'll just pass in a bucket name because you need that for it to work. In fact let's just do exactly the same calls. Let's do I did that the last couple times too. Using the exact same calls it works the same. The power of duct typing is simply that it reduces the amount of boilerplate code you have to write as long as you follow the same contracts you can swap things in and if you're writing a library you don't have to put excessive enforcement on your users of how they write things. You give a reasonable contract and trust them to do things the right way. So that's my spiel on duct typing I hope it helps someone. Hi I'm P. Hillip Arente was it? Arente. Arente okay. I'm Philip Arnt I'm from New Zealand as you can probably tell from the swallowing of the bells when I talk. It is extremely bright on stage I don't know how the speakers do it. I'm here to I guess as a representative of Railscamp New Zealand to talk to you about that. So imagine yourself and a group of Ruby programmers like Hero is here on a country retreat for a weekend of talks, hacking and fun but in summertime so that's what Railscamp New Zealand is this will be the fifth edition in 30th of January to the 2nd of February 2015. What this is is we give transport from and to Auckland Airport Auckland New Zealand you get on a bus you arrive at camp you sleep eat extremely good food drink extremely good drinks non-alcoholic and alcoholic hang out while ignoring the outside world. We return you on Monday morning you can stick around in New Zealand or you could go to RubyConf Australia which is the very same week. This is the fifth New Zealand camp and Australia has had 16 so where is New Zealand you might say well that's fair enough so this is a map from Izri you know the mapping company they forgot to include New Zealand this is off a tumbler called World Maps Without NZ it's extremely popular to forget New Zealand so I've gone to the trouble of preparing a route map for New Zealand there we go so you can go directly from here to Shakespeare Regional Park which is where we'll be it's about 16 hours according to Google and it is usually an overnight flight so you get nice and good sleep so here's a list of things which may or may not happen it's fairly self-explanatory so all meals are included breakfast, lunch and dinner anybody has the opportunity to speak you don't have to do a CFP or anything like that you can actually just write your name on a whiteboard much like the lightning talks and I'm going to show you some photos from the last camp that we had at Mount Cheeseman and New Zealand Southern Alps and we have a full code of conduct that everyone has to adhere to so we're very welcoming to people of all ages we have amazing and strange wildlife and unlike Australia none of it is out to get to you we usually have pretty extremely good coffee it's which is something that New Zealand I think is getting more and more known for and now I'm just going to run through photos we were on top of a mountain so we won't be next time but there will be water around us yes that is a onesie and I think it was taken around 5am and that is really the sky above New Zealand here's some photo credits and a picture of the group from last time so that information again which I guess I could just hold up for one minute and 24 seconds but I won't waste your time you have to sing if you're going to do that well it's a thing yeah okay did you bring your kazoo up I didn't I don't even have a kazoo well that's not my fault you say it's not your fault but it is sort of it is actually even phonics it is actually sort of my fault okay cool so come and talk to me afterwards if you want to come it's 315 New Zealand dollars which is like I don't know 40 bucks and thank you very much for your time hey everyone my name is uh well until now I thought it was Jeremy Kaz but as we all know Evan Phoenix is infallible so I learned something new today I hope not when it comes to names I work at coding zeal the magical wonderland in the forests of northern Oregon where in between constant high-fiving we occasionally write code you can find me on twitter at kxcrl no the letters don't mean so this is a little bit less lighthearted than Sean's talk my background's in science so I wanted to start with some beliefs and assumptions before I dive into it it's my belief that just because an assumption isn't completely mapped to reality isn't 100% factual of course if it was it wouldn't be an assumption that it's a bad assumption to have or one to keep carrying with you and so for your consideration I'd like you to contrast people are inherently good and we just need to do everything we can to give them opportunity versus people are inherently evil we need to do everything we can to give them incentive and by incentive I pretty much mean punishment so my answer to this which is kind of a classical philosophical question is has always been society I mean the fact that it came out of nothing became what it is and continues to progress and the directions that it does in ways that people continue to be more and more honored and able to express themselves and enjoy their jobs says to me that there must be something essentially good in humans and if there's not it's at least good for us to assume so so on that note I'm going to say the Ruby community is inherently good and inherently good at Kizoo's and we should do everything we can to give them opportunity so one of the questions I have is how do you see all the sides of a 3D object like this screen for instance and you actually can't from where you're sitting because you have two-dimensional vision with just a little bit of depth perception you would have to walk around the other side of it right and get another perspective and so one of the things that we have to do often is get multiple perspectives on things that are highly complex right like the things that we work on every day that have a lot of moving parts that we definitely can't see at the same time well what about something that's say multi-dimensional abstract highly volatile constantly transforming silent and to many people completely invisible something like equality so I believe fundamentally that more perspectives means more information means more understanding and ultimately more capacity to make good decisions the correct decisions and decisions that will benefit you and this is a whole lot of philosophical front-loading to say that I often come to conferences and I meet all of these amazing people all of you and I hear all of these brilliant insights and all of this unique perspective on problems and I say where can I find your blog where is your YouTube channel where have you been on last week tonight and they haven't I mean not that anybody is really going to appear on last week tonight but and I realized I can't really complain about this because I actually don't do that either so I wanted to take a stand and sign up for a lightning talk and commit in front of everyone at RubyConf I'm going to start a blog and it's probably not going to make me famous but at least it will avoid a few moments of you know having a problem that you can never find an answer to I ultimately think that every one of us should be sharing that more information is better and that's all comes back to that all of this Ruby the language that we program in Rails the framework that we use the building that we sit in and all of the society that we're a part of we invented it and we taught it to each other and by your very nature as a human being you iterated on it and I think we should all be sharing what we're finding thank you let's talk about robots underwater specifically remotely operated vehicles or ROVs an ROV is a huge robot that you would use if you owned an oil company and you had to examine or repair your offshore oil rig for an idea of the size take a look in the lower left corner of that photograph you see a human performing maintenance on an ROV and here's another huge multimillion dollar ROV now there's no reason that an ROV should cost millions of dollars and be so huge a few guys in Berkeley, California two guys in Berkeley got together and they created open ROV open because it's all open source ROV because it's an ROV costs less than a thousand dollars you can buy one for about eight hundred and fifty bucks and here's an open ROV in action with a scuba diver and here it is again a few features of the open ROV it has lasers bright LEDs and lithium ion batteries for power now the lasers are not there so you can zap fish that's not why you have lasers I thought this was James Bond the lasers are there they're about 10 centimeters apart they're parallel and you shine them on objects so you can gauge the size of objects so they're very useful everything about open ROV is open source TCPIP, Node.js, Socket.io Socket.io is there for real-time bi-directional communications Node.js is what the web app running on the open ROV is written in and TCPIP of course is the language that is used when you communicate between your open ROV and your laptop Node runs on the Beaglebone Black that's the one that's being held in the photograph there's an Arduino chip set on the controller board at the bottom there are three event loops one running in the browser on your computer typically you'll use Chrome on your Beaglebone Black there's another event loop running in Node.js and on the Arduino you have a third event loop running in C++ and if you want to take a look at the code you can go to GitHub right now go to github.com slash open ROV take a look at it now you get really excited you order this thing it comes to you in parts and you have to put them together and this is you know me putting mine together a little bit at a time and there it is again with all the junk in my workshop until finally it was complete and I could test it out in Chicago's Lake Michigan there you see my thumbs up there's a web browser that's Chrome running on Ubuntu and those are rocks at the bottom of Lake Michigan worked really well so you've got it running it works in your bathtub works in Lake Michigan so your next step is to take it out to the Caribbean and that's where we're hosting a Ruby conference in the Caribbean we call it Ruby Karib in January it'll be cold in Chicago but warm in Barbados where we're holding this Ruby Karib is a Ruby conference in the Caribbean five days in the Caribbean 30 minute talks each 30 minute talk will be followed by a two hour lab directly tied to the talk that you just went through and the speakers are Laurent Cincinnati the inventor of Ruby Motion Davis Stells who wrote Ruby List that runs on iOS Randall Thomas who's going to go through go through machine learning on Ruby hands on labs open ROV and you get to do this at night we'll hack on open ROV by day we'll hack on Ruby at night we'll hack on open ROV and on Friday afternoon we're going to take the open ROV out on the Caribbean and test it out on a boat and look at some fish and we won't zap the fish with the lasers so take a look at rubykarib.com and check out everything that you could possibly want to know about open ROV thank you for listening thank you all right hi everyone I'm Tim I guess that's good Tim's fine I think so I work on the core services team at Living Social and yes we're hiring and you know it's an awesome place to work and there's 20 odd people of us here so if you're interested come and talk to one of us so yeah I'm going to talk about what we have basically discovered about maintaining a large number of interdependent apps and services when we need to develop these services and the client applications and the access gems for for this for all of this so how do you actually test them all in isolation right so one of the things that you know we also use and a lot of people we use is VCR for this to short circuit any of the calls to to dependencies but you know who really would like to be committing and maintaining all those cassettes in their repos right so also VCR cassettes are good only if you refresh them and really finding a good frequency to refresh them is kind of hard right so the other option is using sorry the other option is using mox something that a lot of people do but you know using tools like mocha and and our spec mox is is good but it results in a lot of setup code usually right you use that code both you have to you have to write it it's cumbersome it's kind of boring and it also you know if your API in the back end changes or behavior changes your tests won't even notice right so yeah that's downsides so faced with that what we have begun doing is just our team of living social started an approach where we still use test though test doubles wider term for you know mox and stubs and everything and but not to to compromise compromise our test suite run time so we still want to have fast run times that's why we use test doubles but we're also the maintainers of our own client gems which actually puts us in a position to add realistic sample objects to those gems that expose the service API and so the trick here is that we evolve our mox you know meant to be used by the client applications in lockstep with our service so um yeah how do we you know how do we do this we basically have an approach where we implement two back ends in our client gem so one that actually makes HTTP calls to reach out to the back end services and you know exposes that that exposes the API and another one that's actually a mock back end which really makes no such calls it doesn't call out to to any service it short circuits the calls and instead serves that data out of an in memory hash and the key here is that both the fake and the real back end expose the exact same interface so the layer of the gem that exposes the actual API that the client can consume has a way to inject one of the two back ends and um you know the so the this API exposing layer really just makes calls only to to back end methods that are exposed in that contract so the other the other part of it is that we actually have the mock back and serve objects with the exact same API that the objects would have that are exposed by the real service so the they're actually not just that they're actual instances of the exact same model classes that are that are returned by the the real back end and we also we also make sure that the mock back end is used in in test with that when it's used in test mode that it comes with realistic preloaded fakes so by that I mean in our example for example it's a it's a service that serves market or city information then the you know client access gem which is called LS cities is switched into a mock back end mode and just serves those objects with a a range of really well known markets and city objects out of it so how does this how does this all look really we we try to optimize to make it easy possible for the client apps to use the mocks as easy as feasibly possible so the application under test just places one single line to put this thing into a mock mode into its test helper or you know wherever you want to use this and this line configures to serve the responses entirely out of that in memory you know back end registry of preloaded you know objects that preloaded cities that's a lot right so on the the next case is in case you're you actually have a need for for special test cases but a special test objects special can't responses the app can test that with customized mocks that you can just you know you instantiate the the test marks that use the exact same objects and you just inject them into that that test back end so so what's the whole point of this well we still have fast tests we still use mocks we reduce the the repo pollution with VCR cassettes we we increase the level of confidence in our test suites and that is by using the exact same objects that are you know used on and developed in lockstep with the with the client library we have less boring boilerplate code to write and maintain to set up mocks and expectations and the client apps work with realistic fakes that behave exactly like the real thing so yeah what's the last thing that's really pretty much all I wanted to say we have a really good tech blog this article there's an article on there that gives you more detail then some just good general references about Martin Fowler's explanation of you know mocks are in stubs and just general test tools are awesome and then there's this presentation it's a remarker presentation so that's my good page thanks everyone all right thank you Tim okay so I'm really excited that so many presentations up here so many lightning talks we're talking about science tonight and that's really really exciting to me so tonight what I'm going to do is I'm going to talk to you about homeopathic code optimizations everybody knows so everybody is aware of the facts of homeopathy we're all scientists here right so but I'm sure that there's some people out there who don't know what homeopathy is so I'm going to tell you about it homeopathy is all about diluting stuff so that it just gets smaller and smaller and then it becomes more and more effective and so when I was researching this I did what every good scientist does I went to wikipedia and I was looking at wikipedia but the problem is that it's way too long so I didn't want to read it but you can do this thing you can do this thing on os10 where you highlight you highlight the text and if you highlight the text you can right click on it and if we zoom in on there you'll see that it says summarize so you can click on that and if you click on that you can drag it down and it basically like dilutes the text or not or maybe condenses I'm not sure but it's there is what it is in one line so that's essentially what it is and we have to like dilute everything by six times and that's when it's most effective and also the other thing is if we read this we know that modern homeopathy something something water memory has memories so the idea is that water has memories so I was thinking I was thinking can white space have memories and the answer is of course yes it can so let's do let's do demo time demo time so I wrote a homeopathic code optimizer and this is a video of it I was going to do a live demo but I figured I probably shouldn't so are we playing is it playing is it playing no okay okay there we go okay so this is Fibonacci sequence everybody knows that this is the benchmark that you use this is a realistic benchmark of all all interpreters of every every single language is the totally most meaningful benchmark ever and if you run it you'll see okay we get we get some Fibonacci out of there and that's great we run dilute on that so this dilutes the code and you can see it's missing some stuff there is a there's a 10% chance of code going away and if we run it so we pipe that to Ruby and you'll see okay it executes you know watch my time here okay so it executes we still get Fibonacci and then I can I can dilute it again you'll see it's missing more text and we can we can run it and it still goes so it's still working so you dilute it even more and you can see it just the code keeps going away and I'm going to dilute it six times because that's like the that's the number that's what that's what does it so you see okay they're diluted six times do I dilute it anymore I don't remember I don't remember exactly what I did in this video so okay yeah you can see I diluted there's a six time there we go yeah yeah look at that look at that speed yeah amazing amazing it totally works okay we've got two minutes I can do this all right run it again through Ruby we're all good we're all good awesome do I do anymore after this yeah sure why not sure look at me typing away live coding this is amazing I'm going to just change that number to 33 and run it again to prove to you this is not fake okay not at all this is all very scientific we went through a scientific method to do this all right thank you so the question is how does it work I'm going to tell you how it works the VM remembers the code it remembers it so it remembers the code that you had there before and then it knows how to execute it and also like the thing is with with homeopathic code optimizations it's not white space it's memories memory is there right so if we do we do a little bit more okay so there's some code there code there I got lazy I didn't want to run it through six times so I just added a D so you'll see that it runs it at 50 50 c dilution right there that that removes 50 percent of the code and I can remove it that's a hundred percent so that's the most effective and you can see that it's still runs all right so I don't know what else I did oh 98 there we go all right so benefits benefits we'll talk about the benefits it's faster and we can know that we can easily intuit this from this this one particular fact we can intuit that it's faster because no code is faster than no code obviously it's faster it goes faster more diluted the faster it is so I wanted to show off some benchmarks this benchmark so oh come on come on come on come on so we run the code run the code run the code okay you can see that it's there it takes like 1.67 seconds and if we run it again diluted I redirect this to a file because I don't want to take dilution into account dilution time we don't want it right this is scientific the science sometimes it's faster sometimes it's faster it's faster just trust me also so it's more maintainable because obviously because there's no no code to maintain so and also the final thing with this is that less is more so obviously yes all right thank you very much yes I'm Bobye and I'm the poor schmuck that has to go after tender love now my name is Bobby I work at carbon five we have offices in Santa Monica and in San Francisco I'm a web developer and I'm also a musician and I have been playing drums my entire life and I'm just going to demo this thing for you so let me explain what the hell that thing is so this is elite motion device and I wrote all of this in ruby to make it create essentially a midi to garage band so I wanted to just I have no slides I just wanted to show you the code that I did to write it and I'd love to collaborate with people on making software instruments in ruby so if you're interested in doing stuff like that I am very interested so let's see the stuff that I did to make this I used to like I want to give a shout out I used two gems that really helped with this I used R2 which helped me communicate with this elite motion this little guy just basically broadcast JSON data and it gives me the exactly like what my hands doing in a particular moment and I wanted to be able to take what was happening and create surfaces so I actually have like snare drum surface right here and then I have a bass drum surface and then I have like a hi-hat up here so I can basically am I still running that guy I can basically create sounds just out of thin air so you can imagine that I could make a you know 80s hair metal 10 piece kit if I wanted to which I didn't have time to do before this so I'm so sorry but I can make this a laser I can make this any sound I want there's a lot of like interesting applications for music with this device and I love writing in Ruby and I'm writing Ruby for about two years and I'll just like walk through this real quick it's basically a drum set class that uses this R2's DSL to say hey this is a leap motion this thing's running in what's called a leap D process it's basically like exposing a web socket port that broadcasts that JSON frame data and I just like I'm basically hooking into it creating these surfaces so on the left is a surface class that I can tell it hey like I want this note value and I want it on these boundaries so the first value is what it is and then or the first value is the is the left boundary what one second did I get this mic pretty please can we get the desk the far desk mic please thank you okay cool so yeah the left boundary is the first value the right boundary is the second and then it's the drum note after that right now I have GarageBand running but you could run Ableton or something else that can connect to that is able to accept MIDI I could actually change up the effects of this so if I wanted the kick to sound different the hi-hat to sound different I can use everything that's in my existing my my existing like audio library to trigger any sample that I wanted another thing is the way that I actually detect that this is a hit which is definitely the hardest part was figuring out exactly like when I was traversing a boundary in space so I logged the previous Y position of my hand and then when when I move past that boundary and then up again I actually say okay you're a hit otherwise you're not and now the the trickiest thing for this was actually doing two hands at once so that's just spawning threads for each of those and the every time it hit is made so that I can have them running together at the same time and to the human ear they're not running exactly the same time but to the human ear they are yeah so I made this thing I'd love to collaborate with people on something like this I like to mess around with Ruby and instruments so yeah that's it thank you hey everyone I'm Jason Clark I work for New Relic on the Ruby Agent and I'm here today to talk to you about shoes before I get there I wanted to make a brief diversion so back in college in my software engineering class one of my good friends that was in the class anytime that he learned something really cool the professor would say something neat he would balk like a chicken and he called it the learning chicken and so I wanted to bring the joy of the learning chicken to us today for the shoes presentation so anytime that you feel like there's something cool or fun yell give me a chicken somebody go is the sound on yet okay that's a little too loud it's on that's an angry chicken all right it is definitely on now all right so please throughout the course of this anytime you want give me a chicken all right so what is shoes shoes is a cross-platform GUI library that lets you write desktop apps easily and simply the DSL is really accessible part of the idea is for kids and introductory people that are just getting started and programming to be able to write apps it works on Mac it works on Linux and it even works on Windows I mean I've had to write batch files people like it seriously that's a chicken moment right there so shoes was originally created by why the lucky stiff and quirky rubious from a few years back that some of you may know those of you who are newer to the community might not and you should definitely look them up read some of his material but he used this to create an application that he called Hackety Hack this was a development environment that was specifically geared towards kids and Hackety Hack was both written in shoes and the applications that you write in Hackety Hack are also built on shoes and so it's a library that makes all of those things possible back in por favor chicken chicken me thank you unfortunately why disappeared he chose to leave he took his code down from the internet and for many people they probably thought that that was the end of shoes but fortunately there were a couple of individuals that were key in keeping the dream alive of what had been built here Steve Klamnick in particular picked up the Hackety Hack in the shoes project and for a long time tried to maintain it and kind of keep things moving forward and over time a small group of people kind of gathered around him and found a way forward for us to be able to continue and so the shoes for a project was born this is a rewrite of the original shoes because the original shoes was written in cross-platform C and it was really difficult for us to work with you know there's not a lot of Rubius that want to write C in their spare time for something fun and so shoes for is written in Ruby it's accessible it's easy for any Rubyist to be able to get into all right so part of how we accomplish that is right now the current version of shoes for is written in J Ruby and takes advantage of the cross-platform stuff that the JVM provides for us this actually makes it really simple for us to delegate the hard parts of writing stuff cross-platform to somebody else and build our DSL on top of it in pure Ruby so what are things that you could do with shoes let's take a look at a couple of demos you can do animation and drawing so here's a clock just in case you know having a clock in the corner on your computer and on your phone and on the wall and everywhere else isn't enough I'd like a ticket for that one that sounds like a plan all right there's a lot of games so let's see can I find my cursor I'm not mirrored properly there we go all right am I gonna dang it I should have practiced mine sweeper before I came up here anyways so there's one game another game that we have is a snake game I'm also really bad at this one but you know you can build all sorts of different fun things with it additionally I built this presentation in shoes it's built with library called wingtips so you can do that and here is my favorite piece of code on the internet this is a little shoes application that I wrote with my daughter and it was contributed back to the shoes project as one of the samples here's what it looks like I am way prouder of that than I probably ought to be but there it is chicken that's definitely a chicken moment anyways shoes is a great project if you're a beginner you should get involved we've got newcomer friendly items that are tagged and here is where I'm going to close this is my inspiration this is my daughter teaching my dad about the program she wrote and he taught me to program this is the sort of thing that shoes makes possible and I have birds of a feather session at eight on this so if you want to learn more come along and hack on shoes thank you chicken I'm Chris myself along with my friend Sean have been putting on an event called ruby for good and we dedicate this event to making the world gooder I'm bringing this up mostly because it's a kind of a multi-day hack event all inclusive we all kind of go commune style sleep prepare you know cook prepare food for the other attendees and it's sort of hackathon style but we want projects that are either nonprofit or do some other socially good thing and we specifically don't want projects that we can work on for a few days and release them and then they die and not continue to help the people out that they're intended to so we're looking for project ideas and want to have good things that we can hack on I think we were about 70 people we don't have the dates yet right now if you go to rubyforgood.com it will tell you the dates from last summer so it's kind of penciled in for this summer and to reverse segway back the thing that I actually want to talk about was menace one and Sandy mentioned it in the hierarchy note this morning which is great because I think we need to be repeating this multiple times so that it really sinks in when I first started doing ruby this was one of the things that really resonated with me and I thought it was awesome it stands for mats is nice and so we are nice and I think it's important to know that mats is nice and so we are nice is not just being cordial or polite it's also how we treat people online how our code behaves the way the projects that we work on interact with other code and people talking to people and IRC and issues it really is something that we need to continue to embrace and keep repeating as more and more people come to events like this so that we can we can keep this moving forward and this really becomes or stays part of our culture so please be nice and if you'd like one of these awesome 8-bit mats face menace one stickers I have a couple of them left so please come by and talk to me thank you very much so hi everyone Jonathan Slate Leviathan that was interesting Leviathan Slate you can go by that one now on and taking a page from your book yesterday I went to Lauren Segel's presentation on let's see it was it's so quiet let's make music it was really fascinating he talked a lot about waves, frequencies, amplitudes pitch, volume all that cool stuff and then he talked about some math stuff I didn't get some of that this was something about how do I I don't have slides oh I'm on the wrong oh it's a separate window can I turn on mirroring or something yeah I've got mirroring command f1 helpful somebody the audience always knows okay so somehow if you look at the first one sideways you get the furrier transform which is the second one I don't get that at all but he told me I don't need the math so I didn't need to worry about it so let's see so he had some cool libraries one of them was called easy audio I checked it out and it was really neat I played with some of these type things where you can basically create a an audio stream and write some waves to it and he had a song I'm going to put his song on so I'm going to let that play and keep talking so his code whoops was here this is a song it has like a sound class and a sequencer class and then he uses all that but this is all just an example which I thought was was cool but it was like hey you know if I did all that work I wouldn't just call an example so um so I made a gem that basically I just stole all that and uh called it audio easy audio sequencer and I took his instruments and I took his sequencer and his sounds class and I put it all in there and then am I doing you could tell being up here for like five minutes before your speech is great because it really gets the adrenaline going all right so let's see yeah so this was basically his song it sounds really cool I this is just using my gem but it's basically the same thing I thought I'd also show like through the power of collaboration how we can make this even better of course faster is better especially considering time somebody give me a random number between 40 and thank you all right we're going to try playing that it's obviously much better effects will be proud so um the other thing I did was to take these tools and and do something else where I have a random function that basically I can pass in an instrument and it will randomly play some beats so basically this sequencer takes a bunch of sequences and or frame something and it plays them so let's listen to the random thing it sounds sort of like night writer but it's sort of random as you're doing some random things look at the code while it's playing so it's there's different different numbers here represent different pitches so you get kind of minor chord and then a whole step down to another minor chord and it works and that's it so oh and the gem file right so to show you that yeah so all you need to do to use this is to include easy audio and easy auto sequencer gem maybe I could have done some dependency thing but I did it this like this morning so enjoy thank you thank you leviathan hi everyone well first of all I'm not sure if I should be offended that my name was actually said correctly but never mind and so my name is Amanda and I would like to share with you some thoughts I've had about a somewhat unusual experience I think I've had in the ruby community which is actually bringing my baby to conferences so by the way every photo in this talk has been taken at a ruby conference and is of my baby because I don't have photos of other people's babies at conferences I'll do it I don't even have you as a sponsor might be slightly weird so to start with I'm a ruby developer I live down in Christchurch, New Zealand and I've been working with ruby since 2008 um I've been to nine conferences in that time in five different countries and I've spoken at two of them and I really enjoy being part of the ruby community and I think it's a great place to work and spend sort of holiday time right now my husband is also a ruby developer he used to be a Java developer but I convinced him that clearly ruby was a better place to be and then finally we have one child Theo who you may have seen running around the halls from time to time at the conference today I think he knew that I was about to talk about him because he started crying earlier so I apologise for that this is in fact his third ruby event he attended rubyconf Australia in February Rails Camp New Zealand in March and Rails Camps are amazing so you should listen to Phil and go and he's currently at rubyconf here so the sort of happy part of my talk I originally wasn't sure I was taking him to conferences but I was sort of forced into it because I proposed to talk and was accepted he was six months old and as he was still a breastfed baby I couldn't actually leave him behind especially to travel overseas rubyconf Australia kind of gave my husband a ticket so he could come as my nanny also I really wanted a world where I didn't have to be making these really decisions between my family and my work so I figured if I wanted to be a world where I could take babies to conferences I had to start it or at least be the person to try it and see if we all agree that it works or I get told to go away yeah so I really wasn't sure what the reaction would be but it was really positive so I was going to bring him on stage today but as you heard he's not having the best afternoon so yeah so the reaction was far more positive than I expected there were a lot of comments about how it was a lot of fun and it sort of added to the atmosphere in fact I was really worried about so him making noise people being confused or sort of upset about the fact that there was a baby at the conference those things didn't actually end up being a problem at all the things that did end up being a problem were the things I didn't really expect he kicked it on the floor but luckily no babies or light fuel would were harmed Rouse Camp New Zealand was also a great time everyone was really welcoming so those were excellent experiences now we sort of come to the dark part of my experience which is this conference the conference itself is actually great I didn't want to offend the organizers there so I've been the primary caregiver for my son for the last year and so I haven't really been earning any money so my husband could get a ticket from his work they paid for him to come but for me to pay and get a ticket when I didn't have any income and somebody also was going to have to be leaving talks to mind the baby wasn't something that we could justify also as Phil pointed out it's a bit of a distance to New Zealand and so I didn't have any convenient babysitters who could help me out so this made me was making me think I am the stereotype I'm a female programmer who's actively involved in the community who had a child and was suddenly finding it really difficult and sort of fading out of the community luckily the story has a slightly unexpected happy ending which is the last minute last week Bugsnag had a spare ticket and they offered it to me which was really lovely of them and I've got a friend whose husband's here and he and she's been looking after there for the keynotes and so I could attend some of the talks beyond that me and my husband have been trading off but for the future obviously that's not something that everyone can do I wanted to sort of try and think about what some options were because I'm not sure if I'm an edge case to programming parents along way from home or if I'm sort of the canary in the coal mine and this is something we're going to be dealing with in the future so things we can do a welcoming environment so far I've found not to be a problem I've found everyone to be really amazing and supportive so well done perhaps child care conferences is something that could be considered in the future I know it gets sort of discussed shared tickets where two parents could come and attend talks one at a time or the other one is elsewhere with the child or I'm sure there are other things I'd love to hear your thoughts I just sort of wanted to start some conversation around this so thanks everyone very much I'd love to hear your thoughts thank you so my name is Kosti and I also brought my family here one trick for this is get Southwest make the company pay for it get Southwest for your family you can ride in the same airplane then get Airbnb you can expense it you have a kitchen you have everything right so do you guys see my screen oh very little bigger so let me show you what moment of ruby can we turn on this can we turn on this please please hello so let's do this let's try this one let's try this one that doesn't oh man I guess ruby just doesn't like and you know let's leave it at that this is I'm trying to make a collection of ruby wads you know maybe at the end of the talk somebody can can lighten up this for me and I'm gonna unplug this I'm just gonna do tell you a story tell you a story about we got we got a talk here from a guy who was a cop right and what he learned about being a cop right I have a talk about my previous job and how that helps in programming a little bit I'm gonna try to make it short right so I was always good with computers I was a programmer before and I decided to get out of it at some point just to be a normal person I always wanted to be a normal person right you know I'm just at least average you know so not like not like a nerd you know so I I got an opportunity to come to America and I said okay this is my chance man I'm gonna be normal in America so I said my job was to work at the Salmon Fishery and for about you know like during the Salmon season it's a cool job you get overtime and then you get to be a normal person afterwards right so that fell off and I my offer actually ended up being to be a doing housekeeping now I ended up working for a Venezuelan guy in Orlando housekeeping contracting that sucked a lot contracting I mean housekeeping working full-time for a hotel that's nice working contracting you work all the time to any hotel you know so how does that how does that help how how I sucked at housekeeping okay first of all I was working on a Romanian team I'm Romanian okay the Mexicans were kicking our ass and and we were slow they were coming to help and then there's QA like software development there's this like we have software development life cycle there's a housekeeping life cycle right so you go clean the room right nobody tells you how to do it like sometimes you get out of college you get a job it's like that but then QA comes in and says come clean again you know and that's what was happening to us and sometimes the Mexicans were coming to help us because we had to go home right so what does that teach you about you know like it's a little bit like the karate kid like what is this wax on and wax off right and sometimes it comes into play in my in the normal job like bam like that and then the reflexes come in you know like housekeeping you go come you go over there and try to clean a hotel room the most important thing is the most important thing is stay in one place that's what our owner told us that's what you try to stay in code especially when you go refactor code housekeeping is like refactoring code a lot of it and let's see it's about like Gomez over there is laughing so I kind of lost my train of thought you mess you mess me up so okay like yeah so it's like this the people that want to go into the hotel room they want to pretend that nobody else lives there they don't want to see any hair any fingerprints that's what you want to focus on this is the MVP man so you want to just clean up the previous the previous life presence and then move on to the next thing this is working with legacy code you touch the minimum part that you want that you that you have to touch and then get out of it and because I knew a sales guy that's another story so first of all stay in the same spot second always be cleaning ABC the processor basically what I was doing go to one spot do one thing go to another spot do another thing your hands are like the processor they always have to be cleaning you go do a trip to the hard drive you come back you always have to stay in the same spot so this is a lot like system design like the same like manufacturing goes manufacturing agile went into programming there's a lot of stuff from any other job that you can go into and get it into programming like as a conclusion is don't multitask stay in one place finish what you had and move on to the next thing also as a conclusion about the computer keep it in the same space don't do cash misses optimize the working queue keep your processor busy all the time especially these days when it's so fast that's about it thanks a lot all right hi everybody my name is Colin Kelly co-founder at Invoka we've been writing Rails and Ruby code since 2008 up in Santa Barbara I want to talk about two things I really enjoy one is aspect oriented programming and the other is Ruby 2.1 and I want to show you some code so first of all get this out of there as far as what aspect oriented programming is it's separation of cross cutting concerns so that's something we all know we want to go with single responsibility principle and I want to show you an example we had in our code base and how much cleaner it came out when we applied Ruby 2.1 I want to show first here prepend so here I've got a little bit of code a little bit of code down here I've got a partner API and I'm including a couple modules and I'm prepending a couple modules and each one of those up here just for example every one of them just does a put S of where it is and call super anybody know the order that this is going to actually execute anybody want to yell that out when I call call this object that's right so let's check it out here paste it in over there EDBC EDCB yeah so let's check that out if we look at the actual code we ran E and D actually ran before this class's own method so prepend sits at the top of the ancestor in front of the very class that is incredibly powerful for aspect oriented programming so I want to show you an example where we use that let's close this guy out here so here we have a partner API how many of you have a service that depends on some partner's API that's actually got to be running all the time that's a big thing in our product we all live in the SAS world and we believe in using other people's SAS services so here's the partner API we realized from bad experiences that we had to monitor this API and know whether it was working so here's version zero of it here's one of the methods and down at the bottom we have our little metrics class where we go out to graphite and show whether it succeeded or failed so that's version zero you can see it's not great because we're mixing two different concerns in one bit of code here's version one it's getting better there's the public method it deals with setting up the metrics and then it calls down into a private method that does the actual work this is better but now the important part of the class is down in the private section and the public section is dealing with a cross cutting concern here's version two got a whole lot better what we've got here is published success metrics is now a module that we've included there's our public method and all we had to do is down here say publish success metric and we name the method and it wraps it automatically so I want to show you how that actually works here's publish success metrics the module when it's included we open up the base class that included us and we create a thin veneer module that sits above that by prepend that's the place that we can add this aspect oriented code down here we have a couple handy class methods one that lets us set up a prefix and then when we actually call that macro publish success metric check this out that goes in class eval writes a method of the same name I have a little helper down here that gets the signature by reflection it calls a helper to publish the api success and then lands in super isn't that pretty cool so you've got a tiny layer above you don't have to think about and the last version I have is version three thanks to Bob Smith my co-worker for pointing this out in ruby two the death of a method returns its name as a symbol so that's all it takes a single decorator sitting at the front of a method is all it takes to provide that wrapper no alias method chain nothing nothing confusing all right that's what I wanted to show you very nice I think I can wrap that up I'm Colin D. Kelly on Twitter also on github and I put this up there on on github right for the talk thank you so I'm here to my name is Michael Hardell I'm here to tell you about publishing the Ruby on Rails tutorial with soft cover like I'm curious actually just to get a show of hands how many people here have have read the Ruby on Rails tutorial use the screencast cool all right so the first couple versions of the first first couple editions of the Ruby on Rails tutorial were made using kind of a hacked together ebook publishing system kind of information product marketing platform that I wrote just for my own purposes but earlier this year a couple friends and I launched a more polished version basically optimized for the kind of products that I make called soft cover and in fact the current Rails tutorial website runs as part of the soft cover platform so I want to show you a couple things that soft cover can do during Matz's keynote he mentioned something about this arrow syntax let me show you this is actually running locally now chapter 11 of the Rails tutorial mentions this syntax for making lambdas and I call it an arrow syntax but I didn't know it had a name Matz mentioned it in the keynote it's called a stubby lambda stabby lambda awesome this is real time copy editing of the Ruby on Rails tutorial so this is the source of the Ruby on Rails tutorial book let me say the readers of this book have been unbelievably helpful I get emails and tweets all the time from people telling me that that they caught an error I mean literally I fixed a couple errors during the keynote yesterday because people were tweeting at me it was awesome so one of the cool things about the soft cover is that it comes it's a there's a command line interface that has a full ebook production system and you can see it actually automatically reloaded the webpage here and we've already in fact updated this chapter and so one of the things you can do is you can publish it to the live site let me show you that site so this is the main marketing page here's a description of the book there's there are product bundles of soft cover supports ebooks and also arbitrary media bundles it also bundles with other products so here's the solutions manual for exercises that comes bundled with all of the different pricing tiers here's the bio there's some testimonials and so on this all lives inside a marketing file on your local disc as part of a git repository this is one that came over last year I found out that Jimmy Wells founder of Wikipedia had made an answer on Quora saying that at the moment his favorite book was the Ruby NRLs tutorial so I thought well that's going in my testimonials so here he is so all of this information is available locally on your disc but then with a single command you can update it on the live site and a lot of you probably know that the Ruby NRLs tutorial is available for free in its entirety online as regular web pages and now Stabby Lambda is live this is on the actual live website well while I was talking it updated so one of the cool things about it is that the publishing the barrier to publishing is incredibly low it just you can push out new versions of things really easily I just uploaded the HTML but the soft cover gem also produces EPUB MOBI and PDF from the same input format so everything's in sync automatically and of course I've been publishing the screencast too the third edition book is out 10 of the 12 screencasts are out and I just need to edit down the final two and then the launch will I mean I'll be doing all the all the stuff I'm doing all the marketing is all through soft cover so soft cover is open to other authors it's been sort of optimized for my uses but starting in 2015 I'm really going to make an effort to switch sort of now that I'm done or at the brink of being done with the third edition I'm going to focus a lot more on bringing more authors on board and we have several plans to lower the barrier to getting started with this kind of company and so the real vision here is to make it possible for many more people to build these sorts of information product companies for authors who aren't co-founders of the platform the royalty is very generous 90% royalty rate and that includes it to the 10% that soft cover takes absorbs transaction fees storage and ban and so on so I really think that many many more people could be making these sorts of companies everything from like 50 bucks a month all the way up to something that makes six figures per year or even more so find me online tweet at me send me some email and I'd love to tell you more if you're interested in using soft cover thanks Hi everyone my name is Pam I graduated a few weeks ago from a bootcamp in DC and they asked me to become an instructor for the next cohort so my class started yesterday but I wasn't there because I'm here and because this is better and initially I wanted to talk about the imposter syndrome and how I was like starting to feel that getting into the new job but I just like decided to change that topic a few hours ago and talk about what I call the new commerce syndrome because coming to RubyConf it's my first time at a tech conference ever and I wanted to talk about something that relates to that experience so what is the new commerce syndrome I like to think of it as when you go into like a new experience or a new setting that feeling that you have that you're going to see something stupid or like ask a stupid question or appear like you don't know anything and everybody's going to judge you and look at you like you're that person like nobody talks to that person because they're dumb you know and you're just going to be alone and cry so I was very lucky to have Brandon Hayes as my guide and he introduced me to a bunch of people we had some great conversations but a lot of it I honestly didn't know what was going on a bunch of new technology terms were thrown at me but I was just like smiling and nodding because I was too afraid to ask questions and kind of like stop them in their tracks and have them you know explain things to me so to kind of like like change things and kind of like I guess face my fears I decided to stand in front of you guys and give this talk and kind of be very vulnerable and voice this fear and I'm hoping that any newcomer that feels the same can realize and see that they're not alone and if you've ever felt that way ever before we're all feeling the same thing and that's awesome so yeah so this is my talk I was very nervous because I'm really scared of like public speaking so this is also a big step for me I hope you guys could relate to it I hope it wasn't too bad give it up for Pam and you can follow me on the Twitter at pam underscore yam all right thank you thank you