RubyConf 2015

Lightning Talks



Extracto de la transcripción automática del vídeo realizada por YouTube.

- Hello, my name is Michael Hartl. You may know me as the author of the Ruby on Rails tutorial. I have two things to-- - - Yes, thank you! I have two things to mention. So, one of the things I'm working on right now is a series of prerequisite tutorials, under the brand of Learn Enough to Be Dangerous, starting with Learn Enough Command Lines to be Dangerous.

So the first thing I need is newbies. If you are a newbie or if you know newbies, I am looking for newbies to help me work on this series of prerequisites leading all the way up to the Ruby on Rails tutorial. The second thing is that if you are an expert on any technical subject, I'm looking for people to work with under the Learn Enough to Be Dangerous brand.

Learn Enough VIM to Be Dangerous, I've got someone working on. Learn Enough iOS to Be Dangerous. So if you have an idea for that please get in touch with me, I'm also interested in maybe writing a full Ruby tutorial at some point, but that's a huge project I'm looking for someone to collaborate with, so if any of this peaks your interest, reach out to me.

I'm available at [email protected] com, thank you. - And, breathe! Any other takers? One minute talks. Usually we get one or two. - [Voice from the crowd] I got it. - Alright, come on up. You're on the list, right? - [Voice from the crowd] Yeah. - Okay.

Maybe I should allow anybody. Who's got the fuckin' mic now? No, um. And what's your name, sir? - I'm David Bach. - Dee-vid Broke. - I'm also speaking tomorrow, so. Okay, this was originally a seven-minute Toastmasters talk, so I'm gonna try to do it in a minute.

In 1922 a woman in Waltham, Massachusetts who ran a restaurant was making butter-drop dew cookies. She ran out of cocoa so she chopped up a chocolate bar, put it in thinking it would melt. It didn't. She accidentally invented the Toll House chocolate chip cookie recipe.

She ran the Toll House restaurant. In 1938 Andrew Nestle showed up, said, "Hey. " She was popular for the cookie among other baked things. Said, "I would like to buy that recipe from you, and the name," and he paid $10,000 and a lifetime supply of chocolate, and then he put it on the bag of chocolate chips for free, and every chocolate chip manufacturer copied it.

Why would he do that? This is the original open-source idea. He open-sourced the chocolate chip cookie recipe because he was selling chocolate, not selling the recipe. If he sold more chips, if he sold more chips for everybody, it raised his bottom line. So the idea here is you can use that story to convince your management to open source stuff that is not critical to your business infrastructure.

Open source stuff that, you know, give back to the community. We all rely on it, thank you. - Very good job! Excellent! Superb, in fact! I'm even gonna pronounce your name correctly. David, good job. Such high praise. Any other ones? Yes. Come on up. - Woo! - Woo! Everybody up! Up! Up! Hey! Stretch! We're all stretching! Woo! Happy Monday! What is the day today? Monday? - [Host off-screen] Ah, yes.

- Monday! - [Crowd] Yay! - Great! Monday hug. Alright. Hello? You can stand the whole time and clap if you want. That's pretty, pretty, yeah, I know. I'm here all night. My name is Benjamin Fleischer. I am a Rubyist. That's because I get paid to do Ruby. That's how I think of myself.

I wanted to share two interesting things with you. They're interesting by my own opinions, here is what they are. One of them, is, Ruby, if you've ever had an issue with string encoding, particularly if you live from the dark days of 1. 8 to 1. 9, things blow up.

So I did some work on the Rspec library to make this easier and basically not blow up. If you're interested in, if you've ever had problems with strings, of gen install encoded string, problem solved, use that, it's gonna evolve along with Rspec. Other thing, if you ever wanted to see a one commit, one line commit to rails of one character deletion, that's a commit that I made, and I have another example of other commits that are very small that you can make to things like rails, whatever, if you go to my speaker deck, slash BF4, that's my github, you can see that, and that's I think all the time I have, and that's why I went now because I'm really far down the list.

Happy Monday. - Thank you, Benji. So without further ado, if I didn't say this before, I will be mispronouncing everyone's name. That is in fairness to people whose names I cannot pronounce. So the first one is Stevie Down, Down-dee. Yeah, let's just go with that.

Go ahead. - My first sentence says, "My name is Steve. " How did we pronounce it? - [Host off-screen] Yeah, that's a good question. - It's okay. My pseudonym is Captain Downer, so just call me Captain Downer. - [Host off-screen] Alright, Cap! - Okay. - [Host off-screen] Floor is yours! - This is my ninth Ruby Conf, and they seem to get bigger and better every year, thanks to the great folks who run it.

