Raimond Garcia

Lightning Talks

00:00:00 - Teck & Mike
00:01:00 - Claudio Baccigalupo - LA Ruby https://www.meetup.com/laruby/
00:01:31 - Fiona?
00:06:06 - Nynne Just Christoffersen
00:07:59 - Jacklyn Ma(Jackie)
00:09:36 - Jingyi Chen
00:14:51 - @jamie_gaskins - front-end web apps in Ruby (Opal) http://clearwaterrb.org/
00:19:41 - Samay Sharma
00:24:38 - Lee Richmond - JSONAPI Suite alternative to GraphQL https://jsonapi-suite.github.io/jsonapi_suite/
00:29:38 - Raimond Garcia - Free software for citizen participation http://consulproject.org/en/
00:35:08 - Chris - Ruby for Good https://rubyforgood.org/2018
00:39:28 - Chris Lawrence - Why Is Chunky So We Are Chunky http://wicswac.org/
00:44:45 - Andrew Louis - Memex https://hyfen.net/memex/
00:51:14 - Thomas McGoey-Smith - sqlite as a reference datastore
00:55:20 - Heidi Waterhouse
01:00:59 - Adam Cuppy
01:04:12 - Barret Clark & Brittany Alexander
01:08:19 - Jordan Byron
01:10:41 - Mike Wheeler
01:14:24 - Kenny Browne

RailsConf 2018

