Miles Forrest

Lightning Talks

Help us caption & translate this video!

http://amara.org/v/FG9z/

RailsConf 2013

00:00:15.980 oh cool that works hi hi everybody wake
00:00:20.990 up I'm Nick oh hey those are my slides too I'm cute on Twitter and I'm gonna talk about open hack I really love
00:00:28.550 programming programming is like my favorite thing to do ever and I'm like this kid when I'm programming and I'm
00:00:34.640 banging my hammer and all of a sudden there's stuff that's just flying out of my machine that oh come on do it kid so
00:00:41.090 like this is what I really I love I love programming and one of the things I found out when I lived in Boston was
00:00:47.990 that there's a simple formula that Pizza + B R equals code so if you provide food
00:00:53.150 and you have drinks for some reason that's very productive we used to have Boston RB hack fests that we would do
00:01:01.190 this formula worked and this is how rubygems.org started a bunch of other stuff and I wanted a way to do this
00:01:07.670 hackfest thing over and over again I move recently moved to Buffalo New York and I wanted a way to have that same
00:01:13.909 kind of feel that well I didn't really have in a in a smaller city and I basically wrote down a bunch of rules
00:01:20.149 for doing hack fests and it's called open hack and I'm gonna tell you what it is so how does it work it's I also like
00:01:30.350 gifts anyway so first of all someone must organize it someone this is me in
00:01:36.139 Buffalo one one person hopefully it doesn't loop okay good
00:01:41.780 so one person puts it together and they're kind of the point of contact let's keep going they organized release
00:01:48.049 intros and this is super important and they're not awkward I promise the intros are important because he's just gonna
00:01:55.069 keep going okay you got it foot not dolphins here okay so the intros are
00:02:00.380 important because I'm gonna go to the next point okay
00:02:07.590 I should have put a pause button on this alright alright so you want to say who
00:02:14.970 and what you are in the intro so you want to do them every night because that brings new people into the groups and that keeps like if you ever go into a
00:02:22.200 room and this is a bunch of nerds coding and you don't know what to do and you don't want to say hi cuz you might interrupt you just want to do an intro 7
00:02:28.830 p.m. for example in Buffalo we say who you are what you're gonna work on working alone is ok this guy's playing
00:02:34.560 baseball and space by himself ok ok alright
00:02:43.440 working alone is ok you can ask for help that's ok too if you have an open source thing or you just want help with the
00:02:49.440 work problem or you just want to get some work done that's cool you can pair on something these two are hacking the network and they're typing on the same
00:02:56.040 keyboard and so this pairing that
00:03:01.530 something is fine you could just talk and drink too cuz that's ok so like you
00:03:08.489 need to do this ok so usually we wrap up after two hours other groups have been
00:03:14.430 trying longer I get sleepy I want to go home and see my dog sponsors help a lot
00:03:21.750 too we have 37 signals and Engine Yard have been helping out with the Buffalo group findings people that can just it's
00:03:27.480 like it's like yeah less than a hundred bucks to pay for a pizza and maybe some beer so just doing that helps and then
00:03:32.849 you have to worry I'll do I have to go home and get food or whatnot so we run this every two to three weeks in Buffalo
00:03:43.670 this is a thing it's really good I found
00:03:48.900 out that there's a bunch locally been Boise Logan where I don't know where Logan is sounds cool
00:03:55.410 Tulsa Albuquerque San Francisco Santa Barbara and maybe your city these are just the ones that are locally we're in
00:04:00.660 sixty plus cities I want to get to 100 by the end of the year so if you're interested in organizing one that'd be
00:04:06.330 awesome there's also plenty on the East Coast there's plenty and Europe already in some in Asia it's mind blowing all I did
00:04:12.420 was write down about all those rules but except the funny gifts so if you if you're interested on you now go to open
00:04:18.000 hack that github that I oh I also have announcements some announcements for groups on Twitter and that's all I got
00:04:28.700 okay I can't I was lying I have I have okay I had 20 seconds I'm gonna use
00:04:34.830 those I'm throwing a ruby conference with a bunch of other people from the Western Europe Ruby group in Buffalo New
00:04:40.470 York and September 20th and 21st come to come to Buffalo we're gonna talk about
00:04:46.350 Ruby at nickel City Ruby calm thank you
00:04:52.910 alright I'm a professional I can wait to my there's 42 speakers and only six
00:05:00.600 bowls of water so um
00:05:10.370 anyway so I'm a big fan of what Heroku
00:05:17.550 built and unfortunately as I tell the story I'm a bit of a sad panda we can't use that so become really interested in
00:05:24.690 in Cloud Foundry so I I now work at a company create a company called Stark
00:05:29.970 and Wayne which I am unreliably informed is the first and only company with with
00:05:36.000 two fictional founders so board meetings are exciting since I'm talking to myself
00:05:43.730 and but the good news is I won't be alone they won't be alone you know soon
00:05:50.340 are we getting my fancy oh one visa and for you Americans who perhaps don't need
00:05:56.010 visas since you're American if you're not following along the o1 visa is that
00:06:02.760 the alien of extraordinary ability so so
00:06:11.130 fancy dress day will be pants on the underpants on the outside gonna be awesome so one of the as I as a
00:06:19.080 consultant what we were working for is were working for is a large enterprise company and they wanted to do agile they
00:06:24.660 want to do pass whole your really cool ideas what they're doing because if I feel really bad for all the people
00:06:31.080 who've ever tried to do agile but haven't had has I'd like to know how
00:06:36.510 many careers have been destroyed by yes we should do agile great we will deploy that in three weeks so unfortunately as
00:06:44.340 a we have a very hard rule around we want everything in our internal private clouds across around the world but that
00:06:51.420 breaks my cardinal rule of everyone deserves nice things just because we
00:06:56.850 work at a company that has cubicles doesn't mean we don't I don't use a cubicle that's a terrible idea but they
00:07:02.640 do exist you know there are other people in them I don't know where they come
00:07:07.740 from and where they go but every day they turn up but we deserve nice things we should be allowed to have a hurricane
00:07:13.980 I think that's that's appropriate and so fortunately there is one it's called Cloud Foundry and the challenge is
00:07:22.449 is that Cloud Foundry is our currently not necessarily the easiest thing to run yourself where we work we actually
00:07:30.039 outsource it to a company called tier 3 and they set up and script all out you know Cloud Foundry running and I just
00:07:36.219 think it's entirely inappropriate what's they must mean one of my pet peeves in the universe is companies that say yes
00:07:43.389 she is our open source thing and you know running it is left as a reader you
00:07:48.789 know an exercise to the reader and I think that's inappropriate and so it's
00:07:54.370 been a pet project of mine to to sort of make running Cloud Foundry really really easy so got it down to two commands and
00:08:01.330 sorry two tools and six it's now five commands so that was very exciting you weren't even watching and it went down
00:08:07.029 to five and those are a tool called Bosch bootstrap and Bosch Cloud Foundry and I'm not gonna even tell you what
00:08:13.779 they are I'm just gonna show you the commands to run because I honestly don't think you need to know you just want
00:08:19.990 Cloud Foundry running cuz you want your own Heroku so these are the commands you
00:08:24.999 basically install a gem called Bosch bootstrap you run the next command and if you're following along you figure out
00:08:30.069 you could run the command that comes after that one then you run the one that comes after that and then you run all the other commands
00:08:37.719 that I haven't mentioned and they are relatively interactive
00:08:43.180 they're gonna ask you some intelligent questions like I don't know what's your Amazon credentials that's a good one now
00:08:49.600 if you've ever used fog it'll actually go and find your credentials and suck them up and just use the middle askew or
00:08:54.790 you might wanna use OpenStack ultimately it's gonna ask you about DNS and all sorts of things that's gonna prompt you
00:09:00.280 through and the reason I built this was I had written documentation and tired of
00:09:06.190 writing documentation so I just wrote a tool that just made you do it yourself you might wonder what is this what you get or what you get is some boxes
00:09:14.010 they're square if you've ever wondered what Amazon's boxes look like this squares and so it's kind of cool running
00:09:20.560 your own Cloud Foundry for 30 cents an hour is pretty cool you might want to run some services you might have run DJs
00:09:26.530 or like where the Dinos run so to speak and it does all of it and little commands to help you along so takes
00:09:34.120 about three hours so you can imagine we're not gonna do a demo now thank you very much a show of hands of people who
00:09:44.020 hate show of hands at conferences this talk is dedicated to you all questions
00:09:49.450 will be rhetorical you may have heard of technical debt I'm here to talk to you about technical intimidation
00:09:56.050 do you know rails do you know all of rails do you know why we like the word
00:10:01.120 active so much but not so much that we couldn't call it active mailer can you program concurrently can you
00:10:09.490 asynchronously stream hypermedia I don't really know what that is but Google Image gave me this in cloud
00:10:14.500 Nick's up there so legit can you inject sequel into a cannoli do you know how to
00:10:20.650 get closure with your monads again Google image I don't know but I guess it
00:10:25.720 has something to do with the futility does anyone understand what this is in
00:10:31.440 JavaScript do you know they're actually putting JavaScript on servers these days
00:10:38.250 it reminds me I have a Kickstarter for hosting Oracle on my browser so if you've got any loose change
00:10:44.740 does anybody know what Adam Keys is talking about here do you know if you
00:10:50.240 take out all the buzz words from this post all you're left with is ASCII art of a troll face all these were taken
00:10:57.830 from recent Ruby and JavaScript weekly news editions does anyone here know all of this if you said yes you're lying
00:11:04.370 because I made that one up but seriously
00:11:14.680 recently a prominent member of our industry posted this on his blog and he said I was reluctant to ask a question I
00:11:20.120 wanted to be seen as savvy and on the ball and if you can relate to that I can relate to that so can Kent Beck but sometimes it's not
00:11:27.740 just that sometimes it's me and just technology and we're staring at each other and I just know it's just gonna be
00:11:33.980 this big pain in the neck and it's just gonna leave me with this feeling of shame now there are two traits common to
00:11:41.390 people one is adaptability the other is shame and when you combine these you get hoarders now if you're laughing while
00:11:49.280 there is a bit of the ridiculous in that picture it illustrates how powerful shame can be in our lives and while it
00:11:54.410 may not play out so noticeably for most of us shame can shape our thoughts and feelings in similar ways with these
00:11:59.870 sorts of messages just kind of running around through our mind all day Jerry Weinberg was once asked what do
00:12:05.750 you consider the most important thing for a programmer to do when beginning a new project I think each should be sure they are in good physical condition
00:12:11.750 without nagging psychological problems now these same messages are nagging
00:12:17.480 psychological problems and since shame does have a way of robbing our perspective and convincing us we're stuck let's put what we do back into
00:12:24.650 perspective software is hard Steve McConnell Steve McConnell
00:12:30.490 paraphrasing Dykstra says computing is the only profession in which a single mind is obliged to span the intellectual
00:12:36.740 distance of nine orders of magnitude Erik's Inc and his blog wench detailed 46 levels of abstraction his dotnet
00:12:42.860 application has to deal with Raymond Shan well-known blogger from inside Microsoft once went through a detailed
00:12:49.100 post about why it's a bad idea to delete a critical section while you're in that critical section but after all of these
00:12:54.740 reasons why not to do it concludes with but maybe there's a flaw and my logic yon mix cough ski talks about
00:13:01.310 good design being a fractally hard problem the more closely you focus on any given feature the more rough edges
00:13:06.320 you find a Polish and the only sane approach is to iterate in an area until you've got it to a place you care about
00:13:11.750 and then move on recently NPR had an article about how hard it is for professionals to spot
00:13:18.020 problems are trained to find so if 83% of radiologists cannot see the gorilla
00:13:23.810 in this image if garry kasparov can blunder away his queen in a game where he can see the entire board but I can
00:13:30.830 only see two thousandth of a percent of my codebase on the screen at one time cut me some slack
00:13:39.670 but what about all the things look you're not going to be able to learn all of the things and it doesn't matter at
00:13:45.770 least not to people like Martin Fowler given someone with good broad design skills and someone who only knows your
00:13:50.990 platform really well which one would you prefer Martin will take the one with broad design skills but what about everyone
00:13:56.900 else who does know everything or seems like he knows everything well the trick
00:14:01.910 is don't be intimidated by these people learn from them Pat Metheny gave advice to his advice for young musicians is
00:14:08.390 always be the worst guy in every band you're in if you're the best player there you need to be in a different band and finally a quote from Dijkstra we
00:14:15.980 should do a much better programming job provided we approach the task with a full appreciation of its tremendous difficulty that we stick to modest and
00:14:22.370 elegant programming languages and that we respected the intrinsic limitations of the human mind and approach the task as very humble programmers one last
00:14:30.500 thing brandy Brown has some wonderful TED talks on the topic of shame go Google Ted shame and you'll find him a strident had a great talk at Ruby
00:14:36.830 Midwest earlier this year touching on the subject as well this is me on the web peace out and flying chunky bacon hi
00:14:46.040 everybody my name is John McCarty I am a ruby developer at Life Church TV we are a church in Oklahoma City I'm on the
00:14:52.310 interwebs at Jay mccurdy and I'm going to avoid the water I don't know what dr. NIC has done to it if at some point in
00:15:02.240 your in your programming career you're going to get to a point if you haven't hit it already of asking yourself this
00:15:07.370 question what's the point what am i doing for me it came in 2010 I was working in a
00:15:13.370 start-up in a b2b startup in San Francisco and one day I think on the BART somewhere between the East Bay and
00:15:19.850 San Francisco and I asked that question and it screwed me up in a good way and
00:15:25.420 so I started asking myself what is the point of all this stuff I'm doing I was working on an app that really at the end
00:15:30.800 the day wasn't creating any value I wasn't doing anything important and and so I started by asking myself this
00:15:37.610 question what do I value Who am I what what matters to me is that my family is
00:15:44.120 that money is it notoriety what was it and it was it was a really good question
00:15:49.610 for me to ask and I think at some point you you understand that all of us there's an intrinsic need for us to
00:15:57.529 belong to something for our work to matter we want to know that we're part of something bigger than ourselves in
00:16:04.759 fact you can even see this in in research especially in this generation seventy-five percent of young people
00:16:10.910 polled aged 25 to 30 which is narrow especially since I'm over 30 last year donated it
00:16:17.959 causes 63% said that they gave their time to volunteer this is a huge jump over previous generations I think this
00:16:24.829 is something that we're coming to grips with and we're understanding that this is part of our lives we want we want something else something bigger so for
00:16:32.240 me what's my purpose when I was in San Francisco I came across a guy who told me about this church in Oklahoma City
00:16:39.050 not on the top 10 list of places I ever wanted to move to and it's a Christian Church using technology to reach the
00:16:45.769 world and change people we give we build software for their churches we give it
00:16:50.930 away for free the biggest one if you're if you're into the whole Bible thing and you have one on your phone this
00:16:57.230 YouVersion Bible app is one thing that we do it says 90 million installs to date so that was my purpose and so my
00:17:04.880 challenge to you for you today is what's your purpose what motivates you what brings you fulfillment and the first
00:17:10.819 place the best place to begin is the beginning so take a look at your values what is it that is important to you put
00:17:19.010 them in order to prioritize them in a block if you have to find find
00:17:24.709 purpose in the work that you do managers make sure your developers know why you're doing things even if the the
00:17:29.840 project as a whole isn't a huge vastly important thing there is some value in
00:17:35.270 it and you need to tell your developers what it is and keep reiterating it developers if you don't have a great
00:17:41.870 manager find the work and find the purpose in the work that you do but my
00:17:48.169 work has no purpose you may say here's a couple ideas first of all find it again like I was
00:17:53.720 saying the project as a whole doesn't have to have massive purpose but even this specific feature that I'm building
00:18:00.140 is going to save my users time it's gonna is gonna change my someone's life on the other side of the internet that
00:18:06.640 there's purpose and value to that hold on to that treasure it in my case do
00:18:12.559 something drastic you're working somewhere and for all the managers here I'm sorry I'm about to say this if you're working somewhere and you
00:18:18.470 come to this point if what am I doing with this leave go somewhere else that
00:18:23.510 fight that that connects with who you are and what you value thirdly if none
00:18:29.059 of those options work if you have to stay where you are to find purpose outside of work there's so many things
00:18:34.159 that you can do with your time with the talents that you've been given as programmers as developers as people that
00:18:39.950 understand what a class is there are things that you can do outside of work whether it's finding a non-profit in
00:18:46.460 your community that you can give some of your time to give some of your programming time to gosh there's so many
00:18:51.470 terrible nonprofit websites please help them there are organizations that that
00:18:58.250 will allow you they're very obvious examples where you can use your skills to change the world around you and
00:19:04.700 finally finder create by just know that
00:19:11.179 the code that you write today isn't gonna be around forever most of the code that I write wrote three years ago isn't
00:19:17.029 alive anymore but the difference that you can make in someone's life through the code can last a lifetime
00:19:22.399 thank you very much hello thank you the presenter display up here is
00:19:28.240 fantastically better than any other than any of the side room so the keynote speakers that's why they're able to pull
00:19:34.220 things off and look so fancy it's they haven't like seven screens facing them right now with everything that they're about to do including that one which is actually
00:19:40.920 backwards and it's the largest one so it's really confusing for the presenter to think that they're projecting backwards slides to all of you
00:19:48.570 so when I sign up for the lightening talk it said it was gonna talk about code climate but I figure it's it's 2013
00:19:54.090 and it's Ruby it's a ruby conference and everyone wants to hear about security because starting in January security and
00:20:01.620 Ruby was like oh my god we're all screwed what are we gonna do and so I
00:20:06.930 give talks about security but I tend to talk really fast because security is a really deep topic and there's like a
00:20:12.180 thousand things you need to worry about so I figured you know how can I give a quick lightning talk about how to secure
00:20:17.430 your app in three steps and that's what I'm tell you today and then there might be some stuff at the end so the first thing you need to do if your rails
00:20:23.520 application developer and you want to have security on your applications you need to require authorization so this is
00:20:29.280 an example of that each step is going to come with one example so make sure that
00:20:35.010 you build an authorization form and and
00:20:40.800 put that into your application so so once you've built this authorization component it's all about context right
00:20:46.560 so you have this you've built this padlock and you need to install it so be sure to wrap that all the way around
00:20:52.470 your application so that without the key you're really not gonna have any idea
00:20:58.740 what to do with it and then now you're likely to be secure but you really want to know if someone's trying to attack
00:21:03.960 you so you're want you're going to want to install what the professionals call an intrusion detection system so I'm gonna give you this is what that looks
00:21:10.290 like now when somebody is fruitlessly
00:21:15.660 trying to break through that lock you'll at least have some footage of them trying to do that so now that your apps
00:21:22.710 are secure I want to talk a little bit about security monitor by code climate
00:21:27.780 which is that which is a feature that we launched just just about a month ago or yeah about a month ago now that can help
00:21:33.960 you try to actually secure your rails applications basically you hook your repo we hook up to your github repo we
00:21:40.020 scan for about 20 different types of security vulnerabilities we generate really usable reports like this that just tell you where your about to get
00:21:46.110 screwed so this is tracks which is an open source app and
00:21:51.460 if there are any tracks developers in the room I'm sorry for what I'm about to do to you because I didn't really think
00:21:56.470 it through that I probably shouldn't demo this security vulnerability in your app but now it's too late
00:22:01.990 so I don't have another example I apologize so here's what code climate
00:22:10.870 can do if you or will have a developer who maybe doesn't realize that yamo might be an alias for eval in Ruby and
00:22:18.220 they write and they write a line of code like this which just takes whatever you
00:22:23.500 know conveniently takes whatever user sends to the website in the form of llamo and runs it through llamo load
00:22:29.610 just in case somebody needs to install some packages on your system that you forgot to install this controller will
00:22:36.789 help them do that very easily so when your developer inadvertently adds a
00:22:42.880 substitute patching process to your application we can actually let your
00:22:47.950 team know about that right away and it all sort of comes down to an email like this that we can send out to your team
00:22:53.890 saying hey it looks like somebody added a line of code that does it yeah mold out load with params and you probably
00:22:59.529 want to be aware of that before that goes out to production so that's what the security monitor feature by code
00:23:04.570 climate does I started code climate a couple years ago and I've been working on it since we'd really like for you
00:23:10.390 guys to check it out and we can try to you know help you out with with tracking down issues in your application it's
00:23:15.429 free for open source so if you guys maintain open source tools and you want to try out code climate for it you can just set them up you don't even need to
00:23:21.100 create an account and then just like github if you have private projects you can set them up and run it through this
00:23:26.289 and we won't publish your security issues to the world like I just did two tracks so somebody gave a talk about
00:23:33.399 your first pull request maybe somebody can patch can patch this issue four tracks before the end of the conference
00:23:39.039 and I'll take credit for that that's all I got thank you very much have a good one
00:23:44.610 hi my name is sandal 'him i'm from rails factory this is my second railsconf
00:23:50.230 coming up to five years and I'm the only one speaker who's taking photographs from the stage I don't know I don't do
00:23:57.159 it this craft things often I do it more informally okay choosing smartphones are pretty tough
00:24:05.470 and we have all made our choices okay so how many people yeah a show of hands how
00:24:11.860 many people love their iPhone iPad iPad minis well quite okay it was stablishing for
00:24:19.299 you okay how many people love their Samsung tablets all their s one two
00:24:24.850 three four five right yep okay and there are people who have
00:24:31.059 made choices that they'd always show what choices they have made they would have got Nexus they would have got a blackberry could be a Windows Mobile god
00:24:39.190 forbid but these things happen these are accidents people people buy it okay V developers V are very subjective
00:24:45.909 we want to roid program in Ruby V or nap right program in Python we all are very selective okay but if you're in
00:24:53.230 consulting business or if you are into a SAS product and suddenly your customers use all kind of stuff your customers
00:25:00.820 expect a leave of a choice what which pros are people were using is somebody using ie6 how do you make it work on it
00:25:07.690 now if you build a native application on iphone you are testing on over three to
00:25:13.240 four devices if you are an Android and if you want to cover nearly every the
00:25:18.580 market there are at least four hundred phones available in America now different screen sizes different resolutions different versions of the
00:25:25.179 operating system okay so again the problem comes if you are doing mobile web and new customers want you to
00:25:31.059 support all the device or possibly all the devices but nobody wants to pay for testing the other Possible's right flow
00:25:38.649 of free code don't write bugs right you're not paid for doing that it
00:25:43.809 happens it happens okay so I don't accompany I have a lot of developers but no customers willing to pay for testing
00:25:49.750 so I said what can I do so we spent some time looking at what is possible so we
00:25:55.299 build a small robot it's currently powered by Ruby it's scripting correctly but I will run
00:26:00.820 a small video and we can have a question right there's no audio just see what it
00:26:07.090 does it's a currently too small screen somebody's clicking on the link and okay
00:26:13.419 so it's it's a Nexus phone
00:26:20.320 it's a reference from a 3d printer we took something on it we got a stylus it clicks on it all right
00:26:26.620 I would have loved to show Angry Birds high score game but I wouldn't do it
00:26:31.810 too many people have patented it I will look like a clone copying it okay so
00:26:43.900 long term plan we would love to automate it even further maybe replicate the keyboard with a Bluetooth simulator
00:26:49.810 something it can test iPad it can test iPhones couple of devices I'm trying to
00:26:56.290 write a DSL it's still not standard it still can do image recognition I'm looking at OpenCL and other ones
00:27:03.270 currently I'd not put any code open source I have not thought about if even manufacture it or put in a Kickstarter I
00:27:09.730 don't need their supporting hardware anymore maybe should good indiegogo but all these guys use rails I love that
00:27:14.800 part all right so yeah you will see one game here and a long term you can
00:27:23.290 simulate put random stuff so-called monkey testing you can do it with the
00:27:28.510 robot which does random clicks somewhere right yeah so is it scoring a point so
00:27:37.630 this is a laser which targets a particular point the black point dot if it hits it you score
00:27:49.220 so level three
00:28:04.330 cool though it can test mobile web applications it can test apps but even
00:28:10.539 three you write your own code the ideas right the test cases or recorded test cases whatever you do in phone and
00:28:15.940 repeat it right what about about robots is they don't need bear to run they
00:28:21.820 don't need Pisa probably they don't know ask any insurance are required no travel
00:28:27.429 no vacation and every year it go into place with the faster one right so no
00:28:33.309 ego right it can work on any device it doesn't say I will only work on a Mac or iPhone or whatever right so this is what
00:28:39.669 we are built so how many of would I'm not saying I'm gonna sell it but how many would like robot like this to save
00:28:46.000 their time sure fine sir thank you guys so if
00:28:51.159 people like it it succeeds thank you hello my name is Miles Forrest and this
00:28:57.580 is cloning the Seattle Ruby Brigade Ruby and Ruby on Rails have a rich vibrant and growing number of conferences to
00:29:03.850 choose from from big multitrack events like rails copped a smaller regional judge confidences they all work to
00:29:10.149 support the community and that is awesome but the real strength of our community lies at the local level through Ruby
00:29:16.059 user groups or meetups or what our community likes to call Ruby brigades this is where people get things done
00:29:22.510 together in person to help each other want to learn to code need to help hacking our project do you dream of
00:29:27.580 building a software-as-a-service business like DHH maybe even buy a car like is someday ruby brigades exist to
00:29:33.610 help you and more importantly for you to help others but there's a big problem with Ruby you gates right now if you
00:29:39.100 happen to live near a large metropolitan area like San Francisco or Portland OR Seattle then there's probably a Ruby
00:29:45.909 Brigade new year that really rocks but I probably don't live near a big city in fact they don't I live in Chilliwack
00:29:52.149 British Columbia a little town way outside of Vancouver BC and the sticks where we have all sorts of wonderful
00:29:58.570 resources for aspiring web depilation developers like cows and corn I tried to build a room three times three times but
00:30:06.250 no matter how much work in planning I did I kept failing I kept failing and it made me sad with
00:30:13.330 no hope of her Ruby Brigade starting near me and desperation I decided that after work I would leave immediately at 4 p.m.
00:30:19.890 and drive well over 200 kilometers from Chilliwack British Columbia Canada crossed the border in the United States and into Washington State Drive all the
00:30:26.370 way to Seattle to the Seattle Ruby Brigade which meets every Tuesday night at 7:00 p.m. and then when it was all
00:30:31.950 over drive all the way back but it was really worth the drive Seattle RB was the first Ruby user group
00:30:37.650 in the world a group that currently maintains over 350 projects from just 19
00:30:43.020 people yeah that's a lot of code every single one of us in this room really
00:30:48.780 relies on the work they do we literally o our livelihood to these men and women the first few months I attended I hardly
00:30:54.000 talked to anyone but then I finally mustered up the courage and talked to Ryan Davis that's right Zen Spyder a man who
00:30:59.730 loves to hurt code I mean people are scared of this guy but it turns out that Ryan is a heck of a nice guy he offered
00:31:05.040 on more than one occasion to let me crash at this place if I was too tired to drive home I told Ryan about my three failed attempts to start a group so he
00:31:11.160 shared with me the secret of Seattle RB and how I might be able to clone what they're doing and it worked January 10th 2009 three people attended
00:31:18.390 the first meeting of the FBR B the Fraser Valley Ruby Brigade we specified the region east of Vancouver BC because
00:31:24.630 the cities out in the valley are too small to sustain a club of their own so we are now in our first year fifth year
00:31:30.179 sorry oh sure we're not very big but we have an average to four to six people out every week hacking on projects so now that we know it's possible to clone
00:31:36.240 Seattle RB even rural areas I want us to share with you what Ryan taught with me number one forget presentations do hack
00:31:42.750 nights instead presentations are a lot of work and if you're trying to build up a ruby brigade you seem to be endlessly chasing people to do a talk with hack
00:31:48.960 nights only one person has to show up no work no pizzas no incentives just hack on code number two bring a project if a
00:31:56.220 members are encouraged to bring a project they want to work on then show up wanting to create something rather than consume what does Heather's others
00:32:02.760 have worked hard to prepare this attention shift from being a consumer to being a creator has an interesting side effect of repelling recruiters and
00:32:09.360 people who want to look for someone to build their awesome idea so if somebody really wants to build the next Facebook
00:32:14.790 Instagram social media thing for peanut butter lovers we will help you with your project but we won't do it for you so
00:32:19.890 number three meet every week if you want to make progress in any project and you aren't working on at least every week
00:32:25.080 your project slowly fades so if you want to start a rubric eight especially a rural area just commit to set aside
00:32:30.270 about two hours one day a week you can meet just about anywhere or local coffee shop someone's house a high school anywhere with free
00:32:36.180 Wi-Fi if you end up being the only one there after a week so what you have it's still a hot project to hack on you never
00:32:43.590 have to chase people down or guilt them into attending every week the fact that people is busy they have lives outside of Ruby if people know that there's at
00:32:50.400 least one person meeting at one location every week to geek out and hack on stuff the likelihood that you have of growing
00:32:56.940 a microbrewery reggae dove one person into a full-fledged Club is very very high and that's it if you want help
00:33:02.610 starting a Ruby brigade here's my email address I got all sorts of things I could like to share with you like how
00:33:07.950 you can get a library of books not PDFs but actual paper guts for free so that's
00:33:12.990 how you can close the Seattle Ruby brigade and I've got a bow I got a few seconds so here's my dog Bailey one time
00:33:18.150 you got a purse stuck around his neck so
00:33:23.370 I'm gonna talk to you a little bit about an idea that's been in my head for a little while and it's kind of around the
00:33:28.890 idea of teaching an old dog new tricks see I'm actually part of a new
00:33:33.990 generation rails came about when rails was kind of the first programming framework that I really got into as I
00:33:40.470 was in high school I actually got to work on rails when I was in high school and that's 2006 actually was 2005 that I
00:33:47.280 actually got to do that I was so stoked to do that but that means that I'm part of a privileged generation I figured
00:33:52.890 that a lot of you whether or not your you're around my age or not you're probably a part of this similar
00:33:58.140 generation not necessarily by age but by the way we work how many of you work for a company that is less than five years
00:34:04.260 old pretty considerable number how about less than ten years old
00:34:10.850 okay so so that's a fairly considerable amount of you and that's the generation
00:34:16.500 that I'm talking to how many of you work for a publicly listed company a lot less
00:34:23.700 so I've had had the the privilege of working for a couple of publicly listed companies riding rails code and one of
00:34:33.360 the things that these publicly listed and all of these companies around the world are realizing is that software is taking over the world I I hold a firm
00:34:39.899 belief that in the next 10 years software is going well software already take is taking over the world
00:34:46.559 but in the next 10 years we're gonna see a massive uptick and that means one thing the developers are taking over the
00:34:52.230 world but see that's an amazing thing
00:34:58.200 for us because developers now I mean you've seen that job board out there you you can't walk two feet without a a
00:35:05.099 recruiter approaching you if you have ruby in your LinkedIn profile even if even if you mentioned that ruby in the
00:35:11.519 Sky with Diamonds is your favorite song you will get recruiter spam we are in a unique position and companies are
00:35:19.769 realizing that developers are holding the keys and so we've got this thing
00:35:25.319 it's come out of a lot of progressive companies but it's leaking out into the rest of the world and it's optimizing for developer happiness and I love this
00:35:32.160 idea I love the idea of being able to optimize so that I'm happy because you know what when I'm happy I'm productive
00:35:37.470 but you know what I don't think that developers are unique in that I think we should just optimize for happiness we
00:35:47.759 should optimize for the happiness of everyone in the chain everyone in the company and I think that we as
00:35:53.549 developers actually have a unique position to spread this idea we have a unique opportunity to spread some
00:36:00.630 cultural change we face a challenge however because you know what change is
00:36:05.970 hard a lot of us are working for companies that are young and that means
00:36:11.880 that we've got a head start because we have less entrenched culture to deal with however a lot of us and I include
00:36:19.500 myself in this are working for much older companies and that means that we have a considerable amount of cultural inertia that we need to overcome
00:36:25.670 cultural change is really really hard cultural evolution happens over time
00:36:31.920 it's glacial and and fast cultural change generally ends in considerable
00:36:37.289 rifts where people get unhappy and and it just ends in tears but I think
00:36:43.470 because we are in this unique opportunity as developers we have a chance the world is watching how we do
00:36:49.589 this as we optimize for developer happiness as we work towards higher productivity by actually being happy
00:36:57.450 about what we're doing love what we're doing and working in a better way the world is watching us we have a
00:37:04.530 chance to affect change not just for ourselves not just for our own industry but for in all other industries have
00:37:10.770 this opportunity and because we have hold the keys right now we held the opportunity to affect change but of
00:37:17.820 course change is hard I've worked through two companies and and tried to
00:37:22.830 affect some of this change and miserably failed once I'll let you know how the second one goes but change is hard and
00:37:32.190 so we face a challenge to actually be able to do this well to not to be prima donnas but to actually realize that we
00:37:39.990 have an opportunity and to take that with both hands so I want to encourage
00:37:45.180 us as a movement as 1,500 developers that we can make a we can make a dent in
00:37:53.130 the earth we can make a dent in the world just by making a cultural change by embracing this cultural change and
00:38:00.540 helping others do it thank you hello
00:38:08.060 brought my own water my name is Benjamin Fleischer I work for mr. skin we're a
00:38:13.680 media company you probably have met me or heard about me because apparently that's what happens aye-aye-aye assumed
00:38:21.210 mate maintenance and development of the metric crew library it was developments slowed for about two years is now back
00:38:28.470 up the maintainer of it original creator Jake Scruggs a really great guy has handed over the mantle to me but that
00:38:35.970 really just means that I have admin access on the new repository I would like everyone who is interested in
00:38:42.210 giving their post-secondary you know most recent pull request to to join along I some things that are new in the
00:38:49.470 metric food were up to version 4.1.2 semantic versioning for the win as you
00:38:56.760 can see here when I was first just trying to get the darn thing to work I did not know about semantic versioning
00:39:02.850 and I did some awful things to well you can look on rubygems and actually the
00:39:09.120 number of them that that I had yanked during the security thing are going I so also there's no cane in it which is
00:39:17.519 exciting and you can run you can use a coverage metrics now from a simple curve
00:39:23.819 if you just run it yourself and just set a set of flag so what try it create
00:39:31.500 issues pull requests help me help you help me I so I just wanted to show there
00:39:39.000 actually as a page or semantic versioning which is not it's in a release candidate right now appropriately and this is really
00:39:48.420 important for a gem developers if you ever done a bundle install and something broke because it went up a point release
00:39:54.329 that should not happen it should be major minor patch where a patch is a bug
00:39:59.460 fix minor is you added something and major is you broke something if you're not following that you're hurting your
00:40:05.460 favorite fellow delet developers and maybe even yourself I I have there's a
00:40:10.859 whole bunch of stuff here it works in Rubinius and JRuby now I've done some work on that I look at the changelog
00:40:16.890 it's fun I I have it running on Travis CI I thanks to all the Travis people for
00:40:22.559 making that possible I I have it running on code climate thanks to Bryan for making that possible and I have to say
00:40:28.829 I'm actually using code climate to work on metric foo I and I don't think I mentioned earlier metric foo is a metrics library that combines
00:40:37.130 whatever metrics in the name that combines a number of metrics for example
00:40:43.819 here's metric foo running on itself with churn metrics flame metrics flag metrics reek metrics Rudy Sakura and Cain what
00:40:51.869 did all those libraries have in common none of them were written by me I have
00:40:57.029 in some cases I've made pull requests or conversations with the developers but it's what's kind of interesting and then
00:41:03.599 there's a hotspot section which actually was originally extracted from the caliper code that Dever work done and
00:41:10.980 it's gonna be pretty useful to helping you find areas that where you need work I ran it on rails 3 I I ran it on rails
00:41:20.250 4 they have different issues and this is unrelated but this is a
00:41:25.980 new site that my company is working on is coming up this summer we do not have metrics if you wanted to get into that
00:41:32.490 right now the others the more they're a well-known site that I worked for is mr.
00:41:38.550 skin and I also wanted to mention while I am up here with the microphone and
00:41:44.190 have a minute and a half left i i've started adding pull requests to the ruby friends project this is a project that
00:41:49.470 the ruby rogues if you have not heard of them or begun listening to their podcast you should the ruby rogues are awesome
00:41:57.119 there are my favorite group of people that podcast and share their knowledge in the world and i begun working on the
00:42:05.910 code base because i wanted to make it easier to find all my ruby friends right now it's a stream so i started working
00:42:10.920 on that and as a side project i realized if I change ruby friends to railsconf i
00:42:16.470 can actually sort of track all the railsconf tweets now there's also a similar group that is friday hug and
00:42:22.350 then I heard there's another one and that does something else I heard that I forgot there's a pair with me so I'd
00:42:28.109 actually think this is something for the community that could be really useful and I've been doing some work on refactoring it if anyone would like to
00:42:33.630 join me on that that's great too if anyone knows any maintainer to come in Ari I have a pull request in right now
00:42:40.650 to make it thread safe I I've emailed
00:42:46.950 them personally I believe I've commented on the Twitter this is a month old it's kind of a no big deal I that's that's
00:42:58.290 the whole thing I anyway that's it I
00:43:05.030 thank you very much for your time well good welcome to every single one of you
00:43:11.250 I am from zeal we are a consultancy out of Southern Oregon so you'll see there's
00:43:18.840 our big awesome logo I've been wearing the shirt for three days I do smell and I am sorry for that if you want to know
00:43:26.550 what I look like this is it again my name is Adam cuppy and it comes with the
00:43:32.970 red head and the territory now here's the deal is that many of us have been involved with client
00:43:39.869 work as a consultancy possibly in fact raise your hand if any of you any of you whatsoever
00:43:45.539 have ever had to do a project for somebody other than yourself say it with me I am an idiot
00:43:53.390 perfect so the thing is is that I have learned a multitude of things over time
00:43:59.249 and those things I would like to bestow upon all of you that's right my
00:44:04.289 knowledge will soon be your knowledge and you too will be stupid like me now
00:44:10.999 have you ever felt while you're working on a project for somebody else that this is kind of what it feels like you know
00:44:17.339 this is kind of what they're requesting to a certain extent it's like I want a facebook but this is how I think it's supposed to work and you the developer
00:44:24.180 are an idiot and I I the product owner I'm smart well the reality is is that's
00:44:29.490 not true and all you want to do is kick them in the head well the reality is is that there's ways past all of this sort
00:44:35.730 of stuff now we are an agile and test-driven development shop so what
00:44:42.809 that means is that we are in a constant state of continuous learning now what
00:44:48.210 that means is is that we're in a constant state of planning and we're in a constant state of looping through the
00:44:54.239 feedback right feedback loops right so we iterate we come up with short deliverable iterations with our clients
00:45:00.989 and I recommend that for you guys and then what you do is you go through that and reevaluate time and time and
00:45:06.180 time again ultimately you get into this really productive efficient cycle so the goal here is learn continuously now
00:45:13.259 another way to think about it is we don't get paid for what we know we get paid for our capacity to learn something
00:45:20.999 new right so what I'm saying here is learn learn a lot learn everything
00:45:27.749 except that now the next thing is that
00:45:33.660 learn socially right now again we're an agile shop so one of the things that we
00:45:38.940 adhere to because we're also extreme programmers is that we pair all the time that means that we've got two devs
00:45:45.779 sitting at once one at one computer at the same time all the time they test at
00:45:51.569 the same time they write code at the same time and that's how we function and the value of that is that the quality of the
00:45:57.539 code base is skyrockets and the best thing the best thing that happens is
00:46:02.819 that it gives everybody the opportunity to learn together so again learning socially and have the opportunity to
00:46:08.250 reflect and the bottom line is that humans do love to work together they do right we try not to but the reality is
00:46:14.640 we do now the other one is learn horizontally and what I'm saying here is have a full stack knowledge our team is
00:46:21.960 encouraged to have a full stack knowledge but hey you know what we've got JavaScript we've got DevOps related things with UNIX and Linux we've got
00:46:28.200 rails which includes Ruby obviously then we've got the database we've got all of these components and that's where
00:46:34.410 pairing comes into play so instead of trying to hire somebody that knows it all perfectly instead what we do is we
00:46:41.069 utilize the pairing model to learn socially we utilize the feedback loops to evaluate collectively ultimately
00:46:48.029 resulting in a full stack learning opportunity right raise your hand if you
00:46:53.039 went to school for programming raise your hand if you taught yourself funny
00:46:59.160 how that works so get to know your neighbors with multi-discipline player
00:47:04.369 multi-discipline pairing now one of the things that we've seen a lot that is that often times designers are not
00:47:10.470 pairing with developers right so how many of you have received what we call like lobbing a PSD over the over the
00:47:16.680 fence right it sucks you are doing it wrong wrong okay the right way on the
00:47:24.329 other hand is pair your teams together right pair your teams together get into a stage of multi-discipline pairing so
00:47:31.019 that's what rails offers that's why we're here is because we love it now I want to take about 30 seconds to tell
00:47:37.019 you we are doing an agile test-driven development conference it's a dev training we're currently talking with
00:47:42.480 mr. Ryan Bates of Rails cast to help us with the curriculum we've also signed up Kent Beck who's
00:47:47.819 wrote the agile manifesto he's the father of all of this stuff so here October 23rd through the 26th if
00:47:53.910 you want to know what all of this stuff means learn it from the Masters and and we'd love to see you there
00:47:59.460 so thank you so much it's been a great three days okay Oh
00:48:07.590 okay hi everybody I'm Hector I came from
00:48:13.330 a rails consultancy down in Mexico and I'm here to talk yes another free game
00:48:19.870 conference but this is gonna be different so what is Mac Macomb is a
00:48:27.460 conference what it's about well you know it's about Ruby it's about backbone it's
00:48:35.950 about amber and I didn't know the definition of the word amber so I look in the dictionary it was like totally
00:48:42.250 unexpected and of course it's about
00:48:47.440 rails Mac Mac Mac Mac oh it's about
00:48:52.540 tools techniques and experience of doing web development and where is this
00:48:59.140 conference well it is in Manzanillo it's a small city in Mexico in the Pacific
00:49:05.620 Ocean and it is not a regular conference it is totally different experience
00:49:12.240 starting because we have this thing Mac no village it's a set of 10 a set of 10
00:49:20.560 by the by the ocean there are like it's just six minutes away from the
00:49:29.380 venue so it's really really close you have you can go to the village and go back to the conference whenever you want
00:49:34.860 it is a place where you can hang out
00:49:42.540 yeah there are beautiful houses actually this
00:49:48.760 house is the Casa github they name it like that the github verse are gonna stay there this year you can go to a
00:49:57.040 pool just walk in to the beautiful gardens there go to the beach and the
00:50:02.830 best part is that we have space available if you want to stay in the village you send us an email and we send
00:50:09.370 you the complete information also this time this year we're gonna have a life
00:50:14.860 real Lucha Libre event after the conference the Lucha Libre in Mexico
00:50:22.440 it's like the doli doli but better and cooler and length also we always threw a
00:50:31.300 great party we know how to do it so and also we have a party in the boat so it's
00:50:37.990 really really cool Cougars came in past editions well when Evans Scotch a corn doctor
00:50:47.080 Nick I'm sure that you know this guy he
00:50:52.420 was a keynote speaker last year and this time we have 12 foreign speakers a Latin
00:50:58.840 speakers and I'm very proud to announce that Constantine Hayes is coming because we threw a fundraiser to bring him from
00:51:06.250 Germany to Mexico and we did it which weighs like two hundred two thousand
00:51:13.090 dollars to bring him and also if you had a speaker you will get yourself cut nice
00:51:21.570 you can watch the full ease in magna that comma slash pad schedule this this
00:51:28.090 is happening this june from six five five to the seventh and of course we're
00:51:34.030 looking for sponsors you'll you will get conference passes but in the exhibit
00:51:40.780 hall and you will be able to interview mexican talent they all want to come and
00:51:47.800 work with you so and also it's easy to Mexicans together tn1 visit working in
00:51:54.730 the States so it's better for you so show me the money
00:52:01.330 and be a sponsor so hi hello everyone as
00:52:08.290 act already say probably you notice that we work for the same company because of
00:52:13.930 the church coming from Mexico from crowd interactive and I want to spend a few
00:52:19.630 minutes talking about logic programming with Ruby I guess that we here we do all
00:52:27.700 love Ruby hope that everyone that's here loves Ruby also probably like me you
00:52:38.290 have here the tales from the beginning of the time with Matt took different set
00:52:45.580 of features from our different languages and put everything together and built Ruby for us so Ruby is basically a
00:52:55.780 compound of a different set of thoughts and features from a different set of
00:53:04.330 languages one one of the paradigms that we have in software development is logic
00:53:12.280 programming probably Prolog is the most popular tool that we can just remember
00:53:18.400 it came out to our mind every time that we hear that logical logic programming but logical programming basic basically
00:53:27.010 means that we don't need to supress how the program should actually work instead
00:53:33.070 what we express is the data and the queries for in a specific format and
00:53:40.020 this will allow us to answer a set of questions the main blocks for logical programming
00:53:46.420 is basically we have the facts which are the assertions about what we know from
00:53:52.300 our domain problem we have a set of rules that express the inferences that
00:53:59.290 we have about this data and finally we need the queries which basically are the
00:54:06.430 question that we need to answer with the rules and they facts or the data that we already know
00:54:11.910 so there is a way that we can bring this knowledge or this kind of programming
00:54:18.130 into Ruby we know actually having to use product I was interested on exploring
00:54:25.300 different ways or different paradigms because a book called seven languages in
00:54:31.450 seven weeks and one of the chapters talks about products so I did a quick
00:54:38.560 search about the relationship between Ruby and Prolog and I found post from
00:54:46.300 someone in Japan hiding in a very obscure side talking about this this gem
00:54:52.390 which is a ruby Prolog and basically what it does it provides you a kind of
00:54:57.940 dsl like that lets you write kind of
00:55:04.600 Prolog syntax inside of Ruby so that you can use this kind of programming
00:55:12.340 basically what we can do is we start with the facts this is this is the way that we can define the data or the
00:55:20.230 knowledge that we have already from our domain model then we need to set rules
00:55:27.000 which again are the rules that infers what we know about this data and at the
00:55:34.450 end we can have queries and the queries will allow us to answer questions the
00:55:43.210 only thing that we need to add to this is just grab everything inside of this Prolog core which can is kind of
00:55:51.660 instance or context for any specific problem so that we can have a different
00:55:57.880 set of context inside of an application and each context will be insulated from everything else and they can work
00:56:05.560 together or if you prefer well it is not
00:56:11.610 visible but you can create a class if you feel comfortable with object-oriented programming you can
00:56:18.310 create a class and inside of the class you can put everything together and start answering question obviously this
00:56:28.870 Jam is not as complete as prologue it doesn't have the same kind of performance it doesn't have all the
00:56:34.630 libraries that we found in product but it is good enough to try to resolve
00:56:40.450 problems in a different way but actually
00:56:46.810 the main point about this is I will just like to ask you to be curious to explore
00:56:53.230 a different set of languages and that's it for my part thank you okay so I'm
00:57:02.440 here to show you guard CAS and it's a jQuery plugin to guard your forms with
00:57:07.600 class or any other selector and it's pretty simple to setup if you want to
00:57:13.780 style it manually you can or you can just invoke guard style and they'll go ahead and do some automatic styling for
00:57:20.140 you and then you can live guard your form or you can enable guards traditionally the normal enable guards
00:57:28.060 will block on submit or as live guard I'll show you what that will do in a sec here so I I can guard using required
00:57:35.710 which as you might expect will make sure that's required and so that's live
00:57:41.950 guards there it it will listen for on onblur events and and trigger it then
00:57:49.390 and so then as soon as I start typing something it will go away and since its
00:58:01.660 I put something in there it's good so you can also guard with other built-in guards such as email and you can chain
00:58:09.730 them together so I have required here and I can also guard it using email
00:58:23.800 no spam please and I can also guard with
00:58:30.310 a custom function or I can and I can also take on special messages and customized guards in many other ways so
00:58:37.720 if I type the wrong thing here it's not gonna let me through and that's it I'm
00:58:48.100 Mike fraud a stone I work at on-site comm here's my email and my twitter handle and you can go to guard CAS comm
00:58:57.070 or gem install guards J s Rails to get the gem the asset gem thank you
00:59:05.980 looks like I'm off center here on the monitor so half of this might be utterly meaningless but if you have tests
00:59:13.900 running slowly and you know that's a problem but ideally you have fast test
00:59:19.780 and decoupled code but the reality is you don't or you won't because somebody else did it so you're stuck how can you
00:59:27.820 get out there's a way you can hack your way out so I'm gonna introduce apple pie this is a model under test it's got a
00:59:34.420 simple job with just a bake just like mommy does and its size is very very big and you remember that from your days
00:59:40.360 that's exactly how mommy made the pies but it's deliciousness is merely okay and that's not right you remember
00:59:46.690 mommy's pies were more than okay and the crust is soggy and that's not right either so you're gonna defend your mother's
00:59:52.900 honor and you're gonna fix this tests you're going to improve the state of the situation so simple test but it's
00:59:59.020 probably like what you're used to seeing there's some sort of expensive setup and a quick setup the expensive setup is
01:00:04.030 factory girl create that's probably gonna cost you a lot then the quick setup is just this a little method that
01:00:10.060 runs the side-effects necessary so the test is just - can you see that and can
01:00:16.060 you see what's going on at all all right well go for it so the focus group is the
01:00:21.610 test it has an average opinion and currently the average opinion is - so I
01:00:28.710 think you can see that so what we're gonna do is break this test and I'm
01:00:35.890 gonna run it this is why they say don't do live coding because I don't think you can see
01:00:41.650 everything that's going on today I learned all right so it's doing stuff
01:00:47.440 it's doing a lot of stuff before it gets to the assertion that you want you get
01:00:52.990 to the assertion you want and you realize you're gonna have a very bad session because you're going to be spinning on this thing that takes a long
01:00:58.150 time and this is a stand-in for what could be minutes so you decide you're
01:01:04.960 gonna fix it but here you see you're expecting something greater than Oh duh nine and you're getting 1/3 so let's
01:01:11.980 take a look at the factory and see if we can figure out why this is so slow so you have an apple pie but first you have
01:01:20.470 to create the universe so you have a
01:01:25.540 couple options you can mock it but how long do you think a mock universe is gonna stand in for the real thing
01:01:31.360 you can just give up and just hack it the way we've always done it or you can
01:01:38.500 go live with this thing so let's let's figure out a different tool a better way and do something better than then what
01:01:45.580 our daddies did require pry rescue and
01:01:50.980 this is a Conrad Irwin module if you saw his talk lesson yesterday so progress
01:01:56.380 queue itself is kind of magical it has this like pried out rescue do like
01:02:02.560 something and if this fails instead of bubbling that exception up it just drops you in a prompt there you can wrap it around things that you want to debug but
01:02:09.430 prior rescue mini test is actually not that much magic it just says if you get a test exception like blow up so we're
01:02:17.050 gonna say unless and see I look we don't want Jenkins getting messed up but
01:02:23.170 otherwise we could commit this so I'm gonna run it again let's see and we're
01:02:28.720 gonna pay the penalty one more time because this is not mocking this is doing real code this is executing things
01:02:34.120 this is setting up the environment the way you need it's running but when it
01:02:40.630 fails you get you get a prompt and so I don't think it's yeah but you know so I
01:02:46.510 mean I'm in here you know I can say average I can edit this now that was a bad
01:02:52.119 example average but you know I can interact and fix things so but I can
01:02:57.789 also use another private sure which is edit PI dot bake tab completion hops you
01:03:03.940 right to where the method is and I can fix this so deliciousness was maximum and the
01:03:10.779 crust was super flaky if I remember right so edit already reloaded the code
01:03:18.339 and now I can run basically quick setup and then I can just run this method that
01:03:24.789 I'm in test opinion this is a good thing about mini tests rather than r-spec on this one boom passing test so I didn't iterate it
01:03:31.329 on it cuz I'm running out of time yeah I'm gonna have to close it down there's ton of stuff you can do but the
01:03:37.299 point is you see that you didn't get the expensive setup but you iterated quickly which is really the whole point of the
01:03:43.059 test to begin with so if you want more stuff you can check out pound pry it's a
01:03:48.549 very supportive Channel you know there's lots more awesome stuff to have a it's
01:03:54.970 kind of people admin but anyway so people ah yes come work for people off
01:04:00.160 so anyway yeah I'd love to talk about this stuff so if you're interested oh right resolution yep cool okay thanks hi
01:04:12.700 everyone my name is Dylan Lacey I work for a place called source labs and I'm going to run you through a fun little
01:04:17.740 thing our open source project called appium so what is appium appium is what happens when you mix selenium with iOS
01:04:25.720 so selenium for those of you who aren't familiar is a framework for automating browsers because you're using a browser
01:04:31.720 you get a Dom that's just like your user would and you get JavaScript execution that's just like your users get because
01:04:37.839 it's running in exactly the same tool your users use you can use selenium and you can say use this browser on this
01:04:43.569 operating system in this version and it gives you that so you can fairly reliably debug stuff whereas with
01:04:49.390 headless webkit if you have customers who aren't hackers who so don't use chrome they they might not have browsers
01:04:55.359 that work the same way as headless webkit does also real WebKit and selenium can run on remote instances as
01:05:01.990 well so you can go and spin your code up somewhere on another machine or on a farm of machines so appium is a selenium server
01:05:08.760 for iOS native app controls are kind of like web controls really I mean you have text fields that you put text in you
01:05:15.060 have switches that are basically radio buttons you have checkboxes you slide your scroll you type you enter you have
01:05:20.580 buttons but if you're not playing a game it's basically a web app so you can find
01:05:25.650 things you can click on them you can assert them and that's kind of what a web integration oh what a UI integration test is so
01:05:30.869 appium lets you do that the point of it is to allow you to run your UI tests
01:05:36.330 under automation because you don't really want to go and run them manually every time you build a new version of
01:05:41.400 your app so when we cast as rubyists we love testing we think testing is great iOS is a little bit a little bit more
01:05:48.089 wonky they're kind of like this their UI tests and maybe they integrate and maybe they
01:05:54.420 do automation maybe they have robots our CTO has a crazy robot actually but for for now we're looking at this open
01:06:01.140 source solution and thinking this is probably a better idea so how does that actually work how do you oh good the picture did show up how do you make sure
01:06:07.950 that your tests run on magic device that you want to connect to without screwing up your code well your test whatever
01:06:14.520 that is anything that uses the webdriver protocol of selenium which is basically all of the Ruby selenium bindings
01:06:20.510 including capybara water all the rest is selenium talks to a paean which is the server appium talks to apple's
01:06:26.609 instrument CAS which is their UI test framework and that talks to the apple emulator which is probably the best
01:06:31.650 emulator on the market compared to the actual hardware device if it's not it's apples fault go blame them so some of
01:06:38.609 you probably don't believe me so this is some code you create a webdriver in the standard way you say give it a remote
01:06:43.830 server and the design Kappa bilities are your browser your platform the version of iOS that you want you need to tell it
01:06:49.859 where your app is and you give it a URL that URL is where of your appium server is it can be remote it can be local this
01:06:57.630 is what appium commands look like standard selenium with a couple of inclusions you want to put in your input devices and has touchscreen additions to
01:07:04.050 the web driver so you can you play around with the touch screen and find out where things are you find elements by saying what you want to find them by
01:07:10.050 and what they are you check values of attributes you find attributes you can check the XY locations of things you can
01:07:16.410 interact with them by clicking on the you can assert against their values when you do things like that switch there you have attribute should be zero you click
01:07:22.830 it it becomes one who testing you can send keys just by typing you can scroll
01:07:29.040 up and down almost all of the commands that are supported by selenium are supported by appium and they keep adding more all the time
01:07:34.620 who wants some card who wants a demo excellent this is going to go horribly
01:07:40.250 so so this is a p.m. on my screen that I
01:07:46.740 can download it's an ojs program we're sorry but the the end user one you can just download I added where the app was
01:07:52.980 and I launched it it's now running a server I have r-spec running in this window you probably can't see r-spec
01:07:58.650 run UI catalog go that has opened on the other screen again because damn you
01:08:03.780 Apple an iOS device which is now loading the application and booting up I'm going
01:08:10.170 to do a jig while I wait all right dignity back so now it's doing nothing
01:08:19.430 there we go so it's driving through that it's doing assertions on the content UI catalog as an app that's designed to
01:08:24.960 show off the sort of things you can do with controls so it doesn't do anything useful but it has a lot of things that are called different things that you could do different things to them things
01:08:30.390 think things it's done that was your
01:08:35.670 entire UI automation test so if you were running that on a remote server you
01:08:41.609 could do all of it in parallel you could do a whole lot of stuff all at once you can connect them to a grid you can run them somewhere else you could pay
01:08:47.220 somebody else to make it their remote server yeah do it somewhere else run it
01:08:53.160 on the Internet thanks for listening have some free sure stuff we have a promo code JOA I'm trying to give you
01:08:58.710 free stuff if you put that komak promo code in while signing up for source labs will give you a thousand free automated minutes and 200 manual Mac minutes so as
01:09:04.290 soon as we release this product which should be very soon don't ask me when I have questions that at Dillon Lacey calm until its source labs and I really need
01:09:10.260 somebody to come and give me feedback on our tutorial so anybody have a talk on teaching people how to do things and can listen to and I'm talking this fast come
01:09:15.810 and talk to me I'll give you a beer thanks hello so this is like this most
01:09:21.900 smoothly running lightning talks session I've ever been to this is kind of amazing
01:09:27.089 so yes my name is JC I'm from a company in
01:09:33.880 Chicago called dev mind we build software for money and I want to talk to you today about apprentices so I don't
01:09:41.469 know which side of the monitor which of those people is but this is a former
01:09:47.440 apprentice of ours this is a current apprentice of ours which is awesome this
01:09:54.340 is a improvised standing desk from Ikea and a half-eaten Apple that I had to later pick up because neither of them
01:10:00.820 decided they were going to throw it in the garbage so before I go any further
01:10:07.179 how many people are at a company that has an apprenticeship program not enough
01:10:12.460 hands are up right now okay so I'm going to talk to you about how we do apprentices apprenticeship and how we
01:10:18.820 get them and deal with them and make them useful members of society so we
01:10:24.820 hire carefully we evaluate them extensively they submit an application
01:10:31.170 essays the whole nine yards we read it everybody on the team reads it we vote we say who we want to talk to more they
01:10:37.719 go through a coding challenge that is hands-off they fork a repo they do get some tests
01:10:42.790 to pass they submit it to us if we still like them they come and or I call them
01:10:47.889 and we do a phone screen this is all happening over weeks they come to the studio and they spend a whole day
01:10:53.800 pairing with us if we still like them after that they come again they spend another day pairing with us the second
01:10:59.020 visit they get thrown into the deep end they have beers with Brad and I it's
01:11:04.540 weird that he's up here with me because that was not planned then the entirety being the entire team
01:11:10.510 votes and we say where we want to see this person anymore or not and if we don't we never see them again they come
01:11:18.280 from all over the place we don't require them to have CS backgrounds so we find good people that are doing good things
01:11:24.369 we want to work with them we pay them these are not interns
01:11:31.889 people need to eat food so we pay them enough to stick around we give them
01:11:37.539 health benefits because again people get hurt and they need to go to the doctor we buy them lunch we also supply them
01:11:43.179 with beer pairing so somebody before I mentioned pairing it's the number one way that we impart knowledge to our
01:11:49.449 apprentices two-brains one computer we pair as much as the as an apprentice can
01:11:55.539 stand we pair just a little bit more than that way more than they can stand
01:12:01.270 and then we almost get them to quit and and we might back off on the pairing just a little bit everybody all the
01:12:08.050 apprentices get a mentor so there they always have somebody that they can go to
01:12:13.179 we do rotate them so they get about a month of a different person's time these
01:12:18.820 are technical and non-technical people they have regular check-ins their job is to instill our values number one we will
01:12:26.139 not ship and number twelve or so people matter and all the ones in
01:12:31.599 between they do work on client work not academics so some other programs I know
01:12:37.000 focus on computer science and stuff and I don't care I want stuff for clients production codes a good place to learn
01:12:43.599 we do let them talk to clients because the soft skills are part of apprenticeship too good we do not bill
01:12:51.940 our clients for their time they do end up doing some menial chores like
01:12:57.489 cleaning the windows in the new office but we have to they make their own tools to do that that leads to self direction
01:13:04.539 they choose their own adventure we hire people that are smart and self-directed and they make an environment where they
01:13:10.000 want to learn and we support them they teach other people they volunteer a dev
01:13:15.219 bootcamp I have 56 seconds so I shouldn't have gone too fast on that one so we have them present to the team they
01:13:22.840 read books they do book reports they volunteer at dev bootcamp and start a league in places like that they assist
01:13:28.510 us in training engagements people do matter and that is dev mind so I'm doing
01:13:37.449 something that's kind of off topic and I hope that that's a cool thing I'm gonna start out the presentation by showing
01:13:44.079 you a a photo of my daughter because a couple of reasons one is is that you people
01:13:49.760 aren't nearly as cuddly and I kind of miss her the other reason is is this is
01:13:55.010 actual size and it's actually kind of rare for me to have the opportunity to
01:14:01.100 see her in real life in on the screen so
01:14:06.830 the name of this presentation is optimizing user adoption and so everyone
01:14:12.200 here has read the Eric Ries book Lean Startup and all that so I just kind of want to talk about kind of a marination
01:14:17.660 of ways that we approach strategy and strategy means we don't write any
01:14:23.240 software until we think we're gonna make some money has anybody ever written anything that just basically floated to
01:14:29.960 the bottom of the sea a couple of us perhaps I believe I was on a 22 million
01:14:35.600 dollar enterprise project that never shipped you know what's the big deal
01:14:41.810 in any case there's a couple of things you can do kind of a way to set your team up for success from a strategy
01:14:49.160 perspective and to do this you need to have a data scientist you need to have a product manager who thinks their product
01:14:56.090 manager is useless any cans out there okay who doesn't a lot of you probably
01:15:01.820 just don't even have them which is a fun fun idea as well so let's start off by creating a new term the new term is
01:15:08.540 called lore it's the idea that unless you have data to back up what you're saying it's not true you can use this
01:15:16.610 term when somebody comes to you and says this is going to be the coolest feature ever everybody's gonna love it and then you roll it out after you know 80 hours
01:15:23.900 of developing it and nobody ever touches it so what we do is we build tests and
01:15:30.860 test is basically you know big data that amorphous word that doesn't actually mean anything well big data really means
01:15:37.880 you have a question that you want answered for instance does anybody actually gonna use this wacky software that I just built so you build a test
01:15:44.720 and you use your data to prove it and of course the quick way to put that is a
01:15:50.450 limited and concise experiment to test a hypothesis so as a start-up and as a
01:15:56.990 strategy for a start-up you have to have a plan to grow that's how you get people to give you a million dollars or five
01:16:03.700 million dollars to build your thing so you break down your product into goals and all of those goals must be in line
01:16:10.510 with what you decide to develop you also have to figure out what the best way to
01:16:16.150 have user adoption is so you do variant testing and things of that nature no
01:16:21.670 matter what you're doing you have to be moving the needle if you're not you're failing before you could do this you have to break your users down into a
01:16:28.480 category and you have to leverage your existing data to make some preliminary assumptions and then of course prepare
01:16:38.320 all of your user tests this is the most common pattern ever who here uses Mixpanel or something like Mixpanel
01:16:45.480 okay some startups in the hizzy what's the other one
01:16:50.710 KISSmetrics yeah so they're all pretty standard to this pattern but you might
01:16:56.260 have a different scenario for this this might look different to you but in reality it's just a pipeline for sales
01:17:03.720 so I'm gonna go through that list that adoption pattern does anybody know how
01:17:09.400 much time I got a buck 30 okay so you start out with acquisition how do you get your users how much does it cost to
01:17:16.150 get a user just making a specific change or lowering the barrier to entry improve
01:17:22.240 your acquisition testing pricing models like what scares people away from pricing if it's $30 versus a hundred so
01:17:30.100 how much does it cost to activate them test the effects of changing the barrier to entry and then build a hypothesis
01:17:37.120 around your target demographic or market product market fit the next stage is
01:17:43.240 engagement this is when they give you money or they give you the data that you wanted so what does it take to get to
01:17:48.520 that point what features are they're using obviously don't build a feature that doesn't need to exist yet
01:17:53.620 host how sticky is your stuff for instance when you sign up for base camp and then flow duck or sorry you sign up
01:18:01.660 for a campfire and then flow doc comes out you basically just dump that first one
01:18:06.850 and go to the other one because it's cooler because it's an easy transition to the other one
01:18:12.140 and of course this is one of my favorite tips is actually just fake a feature
01:18:17.330 before you ever implement it to see if anybody clicks on it so you put a button up that says would you like to sign up
01:18:22.640 for this thing and then they click it and it says we'll let you know if we ever implement this feature and then of
01:18:30.500 course the referral stage which is essentially the idea of virality it's really hard and it'll take you to a dark
01:18:36.440 place if you ever try to achieve virality that's just kind of the way it is I've run out of time but there is a
01:18:42.860 option patterns and fun thank you hi everybody my name is Jeremy green I'm from Norman Oklahoma I have a
01:18:48.260 consultancy they're called octo labs I'm gonna talk about Jim loop and easy market and I was a little over ambitious
01:18:54.710 and thinking that I'd be able to get two simple DB as well so I will just barely mention that but only to not disappoint
01:19:00.260 anybody that's interested in it so Jim loop what does it it's a way to judge the relative weight of a gym before
01:19:05.690 adding it to your gym file it uses a bookmarklet to add new information to pages on rubygems org and Ruby toolbox
01:19:12.410 so that you can see the entire dependency tree for a gem that you've come across what is a bookmarklet it's a
01:19:19.250 mash-up of the words bookmark and applet it is basically some JavaScript from
01:19:24.860 your own site that you can inject at the user's request into a remote page so I
01:19:30.350 know what you're thinking what are we talking about cross-site scripting for fun and profit here no didn't be nice
01:19:35.840 use your foot use your powers for good so a quick demo say you're looking at
01:19:41.330 devise on rubygems org and you're which is a great gym you should use it you hit
01:19:47.330 the bookmarklet that you've dragged into your bookmark bar and you get a little report here that shows the full
01:19:52.760 dependency tree of everything that's included in that gym you can look at it and see that most of this is rails based
01:19:59.810 stuff which you're already gonna be used in anyway so it's really not adding a whole lot of weight to your new project
01:20:06.350 two slides that were demoing that in case the network wasn't working so easy Marc late' what is it it is easy
01:20:13.850 bookmarklets it's a gem to help you create bookmarklets for your rails app it's something that I extracted from a
01:20:20.660 project that we did that was using bookmarklets to capture URLs that people were interested
01:20:25.880 that we needed to get into our app it packages a bunch of boilerplate code that uses a easy XDM to allow you to do
01:20:33.110 cross domain communication from your site to the remote site that the person is looking at definitions is for doing
01:20:41.270 this kind of communication you've got a consumer and a producer the consumer is the code that is loaded into the remote
01:20:47.510 page that ends up giving you the little pop-up frame the producer is the code
01:20:53.150 loaded in your own page that is going to provide some kind of functionality from
01:20:58.429 your site and allow you to communicate back and forth between the two it has
01:21:04.929 methods for generating a wide range or ID range of bookmarklets from very
01:21:10.250 simple ones that will just capture the URL that you're currently looking at and redirect you to your app all the way up
01:21:15.860 to what I call the deluxe bookmarklet which gives you an inbred an embedded frame that is fully navigable that will
01:21:22.159 keep the RPC channel open so it basically injects a buffer iframe into the remote page that always stays
01:21:28.130 there to keep the RPC channel open inside of that there is another iframe
01:21:33.350 that is the navigable frame that you can use to click around and move back and forth when you need to communicate from
01:21:40.790 one frame to the other if the consumer wants to ask the producer to some to do something it's going to go through that
01:21:46.730 buffer frame and likewise the other way the producer goes through the buffer to
01:21:53.170 communicate with the consumer it takes advantage the asset pipeline to make it
01:21:58.310 easy to see all of your bookmarklet related code in one place with easy XDM
01:22:03.469 the native way to do it is you have one consumer file for your JavaScript
01:22:08.540 another producer file and there's a lot of stuff that you have to duplicate between the two that says there these
01:22:15.920 are the methods in the consumer that the client can call and vice-versa so you end up with code that looks something
01:22:22.580 like this that just lets you define everything all in one place and then it uses some JavaScript that comes packaged
01:22:29.210 with the library to pull that out and make everything work simple dB it's a no
01:22:35.600 SQL style key value store that Amazon runs I think of a lot like s34 objects there are AWS SDK
01:22:44.560 Jim makes it pretty easy to interact with it in an active model style ORM using the AWS record model class you add
01:22:54.830 AWS SDK to your Jim file declare class and since there's no schema or database to inspect you have to do things like
01:23:01.460 string a tour to tell it what the values are that you want to store and finally
01:23:07.699 completely unrelated anything if you don't know about star logs net you should look at it it's a great way to
01:23:13.250 make your commit history epic
01:23:34.769 okay alright first of all I just want to give it up for the fantastic volunteers
01:23:40.230 from Ruby Central especially the new directors band Evan and Marty come on
01:23:45.239 let's give it up for them everybody works hard here I'll go up some of my
01:23:52.050 time for that it's worth it alright so Ruby on robots so it's innovation
01:23:57.360 dead I mean are we just like gonna be relegated to doing web development for
01:24:02.579 the rest of our lives and is that all that there is left and technology I say nonsense I mean there's innovation all
01:24:09.719 around us like William Gibson said the future is already here it's just not very evenly distributed so I'm dead
01:24:17.309 program on Twitter also known as Ron Evans in the real world I work at the hybrid group or a software development
01:24:22.980 company based in Los Angeles and we're also the creators of kids Ruby thank you
01:24:29.489 all so thank you to all the volunteers that helped us with our fantastic kids code camp that we had last Sunday so
01:24:35.849 we're introducing r2 r2 is a Ruby micro framework for robotics and physical
01:24:41.730 computing it supports multiple hardware devices different hardware devices and
01:24:46.769 multiple different hardware devices at the same time in Ruby seriously yes
01:24:54.139 because we use celluloid which is an incredible piece of software created by
01:24:59.489 Tony our CEO key that lets you use an amazing kind of messaging to create incredible concurrency it runs very well
01:25:05.789 on JRuby and the Ruby of the future Rubinius so it also works on the MRI but
01:25:11.219 without all the awesome concurrency the current hardware that we have supported already an r2 today is the Arduino the
01:25:18.869 AR Drone the Roomba and the Sphero with lots of more hardware platforms
01:25:26.010 coming very soon so we have a domain-specific language in r2 which is very reminiscent of sinatra here's an
01:25:32.130 example of a very very simple r2 program that makes an Arduino LED blink so first
01:25:37.949 we require r2 we make a connection to the Arduino using the Fermata protocol we connect to a device which is the LED
01:25:45.150 on pin 13 and then the work that we're going to do is that everyone second we're going to
01:25:50.520 LED toggle which flashes the LED on and off all right well flashing LEDs that's cool
01:25:55.980 how about drones so we could also in this tiny little example we can require r2 we can make a connection to an AR
01:26:02.970 Drone we can use the device which is the drone and then the work that we're gonna do in this case is we're going to start
01:26:09.090 takeoff and then after 25 seconds we're going to land then after 30 seconds stop
01:26:14.430 so we don't just completely crash so it has a REST API because what good is a robot if you can't control it over the
01:26:20.670 intertubes and more importantly it has a web socket API so that you can get real-time notification updates from the sensory
01:26:27.630 equipment that's in your robot yes but that's not all it has a CLI because you want to control your robot from the
01:26:33.300 command line it's so cool so join the robot evolution because the futures
01:26:38.880 already begun tomorrow during lunch time we're going to have tense fear of robots
01:26:44.010 available for everybody to play with and I believe it's room 140 so that the robot evolution you could be a part of
01:26:50.160 it would you rather Skynet just destroy you or call you mom or dad
01:26:55.490 so Archer Dada yo check it out fully open source help us help you create the
01:27:01.860 next generation of robotics technology thank you hey to everybody so I wanted
01:27:09.150 to talk today about Redis key management but first I'm own and that's actually
01:27:14.190 how it's spelled I worked for this awesome company in Boulder called Kip and I was getting jealous of all the
01:27:20.280 cute stuff people were showing so here's a picture of my dog he's he's looking sad because we're leaving for work so in
01:27:29.520 Redis typically when you're working you're gonna have like one concept mapping to different keys and have
01:27:35.460 different lationship with those keys but managing all that is super tedious there's copying strings here copying
01:27:42.450 strings there remembering when the process shuts down need to go delete that key or remove myself from a set or
01:27:48.300 something like that and you know we don't believe in that in Ruby we believe in meta programming and cute names so I
01:27:55.050 have this gem called breadcrumbs that will hopefully make this a little bit easier something
01:28:01.570 tab over everyone see that okay does that horrible yeah no one's booing that
01:28:08.110 loud alright cool so the main way this will work you can set up you know your little like Redis
01:28:14.380 connection and it unwraps things like Redis namespace and you described in
01:28:20.139 this DSL what keys you own so in in rescue which is the example I'm using and I just remember ever go to slide a
01:28:27.039 rescue worker owns a key that marks what he's doing a key when he started and he
01:28:33.039 also adds himself to a set of other workers so we can just nicely describe that relationship here and we do things
01:28:41.230 like template it with ID so when we track a worker his particular ID will
01:28:46.420 will show up in that string and then this rest is boilerplate but the
01:28:52.030 important part here is we have a little clean method so we can we can ask the breadcrumb do clean up after ourselves
01:28:58.000 because we're super messy so if we run this we come down here and it's it's
01:29:04.420 registered itself and has all these awesome keys and we can even look inside rescue workers and it's got even more
01:29:11.500 stuff in it it's crazy and if we come back up we say yeah go ahead and clean that be that'd be really great and now
01:29:18.820 it cleaned up and that's awesome so the other thing we can do is you can
01:29:25.780 tell the breadcrumb to track state track the keys that you've described in
01:29:32.110 another key because you know more keys is always awesome so the exact same
01:29:37.360 piece of code we just added in this tracked in and we're saying every key that I record is gonna go into this
01:29:42.460 other bucket over here so it's like the same same deal and then if we look at it
01:29:49.510 we have the same rescue worker set as before the same started key as before but we also have this new track keys
01:29:56.349 thing and I'm gonna do some live copy and paste as opposed to live coding
01:30:02.079 that's how extreme I am and that looks horrible in this tiny tiny screen but we
01:30:07.599 actually just record the commands are gonna use to clean up after ourselves and so you may be asking yourself
01:30:15.280 why would you do that why would you shove JSON and another set for good reason that's because a lot of the
01:30:21.610 problems I was facing where I wanted to rename things but you know if I if I was
01:30:27.760 doing some refactoring I needed to like remember that I still have keys out there named the old way and that's
01:30:33.700 annoying and error-prone so let's say for a very very good reason we really we
01:30:39.370 renamed started to start at at and then we did our air quotes refactoring down here where we monkey patch rescue worker
01:30:46.300 and until it - Savin - started that so if you look at that now that's all all
01:30:53.830 fine and dandy like before we have our new start of that thing but we also have
01:30:59.530 the old started key and so we know that when we clean up we want to get rid of
01:31:04.690 that thing so we came over here and tell it to go ahead and clean up the worker
01:31:12.300 and we come back all we're left with is that track key set so yeah so that's
01:31:18.220 that's my little breadcrumbs gem maybe you'll find it useful maybe even I'll go put it into rescue because I like it and
01:31:25.720 that's pretty much it thanks for listening to me hello my name is Sean
01:31:33.160 okay my name is Doug Smith and I'm with Dave Ramsey's web development team I work on Dave Ramsey comm with 40 awesome
01:31:39.760 developers and we are hiring in Nashville Tennessee so check us out I'm here to talk about 2-step deployment for
01:31:46.960 rails so first of all let's talk about the classic Capistrano one-step deploy
01:31:52.180 process since you all hate raising your hand I won't ask you to raise your hand because the other speaker pulled that it
01:31:58.380 confirmed that for us but if you're using Capistrano and you do a cap deploy we're all used to it pulling our code
01:32:04.570 from github doing an asset pre-compile and doing a bunch of other things linking things and possibly restarting
01:32:10.150 your unicorns or whatever and this is awesome unless you're deploying to multiple environments like a staging
01:32:15.220 environment and a production environment because when you go to production now Capistrano has to go ahead and do pull
01:32:21.370 your code from github do your asset pre compile again and etc etc etc and restart your servers so what's the
01:32:28.180 problem with that well first of all staging and production might end up running different code not
01:32:33.610 that your code on github might change although it might between the time you go from stages to production but
01:32:39.100 anything could happen in that process your assets might compile it differently there's risk there the other thing is
01:32:45.730 that your production would require extra dependencies the dependencies required to at least compile those assets and
01:32:52.989 whatever else it might need to do those are required in that process so that's why we are using this two-step process with an awesome stair step the first
01:33:01.300 thing is we build a deployable package or an artifact almost like our keynoter
01:33:06.400 talked about a war file but you know in a little bit of a different way then we take that package and we deploy that
01:33:12.310 same package to all the other environments so why do we do that it gives us a consistent code coverage or
01:33:19.090 consistent package to deploy to all the environments and it also reduces those dependencies that we have in our
01:33:24.820 production environment so how does that work well we start with a normal Capistrano command but we add this build
01:33:31.690 cap build deploy because we've created a build environment that's specific for building this package and we run this on
01:33:37.719 a special build server that looks an awful lot like a production server so it has you know all those similar
01:33:42.820 constraints and similar dependencies on that build server but it builds this package for us so it does what you might
01:33:49.300 expect it exports the code from github it runs our whole test suite so of course we don't deploy anything that the
01:33:55.179 test suite hasn't where the test suite hasn't covered in and passed in in 100%
01:34:00.929 after that we compile our assets and then we pull all the gems down so now we have this package with tested code
01:34:08.699 precompiled assets and all of our required gems then we use that package
01:34:13.750 and we push that package out to staging and production and whatever other environments there are to to push that
01:34:20.350 package out to so what does the deploy process look like well it looks an awful lot like Capistrano normally except we
01:34:26.170 just put in the environment we're going to use and we pass in the name of the directory that's the release name that
01:34:33.040 Capistrano gave and we pass that on to to Capistrano to push to whichever
01:34:38.469 environment we're pointing to in this case we're deploying to staging how do we do that we use our sink and our sink simply pushes this this
01:34:45.250 package of files to whatever environment we're deploying to and all we have to do is our sink and then do the graceful
01:34:50.710 unicorn restart since we're using unicorn in our environment it's really a simple concept but it's very powerful
01:34:56.890 and gives you this this level of quality that that you might be missing in the typical stay in the typical process so
01:35:03.700 real quickly to look at some code all we're doing is overriding Capistrano update code method with an arson command
01:35:11.260 I have a gist of this if you want to take a look at it you career welcome to contact me afterwards if your if you're
01:35:17.080 interested in this kind of kind of you know verbose but the idea is you simply override what Capistrano typically does
01:35:23.110 when it pulls the code from github and use our sink to push that code instead so in summary build once deploy that
01:35:29.500 same package everywhere and your your quality of your deployment will increase that much more if you'd like more
01:35:35.830 information these slides are available on SlideShare you can email me at Doug Smith the Dave Ramsey comm or a row goes
01:35:41.530 on Twitter and look at our develop with purpose comm blog where we talk about the job openings that we have available
01:35:47.140 at Dave Ramsey comm and I'm honored to share the stage with such awesome speakers thank you for listening today
01:35:55.530 hey guys so I'm Andrew canty know and I'm here to show you Hugin which is a
01:36:00.790 project I've been working on if you have questions about it later you can find me on tech on Twitter as tecktonik so Hugin
01:36:08.020 is named after one of the Ravens of the gada Odin who flies around the world and
01:36:13.270 looks for knowledge and brings it home so and it's online on github and I'm just going to show it to you guys
01:36:19.270 so Hugin is a system for building agents that gather information about the world
01:36:25.240 and act on your behalf so it's an open-source product it's it's MIT license you run it on your own
01:36:31.690 server on your Mac or whatever and let me just give you a quick tutorial about how it works so in Hue again you make a
01:36:38.800 bunch of agents here's the default ones but I have a much longer list on my
01:36:45.490 personal one and so like for example this is the SF weather agent so all this
01:36:51.430 does it's basically a cron job right with a GUI so every day if I edit this
01:36:56.440 and I may not have internet which is okay expected that so if you edit your
01:37:03.130 weather agent you say when you want it to run which could be you know constantly or at a specific time in this
01:37:09.760 case it's just an instance of weather agent so all it's going to do is get the weather for this a zip code and it's gonna output that as an event click
01:37:16.540 another example this is another agent I can make a Twitter stream agent it follows the Twitter stream it looks for
01:37:22.120 specific keywords it runs at a frequency that I want and outputs those as events and then I can make agents that consume
01:37:30.340 events so there's a flow diagram here so this is a digest email agent it runs every morning at 6:00 a.m. and emails me
01:37:36.640 if it's gonna rain that day I could add other stuff too though if I wanted the you know xkcd from yesterday I could
01:37:41.980 also throw that in the email etc this is obviously just customized with Jason here this is actually just some editable
01:37:48.190 Jason now these are configured as a flow diagram so this is an example from my
01:37:53.590 personal one I showed you the SF weather agent but that weather could be
01:38:00.220 intercepted by other things so instead of getting the weather every day I could have it go to a rain trigger which is an
01:38:05.560 instance of a trigger agent and that triggers only if a certain Jason field has a value I want in this case the Reg
01:38:11.020 X rain or storm and then if that would that will generate an event which is consumed by the morning digest agent so
01:38:18.070 there's a flow diagram here there's a few other things going on I want to show you a couple other things you can do with it one of which is that Twitter
01:38:27.790 stream agent again here I've listed a bunch of terms of things that I'm interested in I'm interested in machine
01:38:33.010 learning artificial intelligence the CFP for rails comp which is over now and
01:38:38.400 updates about NASA Mars etc so what's gonna do is good it's gonna consume the
01:38:43.660 stream from Twitter for these terms in real time and then roll them up and every five hours it's going to output
01:38:48.970 summarized counts as events and those in turn can be consumed by a peak detector
01:38:54.490 agent which looks for a peaks in a stream so here we see one of my terms
01:38:59.560 was new Xbox and there was a peak around the 24th when there was some rumors about what it was going to have in it
01:39:05.530 and when a peak is detected it sends me an email so basically I can make Stan alerts about things that happen in the
01:39:11.710 world they say I care about this and this and this send me an email these happened finally one other quick thing
01:39:18.580 you can do with it and actually this I haven't figured out an awesome use for this yet but I think the data is really
01:39:23.860 cool there's a little open-source system that can run on your iPhone and it phones your location and any motion
01:39:29.680 vectors every and whenever you change cell towers so this is phoning into it it's making events going to the same
01:39:35.860 event feed and they could you know you could do anything you want with it have a trigger when you go to a certain location or whatever finally since I
01:39:43.810 think I actually have a minute one tool that you may find useful if you're building these agents is select your
01:39:49.360 gadget which is another thing I made quite a while ago but I think good for you guys to know about select your
01:39:54.400 gadget is a bookmarklet I think it would work well with easy bookmarklet it's useful for finding selectors for
01:40:00.790 scraping pages which is something I do a lot with you gonna so here's an example of selector gadget running on the rails
01:40:06.610 Kampf talk list let's say I wanted to get the titles I click on us on an element I want it highlight it makes a
01:40:13.570 best guess on what I want so it says I think you want h4 s but unfortunately these are also h4 s so now I read and I
01:40:20.500 reject things I don't want and now it was this oh I think you want talk 6 d h4 because that is in fact what you first
01:40:26.500 clicked on no I want more general so I click on this it says oh you want me and wrapper h4 which is in fact the best
01:40:32.530 selector for these titles so that's also a useful tool you might find helpful thank you
01:40:44.760 okay hi my name is Tanana nakhon and today I would like to talk about her in
01:40:50.980 the nationalization of rails within lighting so the problem that I have a
01:40:57.489 while back ago which is to copyright a website you know that like for example you have a button on your webpage and
01:41:04.719 you want to write its label so at first time you write it as sale and then your
01:41:11.890 friend who is not an engineer or your coworker maybe they're in a marketing team or PR team or media team they would
01:41:18.730 like to change the label or this button to create and then after a few days they
01:41:24.250 want to change the game to safe now so this kind of problem kind of it kind of
01:41:30.850 tedious and then it's kind of a Monday and hard so back then I I built a gem
01:41:37.600 where you can inline editing all those tags on your website so here's how it
01:41:43.449 looks um I'm actually I'm going to show you a demo right now
01:41:55.619 I'm like for example right now you're gonna have even you're gonna see that you have a label here you can click on
01:42:01.949 it you can be did it um it also works with attribute within HTML tag so you
01:42:08.939 can like hear something and you can save
01:42:14.760 it and at the end you can turn the edit mode off and then if we just like a normal text within rails so um so that's
01:42:22.499 the demo so um what what it actually does here is that it be couple the
01:42:28.530 copywriting from an engineer so all the media people up here or marketing they can go directly to the website and then
01:42:35.610 activate a bit more and then they can edit the text by themself and you don't have to go through the source code and
01:42:42.689 then like change some tags and then redeploy with a with a new yo Phi and
01:42:48.860 actually what you are doing here is that you empowering other people so that they
01:42:54.300 can directly manipulate the website by themself and at the end we we are are
01:43:02.399 happier because you are happier because you don't have to perform the tedious
01:43:08.459 mundane mundane tasks of changing text on the website and your friends or your
01:43:14.189 customer are also happier because they don't have to ask you to change the text
01:43:20.429 for them and yeah so we are all happier with with this kind of empowerment and
01:43:27.619 this is how you can use it in that way in the layout for rails you can include
01:43:33.510 this javascript file which we wish you include the JavaScript and CSS for this
01:43:39.689 gem only when the edit mode is activated and then in your wheels you just use it
01:43:46.320 like a normal normal international eye function for rails like you use a tee
01:43:51.329 and then you give it a name and within the attribute you have to use another function which I named it T a
01:43:57.419 placeholder like this and then in your application controller when you want to
01:44:02.789 activate edit mode you can just call this function and then it mode will be activated so you can
01:44:09.540 that you can cut this function with a session from your you know from your
01:44:15.840 administrator I mean people are marketing people that work with you and that's it please check out my the Jim
01:44:24.360 URL here which is okay if panning for
01:44:33.150 seven slash who wish underscore word and this is my Twitter how so if you have
01:44:38.910 any question just ask me on Twitter or ask me in person thank you very much all
01:44:48.930 right so I came all the way from can you hear me guys yeah you can alright so I
01:44:53.940 came all the way from friends to bring you go med service subject so it's not she's sorry about that alright over the past few years I tried
01:45:02.400 to extract as much business logic as I could from my models to put them in a service and so a service subject
01:45:08.430 basically is an object that does only one thing it has only one method which
01:45:13.590 is cool all right let's go so that's basically how I make my services objects
01:45:19.260 right now so services they live in app services not in Lib because there's no
01:45:24.960 point in them in dibs so there are in services the class name starts with the verb like for awhile I had like user
01:45:32.100 service or whatever now they are like sign up user or process transaction or import bad file or things like that they
01:45:40.200 have a new one method which is the core method takes arguments what's really interesting about using the core method
01:45:46.920 instead of like run or perform or sign up is that actually this is the kind of
01:45:51.990 method you can see everywhere not everywhere but anyway in lambdas in trucks in method objects as well they
01:45:58.620 all have this call method it's very interesting that actually that means that you can just like swap out a
01:46:04.680 service for lambda so if you are like
01:46:09.930 crazy about object-oriented programming then you can also inject dependencies so you have initializer that takes the
01:46:18.120 dependencies and your core method will just take the context like what you want
01:46:23.500 where you want to apply the action on that's the user and using like that
01:46:30.700 dependency injection it helps you testing actually and be like alright I want to test what happens when set para
01:46:38.770 this method fails left it returns false so I want to test that when I said when
01:46:43.780 said our our faves my users are not safe and to do that you're going to create a
01:46:50.350 nice ruby spec aspect stuff and so you
01:46:55.750 you're gonna create a user so that our service step call score call return
01:47:02.260 false and you just check that your user should not receive save but since you're using the core method then you can just
01:47:09.730 actually switch that to use a lambda instead and that means that you can also
01:47:17.290 just define a service as a service like this really simple you can just define
01:47:22.420 it as a lambda and so it makes actually creating like very very small services
01:47:27.880 really easily all right that's it thanks for listening alright this talks about builder it's
01:47:35.530 just like the normal word but without the vowels it's a minimalist attempt JSON
01:47:42.910 templating DSL there's an obvious draw tie together pun there if you if you get
01:47:49.420 it it's smaller it's minimalist that's the URL github slash AG sharp slash builder so what is builder
01:47:58.180 it's a DSL to create JSON objects from Ruby it's very similar to rabble or I
01:48:04.450 think there's another gem called JSON builder it's very very small there's four core API methods which I'll show
01:48:11.440 you examples in a minute the idea here is if you're creating api's with rails
01:48:16.650 you need something you need you need to create your treat your JSON responses as
01:48:22.270 a view layer concern or a templating concern so builder has support for rack
01:48:29.310 Sinatra and rails three two and we've been using it sorely for about two years now
01:48:37.280 so I everyone usually sort of starts out with as JSON here and it's more
01:48:43.880 scaffolding than anything else if you're using it in production you should probably take a look at something like builder or Ravel or JSON builder
01:48:50.900 I obviously happen to think builders is a much better way to do these things so
01:48:57.040 this is a very simple post object that you're trying to render so one of the
01:49:04.190 core API methods is object the idea here is to stay very very close to the json
01:49:10.520 primitives that we're rendering to so that's pretty straightforward there excuse me
01:49:16.520 builder also has collections so a collection is just going to render an array of JSON objects and the collection
01:49:24.170 method works like any sort of Ruby enumerable where it's going to emit the individual object to the block you also
01:49:32.870 see there on the last line attribute so attribute takes a block and so you can
01:49:38.330 do special things like you know if you need to render ISO 8601 timestamps etc
01:49:43.690 you can also do nested collections for more complex responses so if you need to
01:49:49.310 render a collection of posts and each post needs to render a collection of comments that's really easy to do in
01:49:55.160 builder this is I how you use it with
01:50:00.890 rails and Sinatra with rails there's no setup required you don't have to do anything and you locate your builder
01:50:08.330 templates and just like you would any other template you'd call it you know an index template something like index dot
01:50:14.870 JSON builder just like you do index dot HTML that Hamel or E or B or whatever and with Sinatra you do have to do you
01:50:23.510 have to register the Sinatra extension and wherever your Sinatra views
01:50:28.730 directory is that's what you put your builder templates that's it I'm AJ sharp on Twitter check out the projects and
01:50:34.940 let me know what you think Thanks hello let's do something really stupid all
01:50:41.660 right so we are basically I will admit it front we're gonna do be doing evals and all the kind of caveats that come
01:50:47.720 therein yes this is bad idea I railsconf I saw every talk I conquered everything I've gone back and overnight
01:50:54.140 powered by coffee I've replaced everything I have with SOA everything sweets now what let's look at your edge
01:51:01.250 service the one that you're actually having your clients deal with I hope you have mobile apps and you uh they're
01:51:09.290 really popular and strict rest as we know is not chatty at all there's absolutely nothing that's gonna be wrong
01:51:16.370 with trying to fire off nine consecutive HTTP requests and dealing with the wonderful world of the soup that is a
01:51:24.340 telephone data network these days also I don't like restarts you might have gotten this theme from my talk if you
01:51:30.650 witness it today and let's remember that Ruby's a scripting language so I think
01:51:37.070 you can see where this is going so JRuby ships scripting container which
01:51:42.800 forms the basis of its compliance with jsr 233 which is the standard for
01:51:48.010 scripting languages on the JVM and so oh look at that it looks like RAC so we've
01:51:56.060 got a little rakish blob of code here that we're going to have the container
01:52:01.370 parse into a object and then now it's parsed once I can call it over and over again so now I can basically have
01:52:08.719 arbitrary code responding to my rack requests on the JVM and here's my
01:52:14.660 terrible idea middleware so we can actually put all those things into a repository and
01:52:20.620 repository we can basically say for a given path we can use a given set of
01:52:25.969 code and where we going to put that code in a database of course and so we can pull that code and then it'll parse and
01:52:32.750 we can you know do all the optimizations we can memorize and cache everything so we're not pulling things unless we have
01:52:38.210 to we can put a be testing and canary and all that stuff in if we want to and then
01:52:44.590 you know a little more practical example we're gonna pull a user based on supplied user ID and get their favorites
01:52:51.200 as well and put both of those in a single packet this is for mobile device so that we only have to do one HTTP
01:52:56.210 request instead of two you can see the two requests that we make out to the
01:53:01.400 user and favor repositories for those of you in C sharp land you know what that means so we
01:53:08.270 pulled those two objects we render them to JSON and we ship out the response so now I can deploy new edge endpoints
01:53:14.060 whatever I want because I can correlate the path to a block of code it sounds a
01:53:19.820 little bit crazy let's look at the Netflix front-end architecture this is
01:53:25.250 the diagram of how it works as everything turns yellow looks pretty straightforward but what is this
01:53:32.000 labelled end point code that is not the right symbol that's that should not be a
01:53:37.430 data source so they actually do this because they have a thousand different
01:53:42.440 devices they have different sets of endpoint code for every single device and the client teams are actually in
01:53:48.170 charge of deploying all this code and then they stick it in their Cassandra clusters and then the code is loaded up
01:53:54.739 from there and then run evaluated and run so advantages this approach we can instantly in deploy and rollback
01:54:01.570 endpoint code multivariate testing and canary is trivial we can test these
01:54:08.050 endpoints simply because there's simple functions I'm not going to use the f-word we can track what code is exactly
01:54:15.260 running every single endpoint response and it's polyglot JavaScript JRuby
01:54:20.719 groovy closure Jai thon scallop everything else that's going to run as a script on the JVM is at your service
01:54:30.440 of course when has anything ever gone wrong with a code evaluation like this and I sure hope your database can hold
01:54:39.290 up and then it should be fun if you end up having some kind of process maturity
01:54:45.850 problems or drifts putting code in a database is a little bit different than
01:54:51.350 having it in a source code repository we can actually keep track of what's going on I'm done I apologize this is my first
01:55:02.090 talk I've ever given so so originally I wanted to talk to you
01:55:08.550 about a passion of mine and that was embracing a child's curiosity but that's not really what I'm talking about I just
01:55:14.340 wanted to talk about curiosity and that really isn't really what I wanted to talk to you about either is more about
01:55:19.560 wonder that sense of awe that lightning or that light bulb effect that you get
01:55:25.230 when you find something that just absolutely amazes you I want to start off by talking about puzzles I'm a huge
01:55:31.920 fan of puzzles I I love puzzles any kinds who Doku those of you who you may
01:55:38.100 not know about Kudo is kind of cool but the one I wanted to talk to you about is the Rubik's Cube and the
01:55:43.590 Rubik's Cube is so simple it's plastic with stickers on it but it can keep a
01:55:51.720 child and me sometimes occupied for hours and hours upon end if you hand one
01:55:58.610 to a kid a their light their eyes will light up they will just spend hours
01:56:07.290 thinking about how this thing works and want to take it apart and look at its inside and how it works so I like to
01:56:13.020 think about work kind of like a Rubik's Rubik's Cube type over there like a
01:56:19.860 Rubik's Cube kind of a puzzle to try and figure out so as being inquisitive
01:56:25.170 thinking about the problem that you have and trying to take it apart and rebuild
01:56:30.900 it and sort of the sort of the person that I think about when I think about being inquisitive is this guy
01:56:36.300 I love Calvin he kind of gets into trouble sometimes but he finished his
01:56:43.320 career in the cartoon world Bill Watterson finished him with this saying
01:56:48.720 it's a magical world Hobbes ol buddy let's go exploring so I like to think about coding as exploring finding new
01:56:56.130 ways to do things but and being curious please don't do this don't kill yourself
01:57:04.500 that's why that's why I went with the child analogy over the cat cos curiosity killed the cat not the child and and of
01:57:13.650 course we find Ruby the thing that we want to spend all our time on but Ruby's the only thing we should be curious
01:57:19.530 about things like Python Python has a lot to offer and learning about Django
01:57:25.710 yesterday one of the talks was awesome that's piqued my curiosity I'm gonna be I'm gonna be spending some time on that things like go rust Steve collab Nick
01:57:34.020 kind of got me interested in that even Java and if you haven't subscribed to
01:57:44.040 Ruby tapas this has changed the way I look about Ruby look at Ruby I have
01:57:52.050 never been amazed by Ruby so many times and so consistently in my entire life so I highly recommend you take the time
01:57:59.910 right now and subscribe it's totally worth the nine dollars so my thought is
01:58:05.310 go be curious go exploring Thanks hello
01:58:12.810 everyone yummy yeah that's an iPad I seem to be the only one using an iPad
01:58:18.270 for this so obviously I'm not gonna be doing any kind of a presentation or anything this is actually two talks
01:58:24.000 I'll give both of them have time the first one is titled people like apps it's my excuse to talk about apps into
01:58:30.239 psychology two of my favorite topics the takeaway of this talk is that too is
01:58:35.790 that there's more to people than you know and by reducing what you don't know you don't know about them you can become
01:58:40.920 better developers peers and human beings some additional disclaimers I don't
01:58:46.469 actually view people as apps you know it's just makes for a very useful rosetta stone and this could probably
01:58:52.650 have used more love I've rewritten this you know a bunch of times and it's just a five-minute talk so as a wise man once
01:58:57.930 said it we'll do it live so let's get started so the first one is pretty obvious apps
01:59:03.660 can be written in various languages and some are multilingual all have varying language versions and patch levels that
01:59:08.820 is to say that the words you use can mean different things to different people or just mean complete nonsense apps have
01:59:14.730 api's if I submit the query what is your birthday a queer a clear API might return a date or a date time while a
01:59:20.940 stringent one might throw an error for not specifying if it's in dog years or human years and a confusing one might
01:59:26.400 just return it as a number of milliseconds since you've been alive just because you can send or receive messages doesn't mean you know
01:59:31.829 to communicate so what kind of API are you how resilient is your codebase when dealing with troublesome api's and what
01:59:37.979 can you do to be a better API apps can be poorly coded some were coded by poor
01:59:43.260 coders who are coded by poor coders who are trying to create the next great app others had to rely on scaffolding and
01:59:48.899 generators and are just glad it's working at all and of course some work program to various write similar
01:59:54.449 programs by very skilled programmers and/or of absurd quality the next thing
01:59:59.669 is they often have failing specs and go ignored despite using continuous integration they typically have brittle
02:00:05.489 tests and false positives or negatives the psychologist Albert Ellis coined the term masturbation to describe the
02:00:11.879 tendency to phrase healthy preferences into unhealthy absolutes with the use of words like must and should in our daily
02:00:17.969 speech and thinking and irrational expectation is created that is likely to be brittle if not fail outright for
02:00:23.909 example I must give an eloquent speech otherwise I will never be accepted by the community let's see the next one is
02:00:30.119 apps can be hacked a manipulated this talk itself is really just an attempt at code injection no app is used by
02:00:36.510 everyone and those that do use it likely accept it with some reservations they may criticize leave for something better
02:00:41.789 stick around forever or seem unable to decide at all it's normal some rep some front-ends use pre-built
02:00:49.169 templates or frameworks some copy off of others and some are handcrafted some or combination personality is UI it's how
02:00:56.519 users interact it can trip them up make them fall in love or send them running
02:01:01.939 with apps information must travel through the computer systems into the application or from the application to
02:01:08.189 the computer people also have a computer and an application obvious analogy the way we evolve simply pact the complex
02:01:14.789 systems on top of the basic ones and all signals flow through the I'm sorry I lost my place all systems flow through the simple
02:01:21.809 systems out through into the complex ones but to be but our behavior I'm
02:01:26.820 sorry but our computer can be wonky and can interfere with the application our computer is our behavior it's how we can smoke cigarettes even though we know
02:01:32.999 they are not in our best interests it's also how we can extensively I'm sorry instinctively catch a ball or
02:01:38.699 learn I'm sorry where am I here it's also how we can safely catch a ball that is thrown at us that is thrown at us
02:01:45.190 computer has learned how to operate in an attempt to serve the applications best interest but it often finds creative ways of doing so in fact for
02:01:52.930 the first 12 years or so the app is still being developed and the computer is left to fend for itself apps can be
02:01:59.110 reprogrammed redesigned their specs improved and expanded and the computer can be recalibrated to its all code and
02:02:05.380 code is changeable no app is bad they may have failing specs poor code quality
02:02:11.230 a confusing API and a poor front-end despite all of that at the end of the day they are trying to satisfy their
02:02:16.810 user base and provide a business value a crappy API does not mean it's a crappy app a person who behaves poorly is no
02:02:24.040 lesser a person only a person who behaved poorly most apps want to be loved spoken of favorably and to be able
02:02:30.310 to achieve their goal for most people that goal is happiness is the end to all of our means and like any good startup
02:02:36.820 it's not a lose clear how to get there and the second talk is more of a rails
02:02:42.670 talked along in similar analogy a good app is like a good friend they are warm they are helpful they are fun they are
02:02:50.560 friendly they're considerate and they are caring thank you hi sorry I'm a
02:03:07.030 surly and I'm parting in English but let me change to speak in English in this
02:03:13.840 lighting talks
02:03:19.000 introduction I come from Japan to latest
02:03:24.860 Kampf I've been reading more than ten hours on a plane it happened when I was
02:03:36.550 going to light the code gem install fubar could not connect to internet I
02:03:49.520 was very shocked but I find Jamie Miller
02:03:56.540 command after arrived at the hotel
02:04:01.869 I'm types Jumeirah ooh era installed do
02:04:08.929 be James Miller jail for the mirror command okay okay gem install ruby gems
02:04:16.309 Mira gem Mira era ooh what a Google I
02:04:29.079 find issue does not work with Lewey 2.0
02:04:34.849 oh I was very shocked but this was
02:04:43.599 easily deserved I'm typing pray required groovy James
02:04:52.730 Mira command gem commands Mira commented new dot exclude this command is only the
02:05:02.510 beginning to build mirror server build
02:05:07.610 Mira server and are not to Jumeirah loot their letter suspects and Marshall space
02:05:19.179 Emer and quick dia latest index and all gem
02:05:29.449 specs and HTTP is that a patch dad goodness
02:05:39.869 Irish new DM l rubygems meter commander
02:05:46.789 these commanders create divert gem Mira RC fetch old James fetch old gemspec
02:05:53.909 fetch or other files needed to build a Saba start the server yeah and we Jamie
02:06:04.550 2 2 2 2 2 2 2 2 2 2 2 2 2 okay general command Saba webrick start
02:06:15.780 and gem install Darius hi who are hi ho
02:06:21.780 hi ho sauce HTTP localhost yes I will be
02:06:29.959 able to hack in the sky yeah
02:06:35.570 but yes it took too long
02:06:42.179 times of fetch no I will be able to hack
02:06:51.929 in the sky at next race car
02:07:01.280 one more thing my company cookpot works on ruby 2.0 and
02:07:09.380 I will hold our 24-hour development
02:07:14.820 contest join us thank you what is this
02:07:20.310 thing on yes weird thank you yes my name is Winfred Nadeau I worked for a developer
02:07:25.380 auction com if you happen to be unhappy with your current position and what you do every
02:07:30.690 day give me a talk afterward come see me afterward I'm also at w8o on Twitter and
02:07:37.050 Debbie Nadeau and github as well so I wrote my second gym ever last weekend
02:07:43.469 and kind of encapsulated some logic that our our app has been using and I really
02:07:48.600 just wanted to talk about it and see if this is a terrible idea or not a bad idea I mean any feedback would be great
02:07:54.480 in fact this is the kind of thing that I might even be in one line and like one additional option and some command and
02:08:00.660 rails anyway so the gym is speak louder
02:08:08.150 make the font bigger thank you yes all
02:08:15.900 right so essentially we had these we're trying to avoid using polymorphic associations
02:08:21.840 and we have these two models we use STI two cess spot to specify multiple types
02:08:28.199 of users but each one has different sets of attributes and so we needed to
02:08:33.929 delegate to a separate table for that for those kinds of attributes so access
02:08:39.239 essentially delegates it's more of a composition patter than delegation but it delegates all of the fields the field
02:08:46.050 accessors and setters and any of the other helpers that come along with active record to the other model and to
02:08:51.719 the other table as well so it's just I mean one little line in it it only works
02:08:57.810 for these belong to associations because it's I mean it's composition that the guy that you're working with has to
02:09:03.239 exist so essentially the strength attribute here is actually stored on the
02:09:10.140 rebel profiles table but you can access it accordingly and the active or active model dirty
02:09:17.940 Alvers work and querying could possibly work in the same way with by joining
02:09:26.190 through the association obviously this would this would work as is but ideally I would like to be able to automatically
02:09:32.010 join the association as well through the Ruby syntax like this but I have no idea
02:09:37.380 what I'm doing in fact this is my first conference and the first speech I've ever given so
02:09:42.810 please please feel free to come talk to me after that after this I would love to be told why this is stupid anyway thank
02:09:49.410 you that's all nope okay here be hola so
02:10:00.350 my name is David I go as dab it on the internet and I'm here to talk about
02:10:06.420 conferences I love conferences you probably love
02:10:12.570 conferences that's why you're here or at least I hope that's why you're here but I've known people that don't like
02:10:20.850 conferences I've been attending railsconf since 2009
02:10:26.610 and I met a lot of people over time and I known people that I met once and then
02:10:36.060 never came back to resk um that's weird they gave all kinds of excuses and
02:10:42.240 content it's not good enough talks are two basic the food is awful the joke's
02:10:50.820 on you the food was awesome this year it was
02:10:57.019 Boehner and sucks why do you want Internet you're supposed to pay
02:11:02.129 attention like so I think they're
02:11:07.769 missing the big picture and I hope that you don't miss the big picture come back
02:11:14.519 next year the conference is about the
02:11:19.530 content yeah but it's also about the people it's about going away of that
02:11:26.039 desk that you sit on day after day at home or office and shake hands you know share your stories you would be amazed
02:11:33.749 by the number of people that you will run into and they will have the same
02:11:38.909 problems that you had talk about it later out share the pain go like we're
02:11:47.219 still using 2.3 we're in Kansas I feel
02:11:53.519 yeah you know if you think the content level is slow then you must be an expert
02:12:00.389 give some advice help everyone else you know there's a lot of things to do at the conference and the other side is
02:12:08.519 no matter what your mom told you alcohol is good in proper measure alcohol is
02:12:17.309 good because if you're a high person it will bring words out of your mouth and
02:12:22.379 it will make you talk with people go to drink ups and you will see that it's an
02:12:27.809 effect and alcohol will make you dance and that's very important if you were
02:12:35.159 not there of last night you miss all the fun dancing dancing is good go gangam
02:12:48.889 also conferences whenever you go to a conference think the people that make it
02:12:55.109 all happen think the people that are responsible of your current job go find Rio Bates and
02:13:01.919 thank him for rails cast you know you've used race cars you've seen one at least
02:13:07.139 I know you have don't lie to yourself you've seen those give a hug to Aaron Patterson because he
02:13:14.480 works a lot so you can make money out of his code don't you that injures you
02:13:20.480 you're doing serious cash with his code because you're all using Apple Computer so must be some serious money and even
02:13:28.940 if if you don't like like to talk go find dr. Nick he'll do all the talking
02:13:34.460 just you know get in front of him he'll talk yeah that's amazing
02:13:40.060 the list goes on you know there are people hi dr. Nick have fun you know do
02:13:48.350 not feel guilty of spending the company's money and having some fun nothing wrong in it go out there meet
02:13:55.010 the people it's about both things content yeah you will learn a lot of
02:14:00.410 things but also people make sure that you're meeting people make sure that you're saying hi I do this I do that oh
02:14:06.830 really yeah I mean cancels 22.3 that's it
02:14:12.560 feeding thank you hello I just like to
02:14:19.070 preface this with this is the first talk I've ever given I've only been coding for about a year and a half and I've only been working
02:14:24.770 for like two months so I'm like total amateur compared to you guys yeah so yeah extra Woo's are appreciated um so I
02:14:33.080 as was mentioned I just finished writing this gem and was like 15 minutes ago and I said okay you know I'm just
02:14:39.110 gonna do let me talk on it it's called our BSS so if you're like me and you
02:14:45.680 really don't like si SS or CSS you can now do CSS in Ruby so anyway let's so I
02:14:55.250 got this web page here and you should come work at Zozi I work at Suzi it's the best all right yeah so I just I spun
02:15:04.790 up this application and let's go over so I wrote this file simple dot RB SS it's
02:15:11.840 in my assets folder and I got div would be the name of the div I guess selector
02:15:20.000 and so here the properties that I want to use and I just used like like a regular Ruby block and then I can
02:15:26.510 go back to my code here and if I just give me a second that was
02:15:32.989 kind of creepy yes good okay so I'll include this RB SS helper
02:15:41.929 in my layouts file and then if i refresh the page there you go who works the CSS
02:15:49.280 gets added and and you know like you can do other things too like you can do variable assignment and you can do
02:15:55.010 nesting as well and one of my colleagues asked me well what do you do if you
02:16:00.020 don't want to name the selector and you just want to name the class so I put in this underscore so that takes care of
02:16:05.809 that so you can do variables and stuff too right so now we go less simple and
02:16:14.869 refresh the page and I don't think it worked Oh what did I do oh right it's got to be
02:16:20.869 the right refresh BAM
02:16:26.570 Oh baby but everything okay soothing and like wow it's not that great like si SS
02:16:32.660 already does that but then you get over this and you're like oh man I could totally write like a CSS class that would be really cool so I
02:16:41.570 wrote this class and honestly I have no idea if this is useful at all but I just
02:16:47.750 saw it you know like I wanted to get more comfortable with the rails size hooks and and how they work so this came
02:16:54.410 to me in a dream and and I thought it'd be kind of cool if you could write a class for doing CSS and I just thought
02:17:00.889 this would be this might be a little bit more organized than having this long line of stuff that you don't really
02:17:07.670 understand why not put it into a method called descriptive method that you know
02:17:13.280 does something so I create the new new class and then call the method and it's
02:17:21.410 going to take all of this stuff and and and put it in so if you just give me one sec baby
02:17:30.690 I'm gonna get a reputation when I come back next year everyone's gonna be home in this guy's a creep okay so now now I
02:17:39.219 don't even know what rules I assigned a text-align:right with and then and then
02:17:46.120 you can also like nest methods within methods right so get that background properties in there because you know
02:17:52.059 like we want this website to look like it's 1995 anyway yeah so that's it thank
02:17:59.679 you very much
02:18:36.630 you