Big kudos. I've written a web app called Tommy Talker that will help, with help from the open source community, can be a complete universal translator. It's going to, and currently supports 26 languages. All the phrases appear as links in your chosen language, and when you click on the phrase, which is a link, it speaks it, currently only in English.

I haven't a clue what'll happen if you all try and log on to the app at once right now, because it hasn't been stress-tested and it's on a single server. It's a dedicated server, but even so, you might wanna try this after the show. But you can try it now, and if it works, it works, and if the server blows up that's fine.

- Sorry. - I can always reboot it. When you access the site the default language is English. There's a scrollable drop-down menu for selecting languages, and I explained what happens. Once you select the language it immediately translates the text into your chosen language.

I originally wrote this as a touch-and-speak application for my brother who unfortunately has a chronic disease that is slowly causing him to lose his ability to speak. All of his smarts are still gonna be there, but he's not gonna be able to move his mouth.

So I tried to come up with something that he could use to communicate that didn't involve typing, because he's not a computer guy. It's just simple, touch, and it speaks. So it's very easy. I have to give thanks to Robert Clem, who a lot of you know from the Ruby talk group, because he corrected the Google-translated German strings for me, to be correct German, and I also had a guy called Simon Courtois, who's in the Paris RB user group, who I just contacted via email.

I contacted the group and they had a guy that was willing to do it that was fluent in both English and French, so right now I've got two balls-on right phrases, but I still have to have recordings of those phrases in French and in German, and in 24, uh, 23 other languages.

So I'm looking for volunteers that speak a foreign language. They don't have to be bilingual but it'll certainly help. And the design is eventually gonna evolve, where you can pick a source in a target language. Once I have all 26 languages recorded, you'll be able to present the phrases in English and the output can be in Spanish, or Estonian, or Russian, or Japanese.

And it's just a simple, this is kind of a niche market, because Google already does this, and I basically used Google Translate to do all of the phrases, but I was always, I was always, I was a Star Trek fan. I was a Trekkie, and the universal translator has always been one of those just not quite there yet goals, but we're so close to it now, and Google does such a good job of it that they're fine.

But with Google, you still have to type stuff or you have to speak stuff in. If you lose your ability to speak, you can't speak and have it translate and speak in another language. So this is sort of on a different means. It's really more, like I said, I originally started out for people that couldn't, couldn't actually move their mouth and speak.

So instead, they'd point at what they wanna say, and the computer or the phone or the tablet says it. The project is open sourced on GitHub and the exception is the mp3 data is redacted, for GitHub size req, I had thousands of mp3 files that just got useless as, to being stored up on Google because it just didn't work well, so I've got all the mp3 files at home that I'm willing to share with anyone that happens to contact me, so they can actually have a working copy of the file if they download the source code.

But the source code's there, it has every line of code in the file, and everything that it does is kept up to date. If you know someone who speaks a foreign language that would like to contribute to open source, they don't have to be a computer programmer, they have to be able to have access to a microphone and some computer, or some recording device that'll record the files, preferably in mp3 format.

It'll just save me some extra, extra work doing file conversions. And if you do know someone that can contribute, my email, Oh! You didn't tell me my screen went off. (loud music begins, nearly drowning out the speaker) My email account is Captain Downer on gmail, Okay, I'm done.

Thank you guys! - [Host off-screen] Thanks, Cap! - Have a great RubyConf! - Hello RubyConf, San Antonio. Everybody hear me okay? Excellent. It's good to be back again. So we're a large J Ruby shop, running a big production system, and this is the latest open source gem that we have available.

Give it a try, have a look, see what it looks like. So, RocketJob. So we're gonna jump straight into some code. We don't have much time, so we're gonna create a simple job called MyJob. It inherits from a RocketJob job, and simple method perform and it's gonna do something.

Now the key thing to look at is when you wanna create that job, it's simply MyJob dot create, bang! It's not the complex APIs that we have to do with other systems. This is very simple like you do with the ORM active req (mumbles) type models. So that's it, you've created your first job and now you've run it.

So let's add some attributes to this job. The traditional ways you can add some random hash or some of the parameters that input the form, but in this scenario what we can do is actually define a key. So if we have a look at this line, we can define an attribute within the model.

Now I'm gonna add a file name, and define the type string. And again, so if I wanna kick it off, all I'd do is I'll say MyJob dot create, and I'll say file name, data dot csv. Validations. So now that we've been able to create this job, we've given the file name, we'd want to run all of our regular validations against it.

What's the point of kicking off a job if we cannot validate that all the parameters are done and correct before we kick that job off? We want the end user who is actually creating the job to see the failure. Note you'd have to dig through some logs or back-end system to find it.