00:00:10.550 hello friends my name is Tec and this is Mike we have a favor to ask of all of you we are cofounders of an open-source
00:00:17.010 software project for an organization called The Grateful garment project when sexual assault victims seek medical
00:00:22.619 attention they are asked to surrender their clothing for DNA evidence the Grateful government project provides
00:00:28.380 clothing to sexual assault service providers we want to give them a shot at
00:00:34.200 the $500 that Oroku is offering to open source software will you help us we need to reach the hundred star requirement to
00:00:40.890 be considered for the contest so please go to github.com slash Grateful garment project slash stockade and start our
00:00:49.260 project then go vote for stockade at karoku lucam once we have added it to the list
00:00:54.649 thank you all have a great time and enjoy the rest of your railsconf 30
00:01:01.050 seconds if you like talking to people who like Ruby and rails if you live in
00:01:06.119 Los Angeles or you visit Los Angeles come join us at the LA Ruby and rails
00:01:11.130 Meetup just go to meetup.com / la Ruby we meet every second Thursday of the
00:01:17.369 month every month there's like two thousand people but number it's 40 of us happy figures on the website so just go
00:01:24.299 to meetup.com slash and a ruby thank you thank you
00:01:30.990 alright hi everybody my name is actually Fiona thank you I'm a software engineer
00:01:40.680 at C DOS Media Group which is a digital marketing company in San Diego and as my
00:01:46.770 first railsconf thank you
00:01:52.259 I wanted to tell you a little bit about my experience with going back to school for computer science degree as a
00:01:59.600 professional developer so when I went to college for the first time I majored in
00:02:05.340 art history and then when I graduated I didn't want to have anything to do with art history so I
00:02:12.470 ended up teaching English as a second language for about five years and teaching was really great but I wanted
00:02:19.640 to do something different and that was how I became interested in web development and I enrolled in a boot
00:02:26.480 camp learn Academy in San Diego I'm also
00:02:31.610 wearing their t-shirt today we're so out learn Academy I learned Ruby on Rails
00:02:37.250 and JavaScript that was almost 2 years ago and I've been working as a rails
00:02:42.560 developer since then the bootcamp was a fantastic experience in three months I
00:02:49.940 learned enough to be able to be a productive developer and by the end of my first year I was pretty confident but
00:02:58.220 I was pretty good at writing Ruby code but I didn't understand very much about
00:03:03.709 how Ruby actually works behind the scenes I knew that at some level it was all ones and zeros but the way that you
00:03:10.610 got from ones and zeros to running Ruby code was basically magic to me and that was why I became interested in
00:03:17.890 studying computer science so last fall I enrolled at Oregon State University
00:03:24.590 in their online post baccalaureate computer science program which is for
00:03:30.019 students who are seeking a second bachelor's degree so far I've finished
00:03:35.060 two courses and I'm a few weeks into my third the first class that I took was
00:03:40.280 intro to computer science which was basically intro to programming and C++
00:03:46.120 then I took a math class and right now I'm taking a class about assembly
00:03:53.209 language could you please raise your hand if you know what assembly language is all right raise your hand if you've
00:04:02.030 ever written assembly language and raise your hand if you've ever written it
00:04:07.570 professionally not very many people if you don't know what assembly is it's
00:04:15.140 very low-level programming as you can see not a lot of people write it these
00:04:20.390 days and new graduates and computer science definitely don't need to know it
00:04:25.400 too fine job but learning it will teach you a lot about how computers work I've only been
00:04:31.439 doing it for a couple weeks but learning it is already demystifying a lot of that
00:04:37.219 magic that makes Ruby work learning C++
00:04:42.300 was a similar experience for me I learned a lot about things like pointers and memory management which are really
00:04:49.800 important to how Ruby works but the beauty of Ruby is that you don't really need to worry about those things most of
00:04:57.270 the time when I finished that class I was really glad that I had learned those
00:05:03.360 things and I was also really glad that I didn't have to think about them at work every day so if you are early in your
00:05:12.750 career like me and you're a bootcamp grad or you're self-taught and you're
00:05:18.509 thinking why would anybody want to learn assembly that's totally fine there are
00:05:23.639 so many awesome and probably more useful things that you could spend your time
00:05:28.800 doing but if you're thinking yeah I want to learn how that magic works then I
00:05:36.029 would encourage you to take some computer science classes even if you get nothing else out of it at least you'll
00:05:42.659 be able to come back to Ruby afterwards and have so much more appreciation for
00:05:47.789 what it does for you if you have any questions about computer science degrees
00:05:54.569 or any thoughts or opinions that you want to share I would love to talk to you so please come find me later and
00:06:01.879 thank you alright thank you so much so
00:06:08.819 I'm here to talk about like spot which is a Twitter art bot that I built as a
00:06:14.250 side project and here you see how it looks the way it works it's that you you
00:06:22.110 tweet edit and whatever you tweet edit whatever word you use
00:06:27.810 it uses it as a search term and it searches in the Pyke's Museum in
00:06:33.389 Amsterdam's database and it goes through the whole collection and it finds a
00:06:39.110 search random object for your word and it tweets its back at you and and can we
00:06:48.020 see it again um and you can try it right now so if you look at your phone's I
00:06:53.629 won't be offended simply tweet it were at it and then it responds with an image so before I
00:07:01.490 learned how to code I had a career in art history well like a first speaker so
00:07:08.020 what really made me inspired to do this was first of all I just wanted to try it
00:07:13.190 try to build a bot but also I was very inspired by something called open glam I
00:07:19.430 don't know if you heard about it but it's um it's this movement within cultural institutions such as libraries
00:07:25.789 and art galleries and museums to take all their content it digitize it and make it available um so one issue with
00:07:35.330 this is that you just have these vast databases or api's and of course that's
00:07:40.580 a lot of fun but how do you how do you make that accessible how do you make that fun and how do you make sure that people want to interact with all these
00:07:47.539 collections so this this project came out of some thoughts about that thank
00:07:55.130 you very much hi everyone my name is
00:08:01.039 Jackie and this is also my first for Al's comp oh thanks I currently work at
00:08:09.500 a at work bar as Apple stock developer but previously I was actually a
00:08:15.139 ophthalmic technician and everything changed after attending Boston railsbridge I decided to change careers
00:08:22.159 and join launch academy where I made a lot of friends thanks guys
00:08:28.580 and then we still try to meet once a week and it's great I just wanted to
00:08:34.279 show off my final project so I made a multiplayer trekkers react on Rails
00:08:40.640 application it was a challenge to build something with complex logic rather than
00:08:46.640 the usual 15-minute blog but it also showed how you could
00:08:51.649 so add some complex logic and rails I also wanted this game to be
00:08:58.699 beginner-friendly so whenever a user just clicked on any of the pieces the
00:09:04.369 board would highlight any possible moves for that certain piece it also end up
00:09:11.689 being very personally valuable because a lot of my launcher friends moved away from Boston and so this was a way so
00:09:19.040 that we can you know keep up to date and just play checkers online I had a lot of
00:09:25.639 fun creating this app and I look forward to meeting everyone over our game of checkers again my name is Jackie and
00:09:32.050 thank you for your time hey good evening
00:09:40.610 everyone mg I work for Amazon Web service and you got my name crack cool and we'll count
00:09:51.529 EWS SDK for Ruby so if you are here and you see SS you pretty much have used a
00:09:56.720 SDK before that's great today I'm going to talk about a cool feature that you
00:10:02.929 can get a generated Ruby SDK from your API models with ABI gateway service it's
00:10:08.959 totally fine that if you haven't heard about API gateway service before it's a service that help you create publish
00:10:16.069 maintain secure and monitoring your API models a tanning scalp I'm going to give
00:10:23.120 a brief demo to show what I'm talking about you will be considered two-part why scatter generated SDK from API modo
00:10:29.870 and I'm going to play around with the generated SDK so here you'll see this is
00:10:35.029 just some examples Wagner file that called past or that they have as example
00:10:40.519 a swagger the aisle and
00:10:48.800 I'm trying to click though video so
00:11:40.240 yeah well we're waiting anyway you know what mountain this is Sally yes so Sally
00:11:53.180 you cannot play the demo but it's totally fine it's just for your clicks or API gateway so you'll be boring if
00:11:59.540 you watch the demo anyways okay so imagine that API gateway allows you to
00:12:06.200 just click import your swagger modem and there will be SDK generation tab show up
00:12:11.900 after you have your API deploy to your stage that make your API usable after
00:12:17.480 you add SDK generation of course your choice Ruby and provide the name for the
00:12:23.150 SDK and your get as ta auto download it um after that you will see the structure
00:12:29.630 of the SDK generated this is pretty much similar with oaw service stream that we
00:12:34.760 are shipping same exact structure and it also has a privilege of the features that we ship with AWS SDK as well so
00:12:42.530 salia cannot show you the demo for making API calls for your own service rooms but you can definitely try it out
00:12:48.440 but I can show why you'd want to check out this cool feature so first of all is
00:12:54.110 just ready for pickup once you have an API model defined you don't need to
00:12:59.180 build from scratch for like a ruby gem that make HTTP calls your to a service
00:13:04.550 endpoint to show you wonderful service to other customers it's just ready there
00:13:09.740 through clicks through Council or like few API calls the cool part is it
00:13:15.440 provides the same class experience with oaw service gems which means default
00:13:20.630 building retry logic which is exponentially back half if you use a double SDKs you may be familiar with
00:13:27.350 that also it provides very handy measure like parameter validations for API
00:13:32.480 models it also gives the options for HTTP debugging and a lot of other
00:13:37.550 features like that at the same time it also enables you all
00:13:42.940 the privileges that API gateway can provide with integrations with AWS
00:13:48.160 service you also have a wide range of authorization options you don't need to
00:13:53.770 use AWS authorizations if you don't like it you can just do not authentic Asian requests and you can also provide your
00:14:00.940 customer ID authorize a store authorization logic as well we leave
00:14:06.130 module for you to food life feeling like that if you are interested in a topic
00:14:11.800 there might be few links that you may like to be check out there's a great ringman talk last year that gave by Alex
00:14:18.279 about a more sophisticated usage for dynamic generating Ruby SDKs for integration has in your rails app
00:14:25.420 deployment life cycles for AWS there's code there's YouTube video if you
00:14:30.760 interest in a topic feel free to check out and we also have law guide and dialogues available and if you want to
00:14:37.720 talk to me feel free to grab me anytime and we have a bird of feather session
00:14:42.910 tomorrow for a the best for a free to drop by and talk with us thank you so much for listening thank you everybody I
00:14:52.480 am Jamie and I'm going to talk to you today about a framework that I'm working on for the past couple years called
00:14:57.970 Clearwater it is a ruby framework in front-end framework so you're running a
00:15:04.420 ruby code compiled into JavaScript executing inside the browser so so here
00:15:10.630 we've kind of got like you know this is this is just like a like a drag and drop like sort of like Trello trailer style
00:15:17.530 apps so you know giving a lightning talk so I'm doing now learn to exit VM I I
00:15:24.040 this is my primary editor it's fine get coffee I getting coffee he's never really done you just just always it's
00:15:32.140 always like either you're getting coffee right now or you're gonna get coffee in the future right
00:15:37.209 so Clearwater itself is is this this bit
00:15:43.360 here down on the doesn't broke that styling so it's this on github
00:15:49.959 Clearwater RB / Clearwater but let's so if we wanted to look at
00:15:55.510 some code you see we've we've the drag-and-drop stuff cool I just wanted to see if that was something I could
00:16:01.780 figure out because I didn't understand the drag-and-drop API and the way a lot
00:16:07.780 of that works is this it's just like we're just rendering like you know we've got these objects that rent you know call these methods and so we're
00:16:17.170 rendering this card lists component it's just a you know it's just a plain old plain old object that inherits some
00:16:22.420 stuff front you know think inherits these methods div and h2 and UL from you
00:16:27.730 know from the component mix in we're pulling in some state from our application stayed and then I'm doing
00:16:33.970 some experimental routing with API it has routing built in so but I'm looking to roll a different routing API
00:16:42.540 but like we have some some some really interesting stuff here so like all of
00:16:47.920 these UI events that happen from you know from the Dom where we're using these you know we're just passing in
00:16:55.090 these these action objects to to to see what to handle those and the actions are
00:17:03.280 just like like a pickup card action is just an action with the attributes cards
00:17:08.530 very simple very simple object here and so when we pick up the card like on drag
00:17:13.630 start that that just says to to pick up the card we're not doing anything super
00:17:19.600 fancy there all of that happens inside of our art application store if you're familiar with Redux if that's a thing or
00:17:27.819 that you have used or Elm a lot of that that nomenclature will be very similar
00:17:34.410 so our our handler here just when we
00:17:40.660 only pick up a card we're just going to update our state with where the card
00:17:45.970 drag object it becomes this of this this you know this thing with our current
00:17:51.100 card that we that we picked up that we pass to the to the to the object
00:17:59.440 and you can see all the all the car dragging around that I did earlier we have a whole you know in development
00:18:06.340 mode we've got this entire event list a history of events so we can we could
00:18:12.220 even roll back to up to a previous state and even like roll back all the way and
00:18:18.790 we can see what what what so what some of this is as we as we drag stuff around
00:18:27.010 and it's updating it all this in real time one of the other interesting
00:18:32.650 features is in development mode specifically is like when we update our
00:18:40.030 code in like in our editor we save it
00:18:46.690 and it updates live on the like inside the browser so it's actually compiling the code as you save it
00:18:52.900 compiling into JavaScript shipping that out to the browser browser patch you know the the patches your live code and
00:18:59.350 then re-renders the app so there's a lot of like interesting things going on in here this you know regarding UI
00:19:09.070 rendering with Ruby using relatively simple objects being passed around your
00:19:14.500 application state management using sort of like functional principles pulled from redux and elm and a bunch of other
00:19:22.720 little things to help help make the
00:19:28.270 development experience easier and so with that I'm going to
00:19:35.120 drag this to the done column because I am finished thank you okay great so a
00:19:43.789 lot of rails applications use Postgres as the background backing data store so I thought I'd talk about pg start
00:19:49.820 statements which I feel is a definitive must-have tool for your post-crash toolbox a quick slide about myself so
00:19:56.419 I'm semi leet solutions engineer at side is data at situs data we aim to make
00:20:01.549 Postgres worryfree so that developers don't have to worry about scaling their Postgres database ever again for that we
00:20:07.820 built an open-source extension named siteĆ­s which which basically allows you
00:20:13.100 to shard Postgres across multiple Postgres servers what we do offer that
00:20:18.740 as is also a managed service fully managed database is a service called situs cloud so we run and manage that
00:20:24.169 for you other than the other than work I love watching tons of Bollywood movies and also enjoy dancing yeah maybe we can
00:20:32.299 do a bit of that at the end of the lightning talks so Postgres captures a bunch of
00:20:38.960 statistics about your database so you might have run functions like PG table size total relation size to just figure
00:20:45.529 out how much data how much space your data is occupying on disk or you might have run queries to figure out which of
00:20:51.529 your indexes are not used yet or if you have some tables which have not been vacuumed etc so all these things
00:20:58.429 Postgres exposes through to you using certain views and tables but in addition to that you can also add certain
00:21:04.850 extensions which give you even more insight into what is happening in your database so one of them is PG Start
00:21:11.990 statements so what PG Start statements does is it tracks the execution statistics of all
00:21:17.419 the sequel statements executed by a server it also normalizes and groups similar
00:21:22.610 queries together so that you don't have basically H and every statement and its statistics but also have similar
00:21:29.629 statements and then average statistics for them they are exposed to you via a view which is also called PG Start
00:21:36.799 statements what the view contains is basically some information about the
00:21:42.019 query so what is the query text how many times it was executed which user executed that query which was the
00:21:48.019 database for which was executed it has a bunch of timing related information such as what was the
00:21:53.600 average time the query took what was the total time the minimum time maximum time and also standard deviation
00:21:59.480 it also has info about the number of blocks the query had to hit in shared
00:22:05.480 memory or local memory number of blocks it had to write things like that and lastly it has IO related information so
00:22:11.990 how much total time did your query spend in reading or writing blocks from disk
00:22:17.620 so there's a bunch of tools in the Postgres toolbox and I am talking about one so you might be asking what do I use
00:22:24.050 your cool for what is PG Start statements useful for so let's talk about a few examples so let's say you
00:22:30.770 want to find out what are the top ten queries your database is spending the most amount of time in for that you
00:22:37.160 could run the first query which basically sorts the queries by the total amount of time the database is spent
00:22:43.250 doing them or if you know that you are disk bottleneck you want to find out which of my queries
00:22:49.220 are doing the most amount of disk reads so for that you could run a query like the second one or you just want to run a
00:22:55.220 simple query and say which query is my application sending the most to the database so you can just sort it by the
00:23:01.670 number of calls it makes to the database so I want to spend some time on this query it's slightly more interesting and
00:23:08.690 complex query than the previous one so it basically filters out all those queries which work all less than 100
00:23:15.560 times so you don't have one weird query which takes a long time and you spend a ton of time tuning it it sorts the data
00:23:23.720 by main time so basically and have it gives you on average the slowest queries
00:23:29.090 which are running on your database right now I would strongly recommend that you go after this lightning talk run this
00:23:34.490 query and figure out what are the slowest queries on your database now along with the meantime it also shows
00:23:40.310 you the total amount of time and the number of calls so that you don't spend your time tuning a query which is
00:23:45.980 executed hundred times instead of tuning a query which happens 100,000 times on your database it also shows you the
00:23:53.240 maximum and standard deviation so that you know whether this query just had one of bad occurrence or is it consistently
00:24:00.290 performing badly I just so showed you an example result from one of the databases I ran and you will see a bunch
00:24:08.360 of queries you can change the sorting and the order by columns to get better statistics based on what you want so to
00:24:14.990 summarize what PG statement statements will do is it will save you time it will track the queries which are executing on
00:24:21.500 your database and you store those statistics for you to access what you need to do is just run queries to find
00:24:27.890 the problematic queries and then spend your time selectively tuning them rather than trying to tune your entire database
00:24:34.810 thank you thank you everybody
00:24:41.810 my name is Lee Richmond and I run a project called JSON API suite I very much like David's talk yesterday
00:24:48.350 about where he talked about replacing hand typing sequel with active record
00:24:53.720 because thank you passionately that our modern-day WS Deathstar is single page app JavaScript development and API
00:25:00.440 design I think the same way that we replaced hand typing sequel it's time to replace hand typing HTTP calls this is
00:25:08.330 an active record clone written in isomorphic JavaScript you can run it from node or from the browser and the
00:25:14.030 key difference is instead of generating sequel it generates HTTP requests and it's able to do this by looking at our
00:25:21.050 modern-day best practices for our bleeding edge JavaScript applications like graph QL that are treating the API
00:25:26.900 like a database I believe that we've already figured out the right abstraction for the database it's active record and so we could make this call
00:25:34.370 generate a graph ul payload instead we actually use something called JSON API it's not very familiar with JSON API
00:25:41.330 think restful graphic ul created by Yehuda Katz one of the reasons that we use JSON API is so we can go back to
00:25:48.560 contradict a limo so you'll still end up with a normal controller you'll have
00:25:54.470 seven restful actions we've tried to adhere to normal rails best practices as
00:25:59.630 much as possible this would be really the brunt of the code that you would write to satisfy that active record
00:26:05.780 query that you saw earlier including the pagination sorting sparse field sets things like that now I know that this
00:26:11.690 looks like a bunch of Ruby one-liner magical so here's what's actually happening it's a pattern that you already use
00:26:18.309 imagine that you're you're in a controller and you and you're trying to satisfy that json api contract you would
00:26:24.710 start with a base scope and you would say okay well if the filter by name parameter comes in here's how i want to
00:26:30.830 modify the scope if the sorting cranber-- comes in here's how i want to modify it if the pagination parameter and so forth and so rather than typing
00:26:38.240 all that out line by line all in your controllers everywhere we would want to extract that code and leave developers
00:26:45.080 with only the part that they care about which is the part that you modify the scope that's what that resource object
00:26:50.120 was and even here you can see okay this is going to essentially be the same query for active record as long as we're
00:26:56.030 gonna do a straight equals every single time so we can eliminate even that and just have that be the default and that's
00:27:01.850 how we ended up with our one-liner of course you can always pass a block and manually modify that scope how you want
00:27:07.580 which means that you have complete control over the query here and because you have complete control over the query
00:27:13.880 those examples were using active record but this works with any ORM or datastore
00:27:18.980 we have open source contributors using this with neo4j and MongoDB you can make
00:27:24.500 raw HTTP requests to a third party with it you can actually do a single request and combine sequel and no sequel very
00:27:31.190 easily again we're trying to stay as close to Rails best practices as possible so our serialization layer is
00:27:37.700 basically active model serializers it's actually created by the current owner of that repo and we also have end-to-end
00:27:44.780 integration tests helpers so I've never been a TDD person now I am it's actually
00:27:50.750 easier to write this test that validates all of my keys and all of my values and guarantees backwards compatibility
00:27:56.960 including types than it is to spin up a browser and load local seed data so it's
00:28:02.330 completely changed the way that I develop and given a higher level of confidence to my tests all of this is
00:28:08.600 automatically documented in swagger it's a DSL after all so we can introspect it and generate a schema for
00:28:13.940 you and the same way that we can read multiple entities in a single request we can write multiple entities in a single
00:28:20.179 request so finally after 10 years nested forms became easy this this is going to
00:28:26.210 save the employee and the positions for that employee in the departments for those positions all in a single request and
00:28:32.320 validations are just going to be built-in by default and you won't have to really add any logic to make it work
00:28:38.149 just like you do on the server side now if you did all of this and you followed that conceptual compression and we've
00:28:44.809 lowered the amount of overhead that we had here you can actually rethink the concept of micro-services I have
00:28:51.140 actually staunchly advocated against micro-services for years but then I ended up with a ruby client that looked
00:28:57.620 like active record and just happened to generate HTTP and it started to become easy to communicate across my services
00:29:03.559 and now that it was easy I no longer had that overhead I no longer had a lot of the problems that I used to have with
00:29:09.260 micro services and so this is actually the the direction that my company is now heading we have we have 15 different micro services so in conclusion if you
00:29:17.360 want the latest and greatest bleeding-edge javascript single page app best practices and treating your api
00:29:22.700 like a database and you want all the benefits of that type of development but you want it to still be as easy and
00:29:30.049 simple and beautiful as rails in 2005 then I hope that you should look into JSON API suite thank you very much this
00:29:41.029 is how politicians in Spain look like
00:29:49.059 they are money and they steal it one way they do it is through public contracting
00:29:56.500 get an envelope they put some money in give it to the politician and then they get million-dollar contracts it's
00:30:07.190 terrible it's terrible another big point that we have are how laws are made and
00:30:14.269 passed why because of people like this
00:30:19.480 people like this that push for laws that only benefit themselves and against 99%
00:30:27.080 of the population to try and fix this we've created a
00:30:33.989 console which is an open-source platform with what we believe are the basic
00:30:40.480 building blocks of a direct or participatory democracy which are
00:30:48.419 participatory budgets I work for the Madrid City Council and there every year
00:30:54.009 we do participate Ori budgets with 100 million euros and how they work is that
00:31:00.549 people submit proposals and the government gives a monetary value to
00:31:06.669 each of these proposals and then the people vote very similar to a shopping cart when a hospital
00:31:13.720 I wanna part and when our school and that's all your budget that you have the
00:31:19.690 government execute these proposals
00:31:25.499 another great thing that we have is public contracting no Diana we use this
00:31:33.070 bribery that happens we've changed the way that public contracts are given to
00:31:39.669 companies we were we had to transform a main square the biggest one is pain plus
00:31:45.970 hispana and what we did was we asked all the architects in the country to send us
00:31:52.690 their proposals for the main square we had 72 viable projects and we put them
00:32:00.789 all on the website and there the population could see the project the
00:32:06.429 pictures the specifications comment and vote for them and the one that one is a
00:32:12.669 beautiful project full of twists places for kids to play bicycles concerts for
00:32:20.019 music fantastic fantastic another thing
00:32:25.359 that is software implement is collaborative legislation we want the
00:32:31.419 people to participate in the creation of laws and for that we we want to create a
00:32:40.330 new law we put the draft of the law on the website and then the people can
00:32:46.320 interact with that law they can comment new paragraph that they would like to
00:32:52.140 see edit or paragraphs and they would like to see removed the vote in favor
00:32:57.330 and against these things and these contributions by taking into account in
00:33:03.690 the different drafts of the law before they reach the House of Representatives
00:33:08.760 who is finally voted thank you
00:33:16.230 another great part is the citizen proposals this is we aspired by
00:33:22.830 Switzerland any citizen can propose at
00:33:28.290 any time something cool and if they get enough signatures then we set up a whole
00:33:35.300 big Democratic party where the whole city can vote in favor or against this
00:33:42.300 proposal we set up different channels for voting one is obviously through the
00:33:48.060 website another one is through physical voting booths all around the city
00:33:53.460 and also through main we'll send you a letter home and fill in your ballot and
00:34:00.270 put it back in the mailbox that with the vote and we shall the result to say if
00:34:07.080 we do this proposal or not and this is a binding consultation the referendum
00:34:14.660 can't really say that we're too loud but what is the future the future looking
00:34:23.160 good we have lot o of contributors thank you thank you very much we have a great
00:34:29.970 Co team pushing forward lots of good changes and bug fixes big shout out to
00:34:37.440 our top contributors to thank you very much and we are expanding
00:34:43.260 we are 70 cities in 15 countries these are real government there are using
00:34:49.650 right now production concern with this different section
00:34:56.510 we're very happy but we still got a lot of work to do so if you like this ideas
00:35:02.760 please help us thank you very much hi
00:35:11.040 I'm Chris and I'm curious how many people don't know what this means
00:35:17.060 did you see Wow so about half so I've
00:35:22.830 been involved in the Ruby community for a while and one of the main things that
00:35:28.710 that I liked about it when I first discovered it was this menace wand so it
00:35:34.170 stands for Matz is nice and so we are nice and it goes back to the early days
00:35:39.540 of mailing lists and things like that and when folks would come in and bring behavior that wasn't in line with how
00:35:47.100 the folks wanted to deal in interact with each other they would kind of go back to this menace one thing it doesn't
00:35:52.710 solve all the problems it doesn't it's not magical but it is just a good tenant and I remember being impressed with it
00:35:59.820 and want to make sure that we keep it alive in in the Ruby community so when you're interacting on pull requests in
00:36:07.140 in the documentation and then the code you write and with each other while we're all here let's think of minutes
00:36:14.280 and be nice to each other so in the
00:36:21.060 spirit of being nice I helped with a little event called Ruby for good and I wanted to bring this up here because if
00:36:27.720 you like helping animals we work with the Smithsonian Institute and research and George Mason University researchers
00:36:33.960 we work with a number of diaper banks Habitat for Humanity a lot of these good
00:36:42.440 you know charity organizations that don't necessarily have technical skills that the folks in this room might have
00:36:49.230 can come in and and really solve some problems for them and make a big
00:36:54.600 difference in them doing their jobs so the good thing about doing this is we get to come together it's it's a
00:37:02.340 four-day event we get in a room together and we work on projects and we make a big difference and we've taken people
00:37:07.980 from having answering machines that they use to transcribe and write something down and put it on a thumb drive and mail it
00:37:15.360 off to people which was a real life project that real scientists were actually using and we were like oh hey
00:37:20.820 there's this thing called web forms and we built it for you already and it you
00:37:26.520 know removed their overhead and made their jobs much easier the nice thing
00:37:32.010 about this is there's open source projects for lots of different people at a lot of different skill sets and so if
00:37:39.480 you're interested in doing that if you've never led a team and you want to come in and be able to do that and build
00:37:44.670 it up and learn those skills if you want to network and get to know people come to a conference where you get to make a
00:37:51.390 difference and help out you can do that this year we're in Washington DC at
00:37:57.990 Georgetown University the event is sold out but the reason I'm still up here
00:38:04.590 talking to you is that we always do need help on projects we also need projects
00:38:10.020 especially if you have something that you are passionate about or you believe
00:38:15.570 in or have contacts in in a non-profit or other charity please come and talk to
00:38:22.140 me somebody find somebody else that has the Ruby for a good shirt and I'd love
00:38:27.480 to find out more and again this is really for people of all levels we absolutely need senior folks that can
00:38:33.480 come in and have the experience but we want to build up the next generation of
00:38:38.760 tech leaders we try to have every project has two leads and we work together we have lots of issues on our
00:38:48.470 github lots of different projects we try very hard to tag and open them up so if
00:38:54.120 it's easy to work on something that you can come in and pick it up so if you have something or you're looking for open source work to do or want to
00:39:00.900 contribute I think this is a great way to get started and in closing we do have
00:39:06.300 a Scholars Program similar to how we have one at railsconf and we fund that
00:39:11.820 through a supporter t-shirt sales so if you would like a lovely t-shirt and want
00:39:17.970 to help our scholar pay for their way there go buy a shirt anybody interested please come and find
00:39:24.360 me I'd love to talk thank you very much
00:39:29.930 all right before I get going given the current state of things with the Internet these days concerns over
00:39:38.940 privacy over control people have over their own own information I just want to
00:39:45.030 say this everything I'm about to say is off the record greetings my name is Chris Morris I'm
00:39:50.880 the director of engineering for Mystery Science not theater 3000 we make awesome
00:39:56.460 science videos and activities for elementary age kids if you want to come help save the next generations brains come join us five years ago on this very
00:40:04.080 spot in Portland Oregon I gave a lightning talk on impostor syndrome called technical intimidation I've
00:40:10.050 returned today five years in the future to talk about something completely different this is my profile and github
00:40:16.020 I'm not showing this to you to brag about the huge number of repos I forked and never done anything with nor is it
00:40:21.450 to share my joy over being the only online service where I've been able to obtain my preferred username without having to resort to creativity like this
00:40:28.859 or this or in the worst case that one but to pay tribute to why the lucky stiff for my avatar of a cartoon Fox
00:40:35.850 that he drew and I might be inviting copyright violation of seven and a half
00:40:41.190 years ago on the Internet my friend Glen Vander Berg started this site wide a.org
00:40:46.530 which today has clearly been taken over by a very lonely German who's in the
00:40:52.260 sports betting on goats and bingo five and a half years ago not on this very spot a true be calm for a wonderful
00:40:58.770 documentary on why by Kevin Triplett was shown but we don't even have time to talk about it this is a lightning talk so we'll skip to the part of the book
00:41:04.530 that why wrote about Ruby we're cartoon foxes showed up and started saying
00:41:10.290 chunky bacon so who's into conspiracies
00:41:16.670 fools don't raise your hand that's what they want you to do if we translate
00:41:22.560 trunky bacon into German and then back into English we got our first clue lumpy bacon if we translate that into a whi
00:41:29.760 language Yiddish for example and then back we get lippy bacon now
00:41:35.170 I have no idea what that is but look below it did I mean Lipsy bacon hell yes
00:41:42.309 I meant Lipsy bacon with a search on that and then an obvious connection through Ralph Lauren we find a rare
00:41:47.980 thing on the internet a Penta googlewhack but not only that a
00:41:53.650 five-part term Pinto googlewhack a meta Penta Google whack and we only have to
00:41:59.170 scroll down on this page to see who is sponsoring this insanity that's right stitch fix a sponsor of this very
00:42:08.109 conference and we know what this means because stitch fix has no anagrams none
00:42:13.569 I mean for crying out loud my own name has 43 including them such obvious ones
00:42:18.910 as mr. cirrhosis though that does give me another username option how does stitch fix have zero
00:42:26.980 that makes it an anagram prime a prime agrammatism domain names pizza calms the
00:42:40.390 only other one I've found so far but if you'll join me in the hall after this you can get in on the ground floor now
00:42:46.869 thanks to my previous presenter we have and know what this acronym means in our
00:42:53.890 community so it means Matz is nice so we are nice now admittedly kind of except
00:42:59.319 for me I'm a little bit of a jerk but it's okay I have impostor syndrome so I'm not really a jerk if Matz is the
00:43:06.309 father of our community why is clearly the guy who crashed your kids Bar Mitzvah but brought along his DJ gear
00:43:12.099 and saved your chunky bacon after you showed up with a dead iPod and left the charging cable back in Jersey we owe Y
00:43:18.880 more than a site that's been devoured by lonely gambling addicted Germans seven
00:43:24.430 years ago this very day if today were August 19th I created a special term in honor of Y
00:43:31.720 day now like any good conspiracy I've lied to you I've tricked you I told you
00:43:39.040 stitch fix has no anagram but clearly that's a number one up there right programmers but there is a term that has
00:43:45.670 no anagrams because it's pure non and like any good developer I registered
00:43:51.089 that nonsense as a domain and today I'm unveiling wicks wack dot-org
00:44:00.380 what kind of bacon did the Foxes want chunky what is special about chunky its
00:44:07.859 thick its luxurious its generous so ask
00:44:13.290 yourself what would why do like anyone could even know that you do you
00:44:21.390 nobody wants skimpy bacon be generous and be chunky thank you very much one
00:44:35.339 exception to my mispronouncing rule if Y shows up here I will definitely pronounce his name correctly so if
00:44:42.660 you're out there that's an invitation ah next up is so nice
00:44:53.609 Thomas yeah and I don't I don't know why I do this every year oh thank you I'm I
00:45:01.589 didn't mean that I made this but thank you regardless and you may begin
00:45:09.440 hey I'm Andrew Lewis I'm visiting from Canada it's my first railsconf and I'm gonna talk about a personal project I'm
00:45:15.119 working on I'm building a Memex in rails so just to show a hand who's heard of
00:45:20.160 the Memex before the historical idea cool has anybody used in that mix before okay that was a trick question
00:45:26.880 which you'll find out a bit later so our story begins in 1945 it was a it was a cool idea this is the mimic so the idea
00:45:34.230 was that you'd have a physical cabinet you put it in front of you you put all your library on microfilm and you'd be able to search and go through all your
00:45:40.890 information everything would be in one place it came with these add-on devices like a stylus for adding notes and
00:45:46.290 drawings it had this voice recorder for adding voice notes it even had this clip on camera that you could put on your
00:45:52.980 forehead and take pictures for your mics the tragedy of the medics is that it was never produced I heard about this idea
00:45:59.460 and I was really sad I was sad that it was never produced so I said I have a lot of data
00:46:05.260 I've overwhelmed so I said what I'm gonna sink I have a lot of data I was
00:46:11.410 overwhelmed by the amount of data I had that I can't search through so I said I should just build my own mimics and that
00:46:16.599 was awhile ago I said naively many years ago so I got to work at building a lot
00:46:21.910 of importers so I have pretty much all my browsing history and my reading history I have my digital consumptions
00:46:27.340 like the photos I look at or the videos I watch I have Geographic trails from my phone generated all the time and all my
00:46:34.210 messaging and social interactions and then a lot of journaling and like qualitative data that I generate by myself so this is all the data I have
00:46:41.410 any I have a lot today to it I have stuff from 1995 onwards so like my first Journal and I've kind of back filled it
00:46:47.770 and I put a lot of stuff and it's organized as a graph in a post Coast database so there's a rails API for
00:46:53.369 sorry a rails app for the API and then a separate app separate rails app for the
00:46:58.900 importers and then I'm using ember jest for the front-end so I'm going to do a little live demo if you want to do a
00:47:04.780 quick prayer that we appreciated so this is this is the interface its oriented
00:47:10.359 around queries so the query that we have on the Left we're just doing a query for things that I've liked so verb like so
00:47:16.990 this is just an example of what comes up so these are all the things I've liked recently I can scope it down to
00:47:22.960 something like this provider YouTube so this is like my full YouTube history I
00:47:28.599 can do something like this provider github so this is a on my full so these
00:47:35.260 are these are repositories that I've liked on github so you can get an idea like how much data is in this to show
00:47:41.980 you the structure I can turn on this graph view so this is the this is me in the middle so everything's oriented
00:47:47.500 around myself this is like a repo that I liked these are the tags that are on the repo so you can traverse all the data
00:47:53.140 like I can traverse all the data of my life through this graph structure so I'll do another example I'll do my
00:47:59.349 listening history and I'm going to do a traversal now so I'm going to do a traversal for song and I'm gonna do
00:48:07.300 where the creators are Aretha Franklin so what I'm doing is looking for all songs where Aretha Franklin created them
00:48:14.099 and this returns every song I listen to that Aretha Franklin created it's pretty cool for
00:48:20.050 just doing like a full search across like all my history for a search term so I can do something like this Ruby on Rails and this will this will search
00:48:26.650 across everything I've ever seen or encountered that matches Ruby on Rails do I have a typo I'm not sure I will
00:48:34.840 keep it go ahead oh there it was just slow just did every to get one of these
00:48:40.150 the stroke waffles on the way in so this is a Dutch treat I got it on the way in and I knew I'd seen it before so I was
00:48:46.150 able to search my mimics four-stroke waffle and what comes up here is a
00:48:51.730 picture two pictures actually so I knew I'd see that Ruby complet matched I can get the context of where I was when I
00:48:58.690 when I was looking at it and it's bit slow yeah but I was hanging out with some friends I was at the Duke Energy
00:49:04.120 Center and this was in 2016 at rubyconf and again it's matching on OCR so I have
00:49:11.020 I have it's it's matching OCR on all the photos I have so I can do some more
00:49:16.540 queries I know I'm coming to Pittsburgh I've driven through Pittsburgh for a few minutes like on a road trip so I can I
00:49:22.300 can pull it up so what I'm doing is searching for like just normal activities that I've done near
00:49:28.990 Pittsburgh so this pulls up the last trip I did a couple months ago I was on the way to strange loop and we drove we
00:49:35.710 drove through Pittsburgh I can put it on a map and load in I can put it on a map
00:49:44.320 and see the places I've been in Pittsburgh so that's pretty cool I was I was with my friend max we were
00:49:49.660 driving a driving and strangely so I can I can pull up things that we did on the trip so I can do this kind of query so
00:49:56.170 verb travelled in a car automobile it's
00:50:01.600 a bit clumsy and I can do occurred occurred with my friend max so this is
00:50:10.840 the this is all the elta traveling I've done with my friend max you can see the route and then I can search within that
00:50:16.360 so I can do something like verb photographed and occurred during verb
00:50:24.580 traveled so this is a query for all the all the photographs I've taken while traveling with my friend man
00:50:30.849 and here they are so it just gets that idea of like of the cool queries I can do so I also tracked my food eating so I
00:50:38.410 can do something like this verb ate burrito so this is all my burrito history and I'm gonna scope it down to
00:50:46.839 where I live Verano so usually this is kind of useless data I don't use it too much but sometimes sometimes it's useful
00:50:53.080 for associations so I know that I was reading a book while eating a burrito so I can scroll through my burrito history
00:51:00.099 if I just try to drag my memory about like where this happened and I'm not
00:51:05.650 seeing it so I'll just keep on kind of going through my burrito heat map and okay that's about time okay all right so
00:51:18.070 I'm gonna just give a quick talk on embracing sequel a in production but
00:51:23.260 before I could begin I just want to give a big asterisk to everything I kind of love sequel light so it's this
00:51:30.310 is definitely biased but if you ask anyone on my team I've been kind of non-stop talking about it for quite some
00:51:37.810 time so chances are if you've ever worked with sequel light or anything a rails tutorial before you've only ever
00:51:44.440 worked with it in development and then as soon as you realize you have to do a production app you want to switch
00:51:49.660 everything over to like my staple or Postgres or I don't know even know sequel I don't know but the great thing
00:51:56.560 about sequel light is that is just a file and then you can actually read from it and one of the things I do on my team
00:52:02.589 with the shipping team is that what we want to do is just figure out the cost of a box from going from point A to
00:52:10.089 point B and with all these different shipping providers there's a ton of data
00:52:16.089 to actually figure out this cost so if you've ever been to a post office it's like twenty five dollars and you have no
00:52:21.580 idea how they actually come up with it luckily I do so if you ever want to talk about it we can figure out strategies
00:52:27.810 the one thing if you ever had to deal with a legacy character like USPS or DHL
00:52:33.310 or UPS or any of these they're api's are slow brittle and they don't totally know
00:52:38.650 what json means other than just a fancy wrapper on XML because cool kids like you love it so
00:52:45.010 one thing we've done is actually taking all this raw data and what we wanted to
00:52:50.320 do was actually calculate everything locally so our kind of first attempt that's kind of worked and brought us to
00:52:56.470 a good point was let's load everything in memory at once right when our rails app boots up and we're golden
00:53:03.870 unfortunately when you start working with more and more carriers and more and more data things like boot up times and
00:53:09.880 everything become really bogged down and it's just kind of a nightmare and trying to deal with this so one of the great
00:53:16.960 things even what we learned today which I was super excited about with rl6 support adding more is just actually
00:53:23.440 working with active record and and switching over to multiple databases so we can kind of turn this naive approach
00:53:30.700 with looking up through a hash and all these kind of weird we have a one thing called a reader which was a really
00:53:38.170 crappy ORM so one thing we want to do is just embrace active record fully and that's kind of what we've done
00:53:43.420 so the great thing with having John Griffin and everyone else on the team is that I can dig into documentation and
00:53:50.110 also ping someone on slack just to verify and check my sanity so to give
00:53:55.180 you a little example obviously this is simplified but we we basically can roll out different data bases for different
00:54:00.880 carriers and store all this logic and one of the great things about working with carriers is that you work with an
00:54:07.120 lots and lots of business people and they love Excel so we can actually quickly build a rig task and generate
00:54:14.530 all these excel files and data sets and to kind of a rolled up sequel a version and if you've ever had a chance or have
00:54:21.700 heard this mysterious tool at Shopify about dev this is actually an open source gem that kind of makes working
00:54:27.430 with any command-line tools a little bit friendlier so like everything with this
00:54:34.230 conference we've always been hearing this mystery question does it scale and
00:54:39.600 the question is yes we've actually just seen it past few weeks we've going through different flash sales and
00:54:45.670 everything else and the great thing was working with sequel ID especially if it's read-only you can actually handle
00:54:51.820 scale on threads I definitely would never write do it but it works excellent for insurance and
00:54:59.460 if you are just curious we are totally running on kubernetes so all the buzzwords are out I'm hoping we
00:55:05.309 can plug in the blockchain as well but who knows and if you ever want to talk
00:55:10.740 to me more about super light I would love to do that or even maple syrup or other Canadian things like health care just find me out afterwards
00:55:18.230 alright thanks thank you hi I'm Heidi Waterhouse I'm the
00:55:26.069 developer advocate for launch Darkly and I care a lot about stickers and you're gonna care too when I'm done with you
00:55:32.190 so this joke is a derivative of a show that went off the air before most of us
00:55:39.089 were born I'll sock it to me and I'm not gonna go into it so stickers why do we
00:55:46.950 even care are we actually eight years old because that's sort of the demographic we
00:55:52.470 associate with stickers but if you look at your laptop you may find that you are secretly eight years old we care because
00:56:00.030 we find stickers delightful we find them surprising or charming and for a couple
00:56:06.510 other reasons that I'm going to go into but I really feel like delightful is a leading indicator of sticker popularity
00:56:14.150 we also care because we use them as in-group markers for identity we want to
00:56:20.700 see ourselves I keep getting pictures taken of me with other people with weird colored hair
00:56:26.819 because people can easily identify us as a group and that's super easy and also
00:56:31.980 I've chosen to have weird colored hair so that's great but sometimes we don't get to choose who we are and yet we
00:56:37.410 still want to see somebody who looks like us so I have this giant distribution collection of stickers if
00:56:44.579 you saw my sticker bag yesterday I need you to know that is half of my distribution collection I don't bring
00:56:49.890 the whole thing because it's super heavy because stickers are super heavy and the TSA does not love a giant wad of
00:56:56.490 stickers it evidently looks really suspicious so if I ever get stickers that have
00:57:02.960 LGBTQ themes or underrepresented folks or in jokes that programmers find home
00:57:09.300 larious they fly off like I can't I can't keep them around and I think
00:57:15.300 that's awesome like every time somebody rummages through my sticker pile and says oh my gosh you have a brown
00:57:21.900 programmer or a girl or a bi pride flag
00:57:27.000 or a trans pride flag and they're so excited because some company somebody has thought of them as being
00:57:34.230 worth a demographic point there are other kinds of stickers that we choose
00:57:40.200 because we are representing ourselves not necessarily as part of a group but we're representing our personal stack of
00:57:46.590 development or our personal brand or the corporate stack that we work with or our
00:57:52.500 politics and by putting all of these things on a highly visible piece of electronica we're saying these things
00:57:59.100 are important to me and I care enough about them that I want to tell you about them without having to actually make eye
00:58:05.160 contact or utter words because it's not always our thing also I guess some
00:58:11.910 people care about branding like maybe the people who buy the stickers for us because I'm priced out stickers recently
00:58:18.330 it turns out you can get holographic stickers for like 30 cents apiece this is important knowledge that needs to be
00:58:23.430 disseminated to more people but even regular stickers are actually like custom print stickers are a little
00:58:28.800 more expensive than you might think they're they're closer to the like 20 25 cent range so yeah it's not much like
00:58:36.180 until you start printing you know 2,000 stickers it starts to add up so I think
00:58:43.020 that companies really care about getting their brands on our laptop and this is a
00:58:48.870 small selection of my sticker pile as it grows and evolves over the ages things swap in and out like I don't think I
00:58:55.350 have any angular stickers right now because it's been a while since I went to that kind of conference I now have a
00:59:00.660 giant handful of Ruby's stickers because you all are into the stickers and it's awesome you won't see them in the
00:59:06.930 sticker bag here because that would be coals to Newcastle you already have Ruby stickers
00:59:12.980 so let's talk about sticker designs and design patterns and anti patterns first
00:59:18.320 size somebody told me this yesterday and I'm so excited there's a spec for that there is a spec
00:59:25.609 for how big your hex stickers and your square sticker should be go look it up sticker how also don't make them super
00:59:32.869 big because unless I work for you I do not want to devote a sixth of my laptop to your surface like small stickers are
00:59:38.900 beautiful just go with tiny shape think about how stickers are going
00:59:45.500 to work with each other I love the hex stickers and in fact brought in hex stickers it launched darkly the first
00:59:51.380 day I started I like walked in I'm like hi nice to meet you you need better stickers they have to tile no no kidding
00:59:57.410 um so I love the hex stickers because they tile if they're appropriately sized circles are inefficient and also selfish
01:00:04.460 because you can't either you have to like layer and not everybody's a layer person or you have to waste space and
01:00:11.089 it's very vexing we could have that space for stickers so utility if you
01:00:17.810 want people to be using your stickers as a brand you should put your name on it this was a great sticker isn't that
01:00:24.109 adorable who likes that sticker that's from in flux DB and until I yelled at them they did not put their name on this sticker
01:00:30.770 and so people would be like oh this is so cute what who's it from my bags I was
01:00:36.470 the shrug mochi personified so I have 12 seconds left get out your phones if you want a free t-shirt and you didn't get
01:00:42.890 one at our booth you can take a picture of this right in and get a free t-shirt I'm going to post these slides and they
01:00:50.180 have a bibliography at the end which is obviously inappropriate for a lightning talk thank you all for your time and
01:00:55.550 attention find me later if you want stickers thank you
01:01:02.630 hello it is my pleasure to speak with you today however I come with something
01:01:09.420 that's quite vexing you see I've been on a mission for a while it's been many years now started here
01:01:16.290 rails comp still seems to be a thing I feel like it's something that we really
01:01:21.660 need to talk about together as a team and a family and that is high-fives yeah
01:01:30.480 there's a lot of opportunity here to really improve that so I'm gonna take this handful of minutes now and to
01:01:36.990 really train all of you on the proper etiquette for a truly stellar high-five
01:01:42.020 so if you could stand up if you would stand up now the high-five is done and
01:01:48.630 multiple multiple components the first is as Evan indicates stretch really just
01:01:53.970 get the fingers just really stretched out there you know like arms just really
01:01:59.340 work that pectoral muscle and get there now part of the challenge of a great
01:02:04.440 high-five is that it's a moment to really connect with the event individual next to you so step one is to find a
01:02:11.190 partner find a partner and with that partner your first question is going to
01:02:16.440 be can I give you a stellar high-five ask that now yes heaven you can all
01:02:24.930 right I didn't say give one clearly we have a
01:02:31.920 listening problem okay now back to
01:02:37.770 paying attention so the first step to a stellar high-five is to ask can I give you a seller i-5 which you've done
01:02:44.010 beautifully the next step is to place the arm in approximately 90 degree angle
01:02:49.530 with your willing participant face the willing participant directly and here's
01:02:55.110 the hook focus on their elbow focus on their elbow and then appropriately give
01:03:02.430 them a high-five that's good now here's the thing
01:03:08.910 for all of you out there they'd like to give an aggressive high-five don't do that no for those of you who like to say
01:03:17.609 yeah give me a high-five and then sort of kind of I get scared don't do that go in there full force yet appropriately so
01:03:25.319 that's your lesson for today so now I'd like you to find another partner and give them a stellar high-five okay and
01:03:40.049 and by request ie Evan you'd like us all now to practice the non-dominant hand Oh
01:03:51.049 doesn't that just feel great now I invite all of you for the rest of the
01:03:56.940 the next day to really practice this make sure you get permission however all kidding aside some people are not as
01:04:04.049 comfortable about it so while I fully endorse this make sure you do get permission visual or otherwise and have
01:04:10.349 a fantastic fantastic rest of rails comp thank you so much hello we're blue
01:04:19.039 anyone okay I'm Barrett Clark and this is pretty neat Alexander this is
01:04:26.220 Brittany yeah my good friend Brittany I hear I work at The Container Store in
01:04:31.259 Dallas the retail store and yes we do use docker Brittany works ad hoc despite
01:04:39.450 the could not remember my last name we've been friends for about three years now and whatever it has been a good
01:04:48.390 three years we met at Ruby conference like three years ago and one of our favorite things about coming to rails
01:04:54.960 comp coming to Ruby comp is getting a chance to see some of our weird Ruby family that we don't get to see most of
01:05:01.710 the year you know we chat online but it's nice to see each other face to face and if you're like us and really enjoy
01:05:08.579 that aspect of coming to railsconf we have another opportunity and what about
01:05:13.799 two weeks for you to do that again and that is hashtag soon and
01:05:24.029 right whoo yeah thanks Elliot so Rho
01:05:29.229 scam South what even is it well as you can see by the beautiful pictures there it's an opportunity for us not even
01:05:36.400 necessarily Ruby or rails programmers to go be people together out in the woods
01:05:41.529 or something we will go to Dahlonega which is about an hour and a half north of Atlanta and we will camp in cabins or
01:05:49.450 if you want to take a tent that's cool too I want to stay here
01:05:55.210 so if you want it to go we do offer the regular price is 375 now early bird
01:06:01.450 tickets I'm sorry to say you've missed but we also offer a diversity ticket if you feel that you are a member of an
01:06:07.569 underrepresented group then you get a $295 ticket and like I said it's just an
01:06:15.759 opportunity to go be people together you can take a computer if you want and if you did take that and didn't open it
01:06:21.969 that would also be just fun so that's kind of an unconference so if you had
01:06:29.559 maybe a talk that you were thinking about pitching for a conference coming up and you were too shy to do it during
01:06:36.339 a lightning talk you could practice it on to people in the wilderness who don't
01:06:41.349 have any cell phone reception so they can't like upload immediate videos of you doing it so that's nice
01:06:48.489 also we continue the Ruby tradition of
01:06:54.219 too much karaoke and that we have karaoke too much some might say too much
01:07:00.160 some might say not enough but there's karaoke every night for three nights straight for several hours and it'll be
01:07:08.589 a lot of fun so just go to the website there u.s. - South dot rails the rails
01:07:14.469 dot camp I can't read any more because it's been a long time and I spent the
01:07:19.599 night in LaGuardia last night so Google rails camp self and come see us thank you
01:07:24.759 I have a question I have a question the question from the audience since you
01:07:30.069 still have time I have a question is food provided at this camp well yes people bring their own food
01:07:36.680 so here's the deal with food we have a menu that one of the people speaking in
01:07:42.170 the microphone right now planned you'll have three squares a day and the meal is
01:07:48.109 friendly to hopefully your dietary needs or preferences we will also so you fly
01:07:57.440 into Atlanta or you can drive but if you fly into Atlanta you'll get on a bus and you can see a picture there of the group
01:08:04.400 that was real scamp East's and we flew in in New York City the bus will stop somewhere and you can get off and get
01:08:10.940 whatever beverages and snacks you want if you wanted to bring you know sandwiches or whatever you could do that
01:08:16.279 too again you do you but yes we will provide three meals a day
01:08:21.580 thank you hi everybody thanks for hanging out with us tonight that's been
01:08:26.960 pretty cool my name is Jordan Byron I've worked for SeeClickFix they are a civically engaged tech company in New
01:08:33.319 Haven Connecticut and I make really awesome mountain bike videos on YouTube so go check out my stuff and like and
01:08:39.170 subscribe I would love you forever I'm actually not here to talk about mountain biking though I'm here to talk about a bundle update it's that thing
01:08:45.140 that you do when you try and upgrade rails and fix all of your other broken gems and it's also that things you should probably do more often because
01:08:51.170 you know security and stuff and things get better and you want those new bugs too so when you do run bundle update
01:08:57.830 usually get something like this you like some GRP I don't know what you are got
01:09:02.989 an upgrade and you're like not that's awesome I built a little tool to make that slightly easier it's called gem
01:09:08.150 dandy and what this does is if you run it against your repo and it creates a pull request so this is all github
01:09:14.390 related so if you're not in github you can just tune me out right now so it'll it'll create a pull request I'm
01:09:19.489 keep pointing like it's behind me it'll create a pull request on your repo with any gems that can be updated it'll link
01:09:25.310 to the actual gem page itself the version changes and you can also get like a link to the change log so you can
01:09:31.250 figure out what changed so you can you know kind of maybe pinpoint if it's gonna be a problem or not the it's
01:09:36.679 really easy it's just a little executable you just run bin jim-dandy and then your github repo so if you were
01:09:42.469 doing a ton rails to be rails rails what it actually does under the hood it clones down your repo it runs bundle
01:09:48.080 lock update it parses the diff from get to figure out if anything changed the changes are committed if
01:09:53.690 they're there and then it sends a pull request to your project now I know you're excited so this is how you would
01:09:59.570 do it except I didn't actually publish it to rubygems because it kind of sucks so get clone of the repo I'll have this
01:10:05.929 again at the end and I'm sorry it's just not quite ready to be on on rubygems and there is one more thing I did say
01:10:12.050 automated so you can actually put a run on a free Heroku Dino just run this
01:10:18.199 little rake karoku update and you can run it as frequently as you like and then that means that you're gonna get pull requests every day every 10 minutes
01:10:25.369 however frequently you want and again this is up on github it's open source so
01:10:30.739 you go check it out you have some tests and since this is kind of long I'll tweet out after this so just search for
01:10:36.500 hashtag ruby calm for hashtag gem dandy and i'll have a link to it so thanks
01:10:42.790 thank you my name is Mike and I work for
01:10:48.230 a g2 crowd we're a review site out of downtown Chicago and I want to talk today about profiling r-spec and it just
01:10:56.619 something that you know it came up for me recently I was working on a project and everything was going well and it's
01:11:03.020 saying it seemed that one day I woke up and I had a problem my specs were slow
01:11:08.239 and I can imagine I'm not the only person who's experienced this a slow test suite is not fun and most of the
01:11:15.199 time that it happens it's our fault we did something wrong we did things that weren't very efficient and we didn't
01:11:20.540 really notice it at the time and these things grow and grow and grow until they become a problem so this is something
01:11:26.570 that I was dealing with and I knew a pretty good idea how I wanted to solve it you know if you want to solve something like this the first step is to
01:11:32.869 measure it so let's use a profiler let's measure our specs and let's see where
01:11:38.360 the performance problems are so we can make rational decisions when we're spending our time optimizing so our spec
01:11:46.520 comes with a flag just - - profile that if you run this against your suite it's
01:11:51.619 gonna go ahead and spit out some output once your specs are done running and it's not particularly useful for the
01:11:59.960 problem that I was trying to solve it told me my 10 slow aspects I already knew what my 10 slowest specs
01:12:06.810 were there the feature specs there's a reason that they're slow I'm terrified of the code that they're covering if
01:12:12.420 anything breaks there it's gonna ruin my day so it does I'm willing to spend eight seconds testing my login flow or
01:12:18.900 the credit card checkout flow or whatever it is that that thing is covering like those specs are slow for a reason and there's not much I can do to
01:12:25.680 make those specs faster so when I was digging through existing profilers that I could find everything seemed to be
01:12:31.740 asked for answering the question of what my slow specs are and it turned out that wasn't the answer that I was looking for
01:12:37.280 what I wanted to know was where should I be spending my time in order to get the most bang for my buck when I'm
01:12:44.840 optimizing my specs so in order to solve this problem I created a gem I called it
01:12:50.100 our spectacles it is a r-spec formatter that uses a d3 partition graphs to show
01:12:56.820 you at a glance where you're spending time and your r-spec Suites so as an
01:13:02.040 example here's a visualization of a test suite if i zoom in say to this purple
01:13:09.630 area these are the system specs each individual leaf of this tree is an
01:13:15.060 individual spec and if you kind of see here you can see there's a small number
01:13:20.370 of feature specs taking up a ton of time but this probably reason is so slow here's my controller specs they take up
01:13:25.890 about half of the time on a test suite this blue arc represents the time that they take you know and all these tests
01:13:32.040 are a little bit longer a little bit shorter than a feature spec but you know maybe longer than these unit tests what's just sitting over here when you
01:13:38.340 have a very large number of unit tests that run very quickly what I found when I run this profiler against my tests is
01:13:45.120 that a lot of times you'll have a large number of tests that are running maybe just a little bit slower than they
01:13:50.640 should and they end up sucking up a lot of time out of your test suite none of the profilers I've used before
01:13:56.310 would be able to show me this they would only show me my slow individual specs and I found that this has been a really
01:14:01.320 great tool for finding low-hanging fruit when I'm optimizing my test Suites so at g2 crowd we use this except
01:14:10.710 alongside of our CI and it records the timing of all our builds it actually lets us keep a history of our time our
01:14:17.280 build or excuse me our test suite time over time and then it also it supports
01:14:22.710 parallel tests which is a question that people ask me a lot so again the gym is called our spectacles and thank you oh
01:14:31.400 man so pretty okay so I am Kenny brown I
01:14:37.050 also work at g2 crowd he already explained it so I'm not going to go into that but what I wanted to talk to you
01:14:43.440 about today is leaps of faith so a leap of faith is basically when you're taking
01:14:50.100 a jump and you don't know if you're actually gonna make it to the other side this is a fantastic representation because I don't know if you've seen it
01:14:56.640 on the Internet a lot of people said physics using physics he's not gonna make it I started my career in
01:15:06.420 California I got hired as an intern and later after I graduated I was hired
01:15:11.520 full-time I later found out that when I was hired they weren't sure about me they had taken a leap of faith on me I
01:15:18.380 actually ended up working with Mike he was not my manager at the time and he
01:15:24.780 was working on a side project an internal project only and I I had no
01:15:31.290 idea if I could do what it was but I wanted to help him out it was exciting and scary but I took the leap there's a
01:15:38.010 quote I've seen online if it excites you and scares you at the same time that means you should probably do it if
01:15:44.970 you're familiar with the rest of that it's inappropriate for the conference but it's pretty funny but the leap I'm
01:15:53.130 talking about with Mike it wasn't a very big leap it was more like this after a
01:15:59.310 couple years I'd moved up in the organization and Mike had moved on and found a start founded a start-up in
01:16:04.920 Chicago I knew from then that I actually wanted to join him it was Mike and a few other executives from the company I was
01:16:11.040 working at at the time I had dinner with Mike I applied and quickly got a letter
01:16:16.110 saying that they weren't able to hire me because of a cease and desist from my current employer
01:16:22.280 well that wasn't good for me so I went home talk to my wife and said unless you say no we're gonna move to Chicago so I
01:16:28.680 can get a job at g2 uh that was a huge leap of faith not
01:16:34.170 just for me but for my wife she'd grown up in California all of her family was in California and to her I was taking
01:16:40.739 her away from that for a potential of an opportunity that looked a lot more like this without really much of a direction
01:16:49.110 that we were gonna make it to the other side well year later I got called in for an interview I literally went in had an
01:16:55.980 hour before my flight to go help my mom move from Utah to Chicago I interviewed
01:17:02.610 I got on my play was in Utah while I was out there my wife called me and told me
01:17:07.980 she was pregnant after two years of trying she was finally pregnant and if you have children you know that it's
01:17:13.800 amazing but it's also scary as hell well so a few days later Mike calls me back and offers me the job remember I moved
01:17:21.119 my wife away from her family for the potential of this job so of course you
01:17:27.179 know I got this uplift the blue line somehow there's updraft right before the window got taken in but of course I said
01:17:33.510 no I took the Greenline I was scared
01:17:39.530 because I was having new baby and I didn't know what that was gonna do for me I've got 99 problems and 86 of them are
01:17:46.820 completely made-up scenarios in my head that I'm stressing out about for absolutely no logical reason pretty well
01:17:53.510 sums out how I felt Mike called me back he really wanted to work with me again true story he was basically in tears
01:18:00.110 begging me true ish story so I finally said yes because it's really tough to
01:18:06.800 hear a grown man cry it's been a few years since then and another opportunity
01:18:11.960 came up one year ago I was asked by our CEO to build a new product basically the
01:18:17.059 only direction I had was build something on the Salesforce platform for our customers and that I had four months to
01:18:22.519 do it this time my wife was pregnant with our second child but I'd learned my
01:18:27.769 lesson and after consulting my floor wife I said yes as a side note you might
01:18:33.199 notice that massive changes come in my life when my wife is pregnant so we're not having any more children I didn't
01:18:41.780 know which land I was going to take the project was ambitious there were a lot of people who didn't think we were gonna get it done in time I actually ended up
01:18:49.729 sleeping in the office a dozen times or more during my daughter's first three months of life but to be fair sleeping
01:18:56.210 on the couch I actually got more sleep than if I was at home with a crying baby but I did everything he could to make
01:19:02.869 sure that even if I failed I had done my best well I actually made it happen it was released on time it's in front of
01:19:08.090 our customers and one thing I really want to point out is a leap of faith is not only a success if you make it to the
01:19:13.820 other side I've had plenty of experience in my life where I never make it through the blue line I don't get that updraft
01:19:18.909 but what matters is you take the leap of faith because you are conquering your fears and doing something that scares
01:19:33.140 you