00:00:24.360
already ok my name is greg bell I'm from Vancouver Canada and there was a couple
00:00:31.900
was perfect um I run a company called reverb software up there and I started a
00:00:37.989
open source project called active him in about two years ago launched it out into the world actually about a year ago
00:00:44.010
thank you some people use it and I got to go through the joys and pains of
00:00:50.769
running an open source project for a year that people actually used and some
00:00:56.229
of the so I've got seven tips what to do if you're running an open source project don't use the merge pull request button
00:01:03.039
on github Travis CI is awesome use it don't forget that design and user
00:01:10.719
experience if your project has a front-end get designers involved depend on less dependencies right half as many
00:01:17.500
features and twice as much documentation build a community and do it just do it
00:01:27.030
ok I'm going to talk about integration testing engines today with the engine
00:01:32.289
store that was held I'm not sure if it was yesterday or the day before they all kind of blur into one I really disagree with what was taught I think that you
00:01:39.009
shouldn't be drawing rails application you shouldn't be drawing your routes on the rails application I think that it's out of [ __ ] my tweet during that
00:01:46.600
talk was no do not draw routes in the application [ __ ] I want to jump on stage that's how much I disagree with it so
00:01:53.140
you should be drawing routes on the engine itself doesn't matter if you are doing like if you are just having an
00:01:59.679
internal engine you should always be drawing it on an engine instead of on the application so I really really
00:02:06.549
really I just like to emphasize that I strongly agree with that strongly disagree with that talk
00:02:11.890
this then by drawing about some of the engine you can mount your engine using mount your engine at a specific path in
00:02:18.490
your config routes file or if you don't want a man at any particular path just matter at root and all act as if you
00:02:24.610
drew it on the rails application itself when this happens though some people complain that oh my god my routes are
00:02:30.400
broken no they're not broken they're actually just elsewhere this is because
00:02:36.670
in your engine you should be calling isolate namespace and I think isolate namespace was mentioned about 20 minutes too late in that talk yesterday isolate
00:02:44.290
namespace will isolate the engines namespace so your models your migrations your controls or all automatically
00:02:50.620
namespace and that is the right way of doing it as well this means that you can have routes inside your engine like
00:02:56.560
resources people and you can have routes inside your application called resources people and even though they're the same
00:03:01.600
routes they're actually quite different so inside your engine you can call or inside your application or your engine
00:03:07.300
you can cool the engine name dot people path and that will go to the people path inside the engine or you can call may
00:03:13.480
nap people path to always go to the people path inside the application when
00:03:19.420
we were working on spree we had this problem we had a we had an aspect test for the products controller and we
00:03:25.510
defined a simple test in it that went to the index action and can anyone tell me
00:03:30.670
what this does it goes to a great screen
00:03:36.989
it says no route matches controllers free products controller action index and its allies damned lies because the
00:03:44.260
Spree products control actually existed the problem was that we weren't using use wrap and you need to use the user
00:03:50.440
option and controller test to tell it to go to the engines routes inside of
00:03:56.620
integration tests which is I'm sure why I'm talking about this we had the same problem when we call visit products path
00:04:02.829
that should go to the products path inside the Spree engine this is actually inside sprees test itself visit products
00:04:08.709
path and that also broke it said undefined undefined method products path the way we fix this on this lies damn
00:04:16.090
lies again the way we fix this in spree is we provide a URL helpers module called our it's called your hoppers duh
00:04:23.349
and it contains an ethical spree and that just simply returns the euro hope is for the Spree engine and
00:04:30.130
then inside your integration test you can use visit spree products path you can use it inside of sprees integration
00:04:35.770
tests and you can also use it inside the applications integration tests as well there's a great getting started with
00:04:42.010
engines guide that i wrote and I wrote a chapter in rails strain action about engines i would highly highly highly
00:04:47.710
encourage any of you to read both of these things before doing any engines work whatsoever thank you so i basically
00:04:56.500
just want to quickly talk about why i decided to do tokaido which is previously called real tap the basic
00:05:03.400
idea behind this project is hey I'm a five minute I don't think I could do
00:05:08.979
this in one minute so the idea is to have a precompiled version of Ruby that
00:05:14.410
is going to be updated at least in terms of patch releases for a particular version no hard coded passing the binary
00:05:20.979
so if you just compile Ruby the way you would normally compile it you end up with paths that are hard-coded to your local file system don't do that we want
00:05:28.419
to have pre compiled binary gems so if you have local Geary you're not installing nokogiri and having to find
00:05:34.000
lib XML on your local machine and hope it's there it opens the right version I hope it's the version Aaron likes I have
00:05:39.340
the next one in bold kernel-based workflow this is not an attempt to have a GUI that replaces rails it's an
00:05:45.130
attempt to make it so that the number of failure scenarios that people have when the install rails in the first place goes down to as close to zero as we
00:05:51.010
could possibly make it there's also just a bunch of extras that I want to do like automatically run bundle outdated for
00:05:56.620
you and give you notifications run things like flogged and fly and basically tell you like here are some areas your code that are hot spots for
00:06:02.849
problems things like rails best practices some kind of DNS solutions so
00:06:09.220
that you can have like my app dev Ruby toolbox integration so you're like I wanted off that authentication solution
00:06:14.590
working with the Ruby toolbox guide to get an API for that they'll be awesome and then a rails temp rails protocol
00:06:20.530
handler so that you can click on something on rubygems.org and have it installed so general goal precompile
00:06:27.130
everything and by pre compile everything I mean statically compile I don't Aaron alluded to this I don't have time to
00:06:32.169
talk about what that exactly means but you should we should not be having dependencies on shared extensions
00:06:37.310
in on OS 10 because it just opens the door for too much craziness and it turns
00:06:42.590
out to be someone complicated to do that in terms of failure scenarios if you do five steps and each one of them has ninety-five percent chance of success
00:06:48.830
your total chance of success is seventy-seven percent if you have ten steps is fifty nine percent you get my point even though it seems like
00:06:54.590
everything works reliably it's easy for something to fail I don't want compilation failures to be a thing that
00:06:59.660
we have to worry about in general so it's not hey you should really learn how to compile things it's like why do we
00:07:05.210
why is AC compiler an important part of the Ruby workflow in august and i want to avoid in general unrecoverable
00:07:11.540
system-wide failure so if in step 3 your system gets screwed up you may not be able to recover from that and you may
00:07:16.610
not know what exactly went wrong the core of it is going to be usable on other platforms like Linux using the sm framework which wayne cedwyn wrote
00:07:22.790
working with michael pappas on that and the final goal is I want to be I want this to be an environment that i am
00:07:28.130
using on a regular basis myself I don't want it to be an easy bake oven so that's that this is sort of my guiding
00:07:34.940
principle automating failure-prone workflows doesn't eliminate the failure but it makes them harder to recover from so we could definitely make a here are
00:07:41.240
the five steps and run them and then if some of them fail you're basically boned this is something that happened to us
00:07:46.820
when we were doing the Ruby helpdesk someone came in they were doing gem install sequel like three it didn't work turned out somehow user loop sequel i3h
00:07:54.110
was not in their system obviously that should not happen I we're never able to figure out exactly what went wrong but
00:07:59.480
situations like this should not be part of the workflow at all this failure should not break your ability to start
00:08:04.580
things I want to say a lot of people are like they take the easy-bake analogy to
00:08:10.220
mean like oh I want to have a see compiler I am a real grown-up programmer pretty much every other platform rather
00:08:15.410
than OS 10 uses pre-built binaries I guess except for Jen to there's no reason why most end-users kaftan not use
00:08:21.920
pre-built binaries and I think somewhat more importantly I don't really see OS 10 users the average joe's 10 user learning rails to be significantly
00:08:28.400
different than a Windows user and for some reason even though it's probably easier to get AC compiler on Windows nobody's telling people where it's
00:08:34.550
trying to install rails on Windows like step one download dev kit right everyone knows that you have to actually have
00:08:40.580
binaries and I don't I just fundamentally a guy who goes into an apple store and buys a mac and comes to says hey I want to learn rails is not
00:08:46.389
somebody who is fundamentally different from the windows user also i just want to say like the goal of this is actually
00:08:53.170
to have something that everybody can use i want to use it i want to basically build a binary distribution that is useful for me but it will also it should
00:09:00.009
also be helpful for noobs as well so this is sort of along the same lines as what the h days dhh said first day which
00:09:05.829
is i want to i think it's good to have a solution that is shared by everybody that's both advanced users and new boobs
00:09:12.069
are able to use together obviously there may be some people who are like doing some crazy stuff with many versions of
00:09:17.470
Ruby or something like that but for most people this should be a reliable solution like in every other platform
00:09:22.629
thank you very much ok I can try to connect one hear me now ok I enjoy this
00:09:32.949
great and everyone hear me now it's gonna be great hi I'm Brian I helped
00:09:41.230
organize the Toronto Ruby Brigade he do pack nights and I help with a couple
00:09:46.299
other events and I wanted to talk about why it's a great thing to help organize
00:09:51.490
or be an active participant in your local user group so how do people here many people go to
00:09:58.649
user group event monthly tomorrow so a pretty good number of people actively organized or favorite your talks or
00:10:05.670
something like that ever I think should be a lot higher I'll tell you why number
00:10:11.490
one by going to the local user group by participating in the mural for user group you get to go way more people in
00:10:17.339
your community you know being able to go to a pub night or a drink night and just be able to like catch up with like
00:10:24.029
really smart interesting to people is great by the way everyone so um you know
00:10:31.260
okay I gotta try my best to this number to recruit that is way easier whether
00:10:38.040
you're someone who actually is responsible for a recruitment or just a developer at a company like your company
00:10:43.740
most companies are looking for great developers a way to get your company's name out there so yeah recruitment is
00:10:50.640
way easier you know it gets her company's name out there especially if you're a small company it's a fantastic
00:10:57.300
way to put yourself on the map to let people know that your company is there and more importantly that your company
00:11:02.490
cares about the local community and wants to make the local community better
00:11:07.700
this one was a theoretical thing until about two and a half minutes ago and I could say this is absolutely true it is
00:11:15.360
a lot easier to do a talk to 30 people at you lost local user group or hold a hack night or something like that so I
00:11:21.750
mean if you want to get a bit of experience if you want to dip your toe into trying this out your local user
00:11:28.890
group is a great way to do that um not everyone can make it to the big conferences so you know we're all very
00:11:36.330
lucky we can all come down to railsconf you know with our flights and our hotels and our tickets not everyone can do that
00:11:42.410
so one great thing that I think you know a lot of people could do is go to your local user group do a talk about what
00:11:48.600
you learned at railsconf your content is already going to be there for you so it's fairly easy to do organizing event
00:11:56.130
is less hard than you think it is when I started doing hack nights in Toronto I
00:12:01.950
had been working with Ruby only for about six months I'm so as a beginner I was by no means an expert and it worked
00:12:09.990
fine you know we got a really good group of people out you know some beginners some experts a nice mix and I thought it
00:12:16.590
worked fantastic and the organization effort I mean if you're doing a big talk night it can be a lot of effort for
00:12:22.560
something like a hack night it really doesn't take a lot so it's worth experimenting it's worth trying another
00:12:28.890
reason our strong deaf communities are amazing you know having a community
00:12:34.470
around your city of great developers who know each other and can get in touch with each other it's fantastic and it
00:12:40.680
doesn't really take a lot if you don't have deaf community or user group inside your
00:12:46.839
town absolutely start one even if it's only a few people because it will start building those networks and it really
00:12:52.509
isn't a lot of effort to get those Network effects happening spreading the
00:12:57.879
rails love getting people more exposed to Ruby and rails at our hack nights we
00:13:03.189
have about twenty-five percent of the people have either never used ruby rails
00:13:08.350
or just started learning it within the last month so I mean that's pretty
00:13:13.449
incredible we have five to ten people every month who are learning about Ruby and rails and I think that's fantastic
00:13:19.720
that we're kind of like spreading the word spreading the love of their rails so some things that you can do to start
00:13:25.779
organizing a deaf event in your community do a talk night talk at a talk
00:13:31.269
night if you have one or two start one pub nights are great just get together and drink that's like the easiest thing
00:13:36.819
you can do run a hack night it doesn't need to be a lot it can just be like hey I'm going to make my office available
00:13:43.269
for three hours why doesn't everyone come and hack and show off what they did and teaching Ruby so there's a lot of
00:13:49.929
people doing great stuff with this consider doing like a kid's code camp find a way to teach Ruby to non hackers
00:13:58.179
like people in marketing or journalism or something kind of connected to Ruby to university students I don't think
00:14:04.629
Ruby gets enough exposure or really anything else you can think of look at other cities see what they're doing and
00:14:11.019
emulate what you think is cool thanks very much so my name is Mike Skolnick
00:14:19.329
I'm actually one of the main organizers of the Atlanta reviews this group and I agree with everything he just said all
00:14:24.339
right so yahoo to just talked about tokaido and its end goals when that was
00:14:29.769
posted on kick starter Jeremy McNally said I don't agree with all these goals I don't want a rails app that I'm going
00:14:35.230
to use because that's not something I can put on my server really what we need is something that's going to help wean
00:14:40.449
people into the current tool set so he started working on rail car and has
00:14:46.689
similar goals isolated environment installs binaries there's a nice gooey
00:14:52.179
so it helps you set up rails from the beginning there is a command line and as well and it's based on real tools
00:14:59.140
like rbn and all that stuff and it makes it easy to transition into the workflow that we kind of have now so you move
00:15:06.430
from the top of the chart to the bottom when you begin your kind of clueless you want a one-click install and as you
00:15:13.030
become more familiar you get a full GUI that allows you to install any database system then you can start using the
00:15:18.040
command line and then eventually you don't even need railcar at all so how is it made it's written in matt grupe and
00:15:25.110
yeah so Ruby binaries are packaged up using some rake tasks using rate
00:15:31.420
compiler similarly doing static compilation some next steps that we want to take take this to the next level air
00:15:37.690
fix some issues there's some issues up on github and if anyone finds any feel free to wire them on there or add them
00:15:43.660
to wire up some of the missing pieces it's not all fully functional just yet but it is on github figure out some Ruby
00:15:50.920
building issues that are currently present finish up the command line interface and set up bin gems which is
00:15:56.050
going to be a way to install binary versions of gems and we want to also publish the rake task once they're not
00:16:01.150
so embarrassing right now they're not so clean but once they're cleaned ramiz going to push them up to github so if
00:16:07.210
you're interested in getting involved you can check out github it's already up there there's some issues there's some
00:16:12.370
to do notes that need to be sniffed out and probably turned into issues we need some more documentation as well so
00:16:18.610
that's railcar real card out info if you're more or if you're interested in more information thanks all right so my
00:16:29.170
talk isn't out of why you don't get hired Who am I my name is Felix domingues I'm at the cat on Twitter I'm
00:16:34.930
a developer of rapid reporting division of talks different equifax we've been consumed and consumed again nothing I say represents the companies I work for
00:16:41.200
so how did this whole talk start we were sitting at the bar someone asked I submitted a resume and I never got a
00:16:46.810
call back and I said well have you talked to anybody about it he said no I said well we got a bunch of people in the exhibitor area we got recruiters and
00:16:54.700
we got VPS of engineering so I go talk to them about no only feel like it so I did the work for him so I talked to all
00:17:02.170
these people I spent total seven hours going through each one of these guys went to the meet and greet and a common
00:17:08.980
thread started appearing and as I shake my nerves off guys give me a second and once again i know i
00:17:15.789
present these companies either so everything you were told about resumes is wrong you go through college you go
00:17:21.939
through career planning they go to the career training they direct your resume at all the fortune 500 companies and the
00:17:27.220
quote-unquote real world we're not the real world or the tech world so display
00:17:33.820
your skills first you use some technologies awesome interesting problems that's they want to see they
00:17:39.009
want to see that a general progression from the beginning of time like let's
00:17:44.229
say your first job was in visual basic I use visual basic 6.0 and then you went on used she sharp dotnet to solve some
00:17:50.379
interesting problems you've progressed even further you did open source all that overtime if there's a break you
00:17:55.749
decided to pursue a different career finance art if it doesn't folk if it doesn't follow your tech line take that
00:18:02.349
job throw it at the bottom of your resume they're not looking at start times and end times they're looking at a progression of skills and leave the
00:18:09.369
business stuff out unless you're applying for management let's see I did write some notes hmm action I second
00:18:18.940
thing in terms of interaction issues as one of the questions I posed what are some of the immediate turn offs you have when people come and talk to you they
00:18:24.940
said we get a lot of arrogant people who think they know everything well let me quote my dad I would show up at home hey
00:18:31.149
Dad hey I got a 90 this semester in my math class he's like great son you didn't learn ten percent of what the
00:18:36.789
teacher wanted to teach you and the teachers and teaching you everything about the subject congratulations so
00:18:44.349
learn to be humble some quick hacks and
00:18:49.479
tips and we're talking about don't use the front door if they have a job posting site and say submit your resume here don't use it get on linkedin find
00:18:56.950
the recruiter for the company and try to initiate that first personal connection first it negates the Holy need of a
00:19:03.759
cover letter you can just talk to them you submit the resume you get in through the back door be honest was another one
00:19:09.399
of the things everybody talked about if you put a skill set on your resume and you say hey I know these five languages they better be able to hand you a laptop
00:19:16.119
and say right knee hello world in all five languages if you can't you don't know it know what you want some people
00:19:23.589
need structure if you go join a start-up you're going to do everything but some people want the structure of moving from developer
00:19:30.179
one developer to to architect know what you want don't waste their time and they won't waste yours another thing one of
00:19:36.900
the sales people i was talking to is saying it's hard for me to talk to developers because they just are all
00:19:42.690
introverted and I'm like well how do you fix that talk to people all the time one of the interesting hats you told me
00:19:48.120
about was like go to these conferences grab a cup of coffee find an empty table with one person sitting on it that's not
00:19:53.400
really empty is it and then say hey my name is Joe what is your name practice
00:19:59.100
that over and over again you start developing simple small talk skills and you're easier to work with in an
00:20:05.280
interview setting last document what you do today because you won't remember it tomorrow if you did something quick and
00:20:11.640
simple write it down put it in a spiral notebook because you're going to forget to add it to your resume two weeks from now when you're trying to find that new
00:20:18.270
job big or small published something doesn't matter what it is do a blog do open source submittals do anything they
00:20:26.790
want to show that you're passionate about something anything it doesn't matter if you like birds and you do like
00:20:32.880
bird-watching do a blog on bird watching they want passionate people and remember when you're in the interview setting
00:20:38.070
you're evaluating them as much as they're evaluating you so ask questions you have to be passionate about the job
00:20:44.130
you're applying for or you're wasting their time thank you very much i got 22 seconds i hope this helped and that is
00:20:50.130
my dog good afternoon my name is Reed
00:20:55.470
Morrison and the software architect at clarity services what I want to talk to you about this afternoon is a little
00:21:01.860
thing that I've never wanted to deal with in the past myself how to secure data in our databases and had encrypt
00:21:07.620
poss words in our configuration files so I want to show you some of the things we've done in that space so if we look
00:21:13.620
at what we want to encrypt we have said since the data I'm sure everyone's used active record models some of us would
00:21:20.010
even use [ __ ] and all the various fields in that and showed several other data sources that we have where data is
00:21:25.679
encrypted that you need encrypt ensure it's safe you can imagine if someone lets the data out we've seen several of
00:21:31.770
those already where data is let out of the systems and private information has gotten out there so an organization is very important so
00:21:39.260
if we have a look example the other one is passwords in configuration files how many times is the IT operations turn
00:21:44.510
around to you and said we don't want our database password sitting in the clear in those configuration files so years
00:21:50.150
it's very simple and elegant solution to that problem so if you want to look at
00:21:55.490
just encryption how do we encrypt data so if I open up a rails console I can just say symmetric encryption but
00:22:01.280
encrypt with some text in it and it gives me back straight away the encrypted data very simple to use
00:22:07.780
decrypt same thing symmetric encryption decrypt give it the encrypted string and
00:22:13.070
bang give them the data straight back to me so now let's take that to active
00:22:18.500
record with active record we will make a little simpler if anyone is familiar data encrypted gem drop in replacement
00:22:23.990
the same thing at your encrypted basically what we do is we just add this
00:22:29.210
in utter encrypted and SSN along with the encrypted SSN in our database
00:22:34.910
migrations and now we can assign a social security number in here and obtain out the encrypted value so in the
00:22:41.900
database it's I need encrypted value that's stored and the same thing in mongoid so anyone using mon-wed as your
00:22:48.980
map into manga very much similar scenario all you do is the ng add
00:22:54.440
encrypted equals true that field now become encrypted and by convention as you think cryptid under squeeze as soon
00:23:01.100
as the field name and I can do the same thing I just said the SSN to that number and retrieve it back and it's not
00:23:08.390
encrypted so now my mongoid data store any my my MySQL or Oracle web data stores using it now contains encrypted
00:23:14.660
data now the next one configuration files I'm sure you've heard a lot of
00:23:21.020
those so any difference we do is instead of sticking the password in the clear
00:23:26.210
directly into the database we say symmetric encryption dot try decrypt and
00:23:31.360
the encrypted string so you all operations to you can go off using the rake tasks that we have in generate a
00:23:38.330
random password or take a password they have and encrypt it and give it back to you so you never see the production
00:23:44.990
password it's entirely under the control the RG operations team
00:23:50.909
so why did we do this we are forced to
00:23:55.929
address label PCI compliance requirements and we're a small company we're about thirty two people right now
00:24:01.240
the clarity and if you interested in moving sampe florida let me know we're looking so this is what we needed to do
00:24:08.529
also it's a small company we had to take the key out of the source code so all the other solutions we looked at we had
00:24:14.769
the source either in our source code or in a configuration files we had this encrypted the actual key itself we also
00:24:20.679
need to remove the encryption key from the development team I don't even have access to our production keys some of
00:24:28.029
the things we had to do we have to change our encryption keys once every 12 months and we have to destroy it when
00:24:33.730
we're done that means we have to migrate all the existing data to the new encryption algorithm with new keys we
00:24:41.139
can't do a zero downtime we have a 24 7 365 shop we're up all the time so I have
00:24:47.889
to be able to encrypt with a new key decrypt with that new key and decrypt all the data that might be in the
00:24:53.799
database that's being migrated so hot on the go we want to do that again we have to destroy the key when we're done so I
00:25:00.610
looked at several options again we had a tray encrypted in production but didn't meet these particular primates that we
00:25:06.039
had I've spent ages digging around looking for other alternatives so we built our own now what I want to show
00:25:13.330
you is you so how easy it was to encrypt and decrypt data now let's have a look at what we what it does for you what is
00:25:18.730
symmetric encryption library do for you we have our existing rails app database now what we had to do was take that
00:25:25.059
encryption key and move it out of our control completely out of our control that IT operations to handle it we've
00:25:31.899
secured it so that only the rails app can talk to it but what we've done one extra step is we actually use a 2048-bit
00:25:38.620
RSA key to unlock that file so we can obtain the contents so we unlock the
00:25:43.899
file and we get back in AES 256-bit encryption key that we can now use to
00:25:49.330
encrypt and decrypt data that we read from the database so all this is what is doing for you you don't have to know how
00:25:55.210
to do this so list of features sure can go through
00:26:00.790
those on github installation regular bundler regular and then about so there
00:26:08.080
it is thank you great how many you guys use jQuery live or delegate right it's
00:26:16.360
pretty cool you make an event handler and it works on all elements even if they're not on the page yet right what
00:26:21.549
if I told you all of your jQuery code or as much of it as you wanted to could work that way it could apply to things
00:26:26.830
that aren't on the page yet look up our open source tool ninja script you can find it on github I'll put it in the
00:26:32.860
gist for this it lets you to find behavior blocks that have any number of event handlers and a transform which is
00:26:39.280
an arbitrary bit of code that runs on the matching element you bind that to CSS selectors it will run on everything
00:26:45.610
that's on the page now including binding all the event handlers and we'll run the transform on all current and all future
00:26:52.240
matching elements on the page so it makes all of your Ajax handlers much simpler that's all hi guys my name is J
00:27:01.720
Moorthy I work on TD DM secure hosted parallel continuous integration service
00:27:08.160
we are up and ready for the public so if you guys want to check us out please come by I was going to talk about some
00:27:15.309
of the the tricks that we use to do parallel test execution but in hearing some of the talks I there we go there we
00:27:26.650
go in hearing some of the talks at this conference a number of dots connected in
00:27:31.720
my head in it and it seemed like there was something that had not quite yet been said we've heard about how change
00:27:37.000
is coming how we're supposed to manage risk think about risk in the future and
00:27:42.750
how we're supposed to be prudent but on the other side of it rails is supposed
00:27:48.910
to be all about fun how do we connect all of these things together my
00:27:56.590
challenge to you is to think of your automated tests as an extension of your product where
00:28:06.230
the customer is not your end customer the customer is you and not just you now
00:28:14.950
put you in the future you when you're merging a branch or you when you're
00:28:22.490
working with a co-worker or your coworker you should treat these things as part of your business that allows
00:28:28.669
your business to scale allows your product to grow allows you to make change to manage risk to think about how
00:28:36.350
it is that you're moving forward and to do that in a way that is understandable
00:28:42.010
we heard about introspection and the value of communication through written
00:28:47.870
channels campfire have chat documentation treat your tests as
00:28:53.500
communication with your future self so some examples of interesting things that
00:29:01.250
we found as we've been working with our customers a lot of people can't actually recreate their development database from
00:29:09.830
scratch so I challenge you on a system that you've nicely backed up so that you
00:29:15.980
don't lose anything run rake DB drop and Reiki be set up because if this doesn't
00:29:21.679
work the next person you bring in the next contractor the next new hire or yourself when you're setting up on a new
00:29:27.980
computer you're going to have to debug something really weird and somebody is going to be fairly confused so try this
00:29:34.700
it's a fairly simple step you will find a couple of things the other bit here is you should try this especially to look
00:29:41.900
for things like scopes with lambdas in them or scopes that need lambdas things that you should actually have moved into
00:29:48.110
class methods etc etc it's a way to keep your development environment as hygienic
00:29:54.590
as you would keep your actual production product because the closer you treat
00:30:00.530
your development environment in your test suite to your production product the happier you'll be also this is
00:30:08.630
something where we would love to help you but you don't need to use our product make your test suite as fast as
00:30:14.780
you can use whatever tools you can manage to make it fast because you want
00:30:19.909
in feedback you don't want to be sitting there waiting for a build because while you know fun is fun focus is very
00:30:27.440
important and losing focus while you are waiting for your test suite to run is just a terrible waste of your time and
00:30:34.130
it changes the way you think about work and test every branch test your branches
00:30:43.810
before you push if you're pushing to master or if you're merging commits without a green build please please
00:30:51.620
please change this practice it will make everybody happy err in the long run so
00:30:58.850
what is this picture this is the Hindenburg or the hinted bug or the hidden bug think about what will happen
00:31:07.310
when you are up when you're upgrading to rails 4 and you don't have an
00:31:12.410
integration test suite that you can trust what will you do how will it
00:31:18.320
happen plan ahead for these changes that we all know are coming for the changes
00:31:24.050
that occur in every product and those changes don't become so scary anymore they become fun they become easy they
00:31:32.000
become trustable that's all so everything we support come check it out
00:31:37.730
on Twitter or github thanks all right
00:31:44.300
every once in a while you get the opportunity to do something really nice for somebody and not have to make a buck
00:31:49.490
for somebody this is something that I did one day when I was rebuilding a sad Mac I had a bunch of friends they were
00:31:55.760
bloggers that wrote for a site called cinematical which is about movies that was owned by moviefone that was owned by
00:32:02.030
AOL that merged with Huffington Post who is run by this lady Arianna Huffington
00:32:08.530
they bought him for a bunch of money and they told these bloggers the thing that
00:32:13.610
you were getting paid for now you can do this for free isn't that awesome because
00:32:18.680
they're greedy and now we don't like her anymore so I was watching Twitter as I
00:32:25.250
was rebuilding my machine and I had a friend of mine who put out a cry for help basically what had happened is he
00:32:33.200
had been writing for cinematical for years and he hadn't saved a single blog post that he had written he's like does anybody know how
00:32:40.790
I can automatically scrape a bunch of crap off of a website so i don't have to go download 300 articles manually I said
00:32:47.630
hey dude it's me I'm rod paddock I solve problems so I busted out nokogiri and in
00:32:52.880
26 lines of code I basically hack through every single page that he had written a blog post on and I dumped them
00:32:59.840
all to a file I did this in about 15 minutes and what happened is it start
00:33:04.940
this array started with one guy and then he said that was really quick if I asked
00:33:11.540
anybody else that wrote for this website because they were all equally screwed can you do this for them as well I said
00:33:18.080
sure so I appended that actually it was a single name and then I just created an array and I looped through all the names
00:33:23.210
and i created a bunch of files so basically some of these people had written literally a million words of
00:33:29.480
articles some of them had 500 pages worth the blog post and the nice thing is a ruby with these tools and with the
00:33:35.630
people that built nokogiri big hugs to them we're i was able to basically save all these peoples years worth of work
00:33:41.960
without them having to manually scrape what some of them would have taken a year to go through and grab each page so
00:33:48.140
what happened well they all went to work for this company called Fandango and now they're writing for a site called movies
00:33:53.660
calm and they're all really happy now and they all lived happily ever after so
00:33:59.450
this is the beautiful thing that you can do with ruby and nokogiri to actually help make people's lives better and I
00:34:05.180
didn't have a copyright issue because they wrote the material and we didn't distribute it I wrote an article thank
00:34:10.610
you um so I am Richard schneemann I go by
00:34:17.659
schneemann on the Internet I work for Heroku and this is Wizards from WTF to
00:34:22.819
wicked so step-by-step Wizards love them or hate them they are like freaking everywhere on the internet it just kind
00:34:29.210
of a fact if you don't know what a step-by-step wizard is well liked step step step and then you know at the end
00:34:37.069
so you're done at one point in time I was working for gowalla and i wrote a
00:34:42.440
step-by-step wizard that was a restful state machine inside of a rails controller so like WTF like that was way
00:34:52.010
too many lines of code pretty incomprehensible I was doing a bunch of really really gross stuff so I thought
00:34:59.740
what if everything you ever wanted about
00:35:10.910
step-by-step Wizards came in a ruby gem
00:35:21.480
so I am introducing wicked rocket edition you include a wicked wizard and
00:35:31.230
that's pretty much it you set your steps you just define what you want your steps
00:35:36.520
to be you then add views the steps are named the same as your view so if you reorder the steps it doesn't matter it
00:35:42.670
still calls the same view and then you just call render wizard it's it's pretty simple here's an example show like the
00:35:48.970
simplest show you could possibly go to inside your view you get next step you get previous step you can access and see
00:35:54.760
how many steps total there are so you can do that cool like one out of three which is you know I never look at that
00:36:00.300
and if you pass an object to render a wizard if that object responds to save
00:36:06.069
if it saves it'll go to the next step if not it'll render this the current step so basically we do kind of this
00:36:12.490
validation thing for you it's pretty sweet this is an example of a controller
00:36:18.040
wizard and at the end of the day it's it's just a restful state machine it's
00:36:23.140
not doing anything that you couldn't do inside of a controller by yourself but it's less gross than the other stuff
00:36:30.549
that you saw before so yeah use wicked my name is shames and clap now okay I'm
00:36:43.450
going to talk about a gem I wrote it's called flash as3 where else I'm Sam Woodard i'm a senior developer at
00:36:49.089
wildfire interactive so what's the problem I was trying to solve direct upload s3 so we don't have to tie up the
00:36:56.079
rails process with an upload and then reupload via the s3 API multi file
00:37:01.089
upload easy usage progress bars or need
00:37:06.150
these are just some URLs I'm going to go to um so how does it work or what does
00:37:12.730
it look like um right now it's just this green box down here click browse pick a
00:37:21.940
couple files
00:37:28.610
start hopefully the Wi-Fi will cooperate
00:37:40.820
all right if not then I'll just go into talking about the gem for a sec so real
00:37:47.040
simple to use configuration is just a bucket name access key secret access key
00:37:52.950
you can put this in your application RB your development RB productions RB or an
00:37:58.380
initializer obviously we're going to put in and initialize you'll need to do rails that application config it's just
00:38:06.540
a simple column in your migration you have the name of the upload in this case
00:38:13.860
it's media and I'm putting it on the videos table so in my model i'm going to
00:38:21.990
say has attached as three file media just like that then i'm going to have
00:38:34.410
some includes in my application j s right now it's dependent on jquery UI for the progress bars first thing to do
00:38:43.620
that i have in my upcoming or one of them is to take that out and just do a simple CSS javascript implementation
00:38:48.690
because it's a pretty big dependency but it's just beta right now and then the
00:38:55.950
require and my CSS file obviously the CSS is not a jquery plugin but i thought
00:39:00.960
it was kind of nice to have it have the symmetry in the view just the flash s3
00:39:06.510
uploader and then the name or the instance of the object that you have the
00:39:13.410
upload on and then a post upload callback URL note you have to use the
00:39:18.420
URL and not a path and then in your controller in the post call back action
00:39:23.900
just take the params of whatever the name of the model that you have was
00:39:30.030
sticking into a new or create or update attributes whatever you'd like save it and automatically the s3 key will be
00:39:39.390
saved on you or object on your on your instance so I
00:39:46.109
don't know why this is going to be a Wi-Fi problem I've got 50 seconds so I'm going to reload and see if I can't do
00:39:52.410
this again yay progress bar refresh the
00:40:12.000
database media is three key on my video job and that's it see I think I have so
00:40:21.210
git hub SH woodard flash as3 rails sound ruby gem now rubygems now my twitter is
00:40:28.410
Sam H Woodard and sorry for the plug but we're hiring my name is Charles Lowell
00:40:38.210
I'm actually going to spend my five minutes to relate to you guys a very personal story it's actually a true
00:40:44.910
story one hundred percent a couple weeks ago I was driving along in the car my
00:40:50.220
wife the kids were sleep in the back and have a moment of self-reflection I said
00:40:56.030
to my wife I said baby would you say that I am one man in the name of love
00:41:05.780
you know what she did she turned to me and she looked right at me and she said Charles what the hell are you talking
00:41:13.020
about it's true story so I said okay in the name of love we have to narrow the
00:41:19.740
scope a little bit so I said okay baby
00:41:25.310
would you say that I am one man in the name of embedding JavaScript into Ruby
00:41:32.690
and she said I have no idea what you're
00:41:38.100
talking about but the answer was clearer thinking the shoe fits all where you
00:41:44.970
know I've developed a couple of gems you may have heard of them to the Ruby racer the Ruby Rhino it allows you to embed
00:41:50.990
JavaScript into into Ruby and the reason I did this is because having a real
00:41:57.800
JavaScript environment where you can share data structures and you can send messages back and forth between
00:42:03.390
JavaScript and Ruby it's pretty much rules there's a lot of really good reasons for doing it I'm not going to
00:42:09.600
try and convince anyone here but you know for example it's the only way that I really know to safely evaluate Ruby
00:42:14.790
code you can share code between your client server but not in you know for
00:42:20.250
bad reasons like with models but just because some library is really useful like handlebars or or less you can use
00:42:29.130
it to just tap into the what's going on in the Jazz community there's all these great utilities and you can just get
00:42:34.230
your hands right on them but I'm here today because I don't want to be one man
00:42:39.780
in the name of JavaScript I want to open up this process to everybody and not
00:42:50.280
just because there's a big laundry list of things to do there's all kinds of bugs we need to support Rubinius there's
00:42:55.650
memory issues and things like this but because I think it's actually important for us as a development and environment
00:43:02.700
this is the way that applications are going to be developed in the future I think that every serious language will
00:43:10.410
have JavaScript Interop just out of the box and it's time to start thinking about what exactly that looks like
00:43:16.270
you know Java has had something like this for five years and its really awesome it just ships with the AVM it's
00:43:21.310
right there so we need to start asking questions like what should it look like
00:43:26.470
what should these interfaces look like to call javascript from Ruby code what should it look like to call Ruby from
00:43:32.860
JavaScript you know there's a whole lot of what what does a prototype chain even look like as represented by Ruby classes
00:43:40.510
and modules right now it's just I've been kind of making these decisions in the echo chamber of my own head but I
00:43:47.760
started a list to try and discuss this and other issues and I'm just inviting
00:43:53.170
everybody here to join it and join in on this discussion and lest you fear that there aren't actual real concrete
00:43:59.410
results just since I started this list someone from the Czech Republic actually
00:44:05.260
stepped up we did some work to get some better interface parity between the Ruby rhino and the Ruby racer and just
00:44:12.340
yesterday evening we were able to get support for Less TAS on JRuby which
00:44:19.870
means we now have support for less rails on JRuby which means you can use Twitter bootstrap and Jay ruby on rails so
00:44:26.500
already things are happening for great good so please join the list join the
00:44:31.540
conversation and that's that's it so my
00:44:37.600
name is Matt roguish i'm here to talk to you nothing related to programming at all and actually related to how to sit
00:44:43.930
in the front of the airplane instead of the terrible horrible place in the back so this is not a talk about hacking the
00:44:50.200
airline's like this this is really talking about hacking a system that is designed for people like this a system
00:44:56.980
to get business folks who hate traveling I used to get on an airplane six o'clock Monday morning come home friday evening
00:45:03.550
or sometimes Saturday morning and do that for six months straight every single week it was really sucky but you
00:45:09.700
learn a little bit about how to work the system and so that you can be this guy
00:45:16.300
and I want to share that knowledge to you too because I'm kind of an open
00:45:21.380
source guy and I like to present this type of stuff as well because there's this thing in the community where if
00:45:27.290
everybody knew it then we would be able to do it anymore and I think that's [ __ ] it's true though like this system will only work up to a certain
00:45:33.440
point like once people figure out and everyone does it then the airlines are going to have to figure out what to do but for now let's play around with it
00:45:39.260
because everybody wants to sit up here in this place in this shangri-la on an
00:45:44.540
airplane and nobody wants to sit back here in the back which is where I used to sit before I figured all the stuff
00:45:50.390
and why don't people sit in the front because it's incredibly expensive like
00:45:55.820
this is a flight from New York to Austin and I paid some around this three hundred and forty dollars here but that
00:46:01.610
same flight in the front of the plane is anywhere from a thousand to about two thousand dollars which really sucks but
00:46:07.220
that's not the only currency that airlines take airlines take something called air miles which you've probably
00:46:12.380
heard of which means every time you get on a plane you go from point A to point B you accrue funny money in terms of
00:46:18.740
airline miles now what I found out is it's not a one-to-one relationship between getting an Air model than
00:46:23.840
redeeming them again most tickets started around 25,000 miles are up so it takes a little while so this is me
00:46:30.080
sitting on an intercontinental and flight which I paid twelve dollars for an international business because I had
00:46:36.200
a whole bunch of miles the other currency that airline tab is something called elite status so the higher you
00:46:43.040
are in this little Club the more miles you fly the more you level up the more
00:46:48.290
you can kind of sit in the front and I love fall out so I had to put this in here somewhere so here I've already been
00:46:54.560
upgraded on my flights back to New York tomorrow so it works so step one pick an
00:47:00.560
airline you are essentially wedded to this airline you will fly it no matter what you doesn't matter if it's twice as
00:47:05.600
expensive it is nearest one because the miles are incredibly important to you both the status miles which are miles
00:47:11.210
that count up towards you leveling up and then the redeemable miles which you can use to pay for additional flights
00:47:16.220
you also can earn them on partner Airlines on LAN Delta I can fly in
00:47:21.560
Alaska credit my miles to Delta so when you pick an airline take a look at their partners as well number two fly a lot to
00:47:28.460
random places for it so this is called mileage running where the point is not to go somewhere and
00:47:34.550
stay there the point is to get there as cheaply as possible and come back the same day so there's a website called flyertalk com which has a mile run forum
00:47:41.360
which shows you something called CPM cents per mile you want to get sense paid per redeemable mile earned as
00:47:47.510
cheaply as possible so that you can then redeem it this is no place called myeloid calm has something somewhere to number three take the long way instead
00:47:54.470
of going direct from JFK to SFO take four stops do that on the back to the
00:48:00.110
site called the ITA software its matrix which is person by google allows you to do this it may be a little bit more
00:48:05.480
expensive but it's going to drop your CPM you're going to get more segments and you might get the holy grail of a voluntary denied boarding or involved
00:48:11.270
area tonight boarding otherwise known as a bump what a bump does is an airline pays you to take a different flight because it's overbooked the more you fly
00:48:17.990
them where these you get and then you can redeem them for trips to anywhere you want so I went to Dubai for free
00:48:23.690
because I had two thousand dollars worth of these little Redemption things that I could do that of course is an infinite
00:48:29.240
CPM which is pretty awesome so if the fifth one is turn and burn credit cards are given out like candy and you get
00:48:36.320
certain amounts of bulk miles as soon as you sign up so if you don't care about your credit score you can earn hundreds of thousands of miles with a kid with
00:48:42.800
the weekends or of the work and you cancel them and you move on number six finally earn them in burnham this is a
00:48:48.980
depreciable asset these don't earn interest they sit in your account and as inflation continues to climb up your
00:48:55.670
value goes down so as soon as you're earning them take that vacation flight somewhere with your friends or your family or your spouse significant other
00:49:02.240
or whatever and have a great time thank you does anyone here a fan of personal
00:49:10.160
happiness see so my presentation is
00:49:19.760
ridiculous and selfish so thank you thank you very much so it's really
00:49:27.260
important that when there's a great demand for a certain job position i don't know like software developer that
00:49:33.350
you should probably take advantage of it and leverage that as the opportunity of your life time to do what you want to do
00:49:39.410
the way you want to do it you know sprinkle some sugar it's basically the idea that that
00:49:46.960
whatever we want to do we can do it right now based on the economy of software engineers and you should Oh
00:49:54.630
somebody told me earlier I should introduce myself I'm Brad Wilkening co-founder of dev mine software we're a
00:49:59.910
software services company we try to do the right thing for the right reason but in consulting sometimes you do the right
00:50:06.640
thing for the wrong reason occasionally sure nobody is familiar with writing bad code occasionally because it caters so
00:50:15.190
this is a ridiculous slide it's a it's a
00:50:21.400
the the cat nyan cat so you write
00:50:28.300
software for a living you're good at it you're not a douche bag so we should
00:50:33.370
make the assumption that you should be able to get any job you want as long as you're as cool is I assume you aren't by
00:50:40.270
this slide this is a random photo of dhh let's assume at some point that you are
00:50:47.800
in fact underpaid it's very likely that you could make more money uh you know money isn't everything but at some point
00:50:54.820
you have to be able to afford a sailboat this is a random slide that involves a
00:51:01.120
photo from the whiteboard outside if you travel too far to get to your job then
00:51:06.670
that sounds like a great improvement opportunity for your lifestyle I have a baby at home does anybody here have a
00:51:13.150
baby babies are really cool and when you have them typically you want to spend a
00:51:18.310
lot of time with them I'm not sure if it's like psychological or not but it clearly I want to spend a lot of time
00:51:23.440
with my baby so the longer the commute the last time I get to hang out my kid
00:51:28.470
this is a slide of side effects of ambien which includes the sleepwalking
00:51:35.410
woman that has sex with strangers I actually emailed the person that authored this and asked for her location
00:51:42.160
that didn't work it that didn't work out if you don't have enough vacation then it's very important
00:51:48.160
that other than your commute you focus on the fact that two months off is is
00:51:53.200
totally typical in the grand scheme of Europe in the United States four weeks
00:51:58.360
is pretty prototypical so why don't we look out for that is something that we
00:52:03.400
can do for ourselves in order to bring the catharsis that can actually make us think better when we are at work this is
00:52:12.070
a tender loves cat it's really easy to
00:52:17.260
get a job these days if if I were out there and trying to find a job it would be very likely that i'd probably find
00:52:23.350
one in about an hour it's kind of you know an estimation but it's about right it's a photograph of an advertisement I
00:52:30.970
found in a target that looks so ridiculous I to take a photo out of it I'm not sure if anybody noticed this theme that I have every other slide is
00:52:38.170
ridiculous if you're at a company that makes you work a lot of overtime yeah i
00:52:44.200
really have to consider about whether or not that was really like a commitment you made to do something or whether or
00:52:49.300
not they're just kind of torturing you if they're torturing you then maybe it's time to look for a different job where
00:52:54.820
they don't happen to do that I know that after eight hours of coding I'm pretty
00:53:00.010
crappy at it so keeping me around is probably a bad decision on their part much less mine this is also a ridiculous
00:53:08.950
photo of some drawings were made by someone that helped us with a conference one time it's a vegetables that play
00:53:17.350
sports um I like working with people
00:53:22.420
that are better than me that's just kind of a hobby that I have we're at some
00:53:27.550
point I need to make sure that somebody around me is just blows me away every day it makes me feel alive it makes me
00:53:34.090
move forward being better at what I do is super cool and I enjoy it thoroughly
00:53:40.950
this is a picture of my progeny that is my child it's all so ridiculous changing
00:53:48.970
jobs also includes changing what job
00:53:56.260
that was in fact my last 11 seconds by the way your applause but I appreciate
00:54:02.240
it my name is Brad I'm from dev mind thank you very much hi everyone my name
00:54:08.360
is Matt calmly I'm the CTO back up if I we back up your SAS data I'm also a bit
00:54:14.150
of a DevOps geek got a bunch of stuff on my github profile if you've used the
00:54:19.850
rubber project which not very many people have you probably knew who I am so here to talk to you today about
00:54:26.480
graphite graphite Speece of software that really impressed me it does scalable real-time graphing and what
00:54:35.690
that means is it has this whole architecture for collecting data and
00:54:42.350
then giving you a way to in an ad hoc fashion graph that data so it doesn't
00:54:47.540
actually do the data collection use something else whatever you like i used collect be you've pushed that data into
00:54:53.540
graphite and then you use graphite to build your dashboards your graphs it has
00:54:58.940
a web app that comes with it that does a whole bunch of stuff but one of the most powerful things is everything all the
00:55:04.850
data it has is explored as json as well so there is a whole slew of other apps how do we compete with that
00:55:15.070
kalu of other apps that also give you alternate views of that data coming from
00:55:22.070
Yunnan Yunnan started falling over pretty hard for us at about 10 servers graphite have no problems with it at all
00:55:29.600
and we collected a much higher rate we collect every 60 seconds it's way easier
00:55:34.730
to build the graphs and say it again the add up graphing is really killer it's just like doing an ad hoc query in
00:55:40.280
sequel as a fab you want to write a
00:55:45.350
custom plugin it's fairly straightforward basically just do a put to stand it out and collect it will then
00:55:51.980
send it to whatever you want also planning to use stats d for in-app collection and for that in on as well so
00:56:00.369
if you want to see the recipes I used to set it up you can check out rubber have them all in there if you used rubber
00:56:06.320
you'd get graphite for free kind of and with that let me show you a demo of the
00:56:17.150
graphite web UI so go there it's kind of
00:56:23.960
what rubber gives you by default graphite comes up this is the composer
00:56:29.500
kind of lets you drill down into all your stats this is actually my production data so don't tell anybody
00:56:35.380
you know you can go down most of these things collected collects by default you
00:56:43.130
can add multiple things to the graph so you can want to see why your load is spiking you can add it in this case kind
00:56:48.920
of blows away the scale so I'm going in here and you know just saying hey put this on another axis so that I can see
00:56:55.190
the scales independent of each other which is real nice you can kind of see that it adjusted it on the background
00:57:00.920
there me add CPU as well cpu isn't very
00:57:09.140
useful because it's just monotonically increasing but because we're using
00:57:14.330
graphite you can say well this kind of data I want to see deltas so let me go ahead and do a derivative of it
00:57:24.249
and then you can see now you have sort of the rate of change of that vet statistic now that's just kind of the
00:57:31.309
composer it's not very useful by itself there's also this dashboard you I well I get to that in a second i guess you can
00:57:39.049
also change the the time frame that you know of all the of the data chill down
00:57:45.410
to minutes hours days week i have mine set up to collect on a 13-month interval there's an RR d so it rotates data out
00:57:51.349
after 13 weeks so this is a dashboard you I similar sort of thing you can
00:57:56.420
drill down and add various things go in
00:58:03.349
there you can say I want to see the load for all my app servers you just got it I
00:58:08.809
can you know then say alright I don't want them all independently because I have 50 servers let me see the average
00:58:21.400
and then you can also save your dashboards these are some of ours which
00:58:28.519
is our worker utilization yes we are running 2000 or almost a thousand rescue
00:58:35.509
workers we have peaked at 10,000 simultaneous rescue workers didn't really have a problem with it so if you
00:58:41.809
need to scale that much you can and I think I'm about out of time your champ
00:58:51.769
Thank very much um fame has lost a child oh I think it's yours I'm giving one
00:58:57.469
away it's a raffle all right you'll invite it thank you very much about all the speakers and which you will applaud
00:59:03.559
them in a second but first a message to them please put your slides up on that internet thing that we're all here for
00:59:09.579
and then link them in their juice and then at least they're all in one place now I'd like to hand back over to
00:59:15.920
Charlie no Charlie all right back to
00:59:21.769
Evan and thank you very much for the session
00:59:31.490
you guys win a prize you're the last one still here all the sessions have been out for a while it's actually sort of a
00:59:37.320
ghost town out there when you go out there you'll find out but that's great thanks thank you everybody for coming I've one quick question is anybody from
00:59:44.340
Yammer still here okay come up here when we're done you're not in trouble or
00:59:50.610
anything in fact it's a good thing thanks for coming I'll see you in 2013
01:00:45.280
member