 We have a voice today for some reason. So, for who is this their first lightning talk session? Okay, so the way that it works is we had this sign on board earlier today. They're all scheduled for five minute talks and we're going to do them in order. The one caveat that I put on that is an exception to that rule which is exercised one time and one time only and it is right now. If you're on this board and you'd like to give your talk in one minute and you have no, you will not have the benefit of slides, you may do so right now. So, is anyone on this board and would like to exercise this exception? Okay, come on up. Cross your name off the list there. Hey everybody! This is a little scarier than I thought. I'm going to need that weed mapper guy. Where is he at? Weed mapper guy, meet me up in front of the stage. Okay, so my name is Tim Oliver. Work for General Electric. We are doing an awesome, awesome program right now. We're creating a pass inside. It is Docker based. We're trying to make it easier for our guys to develop applications and get them running. So, with this pass, there's something need to come to a portal that we're developing now. They'll come to the portal, they'll select their stacks. That stack will be Node.js or Java or whatever. And then, you know, we'll inject the application and the code in there. And that thing will begin running. It's pretty cool. We're doing that in Rails. It's going to be a Rails, the portal part of that is going to be in Rails. I was not a big, I wasn't a Rails guy. Actually, I'm learning to be a Rails guy. This is my first Rails conference. And so, this is all new to me. I would have chosen Java. But, well, because Java's ubiquitous, this is everywhere, right? Everybody knows Java. That's what Java is. But, having been in Rails, I am discovering that you are so efficient with Rails. You can get from an idea to a finished product in Rails. So, my simple message today is, if you are on the fence about a new technology, there's no easy time, there's no good time to do it. This is a pretty high-profile project and we've got a short timeline. My message is, just go ahead and jump in and do it. You just got to just roll up your sleeves. You just got to embrace the change. You just got to do it. And it will be okay. And particularly, if you're doing it in Rails, you will be that much more efficient. Have a good night. Hello, guys. I'm Fakta Ola Lom. I'm from Bangladesh and I work in a company named Nessania. So, we do software consultancy and basically Rails-based company. So, the topic I'm choosing today is actually exposing the API in Rails and managing the documentation. So, the problem is, Rails is very friendly about making the UI. HTML, CSS, front-end and at the same time, XML and JSON output also. So, for making an API, it's actually nothing, just to a line of code or even not a line of code in these versions. But the problem is, we cannot... So, when we... Okay. So, when we have to maintain the version of the API, then that's a problem. So, to do that, we actually use the Grape Gym and that solves the problem of maintaining the versioning of the API and also all the APIs in a single package actually. So, that solves the problem. Okay. Am I done? Okay. Thanks. I will be mispronouncing everyone's name as per usual. So, when I call your name and it sounds vaguely like your name, it probably is, in fact, name. Now, you should come up here. We have two stations, so we'll have one on deck. So, the person on deck is cloud.io. It might be Claudio, I'm not sure. This particular person's mother named them an at sign. So, I'm sorry about that. But go ahead, Mr. At. Usually, Rails is great. I used Rails since 2008 and we built great applications with it and I'm sure you did as well. But usually, what people forget is that besides an application, you all need content on a website. Usually, you do. Usually, content is curated by non-technical people, non-developers, and that requires a content management system. Unfortunately, the content management systems for Rails are very poor. I have some screenshots brought. This is one of the better ones. It looks straight from the 2000s, like Windows 95. We've got Comfortable Mexican Software. We've got Locomotive CMS. We've got Refinery CMS. We've got Radiance CMS. There are even some API-based CMS out there that don't look any better. Basically, then, what Daniel Tyneman and Hansen promised us to do when he built Rails because he could do a block within a few minutes. And even people don't do that today, so they even sometimes switch WordPress, which is a BSP solution, which we all don't want to use. So, we basically thought we'd build a better CMS for Ruby on Rails, and that's what we did. We created Scruito, and I will do the impossible. I will ask for the demo gods to be nice with me and do a two-minute demo of Scruito Live. Obviously, we use Scruito to run Scruito. This is our home page, so you can... We are already in editing mode, so you can navigate on the page as you want to. I go for a blog article about this lovely Ruby conference here, and if I want to edit something, I click on Edit. And I have to create a working copy. A working copy is like a branch and git, so you can have multiple working at the same content at the same time, so I call it RailsConf. And the beauty of Scruito is that you can... Everything is what you see is what you get. So, when you're in editing mode, you can go here, say, hello, RailsConf, 2016, edit that. But also, we got so-called widgets on the page, which are page components. You see them when I scroll over them here, and you can do, like, drag and drop with that stuff and rearrange components on the page as you like. You can even say, for example, I insert another widget here. Let's go for two columns, and you go here, and you move that here, and you move that stuff like here. I can also insert another image widget. For example, I can have picture of RailsConf, do a drag and drop here. It will be automatically uploaded to Amazon S3, displayed right here on the page. So, you can easily also click on that. Get an image browser. You can even go in here and do some editing. Flip that stuff around. Kind of this. You can even see how that would actually look on mobile. We even recalculate the images for mobile stuff, so you get a smaller version of these images. You get some SEO stuff where you can, for example, see how that should look on your card, if you reshare that kind of things. And so on. So, it's pretty easy to use. And the beauty of it is it's just a gem with a cloud back end, so you basically can integrate it into any Rails app. You just add the gem to the gem file, that's it here. And then you can create, for example, a model, which is just a plain Ruby class, so I have a blog post here with, let's say, a headline and some widgets on that. It's all schema less, so you can never have to run any migrations on that. It works, and of course, you have a view for that. We can use a tech helper, which, as soon as you insert that, for example, here to edit the headline, you get all these, like, what you see is what you get, editing, medit, with auto-saving, like you do with Docs or whatever. So it's pretty cool, you can integrate it into, like, any Rails app. Yeah, that's pretty much it about Scorita. If you want to learn more about that, talk to me. The beauty is we give it out for free for any open-source projects, so if you have a question about that, approach me, talk to our support. We think it's the best CMS out there for Rails, and that's it. Follow us on Twitter. Welcome. Thanks for the time. Cloud.io, you're next. Hi, everybody. I have five minutes to convince you to stop using flash messages in your Rails applications. Can I get a shout-out for that? Thank you. Okay. Well, what are flash messages? Well, good, because then you didn't use it. These are the small messages right there. I actually went back in the history of Rails, and they have existed since the very first commit in 2005, so they might, maybe they were a good idea back then, but I think they kind of hide the problem, because most of the times when we use them, it's like, we want to expose that information, but not too much, just a little bit. And really, why do that? They're not really... They have several issues, and they put some of them here. They disappear, so if a user doesn't see them right away, they're like, wait, what has just happened? And then, you know, with caching, it's not a big deal. I mean, it can be a big deal, and then now you can have problems with JavaScript, and then sometimes you think, well, they're really minimal, and then designers really love to add a lot of stuff on top, like make them shiny and then yellow and then disappear. And just to give you an idea of how you can actually skip them, these are some examples of when they are used, for instance when you use a scaffold generator. So when you create a new member, you know there is this message there, a member was successfully created. Well, in this case, you don't really need it at all, because you are displaying the member, so it's kind of clear that it was created. Another example is when you update a user, a member, then there is this flash message where you could have a smarter, for instance, if you just say, last updated a few seconds ago, it's kind of intuitive, and then that information stays with you and the user. I think it's better. When you destroy it from the index page, you can also do something better. For instance, if you have a counter and then that helps everybody, then it just goes to one and you don't need the message. And then the very last case when you destroy a member from the show page, what Rails does now is that it redirects you back to the index page and says the member was destroyed, but it's also confusing. I was on that page and I'm on the other one, so I think better ways to kind of stay in the same page and just say the user, you know, was destroyed or maybe is no longer active because destroyed is a little strong. This is the only part that requires a little bit of coding because by default you would just get a 404 page. It's not a lot of coding. You just add another column. It's kind of like access paranoid or fake delete where you just change the status to inactive and then you just change your controllers a little bit so it still displays a page. It just says the user is no longer active. And that's kind of the end of my talk. I think that flash messages is something that we just give for granted because they've always been in Rails and we just use them, but if we think about them we can actually improve the design just by thinking about them and in my opinion, the real minimalism is not to just put an information there and just hide it. It's just not use that at all. So if you really want to go all the way then you can just delete the action dispatch flash middleware from your app and then, you know, when junior developers join your team and they want to use them, they're just not going to be able to do it. Thank you. This stage is yours. Yes. Hello, I'm Michael Hartle. You may know me as the author of the Ruby on Rails tutorial. Who's here? Yeah, okay. I'll take that to some of you right here. Awesome. I'm here to tell you about what I'm working on right now which is an outgrowth of the Rails tutorial. It's motivated in part by a question I've gotten frequently which is whether the Rails tutorial is good for complete beginners as those of you who may have tried the Rails tutorial as a complete beginner. You know, the answer is not really. You can do it, but it's really hard. So what I'm working on now is a series of tutorials that is designed for complete beginners under the brand Learn Enough To Be Dangerous. And so what I've got so far is three tutorials. I'm calling them developer fundamentals. Learn Enough Command Line To Be Dangerous Learn Enough Text Editor To Be Dangerous and Learn Enough Git To Be Dangerous. The Learn Enough Command Line To Be Dangerous tutorial, which is the first one in this sequence, assumes no prerequisites other than a general knowledge of how to use a computer, like how to launch a web browser and so on. And it doesn't even assume that you know how to detect it or even what a command line is. There are six, maybe seven more tutorials in this intro sequence and in developing this I've found a new theme for what I do which is something I call technical sophistication. This is a combination not just of all of the specific skills like text editor and coding and that sort of thing, but also knowing how to click around and learn how to use your programs by looking at the menu lines, knowing to Google the error message, knowing when it's time to just reboot the darn thing. And so I've been taking that theme and I've sort of kicked it up a notch. These tutorials are still available for free online just like the real tutorial. They're available for purchases ebooks and you can also buy videos. But I recently introduced a new subscription service under the Learn Enough brand called The Learn Enough Society. It is a collegial and extremely dangerous group of people working together to learn technical sophistication. So right now the subscription service includes these first three tutorials and I want to show you how it works. So this is an example of what you get as a member of the Learn Enough Society. This is an enhanced online version of the tutorial. It has all the videos. So right now there's about four hours of video about an hour for the command line video series. And it's got integrated progress tracking so you can see where you left off. Here I left off on man pages. So I can click on that and you can see here's the video for that section. And one of my favorite parts is that here you can scroll down, you can read it, but then there are exercises and so the second exercise is how do you use the man page to figure out how to press the new line when you use echo. And so I'm going to paste in my answer and it supports markdown. Down here you can see it says share I don't know if you can read it, but it says share with other members so you can share your answers with other members and I'm using this interface to write my answers to the questions. So as I go through this it forms a de facto answer key so we hope I can share this here and you can see it's formatted with the syntax highlighting. So right now we've got these three tutorials so it's a relatively modest offering initially, but as you might expect the full Ruby on Rails tutorial fourth edition upgraded for Rails 5 will be available. It will still be available online for free the way it is now and you can still buy the books and videos, but it will be included for free or included as part of the description including all the videos in a great process of progress tracking I'm going to write a bunch of exercises for this new edition and so it says taking the Rails tutorial and putting it at the end of the sequence so that really anybody can learn these skills. So one thing to know about the Rails tutorial of fourth edition is that it will be a compatibility upgrade with Rails 5 it's still focused on teaching web development with Rails and not Rails per se so that means it won't cover things like action cable and so on, but once I filled in these prerequisite tutorials these intro tutorials I will be making follow on products so those will also be available as part of the subscription so I'm excited to see where that goes. If you're interested in learning more about this about Learn Enough Society and how the Rails tutorial fits in you can go to learnenough.com slash story and read the Learn Enough story Finally I'd like to note that I'm hosting an event tonight the Rails tutorial beerware night at No Other Pub which is where Surner was last night if you were there. So that starts at 7, right after the these lighting talks so I hope to see you there. Please come hang out maybe buy me beer. Thank you. Go ahead Mr. Rad. RocketJob, Ruby's missing batch system My name is Reid Morrison I'm the software architect of Clarity Services all about RocketJob I'm sure many of you have done background job processing, some batch processing he has a simple example doing it the Rails way we have a job we can inherit from a RocketJob job implement your perform method and we can implement it can do any behavior that you need and when we create it we just do it the regular way we do it for active record model myjob.create there you go there's our job it's not created so once you create a job what if we want to add additional parameters and attributes to that model so for example in this scenario we can do a key give it a file name tell us a type string and now in our job we can access that just like you can with any active record model so when we create it and I add file name and there's the name of the file we want to add to it so again this is very much the same way you do it today in active record so basically the Rails way Validations everybody loves validations for active record models you can assure that data is up to date and correct so there we got the validations and everything follows the same way exactly as you do for active record model so I create my job I give it some parameters and then the job runs so I can look at the state of the job where it is right now then I can do a reload and see what's happened to it since I last checked it so it started in queued it was running the workers busy processing network when it's done I can say it hasn't been completed and then I can even get the result of that job so if I tell it to collect the output I'll get the output of the job it's not just to send it off and know what happened to it you can constantly monitor it every step of the way so some batch processing concepts so in this scenario someone is going to upload a large file maybe 10,000 lines maybe a million lines so what you want to do is in this scenario it's the same model we just include the batch mixing and now this perform method will be called for each line so you don't have to worry about trying to process the entire file and now the batch is broken up across all your servers in our production environment we have over a thousand workers that actually do the number crunching for us so there's an example of how to kick off this job we create our CSV job we upload a file to it whether it's a CSV file, the zip if it's a zip file it'll grab the first file it finds uploads it for you if it's an Excel spreadsheet it doesn't deal with an Excel spreadsheet it automatically reads that file in and uploads it into your job you don't have to worry about where do I store this file how do I process it it gets stored directly in RocketJob itself so once you've saved it it automatically goes off and starts processing and we're completed when it's done just download the results the job will hold the output of everything that ran so here's another example where you say in your environment when you have PCI compliant maybe there's HIPAA compliance you can add data both addressed as well as in flight so in this scenario all we do is we say encrypt true done that job is now entirely encrypted and you can also encrypt your files in and out and if you want you can add compression now the RocketJob web UI that's the part everybody wants to see in the web UI show me all my running jobs so you can go in there click and see how many jobs are running right now in the system you can add descriptions you can see the progress the priority, you can see the priority of every job that's listed so you can even change that run time if a job's busy running your business wants to actually while this job's running they come along and say I have another job make that one the priority so this one will be paused away and the other job automatically run and then once that's finished this will continue running there's very much about being business driven self-service to the business queue jobs, show me all the jobs that are sitting in the queue what's the priority of each job, how long has it been queued for, completed jobs again we can search through it has full search capability this is an open source gem, searches are freely available to you, you can use as much as you want it has all the great UIs how long the job took to complete and so on so it's all built in as part of the UI this again is something we needed that's why we built it, it's not something we wanted to do it's something we needed schedule jobs, you can now take all your crime tasks stick them into RocketJob you can even pause a crime schedule job so that's something key that we run into you see the paused jobs, failed jobs boarded jobs you can look at all the working processes that are out there what's happening to them, pause, resume and so if there's any questions, I'll be outside over there I also have free t-shirts and stickers for anybody that wants as you got the doors in the middle towards the right, thank you a single lax your um hello I'm Alex Boster, I work for AppFolio in the San Diego office so I'm going to talk about a small project we have called Farsi it's an automatic style checker how many people use Rubicop or something else that uses it so a lot of you, as I expected, but if you don't know what it is it's a um, it's a type of winter or style checker different languages have different ones there's Rubicop for Ruby the Slint for uh, JavaScript JSX there's stuff for CSS there's one for basically every language um so who makes these part of the formal development process at your company or where you work not too many okay well we do um so Rubicop um basically, you know is the Ruby one, it enforces things like indentation and spacing um, just, you know, everything you might put in a style guide a lot of that can be automatically checked and enforced so like, how do you decide what to do well, there's kind of a philosophy we have that I agree with which is that um, I think consistency of style amongst your whole team is a lot more important than what particular choices you make like, do you care that much if there's always a trailing comma or a list of array items or is it just better that there always is or always isn't I would argue the latter um, so if you, I recommend you do this and if you do this then your team's code will be easier to read and work with it really helps with a learning curve I hadn't done too much uh, ES6 or uh, more modern JavaScript until in the last year and uh, it really helped me come up to speed a lot quicker by just sort of saying um, and there's a caveat here for existing projects, do not just run your whole code base through this thing things will break perhaps so uh, just, we always do it on the deltas like, the commits themselves have to be fixed and we find it really ties our code together um, there are commercial options that do what Farsi does and more, um, like HoundCI uh, Codesy, which I wasn't aware of at all, it looks awesome uh, Scrutinizer, there's probably more these do have some minor issues um, a lot of them are priced per repo and uh, you know, that can add up and it's another point of third party access so you know, that might be a concern so we uh, some of us wrote Farsi that was not me, I'm not taking credit um, what Farsi is, well Farsi is a form of Glanders it's a horse disease um, don't don't Google images of the horse disease um so Farsi is open source Farsi was written by uh, Bryce Bow and Paulus Couttson say that 10 times fast uh, at Epfolio um, he's available in a pre made docker image for you um, it can be run locally we used to run on a raspberry pi that was otherwise made, it made air horn sounds um, for us in the office uh, now it's on EC2 it's uh, written in python, don't tell anybody um uh, so it pulls for new pull requests every 60 seconds um, it can run currently, if you're on Rubikop ESLint SCSS lint, it's probably pretty easy to extend for more linters um, and it posts violations as comments in GitHub pull requests and will post a failing or passing a status, so what does that look like uh, oops Farsi complained, it found two errors on my PR um, oh, there they are I don't know if you can read those at all but uh, just minor things so here we go, fix them oh look, all tests have passed now I can merge um, caveats, it's pretty bare bones um, you know, one reason I'm giving the talk is that, hey people contribute we could probably make it a lot better um, configurations global, but you need one for every repo you're pointing at uh, and it uses pulling, it would be better to do it like as a callback kind of thing um, and uh, right now, you have to change the configuration in Farsi but in the future, you'll be able to just do what most other like how NCI does, and it'll actually load the configuration in your project so you don't have to configure it all out and then there is where to learn more handy in your city um, and I'm here to get you all hooked on Railscamp um, so I'm pretty new to Railscamp um, I just discovered it about a month ago um, I very last minute decided to just go with them out to the cat skills um, that's my amazing t-shirt um, and I had no idea what to expect um, but it turns out that Railscamp is amazing um, it's basically like summer camp for adults um, specifically for developers um, you don't necessarily have to do Rails um, but everyone is pretty much a developer um, and it's like summer camp but without drama with awesome food, tons of alcohol um, and a lot of super fun activities um, and it is very addictive um, I thought it was pretty crazy that there were a bunch of people there from Australia um, but here a month later and I have already signed up to go um, to Idaho um, for the next Railscamp um, it is August 26th through 29th um, in Stanley, Idaho um, I don't really know where that is um, but it doesn't really matter um um uh, it is out in the woods um with no phone service and no internet um and you will just be hanging out with a bunch of developers probably not writing code um, but you may be able to practice talks or see some um we did have a talk on closure a talk on Haskell and I gave a talk on action cable and we had a bunch of other random talks which sort of you know excuse the going out into the woods uh, to have fun for several days um so you all should come uh, this is where Idaho is apparently um um and we will be out here um, there is going to be a bus uh to and from the airport in Boise uh, when you get a ticket everything is included um food, travel, housing everything um I believe they are looking for uh, more sponsors to actually fund the travel um, if anyone would like to make a whole bunch of developers love you um, doing the sponsorship would be a great idea um, and this is where we will be traveling out to um, it looks amazing uh, and this in particular is the picture that made me decide that I was definitely coming to this uh, if you're into photography this looks like a great opportunity uh, also water sports um, there will be a lot of hiking and hanging out in cabins uh, swimming canoeing, sailing fishing uh, whitewater rafting um, and I also hear that there are apparently no mosquitoes in August in Idaho uh, hopefully that is true um, it sounds pretty much perfect in every way um, and definitely worth uh, coming over from New York or Australia uh, or wherever else you live um, it may sound a little bit crazy, but trust me it is an amazing opportunity um, you will meet tons of incredible people uh, I met a lot of super cool people who are here uh, I have tons of amazing new friends now um, and I highly recommend you come um, you can go to west.railscamp.us um, there's a promo code for self-pigment underrepresented minority um, the organizer is Bobby Lee um, you can ping her if you have organ, like logistics type questions, or if you're interested in sponsoring um, or if you have other questions you can feel free to come ask me uh, or lots of other uh, dedicated rails campers who are here today thank you alright, so I'm here to talk about gem stash I'm Mike Barotta Stone and what exactly is gem stash it is a local gem server it caches gems from rubygems.org and it caches gems from other gem sources and it stores your own private gems uh, it's also a bundler project so you can go check it out at github.com slash bundler slash gem stash and so why might you want to use it well, uh, there are over 117,000 distinct gems on rubygems.org with over 650,000 versions and there have been over 8.3 billion with a b downloads uh, and downloading all of the gems is about 120 gigabytes, probably more by now uh, and I did some calculations over, I think yesterday or so and there was about 160 gems being downloaded per second so that's a lot of bandwidth that's a lot of hosting, that's a lot of storage so uh, you know, who pays for all that, well, for one thing contribute to ruby together if you can because that's, uh, they help out with that so that would be awesome um, so, well, why not just commit your gems into your repository well, so we do, we currently do that in our project and there's about 220 gems and they total about 45 uh, megabytes and we have accumulated over uh, 1900 gems total in our, in our repository over history and that weighs in at about 490 megabytes total and that's, every time we clone the repository we're going to pay that cost and that sucks, uh so, well, meh, I don't want to do that, I don't care, well let's just download it every time, right uh, so I did some tests for bundling against uh, Rails 4, 4.2.5 and it came out like this and you can see it was about a minute and 41 seconds uh, so I tried with gem stash after all these gems were cached and that came out at 54 seconds, uh, so then I noticed that uh, Noko Geary was taking a lot of time to install so I was like okay, well let me get rid of that just to see what that looks like and it was 32 seconds now so that was a big improvement and with gem stash it came down to 11 uh, 11 seconds uh, so another reason you might have is um, we, we use a gem called multi-map and you might notice here that a bunch of the versions were yanked and we were on this version here so if we were not storing our gems then that means we would be in a big surprise if we tried to do some bundling and you know didn't have all our gems there so you know gem stash can hold on to these gems and keep them so that you won't uh, lose out on these yanked gems if you, if you already had them cached in your gem stash server so the way it works is it's uh if you have all your app servers connecting to the internet and go into rubygems.org so instead you would be going to your local gem stash server which goes out to the internet and grabs it just once and then all your application servers would then grab it from there um, so how do you use gem stash? Well you just set it up and start it and that's all uh, so if you want to, then you need to start using it so you can go to your gem file and you know take a look there and just add requirecgi which you'll see why in a sec get rid of these change it to your local host gem stash server or if you have a remote one you can do that and you can cgi escape a remote server to point to that and gem stash will work with any remote gem, uh, gem server so if you're using say sidekick pro or some other gem that is hosted other than rubygems.org you can go over there and get that source in there and it'll, it'll distinct, distinctly separate those so that it'll know where they're coming from and get it from the right server but even better you can update bundler and bundler 1.11.2 will support a mirror config and if you use the mirror config it will just automatically tell gem, tell gem stash where it's getting the gem from and, and just work so if you have a bunch of gem servers just set them all up as mirrors and you're good also there is a new index format that's coming that's gonna make bundler a lot faster and I think it's in use already potentially and yes it is and it's super awesome and this, uh, post right here tells all about it and it's really awesome and coming soonish to gem stash we'll see, I mean it's definitely coming but, uh, don't know how soon, uh, also on the guide this year so shout out to Karim who nicknamed me magic mic so, uh, and also special thanks to these people who have made gem, helped make gem stash possible and also to other people who have tried it out and contributed to it and whatnot, uh, so yeah if you want to try it, it's really awesome I work for onsite.com and it smells blue on twitter and github and there might be stickers, uh, tomorrow after lunch so, uh, just come see me if you want some gem stash stickers and if I have them, they're all yours now for something completely different I'm here to talk about emotions and how they can affect you as a developer I'm John Sowers, I'm the CTO I'm an architect at Pribia Health and these are the places you can find me online given the fact that most almost none of us understand emotions let's see what we can learn if we model our emotional system as an API, see if it helps here are the core endpoints, they handle all our basic emotions but it's not that simple because there are hundreds, maybe even thousands of aliases that redirect to those endpoints things like losing your job, having a baby these can cause massive hits on these endpoints but it's not that simple because method bodies can be really complex and trigger massive traffic into that core API and there's some bad news any person event or situation can call any of these endpoints at any time how you react to that feeling is up to you but it takes work to undo our habitual responses so first let's talk about how your feeling server works in general when that API hit comes in, the download starts but the server is kind of flaky and it really can't tell you how big that payload is so as a feeling is happening to you it feels like it's really kind of infinite so when the big feels hit I'm sure we've had this experience we feel like if we let this feeling happen it will never stop if I express all of this anger I will never stop yelling if I express all of this sadness I will never stop crying but here's the thing experts in my own experience have shown that really feelings can only last about 20 minutes if you're fully expressing them with all of your being they're going to be gone in 20 minutes or less so how do we do this like feeling at 100% thing and when do we do it? well we get to decide because we have a queue we have got a delayed job system that allows us to choose when and where we process these things so it does not like in line at Starbucks we can go to a safe place either alone or with someone we trust and work on expressing these feelings but what does that look like? I can give you a few examples but there's so much more to it so we'll start with anger because that's like the easiest one to start with toddlers are brilliant at anger they have a fit, they kick the screen they fall out on the floor and just do it 100% five minutes later they're fine they're going to go play that's what works when you're really angry do that it's awesome it's about moving your body and getting that energy out so it's also hard to get started because a lot of us have training to not do that ever so you can start by saying things like I feel angry about the thing even if there's no one there you say the words that are causing the situation and just talk it out fear is the same it's about physical movement it's about your body and even if no one's with you again you say the words that describe that feeling that are causing this fear like oh shit I have to get up on stage and do the talk one thing is for sure you will feel like a complete idiot when you try and do this the first 10, 50 times whatever it's hard to do it's so good at avoiding feelings the trick is to start doing those things like before the feeling comes up so they can get it started and then you can sort of let it come but keep going while you feel stupid and eventually you'll be able to get through it so why would you do any of this it's incredibly uncomfortable it's incredibly hard well unprocessed feelings can make us feel powerless and feeling powerless can actually affect our thinking there's a lot of research on this the opposite is when we're handling our feelings well when things are in perspective we can reverse these deficits and their social benefits if you know your own feelings you can understand others feelings you can choose how your own feelings affect your life and the lives of others you can choose constructive responses not habitual ones so a better developer well if your emotional state isn't affecting your cognition if you're not distracted by difficult family issues if you can handle problematic teammates if you can banish your imposter syndrome if you can handle hiring, firing job interviews giving talks you will be a better developer and a better teammate and what do I mean by better human well I mean that you become better at being a human you're going to have emotions you're going to get so why not get better at it practice some of these things when you do everything will get better thanks a lot I'm just scratching the surface of this you can find out more at twitter or my mailing list or just come up and talk to me whenever I'm also giving the full version of this talk a 40 minute talk at the abstractions conference in pittsburgh in august it's a great conference so you should totally come that's all machu you're up alright so my name is machu nilsen you need to come up with a good mispronunciation my last name too to go with that I want to talk to you about a project I've been working on for a little while called multi zip and I'm going to tell you about it by way of a story a couple of stories you might be able to identify with first is first story I use the zip ruby gem in my project I want to load another gem they use the ruby zip gem but I had a namespace collision and that made me sad second story is I've created a gem that does something with zip files and I don't know if the users of my gem are going to be using zip ruby ruby zip or something else or whatever which one do I choose that's a you know when you want to widely distribute your gem that's a hard thing to do now before I go any further I'm name dropping with the names of those gems I want to make it clear that zip ruby ruby zip they're great tools and this is not a dig and not attack on them this is just one of the things that ruby has a side effect over the years things have happened so some of the possible issues you can have with like zipping gems namespace collisions like we just talked about ruby versioning of pad abilities maybe the version of the gem you want to use doesn't work with your ruby vice versa operating system compatibility incompatibilities maybe there's just not a the tool chain available on the OS that you use to build whatever gem you need now the thing is that we've already had in ruby ways to handles in the past we have precedence we have multi-json multi-xml you've probably seen these they abstract json and xml parsing back ends and these have been around for a while the idea works great and so we now have something called multi-zip and in the vein of the other two multi-zip detects what zip file gems are installed on your system automatically detects the one to use and then gives you a consistent interface no matter what unzipping gem is used in the background it supports ruby zip of course archive dash zip which is also one of our popular ones zip ruby and just for RailsConf pushed yesterday if it can't find any of these supported gems there's finally support for using command line zipping unzipping tools if they're found on the system so that you might not even need any gems at all although that's very alpha so don't use it for any sort of close to production stuff right now it all supports mri 187 223 jruby 17 and 1 8 and 1 9 mode and even rabbinius 2 and jruby 9 as well so it's designed to make your code or your gems or whichever as portable as possible without you having to do as much work so how does it actually work in practice well it's pretty easy you do the normal dance you install the gem just as you would you instantiate it just as you would tell you where your file is then you can make calls like oh show me what's in you can see the members of the file I could extract the member content into a variable I can then of course extract them to file system too just like a normal unzipping thing I could write a member from a variable in case I wanted to dynamically create a zip file on the fly I can of course remove a member from a zip file there's lots of other things you can do but these are the 90% use case that probably you can do with zip files and so what this lets you do is that you can focus on the writing of the actual code versus on the plumbing versus on what's compatible with what where and so I've been using this in production for about a year although its release is fairly limited right now this is the first public announcement I invite everybody to try it out see what works give me bug reports pull requests support for new zipping back ends if you feel like you're up to adding it I've been using it myself in production like I say for a year though and it's been great for what we do with it and so if you want to take a look at it you can go to that short URL and while you're all frantically writing it down I need to give proper shout outs to the people of AsakusaRB it's because of them the inspiration they gave me one night at one of their meetings I sat down and actually made this gem a reality and they are the nicest group of people that anyone in the world has ever privileged to meet and so for me to any of them who are here I give you a heartfelt omotenashi no anatoa arigatou thank you Eda M you are you are on the clock thank you Eda there is a talk about something but first my name is Adam Cuppy I work for a consultancy called zeal you can find us on the interwebs there's a issue that I think really needs to be addressed I've noticed this is kind of being a concern or a problem over the course of the few days we've been here and I think it's really important that we address it today I only have a few minutes to do that I'll probably submit an entire talk regarding this later but it's really important that we talk about this as we move around the space as a community it's really important that we address one another with great and deep respect and appreciation it's not only imperative that we have conversations with one another but it's imperative that we in fact provide one another with a much better high-fiving situation this is really quite important to me now I know that for many of you you're familiar with this process and it's reasonable as to how and so oftentimes it might look something similar to this this sort of awkward sort of fist bump coordinated sort of yeah we're still cool yeah you're my bro sort of thing unacceptable in my mind or oftentimes you might find yourself in a position where you really feel like you're in fact a friend that the person next to you is somebody that really cares and is concerned for you but actually doesn't give a shit I'm going to address this here today I've decided that today I'm going to address this concern in front of all of you all four million of you I need to call my assistant to the table his name is Evan please if you would at the center of the stage yeah you I'm sorry by your formal name first I'm going to address the how of this I would like you all to stand up if you don't mind find a partner this is very imperative it's imperative that you find proper distance if you need to know no no no no no do not jump the gun proper distance if you don't know is place your hand at a 90 degree angle and place it in front of you if you can touch properly in bustly manner you're at proper distance the first step is you will approach your individual and look them directly in the eyes the next step that you will follow through with is cock your arm back now this is the most important part ladies and gentlemen the most important part is focus on the elbow focus on the elbow and it shall so from this point forward ladies and gentlemen you now know that you have the ability to extend to your brethren your sister and your other you know how to bestow upon them a proper and stellar high five now this here is a wonderful app in which for the rest of remainder of this content conference you can extend with one another a great stellar high five by putting in your information and bestowing upon them it will tweet out I also have stickers you slap a high five with me and it's yours good Friday you have the stage thank you very much everything right because I just got this slide deck like five minutes ago um yeah okay today is the day where everyone find out Godfrey is actually five different people um yeah so um have you ever asked yourself one of these questions let's see what they are what's going on in Rails um I heard they were going to release beta version in this month or RC I guess or what exciting are coming up in the new releases or if you're watching Rails but um you don't know what's happening because there are too many things happening well I have an answer for you there's a newsletter for that it's called the Rails Weekly Newsletter or this week in Rails history newsletter uh apparently I started this newsletter or one of us one of the Godfrey started the newsletter and um at the time I was working for a company called Goodbits and um we were building a tool for sending newsletter and um there was one Friday where we launched a beta version of the product and everyone is super excited so everyone started newsletter at a time who was um I guess I'm still a contributor to Rails I was like maybe I should start a newsletter that tells people about what um what's happening in Rails apparently that Friday was March the 14th 2014 so that was quite a while ago um we currently have 5000 um getting close to 6000 subscribers and we have 99 issues or um apparently we'll be sending the 100th issue this week that's pretty cool um so every Friday we um basically created um newsletter of the new commits happening in Rails that's probably a slide for that um so benefits um it gives you a weekly recap of what's happening in the Rails world it tells you about the new features in Rails um tells you what bugs get fixed uh what get deprecated and removed um the new opportunities for contributing and um any other interesting things happening from the community so for example every week we'll um highlight other contributors who made the mark in the Rails repo this week and um also go through all the new features and stuff and um apparently Godfrey or the Godfrey is wanting to help as well and um so tomorrow is a Friday we'll be writing the um Rails conversion of the newsletter tomorrow at 11 so if you want to help or if you um writing about these things interest you you might want to drop by room 2505B um otherwise you can subscribe to newsletter at um Rails Weekly on goodbits.com um and uh I want to so here we have four other editors here um but we have actually I think we have just over 10 editors now so I actually very rarely get to write these newsletters so when you get a newsletter that says coming from Godfrey um in the from header it's actually from one of these wonderful people and uh if again if you would like to be one of those people um you can come tomorrow room 2505B and um please everyone take out a laptop right now and subscribe so we'll get to 6000 subscribers before the conference and thank you very much uh next up is Justin you're you have you're on the clock thank you it's actually Houston Houston oh and I got it I got it cool cool cool cool cool cool cool cool I'm good Evan would have to verify but I think this may be the largest like lightning talks session Rails competition but I think we're on all right um I would like to talk to you today about breakman who has used breakman okay see that looks like a lot of people but I've talked to a number of you who said I haven't even heard of it so um I'm here to talk about it very briefly um my name is Justin Collins on the internet I am president beef although I found out um when I signed up for snapchat someone took my username so uh it's the first time that's ever ever happened to me but uh most everywhere else I am president beef looking at breakman I've been working on it almost six years in that time there have been 59 contributors 86 releases as of today uh 2.6 million gem downloads and yet um still people haven't heard of it and aren't using it so that's why I'm up here I want to tell you this is how you use it it's a pretty complicated process but um just to walk you through it a little bit first you install it and then you type breakman and then the path to your application and you will get out a report it works something like this sorry I changed this last minute it works like this so it scans your code that's really all you have to know and then at the other end you get security warnings and it will look something like this which I know you can't read um but uh you'll get something like this by default and I showed you the default command uh a little bit more useful to look at the html report uh you don't have to call it report but just put .html at the end and you'll get something like this if we zoom in a little bit you can see you get security warnings coming out of it and if you click on one of them you can kind of get the context from the code that's around it there's some other report formats uh if you want json if you want um csv although I don't recommend using that one um those are also available and if anyone ever wants to update uh there's a pull request for xml but it would be nice if it used an xml library that's actually supported so if anyone wants to take that on so if you want to learn more you can follow uh I used to work at twitter so uh everything needs a twitter handle so you can follow up breakman or go to breakman.org if you're interested in the pro version go pro you can go to breakmanpro.com or talk to me later and again you can follow me on the internet presidentbeef presidentbeef.com you know anywhere presidentbeef pretty much that's it thank you developer and director at ignition words and I'm saran founder of code newbie and today we're going to teach you how to upload so how do we level up as developers we can go to code we can pair with people we can go to awesome conferences like this but a really popular way is to read books but there's a problem we all get excited by new books and we buy a lot and we stock up our shelves but how many ruby books have you actually finished yeah yeah lots of guilty groans yes we get excited about them we buy them we read the first chapter but then they kind of sit there we never really finished them and that's a problem that we had to solve so ruby com 2015 November last year in San Antonio so Ron and I had been in the same talk and we got together and started talking and we started to realize that we had a few things in common we both wanted to level up in ruby we've been doing it for a couple of years but we were looking for ways that we could continue to improve our skills we both loved reading books both fiction and technical books and we both didn't have a lot of extra time so what we decided to do was to start a ruby book club podcast which we're going to tell you about so the ruby book club podcast is where we dedicate an hour a week to reading a ruby book it doesn't matter how many chapters or how many pages we just fit it all into that one hour and then once a week we'll get together and talk about it and record an episode for you so so far we've released five episodes we've published eight and we're halfway through after Graham's confident ruby and we've learnt a lot so one of the most important things was time boxing and this was an assumption that we had I don't know, I think there's a really great blog post by John Resick who created jQuery who says you should commit at least something every single day to open source and that is a very hard way for me to kind of plan my day just saying I'm going to do something every day what's a lot easier for me is to say I'm going to do one hour from 12pm to 1pm and do this one thing so boxing in that reading is really really helpful and then there's also this thing of accountability so when I'm doing my hour of reading each week I'm very aware that I'm going to be discussing it with Siron later that day or the next day and so I'm always reading critically if there's things I don't understand I think about them, I go back over them I go and do extra research and because it's very public I know that I've also got to do that research to make sure that we're delivering a high quality discussion for you guys to share and listen to and so when you're learning anything it usually helps to do it three times and because it's a book club and it's a podcast we get that repetition so the first time in that one hour we're actually reading then we're recording the episode so we're discussing it that's two and then when we go back and actually edit it we get to re-listen to a lot of the things that we talked about so we get to really enforce that and build that in and so we want to share all of these benefits with you and we'd love for you to join our Ruby Book Club so how do we do that? so this month we are right now we are currently reading Confident Ruby, we're about halfway through by who won Ruby Hero which was awesome very proud of him for that and he actually offered us a promo code so if you use the promo code seedartbookclub you'll get 20% off, you can go to confidentruby.com for that and then once you buy that book you can actually come and chat with us so you can subscribe on iTunes or find the podcast wherever you currently listen to your podcasts check out rubybookclub.com to find out what we're going to be discussing in the next episode and also to catch up on all old episodes and also share your thoughts with us on Twitter at Ruby Book Club thank you all so much I really want to spend more time with you guys great so I want to tell you about Code Newby and specifically about building a coding community so a couple years ago when I decided to first learn to code I thought I was going to feel super badass I thought I was going to be a superhero and I was going to solve all the problems and I was going to feel really good and since you're all here I think you know that is not the case I actually felt like crap most of the time especially as I was learning because there's this huge emotional toll of learning to code I don't think we talk about too much where you just feel stupid always you're constantly in a state of failure and if you're not used to that that's really hard to deal with and it was very, very difficult and then I went to a boot camp went to boot camp for a couple months and all of a sudden I had this amazing community of people who understood what I was going through who felt the pain, who were just as excited and we would high five when things worked and we cried when they did not work but that community for me cost $11,000 and many months without a salary which I'm very fortunate to be able to afford that but not everyone can I didn't like that, I didn't like that I didn't like people who were excited to learn and wanted to go on that journey with you you had to kind of go to an expensive formal type of program so I wouldn't change that so a little over two years ago I started the code newbie twitter chat and it's every Wednesday night at 9pm for one hour and I would tweet out questions like what gems are you using if it was ruby what resources are you excited about where are you stuck and it was really an excuse for other people to talk to each other and we've grown into this incredibly diverse and inclusive and to me most importantly a really welcoming community where our job is to help each other learn and to become better coders and so at this point we then launched a code newbie podcast that we do we've had 85 episodes so far and counting we've had a lot of really great people just from this community we've had Marty Hotties I think on episode 7 we had Sandy Mez, we had a two-parter for her cause she's just so freaking amazing so we have new episodes every Monday would love for you all to subscribe we also do a twitter chat we've done 112 chats so far I was actually in my hotel room last night just you know tweeting away getting it done every Wednesday night at 9pm eastern time and we also started doing in-person meetups we have them in Atlanta, Austin, DC, Dallas, Philly we're launching in Minneapolis and Nashville in the next month and we also have our code newbie Slack which is over 3,000 members and my favorite part about this is we have senior developers who want to give back to join and help troubleshoot and debug so when I tell people about code newbie they ask well how did you do that how did you build this community and how can I build my own community so I'm going to tell you all my secrets you guys ready yeah, okay so number one it requires rules I mean this very literally, we have three rules the rules are to be honest to be supportive and to be nice and we start every single twitter chat this way these are very very important rules to us and what I've learned is if you keep these rules up and you start the conversation with that you invite people who respect those rules and who want to be part of that type of community so just by stating upfront hey if you want to be here you better be nice it creates this expectation that we're all here to support each other and it attracts really the right kind of people the second thing is that a community is really about listening whenever we do the twitter chats I'll go back I'll read the answers and I'll try to find patterns I'll try to find issues that are in the community that maybe I didn't think of before common questions that are asked what are the most popular tweets that were tweeted and that helps inform me what type of guest to invite and what other things to do so a lot of building a community is really about listening to people's needs the third thing and this is one that no one really thinks about it's a lot of work my day job is I'm a program manager at Microsoft and I get home about 8 o'clock and from 8pm to about 2am I'm doing something for Code Nubi all Saturday I'm doing recordings for the podcast all Sunday I have meetings with the different volunteers so this takes a huge amount of work and what I've seen happen is a lot of people get excited about starting communities and doing these do good projects and then after a couple weeks a couple months the tweets don't happen very much the newsletter drifts away they're kind of not around because they realize that it really takes a lot of just straight work and the last secret is that you don't build a community you build a space and this was a realization that I came to I think in the last couple months where I said you know how do I keep growing the people but I realized that the people have always been there there have always been people who are excited about technology who want to learn, who want to grow, who want to support each other so my job isn't to build people my job is to keep making a space and growing that space and making great episodes and having great chats so that more and more people find us and inhabit that space so if you are interested in Code Newby and getting involved or if you're interested in building up your own community you want to talk I have many more lessons learned so feel free to reach out to me you can reach me at saranatcodenewby.org you can see all the awesome stuff we do at codenewby.org I'd like to talk about an alternative approach to hiring and this is close to me because this is part of my personal story depending on coder so my name is Stephanie Nemeth my Twitter is Stephanie Codes I am a full stack developer at Space Babies I live and work in Amsterdam in the Netherlands I'm a career changer I was a chemist and now I'm a developer I've been coding for a year and a half and I've been working as a dev for a year and you might have noticed that I'm not Dutch I'm actually from Alabama but I live and work in Amsterdam and I would love to tell you another story and that story is about what it's like to change careers and learn to code in a new country but that would take too long so if you'd like that story you can find me later, I'd love to share it with you so back to the topic I work with these two wonderful people in Amsterdam, Yost and Melanie at Space Babies we are a company of three and some of you might even know my boss he's number 98 all-time Rails contributor and he has a different approach to hiring developers not necessary you don't need a CS degree, you don't need to go to a bootcamp you don't even need dev's experience what you need is enthusiasm drive passion and eager to learn so how does this work he offers a three month traineeship program and within that program I went through this program and my colleague Melanie did before me is we start from scratch, we start by doing tutorials build a clone Pinterest, Reddit and then along with that almost immediately you start poking around in the production code base and you start doing commits and it starts with just small, manageable tasks to get familiar with the code base like fixing a typo in a view or fixing some CSS and that gradually introduces you to the code base and builds confidence and helps the intern like me to grow skills quite quickly and the tasks get more difficult as you go on but they're always manageable and really quickly you're starting to build out features and need less and less support from your team is it really that simple yes you'd be surprised how much and how fast someone can learn yeah but can I see some proof yeah me, I've been happily employed at Space Babies for a year and my colleague there, Melanie has been happily employed also for two years so that's it I just wanted to say thanks and again you can find me on Twitter, Stephanie Codes and if you find me I have stickers and I also brought some Dutch stroked offals if you want one find me so my name is Jose actually so out of the three options none of them was right I work at Codesy we're upstairs, we have a booth we're an automated code review platform I'm not here to tell you about that I am also a magician and a card cheater I don't actually play for money but I do gambling demonstrations for friends and you are all my friends so if you want to stop by our booth I will show you a couple of miracles but I'm here to tell you about my previous job and one specific problem that we use in interviews and the problem goes like this suppose that you're in a data center and you're all by yourself absolutely no connection to the outside world and there's no way you can reboot the machines and someone had the brilliant idea of performing CH mode minus X on CH mode itself now solve it now a disclaimer first of all this talk is not about the value of the problem for recruitment purposes this is just talk about some possible solutions to this also all of the solutions have been provided by either myself or my former coworkers and unless otherwise noted it has all been tested so let's get started if you want to solve this there's a bunch of programming languages that can do this here's two of them and to come to think of it nowadays even JavaScript does this but here's a solution that doesn't use a programming language let's say that you create a new file and you don't have to put anything special on it it just has to compile and as soon as it compiles it gives you an executable it's not going to do anything but now you can cat CH mode onto itself and you can run it you can also copy cat to a new file it has the execution bit and now you can cat CH mode onto it as well you can also just code a little bit of C to make sure that you restore the permissions to CH mode and pretty soon you'll be able to run it depending on the system you may have something like busybox for instance you may run it and it will have a CH mode inside but you probably have tar so with tar you can actually create an archive and you can state which permissions you want to give to the file but if you're doing that you can actually do it on the fly and you can without creating an archive you can just change the permissions of another file so another thing this one is untested but it should work you can create the archive and then you can edit it and find the permissions and change them a few of the candidates that we have over the years they said ok you said I couldn't go to the internet but you said nothing about the other machines on the data center so that means I can open a socket to another machine and I can preserve the permissions of CH mode I can bring it back and on the tar what about CPIO CPIO allows you to manipulate files and guess what after the 21st byte there are 3 bytes that have the permissions and you can actually change them to whatever you want so with a little bit of regular expressions and maybe a little bit of shell wizardry we can do this on the fly another thing untested but this should work as well I guess if you do something to the file that forces the inod into cache and if you check kcore for the structures you're probably able to use set to alter it on the fly without the kernel realizing it and then you should be able to run it once so it's all now another concept that I'm very fond of is fighting fire with fire in this case fighting an operating system with another operating system so ideally I would be able to mount this operating system in a different one but I can't turn down the machine so what I could do instead was if I could just start an operating system within it some kind of container but with access to the outside world it should work right so here's the emacs solution just create an offer and with this instruction you can do it I'm not an emacs guy I'm actually a vim guy and I really really looked for a solution on vim I couldn't find one what I could find was that vim of course allows you to run a command and this is after all Redisconf so I guess this would be my solution thank you very much and do meet us upstairs I'll show you a miracle or I'll do it thank you enjoy the conference so far so my name is Tian that apparently is Chinese spelling so probably people won't get that but yeah it's alright and I work for reinteractive which is a Ralph's shop in Australia and today I'm going to present you a project that I've been working on for a while so it's yet another Ralph's admin and it's called Wallaby and the repo is under kick hub and it's reinteractive slash Wallaby and I guess so for most of the assisting Ralph's admin interface we normally have a problem that they use DSLs and normally DSL is designed to handle issues for only one domain and I've been using they actually trying to tackle all the things including the configuration controllers and all these things trying to do that using DSL and that actually kind of brings me back to the old time when I use a dream lever to build a PHP page to talk to a physical database and you can see that it basically makes up everything in one page so they are not in active development for a while so that and that actually makes me like try to figure out how to do things when I'm using this interface and I guess most people will have the same feeling like me at the end of the day just want to flip the table because basically you need to head into most of the things to figure out how you can do things so like Akira mentioned in his talk 3x browse maybe we can wait for something maybe we can wait for the existing interface to evolve and maybe we can wait for a better version but I can't wait and so I start to question myself whether we can not learn any DSLs and whether we can use what we are familiar with in browse, maybe the controllers, the views and that's how I come with this one Wallaby and what you need to do to use it just to put the gem Wallaby into your rate file and then to mount it into your browse.rb and then you are set and actually it has a neat looking basically you have all the common features that I mean in Facebook for while you such as the search simple search pagination, solving, form validation so this is kind of give you some look and feel about this one if I don't have any time at the end to do a demonstration so this is index page and it lists the table and it has ID that which is and then the model name is which I use the decorator to come up with it actually combines name and skill code all together and the text there are the many relationships and it will handle that automatically if you specify which column you want to show and this is the show page and as you can see these are all the columns including the associations that you have defined in your model so you have all the pictures, items, orders, category, text and even custom relationship when you are trying to say for example like some tag or whatever it will scroll out all the information that you have defined in your model and then try to represent that automatically and this is the edit page as you can see it do the validation for you although I shouldn't show the flash messages previous talk and yeah I know that is not good but sometimes it helps and you will have like when there is an error on the name it can't be blank and then it will highlight it and it basically supports many that's about it you're a minute over already so that's the look and feel and it supports RESTful and supports all native data types that ActiveBread supports for Postgres and also it has all these things and yeah thank you I'd like to sing let it go as a round with everybody in sections maybe thanks for letting me go so hi everybody it's Thursday so we're going to do our Thursday hug apologies to Mr. Patterson everyone's going to stand up do your thing stand up good job take a picture of you all hugging alright fantastic my name is Benjamin Fleischer I learned that from Ben Ornstein I think it's fun so here is what we're going to look at here you see on the screen a request in the JSON API format things to note here the content type is VND.API plus JSON the accept header is VND.API plus JSON and there's some data stuff in there this is what a response would look like for a created resource and this is what a response might look like for a alright Stephanie Marks come on down an important idea here is content negotiation this is part of HTTP I've been doing rails for maybe five years I've been a programmer for maybe five years it takes a while sometimes before you get to like the nitty-gritty here but it happened I needed to learn what these things mean content type is the header that tells you what type what's the type of data that you're sending with JSON API it's not JSON it's JSON API so you need to specify the content type of the rails to know what you're sending the accept header says what you get back I expect to get JSON API data back when I'm giving you JSON API data so how do we handle a request well in action pack right now if you try and pass in JSON API you're going to get an empty hash this is an actual test that's in rails so what you need to do is register it notice this is being registered as its own media type as JSON API not as JSON because it has its own rules so now rails knows about JSON API once we've done this so we need to be able but now that we know that that's going through the stack we need to be able to parse the request into something that rails can handle so in order to do that we need to and this has compatibility for rails 4 and 5 in here you basically add the default parser of JSON API with some kind of callable here the JSON API gem doesn't exist it might exist in the next few weeks we'll see keep in touch so this is how we render a response in our controller we're going to have to create a model that looks like this you can see that if the sandwich is saved I don't know if you notice I was creating a sandwich that would suck in without sudo also or else you're going to want to render an error response because the error response is different there's lots of really neat things in JSON API about how it distinguishes between data and errors for example the request can only succeed or fail you can only have data or errors you can't have data and errors in a response which is great now you'll notice in there that I said render JSON API I don't know if anyone's ever done that before it doesn't exist in rails so you usually use render. render JSON so what we need to do there is we need to register a renderer this is what it looks like you say renderers.add and there's a block this is basically the same thing that I've done here as the current JSON renderer except that I swapped out the word JSON for JSON API just to show you how the integration will work I actually have open PR in Rails right now to make that even easier this part of Rails needs work everyone's involved yay so that's what it looks like in its entirety so now we have our request we'll be processed we can handle it like this or like this this is where I work swipe sense we save lives by helping hospitals monitor how people wash their hands here's some numbers they're pretty that's me I've been pleasure yay I have 40 seconds I will show you some other stuff I really like if you ever have people saying dry and dry dry dry and it drives you crazy because all they mean is like deleting like duplicated code this talk explains why that's a bad idea but dry is like the having the same concept repeated this is about time, this is about YAML this is about open source maintainership why am I sharing this because I like them and I get to do that right this is about string encoding our spec won't blow up on you this is some really cool stuff, really deep some gems I work on the RubyGems adoption center is important and there's out of time so thank you, goodbye it's on speaker deck I am Stephanie Marks I'm a web developer at UL also known as underwriters labs we're a 122 year old safety testing and certification company but that has nothing to do with my talk this is a talk about GeoCities yeah so show of hands can you raise your hand if you were alive in 1996 oh good thank you this will make this a lot easier can you raise your hand if you've ever heard of GeoCities yes you are my people, hello cool, so there are a few things this slide isn't going to work this slide doesn't work, hold on much, much better so things you need to know about GeoCities if you haven't heard of it it was a web hosting service that was founded in 1994 Yahoo acquired it in 1999 at one point it was the third most visited site on the web with 38 million user built pages pretty cool, shut down in 2009 so my personal story putting up my awful garbage looking websites on GeoCities was key to me becoming a web developer and actually getting paid money to make crappy websites and this GeoCities era design has a special place in my heart and I've realized that there are a bunch of lessons we can take from this design style and I wanted to share them with you so first I wanted to remind you of actual real live GeoCities sites, these all come from the 1 terabyte of kilobit age tumbler and they're all grabbed from this huge data grab from GeoCities before it went down, so here's one good example under construction, top of the page cool group, I love it, here's another one rich D's home on the web, there's a hit counter that's broken, got it, yes and one more with comic sans it's got this cute picture of a lion adorable, okay so you know what I'm talking about now GeoCities design, some people call it brutalist web design which is so cool there's a tumbler devoted to it, okay that's not this talk go look at it, so what are those key things about GeoCities design what can we learn, one hit counters yeah, okay so you visit the site you see the hit counter increment and before I knew what javascript was I thought this was magic it was the coolest thing you see that hit counter, you feel like you're less alone as a user, someone else looked at this garbage website besides you so we don't do this anymore, I don't think we do but now we use things like a like button or an upvote or tweet this whatever but they do the same thing, they make the user feel less alone more included like somebody else thought our garbage websites had value yeah, okay next what's another GeoCities thing under construction banners yes, these showed you that the site wasn't finished that you shouldn't judge it too harshly because it was under construction man I mean look, I got a banner, I got a koala digging a hole, come on it made it feel like it was okay to be updating your website, as long as you said under construction, you could change it as much as you wanted to be tweaking it all the time yeah, oh someone's applauding man okay cool, I don't know about you but tweaking my website all the time sounds like constant iteration, it makes me think of agile, it makes me think of when I go on some site and some lovely designer has made some tiny little change and thanks to under construction banners on GeoCities I think that that's okay alright, one more and I think this is going to be controversial Comic Sans oh someone's booing, good Comic Sans the most hated font of all time Comic Sans is a casual but legible font that would have made your GeoCities site look friendly but not too serious we accomplish this now mostly not with Comic Sans but with things like clean and simple fonts that don't have too many serifs, nothing too serious big hero images of people using the product friendly looking line art cute little characters, they make people feel at home, like they're welcome, like this is a safe site to be on just like Comic Sans did on GeoCities whoa, crazy fun fact since I have a few extra seconds Princeton did a study in 2010 involving presenting students with text and changed the fonts to try to see if they would remember more or less information they found that if they used Comic Sans or other really ugly fonts people remembered more information than if they used aerial what? whoa I have been and will continue to be Stephanie Marks, my twitter handle is Sublime March, my website is StephanieMarks.com, thanks for listening we talk about crafting websites