 My name is Michael Hartle, some of you may know me as the author of the Ruby on Rails tutorial. I wanted to let you all know that I recently finished an introductory tutorial to Ruby, just by itself, called Learn Enough Ruby to be Dangerous. It has a lot of the things you'd expect from an introductory Ruby tutorial, but there are several novel things including a gentle introduction to web development with Sinatra, shell scripting and making and publishing a Ruby gem with testing and test development. It is suitable for beginners, but also good after the Ruby on Rails tutorial. You can check it out at learnenough.com-ruby. Partially as a celebration of finishing this tutorial, tonight I'm hosting the eighth semiannual Rails tutorial beerware night at the Bonaventure Brewing Company, which is just a short walk from here. That's between six and eight. You can find out about that event and what the beerware license is at my pinned tweet, twitter.com-m-hartle. I hope to see some of you there. Hi, my name is Kristen. I'm going to talk really, really fast to cram this in. I currently work for a great company called Stitch Fix. Previously, I found myself running into some situations which were difficult and painful in either school or past jobs where I was trying to learn, communicate, or receive help. Now that I'm in a culture where learning and asking questions are embraced, I decided to look back and see how we could possibly correct these painful situations. That is where I stumbled upon the concept of beginner's mindset. Beginner's mindset is characterized by openness, eagerness, and the lack of preconception. It helps you to do a lot of things. You become more creative and a more objective problem solver, a better communicator, and a better teacher. Break down walls with other people and become a safe person to talk to as well as to ask questions to because you'll be doing a lot of that yourself. So what I will say is that if I would have had someone who had this kind of mindset when I was having those painful situations, it probably would have been a lot better and I probably would have learned things a lot sooner and not felt so bad about the situation in general. So this is my PSA to have you keep this in the front of your mind and I have a bunch of ways to do this. So feel free to stop by the Stitch Fix booth or just hunt me down throughout the conference and I'd love to have a conversation about it. Thanks, guys. So hi, everyone. I'm Tori. I'm a software apprentice at Polar Technology in Des Moines, Iowa, and I help co-organize Des Moines Web Geeks and Lady Dev, and you can find me on Twitter at ToriStory. So today I'm going to talk to you about crocheting and coding and how I believe they're similar. So the style of crocheting that I like to do is called Amigurumi, and it's a Japanese style of crocheting or knitting small creatures. So I started crocheting these a few years before I began learning how to code, and I'm going to share a few of the connections that I've noticed between the two today. So when I talk about crocheting in the context of this talk, I'm mainly referring to this style, but generally a lot of what I'm going to talk about can apply to other styles of crocheting as well. Also, every creature that you see throughout my slides I handmade. So crochet patterns are similar to programs. So this snippet shows a standard format of writing a crochet pattern. So when I first started looking at crochet patterns, I felt like I was trying to read a foreign language. But just like I had to learn how to read and write code, I had to learn how to read and write crochet patterns. So if we take a look at a line of this pattern, it's telling us that on row five we're going to increase for the first five stitches, and then we'll say single crochet for the next two stitches. And once we're done with that row, we should have a total of 12 stitches. So an increase and a single crochet are both different types of stitches that you can do when you're crocheting. They each have their own instructions on how you work the yarn to form a stitch. So we can translate this into some simple code. So here I started writing a method to create a tail for a unicorn. As an example, for row five, I started my stitch count at 37, which is the number of stitches I should have after I complete row four. I iterate through the range of one to my stitch count, and I either call an increased method or a single crochet method based on the result of my conditional. So really, a pattern is just a program. And you are the computer that executes the pattern to create a crocheted creature. So when I was first learning how to code, I used a lot of Stack Overflow and just copied and pasted the code right into my projects. But since I'm an experienced developer now, I copy Stack Overflow and make sure I change the variable names. So on a similar note, as I gained more experience crocheting, I was able to alter some of the patterns I was using to, for example, make a bunny out of a monkey pattern. So I just changed the ears, I didn't make the hood or the tail, and I changed the mouth and the colors, and I created a different creature. So one of the worst things that happens to me when I'm crocheting is when I miss a stitch somewhere and the total stitch count for my row is off. I have to stop what I'm doing and try and find and fix my mistake. Luckily, each row in my pattern lists the expected number of stitches that I should have once I finish that row. So if I complete a row and I compare my actual stitch count to the expected stitch count that my pattern shows, and they don't match, I know that I failed my expectations. This is just like failing a test. But ultimately, one of the biggest similarities that I see between crocheting and coding is that there's this huge power to create. With just a few tools, a crochet hook and some yarn, or a laptop and some software, the possibility to create amazing things is endless. So if you look hard enough, you can find really cool similarities between coding and some of the other hobbies that you have. You can also carry over the skills that you've learned from one hobby to the other, such as problem solving. So I challenge you to find these connections because it can really be a lot of fun. Thank you. All right, so today I want to talk about the power of mentorship, and I want to do that by talking about my own story. So I love learning, and I love computer science and programming, and this is a picture of me during my first year of college in the computer labs during winter break. Looking at this now, I still can't believe that I went back to school during winter break to code in what we called the dungeon at UCSD. That's how much I loved programming. But I want to go back a little further, pre-college, this is me as a baby, obviously not in college. So real talk here, the circumstances of my upbringing were kind of rough. I grew up in poverty and my parents were refugees and their education was disrupted, so they never even had the chance to finish high school. So before college, I didn't even know what to expect. I didn't even know what a major was or computer science. And so when people ask me how I got into computer science, I really honestly say it's by chance. So this is me again in college. So as much as I was fascinated by computer science and programming, there were some days I wanted to quit. And these were the days where I felt like I didn't belong. One of my worst experiences was being told by a classmate that I didn't belong in the major, that I was taking someone else's spot in this impacted major and that I wasn't even a good programmer, so I shouldn't be allowed in. But luckily it wasn't enough to make me quit and I ended up graduating with a degree in computer science and shortly after I began looking for software engineering jobs. Thank you. So I began my search for a job a couple months after movements like Me Too and Times Up were gaining traction and women in tech were coming out and sharing their stories of sexual harassment in the workplace. And I wondered to myself, what am I getting myself into? I have deep empathy for people who experience any kind of harassment, especially sexual harassment because I am also a survivor. I can't speak on behalf of all survivors of abuse, but I can say that as a result of being abused, I lived a lot of my life with a sense of unworthiness. I had low confidence and I felt really disempowered. I was scared of other people, especially of men, and for a long time I couldn't even leave my house. But a lot of things, there are very few things that saved me and one of the biggest things was coding. Coding was really fun, it was exciting and it made me feel a little bit more in control of my world and it empowered me. So when I learned in college that women in positions of power were being harassed in the industry, it made me feel very unsafe. I thought to myself, if women in the highest positions of power aren't safe, none of us are. As I applied to software engineering positions after college, I began mentally preparing myself for that reality because I thought I'd rather risk the potential of being harassed and maybe feeling a little unsafe than return to a life of poverty which entailed perpetual instability. I am now a software engineer at a company called Acorns and I'm also really proud to be a part of the Ruby community. I wouldn't be here today without the support of my manager and my mentor who I know would not tolerate any kind of behavior that would make people feel unsafe. So seven months ago I was living in poverty and today I stand before you all in like the bougiest hotel I've ever been in in hopes that you will understand the power of mentorship. It was a mentor who encouraged me to go to college, it was a mentor who encouraged me to study computer science and eventually a mentor who helped me become an engineer. And so mentorship is a big part of why I'm here at this conference in this industry with my skills and mentorship will help me stay and help me succeed and so this is for everybody but especially for men in positions of power. We need you to actively work to make a safer space for people and one way you can do that is by being a mentor. Thank you. My name is Jeremy Shermans and I want to talk a little bit about impostor syndrome. I'm a student at Flatiron School and I've been programming for less than a year so thank you. I'm not going to presume to talk about impostor syndrome from the experience of an experienced developer because I can't possibly understand that experience but if anybody here is new to programming this is for you. On the Flatiron Slack I hear people talk about impostor syndrome all the time. I talk about impostor syndrome all the time. One person even said to me that she was really excited about building her first Rails app but couldn't because her impostor syndrome set in. I think that we as beginners often misunderstand what impostor syndrome is so I think we need to set some definitions first of all. We all know that to be an impostor is to pretend to be someone or something that you aren't. So impostor syndrome then is the feeling is feeling like an impostor even though you are in reality fully qualified to do your job. So impostor syndrome requires experience and if that definition is true then that horrible painful feeling that new programmers experience is I think better defined as the pain of being a beginner. It's the crippling sensation of not knowing enough or understanding enough to build something and because of that feeling like you don't belong. So if from this moment forward you feel like you don't know enough you need to understand that it's okay to not know something. It doesn't mean that you're a bad programmer, it doesn't mean that you're not a real programmer, it doesn't mean you're stupid, it doesn't mean you'll never get it and it doesn't mean you can't do it. And it simply means that you've been given an opportunity to learn something you didn't know before. So take that opportunity, learn what you don't know and just start building and I think that more often than not if you just start building you'll find that you knew more than you thought you did and if from this moment forward you feel like you don't belong you need to understand that you do belong. Programming belongs to the new people too and to back me up I have a quote from Jen Weber she said if I asked you to show me some code you wrote and you can tell me a little about it you can call yourself a programmer or developer or software engineer etc. Put it on your resume, don't listen to anyone who tells you that you don't belong you do. Thank you. Hello my name is Kazumi Kabauski. I'm also a student at Flatiron School. I was born and raised on a small island in the south of Japan called Tokunoshima. I moved to San Francisco in 1998 and now I'm a mother of two little ones and I live in Pittsburgh Pennsylvania. Before I had children I worked in the hospitality industry. I used to manage fine dining restaurants in San Francisco. I loved the care and attention that attention to details it takes to run a stellar restaurant. When the guest had an exceptional dining experience that's what made all the hard work and long hours worth it. When I became a mom I knew the hours of the hospitality industry wasn't going to work for me anymore so I started to pounder a new career. After the birth of my boys I've remained a stay-at-home mom and I've been working part-time from home. Raising a family remains the most challenging and amazing thing I've ever done. However during this time I started to feel like I was losing my own identity in everyday motherhood. As fate would have it that's when my friend asked me to go to a lunch party of Mom's Can Code. I had no idea what coding was then but I just went looking at it as a night out with my friend. At the lunch party I learned that Mom's Can Code is an online and in-person community and program for people who want to develop their coding skills their ideas and professional networks. I met moms who are developers some moms who are learning to be developers. I was so inspired by them I went home and started looking for resources on learning to code and that party was a year ago. In March this year I found out I was awarded a scholarship from Mom's Can Code that was paired with Flatiron School. Since then I've been taking a full stack web development online course and I am proud to say that I'm over halfway through the program. Thank you. Mom's Can Code is a very kind and supportive community just like Ruby community. There is online online co-working hours, a virtual summit, hackathon, live coding lessons as well as many different workshops. Mom's Can Code has been helping me to move forward in my new career. It's so helpful to have such a supportive community especially when you're learning to literally learn to write a new language. You do not have to be a mom to be a member. You do not have to identify yourself as a woman to be a member and right now they're looking for mentors. Mom's Can Code is starting a new program called Develop Camp in January and they're looking for freelancers, tech employees and even startup founders who will be willing to dedicate three hours per month for three months working with one of the participants to help guide, create a plan of study that will help them reach their end goal. If you're interested in becoming a member or mentor or both please visit mom'scancode.com or if you have any questions I'll be here until Friday and I'll try my best to answer any and all questions you may have so please come find me or feel free to email me or tweet at me. Mom's Can Code has changed my life. If I'm able to help just one person by having this talk then the world will be that much better. Also if you want any stickers or pins I have some so please come find me. Thank you. The title of this talk is How to Be Standard. My name is Justin. I go by my last name Serles on the internet that's what I look like when I'm tweeting things. I come from a company called Test Double. We're consultants. Our mission in life is to join teams like yours and work alongside you and hopefully make your team code base better. I found in my travels that lots of clients over the years that programmers all seem to hate one thing just kind of based on what they argue about and that's lint. Programmers hate lint. Lint gets caught up in your code and makes it slow and dangerous apparently. The most popular linter that we've gotten in our Ruby community is called RuboCop. It's called a cop because it yells at you a lot for stupid reasons. And I'm a firm believer that like one of the things that Ruby has actually taught the rest of the community is that like the default settings of your library matter a lot for just the joy that programmers have. Why Rails was successful is because we don't spend all day just fighting inside of our configuration files. Rails generally by default makes people feel happy. RuboCops defaults meanwhile make people feel like this new emoji. And as a result lots of teams end up just writing like lots and lots of custom one-off configurations. Some people might call this bike shedding. If you don't know the phrase bike shedding, basically think of the software development life cycle as going like well you have an idea and then you spend time building a thing and then you get in a cage match with all your co-workers to argue about meaningless trivia and then you make money with your successful product. And I was thinking about the software development life cycle and I was thinking like well you know is this step really that valuable? Like if we got rid of this you know maybe we could have more time just building stuff and then make more money, right? So again also like another reason I'm rigging on RuboCop is it's the reason that my answer Sinatra was incorrect yesterday, family feud and I'm still kind of sore about losing. So when it comes to like talking about replacing the most popular linter like this XKCD came to mind where it's like well there's like 14 competing standards we need one universal one for them all and now there's just 15 right? Well wrong. That's not what's going to happen here because Ruby gem names are unique and there's now just one standard and and I own it. So I'm a benevolent dictator for now because I really don't want to be worrying about this six months from now. In fact earlier today if you saw Aaron he's the one in the burger hat up in the front row he actually kind of pre-announced the library. I called it RuboCop the good parts and you can gem install standard as the new standard library for Ruby. If you're not familiar standard is actually inspired by standard.js which is created by Farras a book of DJ basically it's just a unconfigurable thing on top of ES lint so you get all the goodness of the engineering that goes into ES lint and none of the bike shedding and pointless argumentation about like what rules you should set because you're not allowed to change them. So standard RB is the same thing you just add it to your gem file you bundle install then you bundle exec standard but that couldn't fit in one line so I still use the alias BE when I don't have been stub so just be standard. And after you type that and hit enter if you see nothing that means you win. You can go check the exit code exited cleanly you just don't worry about it anymore it gets out of your way. If there is an error it'll tell you hey you know I can automatically fix a whole bunch of stuff like this one here so you run standard fix and it just goes away. So it's real nice out of your hair and of course when you first add to your project you're going to get a whole bunch of different stuff but standard fix will take care of most of them. Additionally Rubik's Cub only supports back to like 2.2 Ruby 2.2 but there's not like as far as I can tell a real reason for that other than they want to be aggressive about dropping support but I want to support as much as possible. So I've hacked in a way to support libraries as old as like one still supporting 187 and that seems to work so cool. You get some common questions like what if you don't like a rule you know a lot of people have asked me that so far this week and my answer is humans are very adaptable and if you really don't like a rule basically you'll see it in the log messages too right now open up an issue talk about it because like a lot of people have been using Rubik's Cub for a long time we all have our little custom things if you got one you feel strongly about open up an issue we'll have a discussion. The reason that I'm choosing to be the person to write standard is I literally don't care about any of this so I feel like that's a good arbiter of one last cage match where we all argue about Ruby style and then as a community we can just get over it. You can find it up on GitHub at our company test doubles org slash standard hope you check it out and I'll be around I'll be hanging out in the back you want to chat about it I got stickers and stuff and so thanks a lot for having me. Hi I'm Jacob we'll just go with that I like that so how many of you have worked with Swagger before oh am I audible now there you go okay awesome how many of you have worked with Swagger before okay keep your hands up those of you who have worked with Swagger how many of you test your Swagger schemas I see some we see some oh I have these hands on my team this makes sense I don't feel back there okay so live ramp the company that I work for louder we're not getting we're not getting your slides oh we're oh we need my slides I'm not getting your slides is that mind if I do no no okay where's the mouse is the mouse over there which which way am I going down oh I got it it's hard to say can anyone that knows how to computer raise your hand please uh there we go yay thank you awesome um okay oh oops um so yeah so live ramp the company I work for has an internal tool called swagger testing um that is used for testing swagger schema specifically um and and more broadly uh a rails api end-to-end via the swagger schema so those of you who aren't familiar with swagger uh swagger is a tool or a set of tools for standardizing documentation on apis and it comes with a whole suite of tools including swagger cogen that allows us to generate a client in the language of our choice um that represents the schema we define in swagger so for example if the swagger schema contains um you know various routes and HTTP verbs and parameters that pass through those routes we we can generate a client that will have all that information as a nice handy method call so that it reads like like readable code it's very nice um so here's a high-level overview I've I've oversimplified this on purpose for the sake of brevity um you have your swagger client and your client is embedded in your code somewhere you want to make an api call hits a rail server the rail server interacts with the back end in some way there's a database involved the back end returns some response the rail server renders json back at the swagger client and the swagger client returns an object of some kind that object is defined in your swagger swagger schema so when you are testing this workflow if you're working with our spec uh this is just my library of choice of course there are plenty of others um in our spec we will we will test our code maybe on the model like the active record model or module level individual files in which case we are covering exactly this portion of our workflow starting with the interactions with the database and back end and ending there as well we can also test controllers so controllers test your code from the point where you send information to the rails application and then render a response back so that's more comprehensive but if we're working with the native rails tools and we have a generated swagger client then we've added another point of failure to our code so how do we test that um we have a library called swagger testing and swagger testing looks through your project for the generated swagger code initializes a client exposes it in your rspec suite so you can just call it and runs a test server in the background that interacts with the same database as the rest of your test suite so you can just say here's my client call methods on it expect this response to be what we like and uh this ooh the emoji was the it was the little yellow hand when i copy pasted it there but we have a slightly different one oh well that's fine life is life is confusing sometimes um so we like this uh because it it eliminates a bunch of common points of failure if you're writing your swagger schema and you write the wrong HTTP verb for example or you forget a parameter or you just make a small typo this is the kind of thing that in order to test without tools like this you have to you know open up a rails console somewhere and type it out manually if you want to make sure this actually works um so it's very helpful to have automated testing here's an example of how this will work um swagger testing dot setup that's one of two externally facing methods of this library um you can pass it a number of options such as where your swagger config file is um you know what there are a number of other options are all documented um but it's very simple um then here's an example of an end to end test where you initialize your your client is just defined as client swagger testing dot client that is the second and only other externally facing method of this library and then we're working with a potato service here it's very important business logic um you're you're getting a potato with your client uh with the id and you're expecting it to have these attributes um and it reads just like a normal r-spec test except in the background you're actually hitting a real test server that's hitting the database and and performing uh exactly as your service would if you were running it in production um so that's my talk um you can reach me by email i actually don't tweet very much because i'm i i don't know twitter i don't know um but yeah my emails rmrfinbox at gmail.com you can get me on github or linkedin just jacob or jacob rather this is fine too oh hi there my name is roman i'm here to talk to you about feminism um by the way i uh i'm a math software engineering manager at square i've been there for about two years i've been a manager for about four or five years uh i came over this talk at this conference the square has not signed off on this so yell at me if you don't like any part of it not at square please um feminism is a word that a lot of people think is a scary word um uh people societally uh sometimes try to avoid identifying with it even while identifying with some of its ideals personally i think that's a little bit silly um because of how i relate to the word i think it's something that more people should identify with very explicitly and to explain why i want to tell you a little bit of a story about how i first interacted with it myself uh and it is at college in college where i took a fem theories class uh it was with shimer which happened to be a school that shared campus with my school anyway long story short i'm taking this class i'd be a friend a person there uh and we hang out a fair bit outside of class and i am a cavalier kind of gentleman i like doing things uh for whether it's old ladies or women and it's a script that i've learned since i was a little kid since like my parents encouraged me to open doors at grocery stores for like people carrying groceries uh and so in our interactions i would always try to open doors for my friend um and i started noticing that she doesn't actually uh like that at all and another factor right next to that i noticed is that she always whenever we're walking together uh stays a foot or two behind me and if i ever uh fall back she makes her to never be in front of me and i'm not sure what happened to cause her this behavior to her but that behavior very is very obviously a safety oriented behavior right she to be psychologically safe wanted to be behind me to see where i am and what i'm doing and when i open a door for somebody that puts me behind them because i have to enter first and so inadvertently by following a script that i learned as a kid i was actually putting somebody in a situation of psychological uh kind of harm and feeling unsafe and so for me what feminism really is uh and this is a very personal definition is a re-examination usually by active listening of personal and personal and societal macros and how they negatively affect others um super over simplification also feminism itself is a bit of a loaded term intersectional feminism uh is one i like better over time but moving on uh let's talk about management and the idea uh your role as a manager is no longer to ship code it's to ship a team right and uh what does it mean to be a team a lot of management theory focuses on this idea that as a manager you're responsible for your team's output um i actually don't fully subscribe to this uh definition i think that a team is people helping each other and your job as a manager is to get a team to help each other as effectively as possible because that makes them better than the sum of their parts that makes them better than a bunch of individuals it makes them a team and the best way to get people to help each other effectively is feminism it's re-examining your macros examining how you're behaving in the presence of others and how your actions are affecting others using really active listening and using tools that i've learned from the feminism communities and a few other communities uh to have more explicit more active conversations about things that societally we tend to take for granted and we take tend to do automatically just like gentlemanly opening doors and actually ending up hurting people um and so i want more and more people to take this approach to their everyday life and especially to work life because at work people can't get away from you and if you're following a script you've learned as a kid that is actually ending up hurting somebody and they can't get away from you because they're on your team or they report to you that's a real problem and you should try to talk about it and see if you can help make space for them my name is roman please come talk to me about this topic i'm really really passionate about it thank you all right i would like a quick show of hands how many of you picked up one of these beautiful stickers all right uh keep your hand up if you know what dev empathy book club is we got one we got one all right so for the rest of you um i wanted to just uh very quickly tell you about uh dev empathy book club uh who we are what the stickers are are really all about um so in a nutshell uh dev empathy book club is about solving the now what problem uh so this is something that's very familiar to us you know you go to a conference and hear a fantastic talk you read a really interesting or intriguing blog blog post or newspaper article um you hear a podcast that changes a little bit the way that you think and now what how am i actually going to integrate this into my life uh because the reality is that in order to to make changes to how we interact with other people and how we live our lives day to day um it takes a whole lot of follow-up and it takes a concerted effort and a commitment so dev empathy book club basically um takes the the inspiration that we have so much of in our community of you know from from all really all directions you know coming at us and saying hey we need to get better at at soft skills at how we interact with other people um at ethics at how we build our teams um and and okay but how do we actually do this in the day to day and how do we have a community that's going to help us follow up on that so dev empathy book club aims to be the world's most supportive community of programmers committed to developing our empathy skills through study discussion and practice um study meaning we have uh we have a a program of study that we you know that we follow in order to to very very uh regularly bring in new ideas but we don't just stop at reading things and learning things we actually discuss them with each other and we discuss them in the context of everyday life we talk about our experiences so over the past year and a half we've gone through a number of different books on a wide range of topics general communications books books about how to form how to form better teams um things that are very close to code pragmatic programmer is what we're doing right now we've gone into the world of design we've gone into the world of management um so it's really just just as wide gamut of things but developing a broader picture of the people around the code that we're that we're writing every day so what does that look like in terms of that that's the study but what about what about the other elements so we have weekly reading check-ins which means that that every week we'll have a couple of questions that we'll throw out there and people can respond with you know with their thoughts something related to the reading you don't have to be doing the reading in order to answer the questions we try to keep it pretty pretty broad it would be awesome if everyone's doing the reading we realize that not everyone can commit to that immediately where people might you know kind of come in and out but um but it's it's a great way to just kind of have a topic to think about you know every week we also have a weekly experiences chat where people can come in talk about the things that they're struggling with right now or things that went really really well um and about once a month we have a panel discussion uh where where the the core panel will discuss different ideas coming out of the reading that that we've uh we've been going through if you want to find out more you can check us out at devempathybook.club we're on twitter at devempathy and if you want to speak with me tomorrow there's going to be a birds of a feather session at 150 that's the first slot of birds of feather sessions so you know find me at any time come to that to that session check us out online join the slack there's lots of ways to reach out if you're interested and i i hope to see a lot of you in person or or online thank you hi everybody my name is jamie and i am here so first of all uh who watched bianca's closing keynote yesterday how kickass was that right so um one of the one of the things that she mentioned in her keynote and was uh to to help with a lot of these situations was ruby for good who here has heard of ruby for good fantastic who's been to ruby for good yeah okay yes fantastic okay so if you've so if you've never heard of it it is a weekend of civic hacking uh every year ruby for good uh whole group of us get together to to work on projects that try to provide some benefits to communities around around the country and around the world um uh this this happens well uh this so this is a sample of some of the projects that that we worked on just this year alone uh we we worked on so diaper banks across the country support families for for uh support families who cannot afford diapers for their children they their diapers are very expensive and not covered by financial assistance programs uh so inventory tracking and partner apps were developed at root entirely by uh developers at ruby for good and uh open source contributors around uh around the world uh around the country uh rather and are they're used by five five of the major um diaper banks around the around the country providing diapers for thousands of families uh who would otherwise have to choose between diapers and feeding their families terror stories is another another one that helped that helps digitize the traditions of oral storytelling in indigenous and other traditional communities in the amazon rainforest making their history indelible and allowing knowledge of them to spread new sanctuary coalition is an organization that fights for the rights of immigrants and their families resisting detention and deportation uh as a result of selectively applied immigration policies providing services like accompaniment uh and bond programs and pro say legal clinics um the the playtime project aims to nurture healthy child development and reduce the effects of trauma among children living in temporary housing programs in washington dc and so this is just a sample of some of the projects that we worked on this year alone um the flagship event is held every year in washington dc in northern virginia area uh starting last year there was uh we started running a uh an event in portland for so that python developers could get in on the action and uh but nothing none of none of that like nothing compares to the level of excitement we've gotten from the ruby community this year tickets sold out for ruby for good the the dc event in nine days so ruby developers love giving back to the community so much that we had to kick off a second uh event uh kicking off in the san francisco bay area called ruby by the base in spring of 2019 so we're gonna have ruby for good on both sides of the country and so this is this is not a hackathon you don't go into and try and cram as much work as we can into a 48 hour span to try and compete for some prizes that's that's not what this event is instead we we just work with a bunch of uh a bunch of our friends for a reasonable number of hours a day and and then for the rest of the time we just spend hanging out with our friends like you make friends at ruby for good you make friends in real life so and because it's not a hackathon like these projects that are out there they live on as open source and can and collect contributions from people around the world for more information uh and to get involved rubyforgood.org you can join the slack channel there are several frequent ruby for good attendees here um either myself uh Betsy over here has you've been to all of them haven't you uh so like there are there are plenty of us here come come ask us if you have any questions um and uh that's all i've got thank you so much is Aaron here he knows what i'm going to be doing okay if he's not here okay so why do we have lightning talks we have lightning talks to make fun of our friends and i have been really wanting to play around with some meld tools and so i made an elma um machine learning model that tries to tell the difference between tender puns and real erin patterns and tweets and here's the terrifying part it worked so i started with the training set uh copied and pasted from twitter because you can't batch download from twitter without an enterprise license so i have things like if i feel like if c-level executives studied harder and got better grades they could be a-level executives and in the more serious thing and i'm using uh one of the google products auto ml natural language which is in public beta if you want to go dork with it yourself uh a serious one um i think my new superpower is the ability to still be tired even though we turned our clocks back so i created a small data set there's 38 records and if you've ever done any machine learning that is freakishly small don't do that they recommend 100 lines but i did not have enough time to copy and paste that and we get to see how slow my browser is so this is the trained model that i got back uh training model took about four hours at random during the day if you were at registration when the i got the email saying the model was done you got to hear me have a happy dance very loudly and so the model isn't great um precision and recall are only about 75 so those are the rates of those are a measure that indicates how likely you are to get false positives and false negatives but here's the fun part let's use it so i pulled some tweets that i did not use in my training set because i am not cheating so today's lesson don't airdrop cats to the person giving a presentation and this comes back with a 0.73 rating of serious pretty good um let's try oh let's try aren't land parties a type of networking event yeah yeah that comes back at a 1.0 rating of fun so i think machine learning is super cool and awesome and fun and really powerful and here's the thing it's actually a lot of the techniques are very very approachable so i have two things to say and then i'm going to get off stage one is uh further applications of this fantastic bit of not actual any coding that i did there was no code involved it was all through the ui uh we could write a twitter bot that just retweets tenderlobs puns so that you don't have to get any of his serious content about ruby at all or the inverse but why would you do that and then the second thing is if you're interested in machine learning i just tweeted and my twitter is the underscore thagamizer you can see it here i'm biggin and biggin and biggin that's how you spell thagamizer uh is the spiky part at the end of a stegosaurus i just tweeted a link to this page these are three blog posts i did on some really basic machine learning and ruby if you want to check it out if you find this content useful and want me to do more of it please let me know because then i will because blogging into a vacuum is really kind of sad and boring thank you all so um i've talked about this at kind of conferences all over the country for a couple years but uh i think crystalline is really cool i think i've i've been hearing a lot like for the last few years like people are doing go people are doing rust in certain cases because they don't feel like uh ruby is fast enough that may or may not actually be true but um crystal is another great option if you don't want to go like too far into the foreign land of go or rust um that being said um there's like a full featured uh web framework very similar to rails that like myself and quite a few other smart people have built over the last couple years it's called amber framework if anybody would like to start it i would not argue in any way um that being said let's look at some code and discuss um encryption so this isn't really uh in any way crystal specific in fact it mostly looks like ruby um this is called helping humans visualize encrypt encryption strength so here's a code um i already i'll ask it so you know save some time it's limited um so i'm gonna open that up so hopefully can you see the text is it too tiny okay how about now okay bigger okay there we go okay so basically i'm taking in requiring some stuff taking in a parameter great variable name you're welcome um if nothing's passed in i yell at you uh coming down here i create like okay so really really quick what i'm doing is i'm loading in a bitmap file and with that bitmap file i'm extracting the header which basically says what color space is this how what is the resolution etc i'm removing that because we need that so that we can visualize the image later um and then i'm doing something really simple i'm just taking in a password with a simple encryption right here and i'm zoring every byte to be what that password is which is one of the simplest forms of encryption uh down further i actually use open ssl crypto to try out multiple encryption methods on the same bitmap after encrypting them i save the bitmap so that we can see what it looks like uh i will stop showing you code here really soon um this is just saving the simple one this is unencrypting the simple one since it's a reversible encryption method uh and then this is using ecb which is a pretty standard one in ssl uh for not anymore but it was really standard internet explorer still forces you to use it in some cases um here's cbc which is what rails uses for encrypting it's uh encrypted secrets i believe um and then ctr and gcm are other fairly good choices i'm going to run that and show you the output really fast cool something encrypting an image called superman bmp and i will show you really fast in the finder oh no pretty sure that ran um here i'll just open it again there that's better okay so make that bigger too i can't sorry um so the original image here is called a superman bmp it looks like this you may have seen it before um if you go look at the first one this is a simple encryption all i did was just a zord the bytes with a random string uh like so password much secret i believe and as you can tell it obscured it but you can tell still tell what it is if that was ascii you probably couldn't tell what it was but machine learning algorithm could probably find a pattern if we look at this next one this is a ucb which is actually still used by uh older versions of internet explorer that are still in use today and therefore to be backwards compatible our engine x has to support it with open ssl tls which can be an issue as you can see you can still make out the superman logo um let's go down to cbc which was what i talked about with like encrypted uh sessions um in this case you really can't make out what's happening uh the reason for this is that it takes what's called an initialization vector which is usually the same block size as your secret and it zores it across the result of the first encryption takes the output of that and zores it against the next block and so on all the way to the very end okay so my time's up thanks guys hi everyone my name is zack um i would like to talk briefly about hyper stamp making hypercard and ruby again sort of uh all right let's go so last year um i gave a talk at ruby kelp about uh hypercard and making it um in ruby it was an okay talk um i also talked about uh the history of the application and bill atkinson um its designer and creator um i used a ruby gui tool called shoes um to make the prototype i can't really see now uh i'm gonna click through a bunch of these um so hypercard if you haven't used it before i heard of it basically it was like making a web page but not connected to the internet uh but you could edit it like it was a powerpoint slide um and it allowed you to do a lot of cool stuff with uh some programming as well so like this is an example of an address book you can type stuff in you can make buttons that click around and you can script it all up so it was very revolutionary for the time and uh pretty cool app so the ruby shoes version um or you know what would it look like if made by a bad programmer um i had buttons in text and uh some scripting with ruby i didn't try to remake the scripting language that um hypercard used but uh so that worked okay um not a lot of stuff worked and a lot of the meat and potatoes of hypercard was unimplemented and finally i was somewhat unhappy because um shoes four uses uh j ruby and uses the eclipse swt library for all the widgets and um as i got deeper into making the stuff i wasn't super excited about messing with that so that's where we were and then i dropped it soon after uh ruby comp and then let's see if i can see over here now um i began rewriting it in july of 2018 so a couple of months ago and now we're here again and i'm telling you about an unfinished implementation of hypercard so that's that's good um all right so why did i try to rewrite it well uh last year i saw um a talk uh about ruby 2d and it's created by this guy tom black who i think is here i see his name on the board can you stand up tom if you're here there he is everybody clap at that man clap him um it's a really cool little ruby library for rendering uh 2d stuff and text um so let's see where we at step one um it uses simple 2d under the hood which is a c library also written by that man um yep yeah you can clap at him all day clap at him clap uh all right so it allows you to render all the stuff that you might need to make a hypercard kind of thing um and uh games whatever i would suggest looking at ruby 2d and simple 2d if you like see all right so uh fun challenges of making a hypercard clone i'm going to click all these at once um basically when you have just rendering primitives like shapes and text and and uh not much else you kind of have to recreate everything so you have to create buttons and text fields uh the text field is like lines of text but you have to do cursor movement and all that kind of stuff it's actually funny there's a github issue right now on ruby 2d uh someone asked how to do buttons with ruby 2d so i can share some of my terrible code with them um also you need z indexing so things can sit on top of each other all that stuff uh you know drag and drop resizing elements it all has to be done sort of by hand okay so hypercard um no longer calling it that i'm calling it hyperstamp and the reason is that um i want to keep the window size very small i want to be cute and limited um i think it's like 640 by 480 right now uh only shades of gray um i decided to drew without color for right now and uh i wanted to feel like making stacks of note cards with a pen so that's a screenshot that's the size of the thing and uh it's not going to get any bigger than that okay i can't see what i'm doing uh yes you can see something all right so this is just a couple of screenshots to give you a feeling of what i i kind of how i i've been using this thing um there's my face uh those are some buttons uh you know you can make little like text you have um all that kind of stuff it's still early in the implementation but i'd like to keep going uh the code is very very messy it um is a giant blob of text and rubo cops hate them so uh just if you like giant blobs of text it's got it um all right so you could go to my thing it's mhc ruby 2d is right there it needs cool stuff you can do whatever you want for real like there's so many things to be done here with hyperstamps so feel free to get involved um finally vipercard if you hook that up on the internet that's a whole recreation of hypercard in javascript vipercard try that out hey everybody hi my name is junichi i'm from japan and are you enjoying ruby kong yeah that's me too yes i'm gonna talk about unhappy exception handling but this is my first english speech so it will be a big challenge for me but i'll give it a try let's begin so now talk about the basic syntax of exception handling in ruby probably all of you understand the syntax begin rescue and okay yeah it is very simple but some programmers misuse exception handling they misunderstand if an exception happens use rescue that's okay well they begin writing rescue everywhere rescue rescue rescue rescue and they believe my program is not reliable is it okay no yes no but some years ago i had trouble at the previous job i joined a previous company as an in-house software engineer and i became the maintainer of an existing in-house web application it was a good boy because it had been running perfectly for years but one day i had an opportunity to talk with one of the users he showed me his regular operation and i was watching it he clicked the save button then i saw a dialogue system error minus one oh what what's this he said oh we see it very often so we are clicking the save button again again again quick quick quick quick quick are we really that god word like this and actually it was not rare that was ASP.net in ship but basic idea is not different and they are same so i remember that was an update logic and it has a rescue close unnecessary rescue close and this is unhappy exception handling it just display error code and it neither notified nor allowed so we never noticed even if an error occurred and unfortunately the users had a bad procedure if you get this error keep on retry no do not retry please call us and after the investigation we found the root cause and it was deadlock deadlock was involved so frequently and due to a bad table design have you ever seen a table without primary kids yes and no okay anyway this is a conclusion what can we learn from this story first and the misuse of exception handling with terrible consequences and second what you can do and what you should do or you shouldn't do a different third if you don't confidence in exception handlings please do not use rescue so casually and delegate exception handling to frameworks for example rails displays 500 page or save logs and please consider ask mentors to for help about your code design so let's do happy exception handlings finally introduce let me introduce myself my name is Junichi and you can call me June i'm working as a software engineer at a japanese company called sonic garden and i'm mainly developing rails applications i have twitter and github account and i have some personal works i translated um ebook called everyday rails testing with art art spec do you know this book oh great great great yes i translated and i wrote a book called introduction to ruby programming for future professionals in japan uh last year and key concept is learn ruby um before rails um mats kindly wrote the forward message uh for this book i'm looking for english publisher so if you know uh please introduce him or her to me anyway uh that's all uh i hope you enjoyed my talk uh thank you very much see you hey how are everybody uh how you're all doing i am uh tom black i go by black team uh most places on the internet and i'm pretty much a typical uh ruby developer except they like to kind of hack on the fringes there and so yes it's true i did give a talk uh last year about uh ruby 2d and uh building this with uh some some friends online and it is a it's kind of already been introduced but it's a gem for 2d graphics and game development all the rest of it it kind of looks like this uh it's got a nice dsl you can just uh you know create shapes and give it some attributes and everything and then you just get a window it's pretty easy uh so some cool games you can build with it uh is that playing oh yeah this is by uh antwan kind of cool uh it's not playing anyways let's see oh i don't know oh that's playing so uh yeah just some examples here this is sarab he's uh been building some cool games here there's like a typing thing and built a um what is this like a matching kind of thing there that's pretty cool i gotta get a good style here not just games you can do some ui things it wasn't really intending for it because it kind of leans on the game side but uh yeah this is like a color picker which is pretty uh pretty fabulous and then he also made something for for halloween so it's just really cool examples he's a pretty creative guy so i just thought i'd share what's new and also you know give maybe give you some inspiration here so uh added sprites we kind of had that a little bit already but finally kind of polish it off and if you're not familiar with like this stuff it's kind of like a digital flip book and it's pretty essential for 2d games so you got uh kind of a nice api there and you can describe what it is and then uh yeah you got the sprites are also rotation kind of a obvious thing but these things are harder than they seem so there you go that's our test card there things rotating very exciting uh circles which was uh an interesting challenge you know it's first curve shape and you might think oh it's the big deal but this is my first attempt and so it's like um yeah i've got i was never really good at math but i don't even know this this failed in a lot of different ways so but the challenge is under the hood it's like these are sectors and so like you know a lot there's a lot of lies and 2d graphics and stuff and so this is like how you kind of do that stuff with these primitives um so now we have circles and you can do fun stuff you know and there's random things like window icons kind of need uh more controller support so kind of already had that but thanks to some low level improvements you can do mapping and other things and like just detect stuff out of the box we use stl at the lower layer and there's been improvements there so uh if you're getting a controller get check out 8-bit do i'm not sponsored i wish i was but they make cool controllers and stuff uh ios and tv os this neat to see your uh ruby apps running on there that's all thanks to m ruby which is kind of cool so lots of improvements and and just wanted to thank everybody who's contributed code and ideas and it's a fun community so what might be next well we've got like an issue with or lots of issues with feature requests and enhancements and ideas and you know we're just like hacking about around this stuff and so uh there's a couple things i'm excited about web assembly is one you might think is that possible yeah i wrote a blog post about it so again i'll link to that and that's also done in m ruby which is cool so you can see it running in the uh javascript console there and it was all so uh translated to japanese so if that's your language there you go um i don't speak japanese but i might learn just by reading my own blog post now so that's pretty cool uh also bringing some interactive things so this is a console kind of sort of using things based on i or b and all the rest of it and so you can you know hear just like uh kind of in real time changing some of the graphics elements there so it's kind of cool so it was neat but i was really motivated to do this uh because of this little guy anybody seen the tele drone before this is a programmable drone you should know about it's pretty sweet so this is the fun i was having in the hotel room so you can stream all this data there's a lot of data coming out of this thing so that makes it convenient uh and then here i was at seven am this morning trying to take this thing off and sorry if i woke you up so and if you want to know what to do with that extra double bed in your hotel room yeah so you can see it's taking off and it's turning and i've got yeah this is uh i think i can read that yeah clock wise and then and then flip being there you go so it's a cool yeah it's sweet so and it's all done in ruby and i'll release a gem and i'm working on that so if this stuff is interesting to you not just 2d but just you know you want to kind of get outside your boring rails apps you know you can do that so there's a lot of cool stuff going on um yeah we're on getter uh and github and we're friendly folks we're all amateurs really know what we're doing so it's fun to hack on all that stuff and you go to blacktm.com that's where uh my my uh site is with all the links to everything too and i want to give a shout out to ryan davis who gave a talk about his graphics jam that's more like the simulation side and kind of doing vector stuff that's really cool too so there's a lot of weird people doing interesting things so my talk is the second wave of imposter syndrome which is uh more appropriate title than i'd originally planned so thanks jeremy so i want to give some context to for the way i experience imposter syndrome just a little background about myself i'm a full stack developer at live ramp and i read a lot of ruby and javiscript and significantly i have about two years of experience and that means like i'm kind of learning how to do things but there's still a whole lot i don't know and that's dangerous territory for experiencing imposter syndrome um i like to think of imposter syndrome it's kind of a curve uh it's not a static feeling that you feel the same way all the time um but uh it like kind of ebbs and flows over time uh i think a lot of people maybe feel the same way about imposter syndrome as i do uh kind of like 18 months into my career i was actually feeling pretty good i was like i knew a little bit about rails uh and then i had to learn a bunch of new stuff and all of a sudden you feel uh worse again at the top of that curve you're like this awesome programmer uh with all the power of ruby at their fingertips but then you end up as like two kids uh stacked on top of each other in a trench code at the bottom of the curve and you really don't know uh if you belong where you're at um i want to talk about the peak of the curve um i think that's kind of an important moment on the curve and i want to share a little anecdote about about an experience i had uh maybe not really at the peak of a curve and but the curve but just somewhere kind of along the line um this is uh an example error output of a time when one of our bills was failing um we have a dependency on a gem called kerb uh and we were unable to build its native extensions uh i hope that this is a similar experience for uh some of the more junior people out there but when i see a dot c file i uh know only one response uh which is of course to panic uh this is a time for me to bring in a guru um and i brought in a guru to help me figure out how to resolve this issue with compile these extensions um and before i was even able to figure out where this dependency was included from he had already opened a poll request to the upstream uh repository like repairing the native extensions which was crazy um and then he emailed or and then he slacked me uh and let me know that it turned out it was actually really easy uh it was pretty impressive seeing this happen um but like kind of hearing that this was so easy uh was a little intimidating for me and i found myself sliding down this curve again uh i think that like this was a moment when i kind of lost faith in my problem solving abilities because like i was at a loss um and shackled for like trying to address this type of problem um and this is kind of the significant moment i think for me uh of of like what i want to express in this talk is i just want to say like what i did here to recover um so i think this is the time to get back on the horse um and at this moment i kind of leaned back onto the problem solving skills i had and solved the problem that the way that i would uh the the way that i would have solved it turned out curb was actually not a real dependency uh it just happened to be in a gem spec somewhere the fix was only one line and i knew how to do that um and i did it and it was awesome and i felt a little bit better and and then i went and uh like looked at my co-worker's changes and he was right they were actually kind of easy i never would have thought of them myself but uh i could understand them and that was really cool um so i want to go back to this curve um this is kind of like the micro level curve uh this may be the first couple years of a career um and the curve can kind of look like this uh if you keep slipping back down to the bottom um but i think if you recover soon enough um the curve can end up looking a lot more like this over your career um and so yeah i just want to encourage people who are in a similar boat to me to just uh remember to trust your problem solving skills and and then go off into the unknown and figure out learn something new um yeah thank you hi everyone my name is Antoine and i'm a software engineer at live ramp which is one of the sponsors by the way of the conference so and today i want to talk to you about unplanned refactoring which is something i had to deal with recently so for more context live ramp is a 12 year old company it's been very successful and it's still very successful it's going through a hyper growth stage which means it has a legacy code base and some legacy code you have to deal with so i want to talk to you about my experience working with this legacy code so sometimes you get a ticket and you have to go and work with this legacy code and sometimes that code is untested it's procedural which makes it hard to understand and hard to change so you can see me going in this code like i have to fix this ticket i have to implement this feature i'm trying to gain context like about the code and this is how i feel i'm a little freaked out so my solution is well i should just refactor this code so what i mean by i should refactor this code is first if the code isn't tested i should test the current behavior then i should i should use object oriented design in order to make the code like easier to understand and easier to change so how do i do this the first thing that i try to leverage is discipline and you need a lot of discipline because if the code is procedural and untested it's kind of daunting to go and refactor it in order to make your change later so the thing that i really like to use as a tool is pair programming you can bring someone in and this way you can share the burden with them you can have two brains working on one problem and you can also hold yourself to higher standards by having a pair with you and also you can keep each other motivated the other thing i like to do and that's very valuable is work in incremental steps so the first thing i do usually is if i need to add a test i'm going to add a very small test i just start somewhere and the key is really like to start somewhere the other thing that i like to do is naming things sometimes it's very useful to just you know introduce some local variables and name things or extract a block of code to a method and then use that method in in your code so the other thing that's very important is team culture i'm looking enough that i'm on a team that values code quality and that makes you feel empowered to make these changes because if you have a ticket um refactoring the code is going to take time first so i think that it's important to have a team that restores code quality in order to make you feel empowered and also my team sees pair programming as the best practice so it's easy for me to go and grab someone to pair with me on this um but if your team is not like this you can always shape the culture of your team and maybe introduce some talks uh from send emets for example or read her books they're great then the other thing that i think is important is to have this team culture you're going to need to have a company culture that makes uh its developers feel empowered and i'm very productive enough to have something called hack week which is every quarter we get one week and we can hack on anything we want we can explore new technologies we can refactor code we can do whatever we want and that personally that makes me feel empowered and that translates into my team culture as well and the other thing that we do at lm2 is we have trainings just uh over the summer we had a training to learn about event-driven uh microservices in order to improve our architecture so that makes me feel empowered and i think it makes my team feel empowered and so we can include these refactoring in our tickets before we have to change the code in order to make the code better and the system better thank you great uh thank you very much my name is scott and uh you can follow me on twitter i don't know why you do that though uh but i want to talk today about something that most of us developers uh struggle with find slightly annoying uh a minor daily or weekly nuisance that we deal with and that specifically is recruiters can you see yeah okay so uh we all get those cold emails from recruiters that clearly haven't read our resumes or linkedin profiles out of the blue uh saying they need someone with five years of experience in java for a position having to do with java scripting so i thought you know this is a minor nuisance this is moderately annoying uh and i'm gonna fight fire with fire here so what else is moderately annoying uh comedians uh specifically amateur comedians of which i am one and therefore i have many friends who also are uh and if you're in comedy circles or have friends who are comedians your facebook is going to start looking like this with invites to shows etc etc um fun fact if you ask a bunch of comedians to invite you to their shows so you can do a bit for a conference they will happily oblige uh so anyway i decided i'm gonna start inviting all of these recruiters to my improv shows uh so great here's my first option want to save the world yeah i do uh something about a company this awesome company because they're this is an awesome company because they make easier for blah blah blah blah blah so i respond uh thanks for reaching out i'm not looking for any opportunities but i'm actively looking for members for my audience members for my improv show uh this is an awesome group because we make history fun and accessible instead of blah blah blah blah blah um if that sounds like something you or someone you would know might be interested in please let us know uh so i said if that sounds like something you or somebody you know would be interested in you can get tickets for our show here uh we also have other rubian rails opportunities as well as front end roles that could be a good fit too looking forward to hearing from you i also have other shows that aren't history looking forward to seeing you in the audience thank you scott uh so this this happened a lot uh i would do this quite a lot my co-workers got to see the most of this in slack um but then this happened uh and someone actually knew someone and i'm like okay uh boston's a small town maybe i'm being a bit of a jerk here and i need to like back up a little bit so i'm like okay let's give everyone fair warning i'm gonna put it right in my linkedin profile that if you send me an email i'm going to respond with an invite to my improv show fair warning well turns out people do read the header on your linkedin so i think the bit has officially died but now i have a good screening mechanism for who actually reads my profile so that's nice um and unfortunately no one has actually made it to see any of my improv shows now you might be asking hey scott this sounds great and all and i have lots of recruiters emailing me but i'm not a comedian what can i do well next time you get an email from a recruiter you should invite them to my improv show uh please don't all go to that domain at once because it's just a free hiroku dino and it will probably die anyway stay tuned for my next talk using similar strategies for canvassers and your podcast thank you i've been scottist van you can find out more about my show improv history at improv history dot com or my podcast comedy keys uh at comedy keys dot com please like and subscribe