So you can see, any of your validations. I'm sure you're familiar, all of the regular validations that you can do, they're all there. And again, I just say, MyJob dot create, you'll see at the bottom it doesn't work, immediately it comes up with the file name can't be blank.

So immediately MyJob has been validated. Job Status. So how many of you have kicked off a job, go into the back-end system, and okay, what's happened to it? How do I find out what's happening to it programmatically? Very often the different API is difficult to use, you've all used active req with active models, all you do is, after you've created your job, go and ask it for its state.

So before we create the model, job dot state, okay, it's queued. Now I do a job dot reload dot status. That reloads it from the data store and I have the current status of that job immediately available to me. You can see this state is running, and eventually it will go to completed.

So I can ask the job, "Have you completed running yet?" And it will come back as true. And then another key element, how about getting back the result of that job? I send some work off to go do something, I wanna know what that result was. I don't wanna just store it in some database or somewhere else, and have to try and figure out where it is, give it back to me.

And this will do that for you. So status, you can see it queued, running completed, and the output. So now we've been able to do a simple job. We've given it a file name, it ran off, and a single worker somewhere is gonna pick up that file and process it.

But what if I wanna take a million-line file now? It's csv data, and I wanna use 500, or 1000 servers, all workers out there that we wanna process that data. That's gonna be a lot of work in a lot of systems. In this scenario now we've created a CSVJob, and we just derived it form a SlicedJob.

So the difference here is we could set some defaults up, so the first thing I'm gonna say is collect output, because I wanna keep the output of that CSV data. Then the other thing is, now is the perform. When the perform occurs, it's gonna get that line. So remember, we had a million line CSV file, each job now, each, these workers are gonna get that single line out of those million lines, one at a time.

It was real easy. I can pause that line, and in this scenario for this test, we are just going to reverse it. So we take the row, reverse it, send it back as a CSV data. The CSV processing is all done within the workers themselves. I'm not doing that as my loader process or anything like that.

It's all spread out. So this is how you define the job itself. Now we have a simple job that will run across hundreds of servers or whatever you want it to be, and it will do it concurrently at the same time on all those boxes. So how do we kick that off? So we wanna do the upload job, we've got a CSVJob, or we just say job dot upload, give it the file name, it breaks it up, sends it all out.

When the job's finished, I just download it. It's that easy. So some more features, some of the enterprise features in the RocketJob Pro, encryption. I'm uploading sensitive data. The CSV data might contain Social Security numbers, bank account numbers. I need to be able to encrypt that.

Immediately it's available to you. We have a UI, a web UI, all open source. You can try the site. You can see the status of every single job in the system. And to summarize, that you can write a stand-alone, you don't have to run rails, you can run with rails, you've got the web UI, and another critical aspect is that it has business-based priorities processing, along with their Enterprise features.

And this is in production today, and it's been (mumbles) for over a year, so you can trust it. That's it, from my side. And join us on the gitter chat session if you have any questions. gitterim RocketJob support. Thank you. - [Host from off-screen] Thank you.

- Alright, hello. I'm no one of consequence. I have about 50 slides, so we're gonna get right into it. Ideas are everywhere, and when we encounter a new idea, we respond in different ways depending on how it fits in with our existing knowledge. And you can tell this is a thought-leadery talk because I have clouds on my slides.

Some ideas are those that we've seen before and already adopted, and we just carry on. Some ideas fill gaps in our existing knowledge, and we easily adopt those. Other ideas are just kind of on the fringe of what we already know. We'll think about those a little bit more but we'll probably adopt them fairly quickly.

Then there's those ideas that are way out there. Some ideas are so wild that is absolutely and totally and in all other ways inconceivable that they could ever work. We almost always reject those ideas out of hand. Why do we do that? The main reason is optimization.

(digital recording glitch briefly cuts out speaker's words) and only so many things we can learn. We're swamped. We run ideas through a filter, and the inconceivable ideas-- Seth Godin says it very well on a blog post. Another reason we might reject these inconceivable ideas is because they wouldn't work in the real world.

Jason Fried and DHH wrote and reworked, So maybe this word doesn't mean what we think it means. What happens if we adopt these ideas? Ideas change us, and the inconceivable ideas have the potential to change us so significantly that the world becomes a completely different place.

The same blog post by Seth Godin, he goes on to say, We need to spend more time on these ideas. I'm gonna give you a few examples of some inconceivable ideas that used to be inconceivable that are now widely accepted, just so you get an idea of what I'm talking about.

[ ... ]

Nota: se han omitido las otras 8.230 palabras de la transcripción completa para cumplir con las normas de «uso razonable» de YouTube.