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