00:00:18.600
Hi everyone! My name is Kristen, and I am the COO at a new company called Vectra, which is the brainchild of a guy named Evan Phoenix. You might see him around; he’s really interesting and usually hides away from people.
00:00:30.119
Hi, I'm Jessica Subtles. I'm a founding engineer at Vectra. We're working on a deployment solution, and if you'd like to hear more about it, you can find us later.
00:00:41.680
We weren’t planning on doing a lightning talk, but we realized that there is a big issue out there: a lot of people don’t know how to use a kazoo, which makes me kind of sad because I think it’s a big part of childhood. Maybe you never learned, or your childhood just feels gone, but we’re here to bring it back!
00:00:55.480
A lot of people don’t know how to use a kazoo, like this guy right here. He’s trying to use his arm, but that’s not even a kazoo! That doesn't work at all. Luckily, you have the parts to use a kazoo; dogs don’t, and they’ll never get to use one ever.
00:01:12.240
I know a lot of you have kazoos—take them out and hold them up! 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, yay!
00:01:30.560
And then you celebrate! Yay, we remember childhood! Okay, so I think you’re ready for a little call and response. I’m going to call, and then you respond. Ready? Nice! That was good! So I think you guys are ready for the advanced one.
00:02:00.000
Some of you might know Mario from childhood—let’s see if we can do this. I’m going to call, and then you respond. Okay, a little more complicated, even for professionals!
00:02:37.460
Maybe we should try that again. Okay, one more time—let’s all do it together. One, two, three: yay! Okay, so I think our talk was very successful.
00:02:56.920
For posterity's sake, I want to do something that would be kind of cool, especially for the video: a den of kazoo. We’re going to start really low and quiet, and as we raise our arms, we will get louder and higher. You guys ready?
00:03:09.879
All right! Thank you! If you want to Alpha test Vectra, come see us—we're in the hallway today and tomorrow. Thank you!
00:03:18.040
Hi everyone, my name is Claudio and as you’ve heard my last name, I’m not going to repeat it. I’m going to talk about a gem that’s open source called BH Bootstrap Helpers for Ruby. If you’ve ever used Bootstrap, you know it’s very convenient because you write less CSS since it’s already part of Bootstrap, but you still have to write some HTML to make your HTML look like what Bootstrap requires.
00:03:49.680
With this gem, you write less HTML as well. Here’s the link to the GitHub page. This is an example from a company I work for called Fullscreen—we have an app, and this is the sign-up page. Without any CSS, it looks quite bad. If you add Bootstrap CSS, it becomes centered, the button is blue, and the form looks very nice. But look at the HTML you end up with: you have to add all of these classes to your divs and roles.
00:04:19.799
If you’re using helpers, you still have to add all these class attributes and all that. If you use BH, this is what you end up with: it’s basically cleaning up your views. You add one attribute to your form to specify that it’s layout horizontal because that’s one of the layouts Bootstrap gives you for forms— a horizontal form. And then all those divs and extra attributes that pollute your views are gone, and it still looks great.
00:05:03.199
One of the advantages is that if suddenly your designer says, 'You know, I don’t want the form to be horizontal anymore,' which means that the label is on one line and the submit button is below, you can just switch to inline layout and that's it! You could also add, for example, class context-success, and then the button will be green instead of blue.
00:05:57.160
Another example is an alert box. If you want a button that says 'What is Gorilla?' and when you click it, it shows a modal on the top of your window, this is all you need. There’s a helper called Modal, and you specify the body and the title, and that’s all there is to it. If you didn’t have BH, this is what it would look like if you went to the documentation for Bootstrap. You have to type a button and a div, and so on.
00:06:36.560
I tried to include as many Bootstrap components as they’re called—so you have panels, nav bars, modals, drop downs, and they’re all pretty easy to use. For instance, if it’s a drop down, the helper is just called drop down, similarly with icons, etc. It doesn't change your CSS; you can just drop them into your app. It works with Padrino, it works with Middleman, it works with Rails 3 and Rails 4 and it doesn’t overwrite anything by default.
00:07:12.880
You can just put it in and then start using it together with your own normal code. It has a GitHub page, code coverage, testing—everything you need. That’s all, and still, because I have one minute left, I just want to thank the organizers.
00:07:43.000
Everyone else has talked about how Ruby makes people happy, so if you want to make me happy, go there and check out my project!
00:08:10.800
Hello everyone, my name is Richard Schneeman, or "Schnees" for short. Actually, he pronounced it as 'Schneeman,' which is the mispronunciation of my last name. It’s very strange! Does anybody know what this is? This is a reticulated python.
00:08:18.319
That’s a very specific type of python! Does anybody know the biggest difference between Ruby and Python? One is a snake! Okay, why would you choose one over the other? A little background on me—I am a Ruby developer. My wife, her name is Ruby, but she is a Python developer.
00:08:44.919
I talk to many people who run Python apps and who love Python, and I ask them all the time why they love Python and choose it over Ruby. Is it whitespace? Is it speed? Is it the libraries? I just want to talk about flow control and milk for a second.
00:09:06.600
In 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’ll just be like, 'Oh hey, we don’t have this thing in the array.' It's basically like Ruby saying, 'Go to the store and get me some milk,' and Ruby’s like, 'The store didn’t have any milk.' In Python, you’re like, 'Hey, go to the store and get me some milk,' and if it’s not there, it’s like, 'Oh, they didn’t have any milk, so I burned the place down.'
00:09:37.880
So, that’s 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! Have you seen the docs? They have all these doc tools and all these doc sites!' Generally, in Ruby, we don’t consider a project published until it is fully tested, or at least reasonably tested. You know, at least it ran one time.
00:10:14.960
In Python, it’s cultural that a project isn’t published until it’s fully documented. I was wondering why can’t we have better documentation in Ruby? What is preventing us from doing that? In general, writing docs is too hard, especially right now. We already have a lot of undocumented code out there that it’s just like, 'Whoa! What is going on?'
00:10:42.080
Also, reading docs is hard: where do you start to do that? So, I would like to introduce—something that was amazing, thank you all—called doc.org. It is intentionally the most difficult-to-pronounce name I could come up with.
00:11:09.120
If you go to doc.org, you can sign up to receive documented methods in your email inbox every day from Rails or Ruby, or basically anything that 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 be like, 'Oh cool, I didn’t even know Rails had this method!'
00:11:39.840
You can also use it to write documentation. If you ask it, it will send you undocumented methods. There’s a gentleman in the front row; you might know him—he has a lot of commits on a project. I challenge you to beat him in the number of commits using nothing but documentation commits with this tool, and the world will actually be a better place!
00:12:04.640
There are a lot of places where documentation does fall short, 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. So if you walk away from this lightning talk with only three things to remember, it’s doc.org, doc.org, and doc.org. And one last thing: docs.dr.org. Thank you!
00:12:44.440
Rich Hickey, I’m sure some of you have seen his talk, did a talk, and what I learned from it was that burritos are not transducers 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 to show that they’re not the real map and select. You see they have a block, they have the source collection, etc., but internally, they’re shoveling onto an array.
00:13:16.360
So, there’s a lot of reducing methods on Enumerable, but they all shovel onto an array. What Rich Hickey pointed out was that the piece in the middle cannot be accessed from the outside. You’re appending onto the array, and that’s what you have to do with map and select and 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 with these methods, the initial object and the reducing step are available on the outside.
00:14:04.920
So what would that look like using it like that? The first one is array mapping, and it’s exactly like array map, and next, but you start seeing a difference when you put a set in there. Instead of building an array, it builds a set, or if you switch out the reducing function to enqueue, you could build a queue.
00:14:55.920
You can even have the initial object be standard output 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? Transducers are powerful, composable ways to build algorithmic transformations that you can use in many contexts. We’re not quite there yet, but here’s an example in Ruby.
00:15:36.960
We don’t have a composed method like Clojure does, but we can build one pretty easily just by opening up the Proc class. You can have something like add one, square it, and then add 42. With this transducer style, you could build any type of object from an array to a set or whatever you want to build.
00:16:14.800
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 transducers gem that Kitech released for Ruby, as well as Java, JavaScript, Closure, and they’re going to release it for more languages.
00:16:56.160
But it doesn’t look much 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 were more Ruby? It’s down at the bottom. You can see what it might look like to transduce in a Ruby style. Here’s an example of how we can already do it.
00:17:43.880
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; maybe it’s nice to have cheese on top.
00:18:10.440
That’s it! Thank you very much!
00:19:04.960
Hello, my name is Sean Culver, and today I’m going to tell you about the five-finger secret to success. I work at Zeal, and I love to come to work every day because of my awesome co-workers and the fun projects we work on. But this one secret is quite powerful! So everyone, calm down! It won’t be as profound as Sandy Metz’s talk today.
00:19:45.320
There are several secrets involved, and the first one is enthusiasm. The second secret will make you feel happy and is also a great way to start your day, and it’s something you do when you have a success! 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 quite small.
00:20:38.880
And it’s so small, it might blow your mind: high-fives! It’s 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!
00:21:16.960
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.
00:21:50.760
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! You can high-five just about anything! 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 wrong.
00:22:36.200
Now I’m going to teach you how to give stellar high-fives! The first step is to look someone in the eye. The second step: your arm goes 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 toward their elbow! That’s the secret! It’s as simple as that.
00:22:58.360
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 is going to use what they learned and give an awesome high-five! A stellar high-five! Hold on, hold on!
00:23:21.560
On three! Woo! All right! Yes! All of you! Up top! Down low! Oh yeah! Nice! All of you rock! Thank you so much! Please let this not be the last time; do great things and bring enthusiasm, passion, and joy to your work and life! And give stellar high-fives!
00:23:38.200
We have the first hundred people to register getting free T-shirts! We created a website, StellarHigh.com, so go there quickly before they’re all gone! Thank you very much!
00:24:16.200
I’m Steven Talcott Smith, and 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!
00:25:05.000
I want my teams to produce more value and reduce or eliminate low-value activities. 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.
00:25:39.440
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 I’ve come across, chaos reigns most completely in the view.
00:26:00.880
I’ve been circling this problem for years in different ways, and finally, this year, I began to work 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.
00:26:35.440
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 right now.
00:27:01.200
In any case, the components are also built in a declarative style. 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.
00:27:45.600
This works in contrast with HAML, 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.
00:28:24.840
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 Ruby code that works with strings that is evaluated in the view.
00:28:59.800
The real power of this approach is that it facilitates the development of a component library! 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 Table4, Tree4. I’ve also been working on some advanced form components.
00:29:33.160
I think this concept maps well to something we’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 have the server driving the layout of the code.
00:30:04.440
All of these things can be extended in an object-oriented fashion. Check it out, it’s up on GitHub! I’m hosting a BOF session tonight about the Rails view. Although I’m also interested in engines, we’re using this in our admin framework.
00:30:40.800
It’s on GitHub under Logica Express Templates. I’m expecting to release a production-ready version in Q1. I’m Steven Talcott Smith, my company is Logica, and we have great software teams for hire. I’m based in Lake Tahoe and Manila.
00:31:16.000
I also recently published a book titled 'Level Up: Tips and Techniques to Become a Better Professional Software Developer.' There’s a coupon code for RubyConf 2014, and lastly, this last year, we sponsored the first Ruby conference in the Philippines.
00:31:54.560
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! Check it out at RubyComm.ph, thank you very much!
00:32:29.000
This is the five-minute version of a talk I’m working on called 'Investigative Debugging: Conducting a Criminal Investigation in Your Code.' My name is Brandon Rice; I’m a software developer at Optoro in DC.
00:32:45.480
As of the beginning of November, I’m entering my second year as a professional developer. Before I was a developer, I was a cop, and being a cop involved a lot of imagery. It’s about a façade, convincing the general public that you and your cop friends are more like Colin Farrell when you might really feel more like Jonah Hill.
00:33:21.080
So, that being said, when I was a cop, I had a very specific job: I was an investigator. I investigated arson crimes. Investigating arson crimes is a lot like showing up to a scene that’s a total disaster, and your job is to figure out from all this mess where the remains of the candle were that ignited the curtains or maybe where the remains of the gasoline trailer were with the matches that ignited the curtains.
00:34:14.000
You better be right, because the difference means someone going to jail for twenty or thirty years. The methods that you use have to be proven; they have to be repeatable and able to stand up in court when you’re an expert witness testifying to a bunch of people and a judge. One of the methods we used was the scientific method!
00:34:54.460
I think that a lot of these principles can be applied to what we do as developers, especially when debugging. I’m going to take kind of a whirlwind tour on how I approach a lot of these debugging problems, drawing from my past experience. First: stating the problem—this is the easy part: Jira, Pivotal, tickets, user stories; someone’s probably already done this for you.
00:35:32.260
Doing the research—these are techniques I use on a weekly, if not daily, basis to gather all the research before I make any assumptions. I think the big one, in all caps, at the bottom, is talking to the stakeholders. That’s probably something we don’t do a lot as developers. Talk to your business associates, your clients—anyone who isn’t a developer! And probably, the one thing I do last, which is probably not good, is talking to my co-workers and peers.
00:36:27.480
I like to exhaust all my resources before I realize that I’m stuck, and then I go talk to my co-workers. So hypothesizing is pretty much the same. Whether you’re an investigator or a developer, it really just means standing around and bullshitting with your friends.
00:37:17.440
We all know how to do this. It’s also kind of the easy part and the part you spend the least amount of time doing. Analysis is probably the most important part, and establishing a timeline is key. Sometimes the things on the right are the approaches I took as an investigator, but in developer terms, it means coming up with a good solid explanation of what you did, why you did it, and how you did it.
00:38:01.560
That means writing an email, putting it in your ticket comments, but whatever it is, it’s important because if you introduced a bug while you were fixing a bug, someone’s probably going to have a tough time trying to figure out what you did.
00:38:46.680
So at the end of the day, 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 to handle a ticket. So I call that considering a plea, which means you fix something smaller and then make a new ticket.
00:39:23.760
I embrace this methodology when I’m working on bugs. I strive to fix illnesses, not symptoms. Developers should be held to a higher standard of proof because the development community gets some flak for not having certification and allowing things to ship out with bugs in them.
00:40:06.680
So why don’t we take it upon ourselves to embrace a higher standard of proof? That’s all I have. Thanks! The question I usually get most is why and how I left law enforcement to become a developer. It’s a long story, but the short answer is happiness, and if you want to know the longer version, come talk to me!
00:40:29.040
Hi, I’m Alex! I work for Amazon Web Services, and I 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.
00:40:49.520
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. We’re talking about duck typing. Everyone who talks about duck typing has to make this joke.
00:41:04.200
So anyways, coming from the world of Java, there is a lot of boilerplate and ceremony. Yes, this is a real class name! So not having to write this in Ruby has brought me a lot more happiness.
00:41:32.080
So I wanted to go through a quick example of what this looks like. This is a very simple class for illustration: it takes a hash, writes it to a file as JSON, and 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.
00:41:55.840
As long as that acts like file IO, it will work. We have a test class here which shows you one way of doing it, where we pass in a stub handler. 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.'
00:42:32.440
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, keep 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.
00:43:12.360
Well, 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.
00:43:54.000
This is the live coding part! So we have a path to a file and a hash. If I create a new IO writer using the file class... whoops... joys of live demos! (Never do it!) So you can write the file, read it back, and it works.
00:44:44.920
Of course it works because it’s built for file IO. Does it work when we back it up 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.
00:45:06.630
Let’s do that again… Yep, it works the same! The power of duck 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 enforce excessive requirements on your users. You provide a reasonable contract and trust them to do things right.
00:45:43.520
That’s my spiel on duck typing. I hope it helps someone!
00:46:14.920
Hi, I’m Phillip. I’m from New Zealand, as you can probably tell from the way I swallow my vowels when I talk. It is extremely bright on stage; I don’t know how the speakers do it! I’m here as a representative of Rails Camp New Zealand. Imagine yourself and a group of Ruby programmers at a country retreat for a weekend of talks, hacking, and fun during summer!
00:46:51.520
This will be the fifth edition, on 30th January to 2nd February 2015. We provide transport from Auckland airport. You hop on a bus, arrive at camp, eat extremely good food and drink great drinks while ignoring the outside world. We return you on Monday morning; you can stick around New Zealand or go to RubyConf Australia, which is the same week.
00:47:22.520
This is the fifth NZ camp, and Australia has had 16, so where is New Zealand? Fair enough! This is a map from EZ, the mapping company; they forgot to include New Zealand! This is off a Tumblr 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.
00:47:52.320
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 usually, it’s an overnight flight, so you can get some good sleep. All meals are included: breakfast, lunch, and dinner. Everybody has the opportunity to speak—you don’t have to do a CFP or anything like that; you can just write your name on a whiteboard, just like the lightning talks!
00:48:16.760
The last camp we had was at Mount Cheeseman in the New Zealand Southern Alps. We have a full Code of Conduct that everyone must adhere to, so we’re very welcoming to people of all ages. Unlike Australia, none of it is out to get you. We usually have really good coffee, which is something that New Zealand is getting more and more known for!
00:48:51.320
Here are some photos from the last camp. We were on top of a mountain, but we won’t be next time; there will be water around us. Yes, that is a onesie, and I think it was taken around 5 a.m. There is really the sky above New Zealand.
00:49:31.000
Here are some credits of the group from the last time. That information, again, I guess I could just hold up for a minute and 24 seconds, but I won’t waste your time. Can you sing if you don’t have a kazoo? I don’t even have one! Well, that’s not my fault!
00:50:14.320
Okay, cool. Come and talk to me afterwards if you want to come. It’s $35 New Zealand dollars, which is like 40 bucks US. Thank you very much for your time!
00:50:58.760
Hey everyone, my name is Jeramy Couts. Up until now, I thought it was Jeramy Couts, but as we all know, Evan Phoenix is infallible, so I learned something new today! I work at Coding Zeal, the magical wonderland in the forests of northern Oregon, where, in between constant high-fiving, we occasionally write code.
00:51:31.680
You can find me on Twitter at KXC RL. The letters don’t mean anything! So, this topic is a little less light-hearted than Sean’s talk. I wanted to start with some beliefs and assumptions before I dive into it.
00:52:06.560
It’s my belief that just because an assumption isn’t completely mapped to reality, and isn’t 100% factual, doesn’t mean it’s a bad assumption to take on. So for your consideration, I’d like you to contrast: people are inherently good, and we 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.
00:52:41.760
My answer to this: Which is kind of a classical philosophical question, is society! The fact that it came out of nothing and became what it is, continues to progress to provide people more opportunities to express themselves and enjoy their jobs, says to me that there must be something essentially good in humans. And if it’s not, it’s at least good for us to believe so.
00:53:24.480
So on that note, I’m going to say that the Ruby community is inherently good, and inherently good at kazoos! 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?" You can’t see it from where you’re sitting because you have two-dimensional vision, with just a little bit of depth perception.
00:54:06.960
You would have to walk around to get another perspective. One of the things that we often do is get multiple perspectives on things that are highly complex, like the things that we work on every day that have a lot of moving parts that we cannot see.
00:54:51.680
So what about something that’s multi-dimensional, abstract, highly volatile, constantly transforming, and for many people, completely invisible? Something like equality! I believe that more perspectives mean more information, which means more understanding and ultimately, more capacity to make good decisions.
00:55:34.000
The correct decisions, decisions that will benefit you. This is a lot of philosophical frontloading to say that I often come to conferences and I meet all these amazing people, all of you! I hear all these brilliant insights and unique perspectives on problems. 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!
00:56:22.960
I mean, not that anybody is really going to appear on Last Week Tonight, but I realize I can’t complain about this, because I 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 to start a blog!
00:56:59.440
It’s probably not going to make me famous, but at least it will avoid a few moments of you never being able to find an answer to something. I ultimately think that all of us should be sharing that more information is better. This all comes back to this: all of this Ruby, the language we program in, Rails, the framework that we use, the building we sit in, and all of the society we’re a part of—we invented it!
00:57:41.040
And we taught it to each other. By your very nature as a human being, you iterated on it. I think we should all be sharing what we’re finding. Thank you!
00:58:21.920
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 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.
00:58:49.480
Here’s another huge, multi-million-dollar ROV. There’s no reason an ROV should cost millions of dollars and be this huge. A few guys in Berkeley, California, two guys in Berkeley, got together and created Open ROV—'open' because it's all open source and 'ROV' because it’s an ROV that costs less than $1,000. You can buy one for about 850 bucks.
00:59:24.160
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. The lasers aren’t there to zap fish—that's not why you have lasers!
01:00:09.000
The lasers are about 10 cm apart, they’re parallel, and you shine them on objects to gauge their size—very useful! Everything about Open ROV is open source: TCP/IP, Node.js, Socket.IO—socket I/O is for real-time, bidirectional communication; Node.js is what the web app running on the Open ROV is written in.
01:00:48.640
TCP/IP, of course, is the language used when you communicate between your Open ROV and your laptop. Node runs on the BeagleBone Black—that's the one being held in the photograph. There’s an Arduino chipset on the controller board.
01:01:20.920
There are three event loops: one running in the browser on your computer (typically you'll use Chrome); there’s another event loop running in Node.js, and on the Arduino, you have a third event loop running in C++. If you want to take a look at the code, you can go to GitHub right now.
01:01:59.760
Go to github.com/OpenROV and take a look at it. Now you get excited, you order this thing—it comes to you in parts, and you have to put them together. Here is me putting mine together a little bit at a time!
01:02:41.560
There it is again, with all the junk in my workshop until 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 running on my BeagleBone Black, and those are rocks at the bottom of Lake Michigan. It worked really well!
01:03:41.440
Now that I've got it running and it works in your bathtub, it works in Lake Michigan, your next step is to take it to the Caribbean: that’s where we’re hosting a Ruby conference in the Caribbean! We call it 'RubyKareb' in January. It’ll be cold in Chicago, but warm in Barbados!
01:04:14.960
RubyKareb is a Ruby conference—in the Caribbean! Five days in the Caribbean, 30-minute talks, each followed by a 2-hour lab directly tied to that talk! The speakers are Loran Cincinnati, the inventor of RubyMotion, Davel, who wrote RubyList that runs on iOS, and Randall Thomas, who’s going to cover machine learning in Ruby.
01:04:55.640
And you get to do this at night! We'll hack on Open ROV by day and hack on Ruby at night! On Friday afternoon, we're going to take the Open ROV out on the Caribbean and test it on a boat and look at some fish! We won’t zap the fish with the lasers. So take a look at RubyKareb.com and check out everything you could want to know about Open ROV.
01:05:27.440
Thank you for listening!
01:05:50.720
Hi everyone, I’m Tim. I work on the Core Services Team at Living Social, and yes, we’re hiring. It’s an awesome place to work! There are 20 of us here, so if you're interested, come talk to one of us!
01:06:13.520
I want to talk about what we’ve discovered about maintaining a large number of interdependent apps and services when we need to develop the services and the client applications and the gems for all of this. So how do you actually test them all in isolation?
01:06:52.760
One of the things people use a lot is VCR to short circuit any of the Cs to dependencies. But who really would like to be committing and maintaining all those cassettes in their repos? VCR cassettes are only good if you refresh them, and finding a good frequency to refresh them is hard!
01:07:24.960
The other option is using mocks. A lot of people use them but using tools like Mocha and SpecMocks results in a lot of setup code, which can be cumbersome and boring! And if your API in the backend changes, or the behavior changes, your tests don’t even notice!
01:08:00.320
Faced with these issues, the team at Living Social started an approach where we still use test doubles—a wider term for mocks and stubs—but without compromising our test suite runtime.
01:08:41.440
We still want to have fast runtimes—that's why we use test doubles—but we’re also the maintainers of our own client gems, which puts us in a position to add realistic sample objects to those gems that expose the service API.
01:09:24.400
The trick here is that we evolve our mocks, which are meant to be used by the client applications, in lock step with our service. How do we do this? We implement two backends in our client gem: one that makes HTTP calls and reaches out to the backend services to expose the API, and another that’s a mock backend that short circuits the calls.
01:10:08.640
The key detail is that both the fake and the real backend expose the exact same interface. The layer of the gem that exposes the actual API a client can consume has a way to inject one of the two backends.
01:10:49.480
So here's how it all looks! We try to optimize to make it as easy as possible for client apps to use the mocks. The application under test just has to place one line to put the mock mode into its test helper or wherever it wants to use this.
01:11:26.920
This line configures the responses entirely out of that in-memory hash registry of preloaded objects. If you, for example, have a service that serves market or city information, the client access gem, called LS Cities, switches into a mock backend mode and serves those objects with a range of well-known markets and city information.
01:12:06.760
The last thing that's really important is we still have fast tests, we still use mocks, and we reduce the repo pollution with VCR cassettes, and we increase the level of confidence in our test suites!
01:12:50.560
This is by using the exact same objects that are used on development in lock step with the client library. We have less boring boilerplate code to write and maintain to set up mocks, and the client apps work with realistic fakes that behave exactly like the real thing.
01:13:31.360
Thanks everyone! So I will be sharing more techniques on our tech blog. There’s an article that gives you more detail about just a general overview of mocks and stubs, and there’s this presentation, which is a remote presentation.
01:14:14.320
Thank you!
01:14:57.760
Thank you, Tim! I’m really excited that so many presentations tonight, including so many lightning talks, are talking about science! So tonight, I’m going to talk to you about homeopathic code optimizations. Everyone knows about homeopathy, right? We’re all scientists here!
01:15:34.560
But I'm sure there are some people who don't know what homeopathy is, so I’ll tell you: it’s about diluting substances so that they become more effective. While researching this, I did what every good scientist does; I went to Wikipedia, but I found it way too long, so I didn’t want to read it.
01:16:23.840
You can highlight the text and right-click to summarize it—in a way, it dilutes the text! So I figured if we dilute everything six times, that’s when it will be most effective. Now, if we think of it this way, it may sound silly, but if we read this, we’d know that modern homeopathy is about 'water memory'—so, can we have memories?
01:17:15.440
Of course! Demo time! So I wrote a homeopath code optimizer. Here’s a video of it; I was going to do a live demo, but I figured I probably shouldn't. So, let’s take a look at the Fibonacci sequence; everybody knows it!
01:18:01.120
This is the benchmark used across all interpreters. Executing it will allow us to see how well my optimizer works. So we’ll run the code, and you can see that it carries out operations with typical performance.
01:19:02.360
But if we run it through my homeopathic optimizer, you will see that as we pipe it through Ruby, it executes still; it still calculates Fibonacci! I can dilute the code further—let's change the factor!
01:19:51.680
Each time it will constantly work through my homeopathic code: look at the improvements and how fast it computes! The more diluted it becomes, the faster it seems to go!
01:20:39.040
So this is all, of course, scientific! But the main advantage is that less is more, so homeopathic code optimization leads to faster execution and less need for maintenance!
01:21:18.960
Hi, I’m Bobier! I’m the poor schmuck who has to go after Tender Love. My name is Bobby, and I work at Carbon Five. We have offices in Santa Monica and San Francisco. I’m a web developer and also a musician; I’ve been playing drums my entire life. I want to demo something for you.
01:22:55.000
I’ve used two gems that really helped with this project: R2 helps to communicate with the Leap Motion. It simply broadcasts JSON data and gives me information about what my hand's doing at a particular moment.
01:23:38.560
I wanted to be able to take what's happening and create surfaces. I can create a snare drum surface here, and a bass drum surface, and I can create a hi-hat up here to make sounds just out of thin air! You could imagine I could make an 80s hair metal ten-piece kit if I wanted.
01:24:28.440
If I didn’t have time to do this before, I could create this as a laser or any sound I want. There are a lot of interesting applications for music with this device!
01:25:02.240
Here’s the code I wrote to make this happen. It's a drum set class that uses R2's DSL, which signals that it is the Leap Motion. This is running a LeapD process—basically exposing a WebSocket port that broadcasts JSON frame data.
01:25:49.680
I’m hooking into it, creating these surfaces. So on the left is a surface class where I can say, 'Hey, I want this note value, and I want it on these boundaries.' The first value is the left boundary, and the second is the right boundary; the drum note follows.
01:26:33.640
This can become another sound effect! I could change up the effects if I wanted the kick or the hi-hat to sound different. I can connect it to my existing audio library to trigger any sample that I wish. The trickiest part was detecting all hits and making a way to do them with two hands at once.
01:27:14.000
I needed to spawn threads for both hands so they can run together, and while they may not be running at the same time to the human ear, they’ll feel like they are!
01:27:52.160
I made this thing and would love to collaborate with others interested in doing something like this. I love to meddle with Ruby and create music!
01:28:27.200
Hi, I’m Michael Hartl; I’m here to tell you about publishing the Ruby on Rails tutorial with Soft Cover. I’m curious to hear how many people here have read the Ruby on Rails tutorial or watched the screencast? Thank you!
01:29:01.520
The first couple editions of the Ruby on Rails tutorial were created using a hack-together eBook publishing system. Earlier this year, a couple of friends and I launched a more polished version called Soft Cover, which is optimized for the types of products I create.
01:29:36.960
The current Ruby on Rails tutorial website runs as part of this soft cover platform. During Matt's keynote, he mentioned this arrow syntax—let me show you!
01:30:21.520
This is actually running locally! Chapter 11 of the Rails Tutorial mentions this syntax for making lambdas. Matt mentioned it in the keynote—it’s called ‘stabby lambda.’ A real-time copy editing example! Readers of this book have been unbelievable. I get emails and tweets all the time from people telling me when they found an error!
01:31:13.360
In fact, I fixed a couple errors during the keynote yesterday because people were tweeting me! One of the features in Soft Cover is its publishing system with a low barrier.
01:31:50.560
With one command, you can update the live site. The Ruby on Rails tutorial is available for free in its entirety as regular web pages. Now it’s live, the arrow syntax is live on the actual website!
01:32:32.560
Let me show you the marketing page! Here’s a description of the book; there are product bundles and the testimonials, like that of Jimmy Wales. So this is soft cover and can support more authors!
01:33:15.480
We offer 90% royalty, which includes the 10% absorbed by Soft Cover for transaction fees. Really think more can do this, and find me online—tweet me or email me, I’d love to tell you more if you’re interested!
01:33:40.760
Thank you!
01:34:02.720
Hi everyone! My name is Pam, and I graduated a few weeks ago from a boot camp in DC! They asked me to become an instructor for the next cohort, which started yesterday, but I wasn't there because I'm here—and because this is better!
01:34:40.760
Initially, I wanted to talk about the imposter syndrome and how I was starting to feel that getting into the new job. But I changed my topic a few hours ago to what I call newcomer syndrome.
01:35:13.760
Coming to RubyConf is actually my first tech conference ever! I just wanted to discuss something that relates to that experience.
01:35:53.720
So what is newcomer syndrome? I see it as that feeling you get when entering a new experience or setting. It feels like you're going to say something stupid, or ask a dumb question, or appear like you don't know anything at all.
01:36:30.560
You fear that everyone will judge you and look at you like you're that person—'Don't talk to them, they're dumb!'—and you’ll feel alone and want to cry!
01:37:03.280
I was very lucky to have Brandon Hayes as my guide! He introduced me to a bunch of people, and we had some great conversations, but a lot of it I honestly didn’t know what was going on.
01:37:50.640
A bunch of new technology terms were thrown at me; I was smiling and nodding because I was too afraid to ask questions and stop them in their tracks.
01:38:26.920
So to face my fears, I decided to stand in front of you all to give this talk and voice my fear because I want newcomers to realize they’re not alone. If you’ve ever felt that way, remember we’re all feeling this way too!
01:39:12.560
Thank you!