 point of this, but people know that I'm connected to a bunch of people and they think, oh, that's valuable. There must be, I want that. I want to be connected to a bunch of people because I know there's value there. So what does that look like? How did we get here? Been married for 15 years to Jen, a small business owner with Mark, a total of 10 people, adorable, and I have one for a kid, which is dog or animal, pet, that we don't have any actual children and so our pets are a stand-in until, well, our pets are a stand-in. So Kevin is our creative director. He made these cool little stickers. This is our Abbott, this is our mascot. Come see me later, I'll give you one. I may have just overcommitted, but if I can't give you a sticker, I'll give you a hug, unless you don't want to hug and then I'll fight somebody for a sticker. So this is my wife, Jen, again, been married for 15 and this is my business partner, Mark. Apparently he didn't get any attention. These are adorable people, so we are about 10 people right now. This is Jager. I was talking with Ryan earlier because he gave me a land Jager. No, yes, yes, land Jager. Yes? Yes. Thank you. So land Jagers are little sausages. I'm very familiar with the term land Jager because when we named Jager, Jager, we found out all sorts of Jager things, compound words, etc. So there's land Jagers, which is, we have left out in our yard. There are shots of Jager, which is when he does his business. Number one, a Jager bomb, he leaves and then, he will part and then take off. Anyways, enough about my dog. I just realized I can see one slide ahead. So success, all the money, you've got a nice house dog wife, etc. Yeah, all the money, none of the hassle. That's not actually how it works. So what is success? We built adorable because we wanted to make a better work environment. And talking to Brandon, talking to some other folks like Brandon Hayes, recently we realized if we're trying to build a better work environment for ourselves, then we did a poor job. Just realized my timer's not going, so we'll just keep going until we want to stop. So start with the end in mind. Probably recognize this from the seven habits of highly effective people. Anybody read this? Yeah? Anybody who's not raising their hand either has their arm is tired or hasn't read it and should read it. Unfortunately, as I was putting this talk together, Leonard Nimoy passed. So starting with the end in mind, what do you want? What do you want people to remember you for, etc. There were fantastic stories that came out about, and this is Leonard as Spock, probably how he is best remembered. But some of the stories were actually really amazing. So it got me thinking, we've had an opportunity to see some of this in our own community. This is Ezra. If you don't know, Ezra started Engine Yard. He also started Merb. If you're doing Rails today, Rails is a much better place because of Merb and because you can deploy Engine Yard to still around. There are many other things that wouldn't be here without him. So father of break, etc. So I'm not great at planning, as you can tell. As developers, we can probably agree that we're terrible at estimating, right Amy? So let's not go all the way to the end, but let's look at set a marker out the next day, the next week, next month, next six months. What do you want to be true? So when I typically think to take this approach is when I have some sort of impetus for change. Often it's because my current situation is miserable. Webcrafters Inc., not a web development shop, actually a printing press, uses the webs of paper flown through the printing presses. I got an apprenticeship here because my art teacher, I spent a lot of time in art in high school, terrible at art, but I spent a lot of time in the art room. It was very comfortable for me. And when an opportunity arose for this printing apprenticeship, my art teacher said, actually didn't even say anything, he just signed me up for it. That gave me a career path. But I was there for five years. I went through the entire plant. I learned how to do just about everything in there. Also got me the digital pre-press, which got me to Photoshop at the same time as the early Internet and GeoCities. I was very popular in GeoCities because nobody knew how to edit images in my circle. And Jen got me, my wife said, saw an ad in the paper, she was like, Photoshop, HTML, CSS, you know all these things, right? And I was like, I don't know them well, but I'll apply. So I got hired on as the sole web developer for Dane County. I showed up on day one and they said, by the way, you need to know how to program. So I went out and got Sam's ASP, teach yourself ASP in 24 hours. So the next day I knew how to program. Little did I know or realize when I took the job in June that it was actually a half-time job. I just worked full-time for half a year. And then two weeks before Christmas, Virginia, my boss came in and she's like, Jim, you're out of batteries. You can't work anymore. Okay. So she reached out to her network, my boss, who was my eventual boss, who was three blocks away. She went over and talked to him. Again, we've got a two-week project that will fit in pretty well. We'll be able to start back up first of the year. So I went to work for all the way up at the top. State of Wisconsin Department of Financial Institutions. And I was there for about seven years. Estimers, developers always take the time that's available, no matter what. So my two-week project turned into a seven-year stint. So, but it was here. I actually got interviewed by John Larkowski, some of you probably know him, anyone? So I was looking for a previous speaker who I would like to meet. There she is. Sorry, she actually works with with John currently. So I interviewed with John. We had seven happy years together and I met Mark. And then as things do, the team grew and things started to suck. And John moved on a hash rocket and then told me along with him, said, hey, we've got three people. It's hard to pair. We would like a fourth. Are you interested? I said, sure, I'll move across my family, cross country. And I was still very much learning to code. I had never really, really practiced test and development. I had never done pair programming. I had never done idle story carting. I learned a ton at hash rocket. By the way, this is all before when you came to hash rocket. We were a product company for a little bit. But as I did that for four years, I felt like I was getting all these skills. I thought I could do more than code whenever I had new clients. It was really comfortable to put me on there. And I built relationships with clients. And so we started talking about doing satellite offices for hash rocket. And I was like, I would like to do that. I'd like to run my own office. That wound up falling apart. But not before I started talking to people in my hometown of Madison and wound up at Beniworks. So I was there at Beniworks for two and a half years. We did a lot of cool stuff. Built a big team. My job became mostly go out, talk to people, bring work back, which sounds like sales, sounds like business development, but it's not really any of that. It's not really any of that. It sucks being told that you're a salesperson. But I felt like I could still have a bigger impact. And I felt like I could do more. So I went and worked with Randall at Thunderbolt. I was there for about seven months. Many of you probably know Randall. I met him at conferences, etc. And so I spent seven months there commuting from Wisconsin to Los Angeles. And after about seven months, Randall was like, he sat me down and was like, Jim, you don't look happy. And I said, I'm not. Traveling all that much is exhausting. So in December of 2013, I left there. Despite the fact that I had a great job, high salary. Yeah, I was just exhausted. I was no longer happy. And so adorable was born. Adorable was me and Mark getting together and said, saying, Hey, we think we can do this. Build a great company thing together. You want to do that? Well, sure. Actually, Mark is watching. But Mark said, No, I kind of got this this contract gig. And then I think it was the next week. They called him up and said they didn't need him anymore. Yes. So it worked out really well. So now we're, we're here. So as you look at, as as I talk about that, I you probably heard me talk about all the jobs. But it was really this is what my career amounts to is Mr. Hansen, who is my art teacher. And it's ridiculous that I'm a 35 year old guy. And I still call him Mr. Hansen not Richard. But Mr. Hansen got me the opportunity with the printing company. Jen realized I wasn't happy. And this thing that I could that they valued more than manual labor at the printing company. And then Virginia realized that I could do more. And she had a connection to this place at the other state state government agency to john, who knew I wasn't happy to Steven and Brad, who saw an opportunity and thought I might be able to join them and help out to rando who knew I wasn't happy to Mark. And that's where we're at today. So my entire career is right there. So relationships are the bedrock of not only my career, they're the bedrock of every every successful career. It doesn't hurt. Starting right this moment, I literally started missing Robert because I was going to hand this off to him. So relationships are funny, though. Most of us are so focused on getting skills, gaining skills. And so that whenever we get in some place, we can just blow the doors off whomever is there. But I would argue that it's not what you know. It's not who you know. Sorry. So you do need to have some knowledge, some service, some skillset that you can give to people that people will value and pay you for. In one way or another, whether that's out on your own or as a having my phone's ringing, either as an employee, as a contractor, as somebody who's putting something out in the world, you need to provide something. It's not who you know because the simple fact that I know Chris, another guy with a beard who's really threw me for a second. So it's not who you know. I know Chris. Does that mean that I'm instantly enriched for that? Well, of course. But it's really about who knows you, right? And so not only who knows you, but who knows what you offer, who when they have a problem is going to come to you, right? So it's not what you know. Although you do need something to offer the world. Each and every one of you has something to offer the world. It's not who you know, but you do need to know people because that's part of the discovery mechanism. But it's who knows you, who knows that you're available. I've got this PHP, sorry, Drupal. Drupal? Is Drupal still a thing? Okay, I have this Drupal site, this Drupal lead that came to me. I don't know a single person in my network who's interested in doing Drupal. If you are, if you know somebody sent them to me, I'll pass it along. God, I hate hops. Everybody's IPA crazy. It's ridiculous. So ask, who said that? You know, I'm not going to talk later. In a good way. So who knows you? Who is out there who has, you know, problems, who has opportunities sending them problems and opportunities, right? Who has problems and opportunities that they need solved? And, and how can you reach out to them and make that little problem go away, right? It might be something as simple as documentation in an open source project. It's so simple and we're so awful at it. I sat at lunch with Shauna, are you here? So I sat at lunch with Shauna and she was expressing how much she had contributed to Caligator, which is a PDX calendar. Sorry, I'm sharing this without without you knowing it, but it's open source. And her contribution has largely been to get people into a room, right? She's lamenting the fact that she hasn't done a whole lot of code, but she's giving so much back just by doing that part of it, right? And oh, by the way, once you have all those people in the room, you can learn from them, right? So and now all sorts of people including me now know Shauna so optimizing for discovery, right? So you can broadcast there are many channels available, not just SSIDs. You can broadcast to Twitter, to Facebook, to social media, X, whatever new graph node there is. You can do meetups and conferences. Hey, awesome. So you can attend conferences. Or you can speak conferences. What's the difference you ask? Well, when you attend a meetup, let's start there. When you attend a meetup, you can have a one on one conversation, probably realistically between one and seven people, depending on the size and the length of it. You're not going to be able to talk to everybody in that room, etc. Right. And if you speak at a conference, you have the chance for, you know, somewhere between 10 people and 30 or 40 people depending on the the meetup to know who you are. And then a conference larger scale this a couple of days probably anywhere from between one and 50 people you could talk to or or if you're up on stage, you get to talk to all of the audience. Don't forget the live stream always talk to the live stream. They like that. Podcast, right? So, you know, this, if you put out a podcast, you know, your mom will probably listen to it. But eventually, you know, you can grow that into a wider audience. Maybe you can buy advertising, what have you, you can get that out there. It persists. And it can be reshared. Sorry, it's another way to, to get people to know you. And of course, there's branding, right? So we're going to play a branding game. And if you recognize yourself, don't answer, you're probably too busy on your phone at the moment. Anyway, but so we're going to throw some brands up here. And if it's not you, shout out who you think it is. Terrence. Alright, so you probably know him from Heroku, from managing two versions of Ruby, etc. I had to ask on this one. I saw that I took this picture. That's not, that's not true. Dave V, Dave V. Dave? Not Davey. Anyways, one of my former colleagues took this picture. Actually, at my request. But it's of a laptop that I looked at and said, What does that mean? Because I googled WW SMD, and it brought up all sorts of image results that were, what would sock monkey do? So Sandy Mets. So five minutes. I'm happy that that just happened. It's Aaron Patterson as tender love, right? He even has another name that he goes by that most people know him by. Some people probably know tender love that don't know Aaron Patterson. The names, not the people. This is just one person, I think. So Sandy Mets, author of practical author of pooter. Also, she's fantastic. If you've ever had a chance to talk to her to conference, she's always there to listen to answer your questions. And every interaction that I've, I've ever heard with her has been wonderful. tender love does opens our software makes Ruby and Rails better for all of us. It's paid to do it. The brand isn't the sticker that they that they hand out. It's not Terrence's hat. It's not Sandy Mets' WW SMD. It's not Gordy Puff. Those are all fantastic. And what those are, are repeaters. There are things that you could you're walking around and you see on somebody's laptop, Oh, you know Terrence, awesome. You've been in the same physical space as Terrence, that's the only way I know to give sticker, which is good because he's always around. So I don't want you to walk away from this talk thinking, clearly, I need to build a brand because people want to engage with my brand. Did I mention that we have stickers? Okay. So it's not your brand is what people say about you. I'm running so late. Cool. So security actually had a personal run in with this. I would say before you broadcast yourself out there, be aware of what you're doing, right? There's a great book. I've forgotten Kevin was here. I don't know what that is. In fact, I'm going to move quickly before we get a code of conduct violation. So smart growth guide to privacy. This is a very good read and very enlightening. I would recommend that you check it out. This talk is not a how to, right? It's not a how to. I'm not saying go build a brand. I'm not saying do all of these things that are going to lead to exactly what I got out of my career so far. Is it a Y2? Sure. Y2. Okay. Kerry got it. Y2K. No. So mission statements suck. Have you ever had to sit in a room and develop a mission statement? Right? Who who enjoyed that? Cool. You're better people than I am. Pervin helps. Does every time I've been involved in this process? It's felt like an exercise in futility. But I think that's because deep down I didn't think that it actually meant anything for we're going to walk out of that room. We're going to forget the mission statement and whatever. So preparing the stock and people often ask me how do you how did you get I see that you did that thing. How do I I don't know. So but I started thinking about it and realized that if I have to if I had to reverse the engineer my mission statement why is it that I've been able to why is it that I'm standing up here right now. That's because I had a relationship with Kobe for the first year and etc. So I don't have a mission statement personal mission statement. If I did it would be this. Genuinely desire success in those around you and do what you can to make it happen. So genuinely authentically and without question. You're going to fuck it up. Is it okay? I don't know that's going to be up to the person that you offended. Desire success. Desire success. Unfortunately you don't you don't get to decide what their success looks like. Only each individual person gets to decide what their success looks like. You can play the advice the role of advisor. You can offer advice. Beer talking. For example. I believe Jonah would be a super amazing bullfighter. Right. Right. Who who agrees that Jonah would be an amazing bullfighter. Exactly. So Jonah doesn't think that he would be successful or happy doing that. Or alive. Success to Jonah is to be alive. So those around you that this doesn't include just your team. This doesn't include just the re community. This includes everybody around you. Right. So you go to your significant other if you have one or you love ones or your your team your barista your bartender. Think about what success means for them. I think in a lot of a lot of cases we are well positioned to make a lot of those things happen. And if you're staying at a hotel at conference know that you're expected to tip. If you have questions about this come talk to me. I'm serious. Do what you can to make it happen. A couple of dollars per night. Yeah. I think most of us can handle that. If you can't. That's fine. Most of us can. Spoon theory. I'm running out of time. I'm gonna have that. It's too much work. So we all control resources. A lot of us control resources even if it's just that dollar to a night. Sometimes those are people. Should you ever refer to people as resources. People don't like that. How do I know because I listen to them. It's not only be it's not only people it's venues and spaces like the PDX Ruby at New Relic is the Gold Star bus. Those are relatively small things for a company to handle. So I think Kevin's been here but genuinely desire. Success in those around you and do what you can to make it happen. So for adorable. I mean say no when we can't deliver what a client wants. Means meeting people for coffee and giving them career advice. When you're a junior developer there are a lot of people that are I can give you advice when you're you know heading towards management do I want to stay technical do I want to not. Pure people can provide help. Madison Ruby. This is year five. We have opportunity scholarships. We showcase Madison to the Ruby community and the Ruby community to Madison. Y Web CA.org is a program that we built with the YWCA to teach folks HTML CSS JavaScript. We didn't do Ruby because it's too hard to install and everybody who enters the program and finishes gets a MacBook Air guaranteed placement in a family sustained wage internship. And I think this is pretty close to everybody here but ultimately it's listening even when it even when it's difficult especially when it's difficult. Thank you. So we have a break. And then we're going to hear a fantastic talk by a native Portlander who I love hearing from but go ahead and take your break and I will have some important news for y'all when you come back. Oh I'm sorry that's relevant isn't it. I can hear you still talking while I'm I'm just teasing. I know I want some scoby jerky now. Will you bring me some scoby jerky next year. Come back to Ruby on the house and bring some. Sorry. It sounds delicious. I take it back. Everything mean I've said about scoby jerky. I made her put it in the basement and it died in reference to the scoby that was producing scoby jerky. So we are about to hear from Chris Dylan the man who created the internet famous cat faucet. Has anyone heard of that. It blew up hacker news some time ago. It was awesome. Chris invented a automatic faucet for his cat. So cat comes near a faucet turns on cat goes away. It turns off because cats only ever want to drink the coldest freshest water turned by your hand while they look at you. Chris is into a lot of hardware hacking kinds of things. He is a member of PDXRB speaks regularly up at our meetup in Portland and this talk is sure to please I have actually seen a version of this and it is fantastic. So you have a treat coming up. I want to mention real quick that I think Chris is the only person who have ever written a Redis client inside of Minecraft like in Lua inside of a modded Minecraft. So he could track and monitor his Minecraft nuclear reactor and get data out of it. And now he can graph that you know or export the data to New Relic or something whatever he wants which I think is pretty awesome. I have a quick announcement. The raffle that has been going on out there. I don't know if anyone's been paying attention. The zeal raffle where they're giving away the pairing rigs. We've seen those. This is apparently the best headphone or headset arrangement for pairing. It's called a plantronics rig and they pair like 80% of the time at zeal. So if you're in a pairing that might be a good place to work or something. I'm just saying. Also if you need strong mentorship in our juniors see this gentleman over here. All of those things that I just said mean that they're giving away those headsets and I'm going to announce at the end of the next break who won. So if you want to compete for those headsets go out into the hallway on the next break and take a picture with the sign and tweet it at their their handle that they have out. There's a sign next to it and if you zeal swag is the thing. Hashtag zeal swag. If you tweet hashtag zeal swag then you get a chance to win the plantronics rigs and we really need a lot of people to enter. So when I win all of them it looks legit and accidental. Okay. I'm going to stop talking now and let you all hear from Chris. A round of applause please for Chris Dillon. Animation project it did called dream. It's done in Ruby. So this like all started 1991 and now you're going to like fall asleep years to listen to me talk about my biography but I'm going to try to like skip past all that set up although it's all true and it's all part of the context which is always like the hardest thing to warm up and get the context set you know. But I really want to focus I really believe in like this inversion control like all these things which are like really awesome right now in my opinion are all about you guys not me so it's like peers and inversion of control like inversion of content right like what would you to be without all you guys. So I don't like a show and tell says hopefully entertaining but I'm going to get to the gem part and like the library stuff the stuff that you guys can do if you want. So like I've been doing like music ish stuff it all started it's just a funny story I don't know MIDI MIDI is like not changed since 1991 which is awesome like it's like legacy I was like oh it's legacy but it hasn't changed and so like sequel you learn at once and then you get that for free for the rest of your life which is okay so maybe maybe you don't learn all of it but that's actually be serious. But yeah so it started with MIDI kick walk there was like my first dust machine was like a 5-ohm machine that turned to like a Windows 3.1 box and I got a sound blaster card for it like before it didn't do sound I guess and it came with like a joystick port so like this weird it looks like DBI does anybody remember that joystick part to MIDI wow okay so like it's basically it basically makes MIDI happen like your computer speaks MIDI so then that went into like cakewalk which was awful that was like music arrangement tool and then I don't know I guess nothing really changed and then computers got good like late 90s and like waves like wave editors right so like audacity like a gold wave is like a shareware you guys remember shareware like everything's open source so it's like gold wave was the thing it was like what audacity is now so but so like all the details and like the non-musicians around and people that are not interested or like whatever so the point is like there's this history you know and like the program language like I could put my program language thing up and like operating systems or anything like you know it's this chain and like it just it changes but you know as you keep going to each one you bring what you learn before like the generic stuff like let's forever so like and then it's like into history so like I'm I'm like in love with Ableton live right now and I'm in love with Ruby but those things aren't like the end of history so whatever displaces Ableton live whatever displaces Ruby is by definition can be awesome at least to me right and that's good so the point is experiences like not really repeated like I kind of hate that like you know the guy's on a job for ten years and he repeats the one year of experience over and over again I'm sure that happens but it's kind of depressed but I don't know I don't think experiences repeated that often but tools tools change but general patterns are forever you get that forever anyway okay so there's like three threads I guess like in my skillset or something there's like this audio prod thing which is just happening by default I'm like earning zero American dollars doing this you know it's like it's just it's like one of these things you can't stop doing right like someone could tell you that you're not making money you're like okay it's just something you do I guess graphics dev which I'm terrible at I did pixel art for this thing which is a 2d array I guess so you can I can I guess I got by but I'm not I don't identify myself as a designer so or a graphics person and the Ruby right so like those three I want to tell you like how this happened I guess like sidetrack here Ruby to me especially in this project Matt like I got to touch on a domain and then come back out so like a lot of people think oh I can prototype and maybe I'll write it in something more serious or something but like I guess that's true but you also get to like experience more things because it's faster and you don't have to worry about like pointer math or something that computers speak I guess so I guess you could touch on computer domains and those lower level things but in Ruby you get to touch to like more like universe stuff you know so in this case I got to touch on pixel art and animation because of Ruby I never get this question but I know a lot of creative people do like especially I'm sure like Paul McCartney or something I mean like you know creative people that like get a lot of questions right so I don't get a lot of questions I don't get this one but like I know it's a common thing and kind of it's a hard question I don't know it's kind of like Jim's Jim's talk the last talk it was like kind of these hard like how do you do it you know it's like it's a hard question I don't know there's no good answer maybe but like for me I get one idea for a project or like a gem or something you know something I want to spark bam it's like an itch I got like I want this and I'll give that later sorry but like you know you have this idea like you know you fight that every program has this like untitled that text thing right like Vim empty buffer this is sublime everyone knows like I'm sorry many people know and like almost every tool has this like untitled thing and I think outsiders and I'm not trying to like make tribes like we're programmers but like I think outsiders think like this is where it starts right like like you know I've been asked like how do you know what to type like I love that perspective you know like I don't get that for myself it's like wow yeah I can see how you would think that you know I'm like starting out like fresh every single time but for me when I'm like trying to start something like I've already got an idea and I hit this and like you know you kind of see past this sort of and like you know that this is like the work starts but you're not like afraid of this like this is the starting point where you're not like oh like it's a blank canvas it could be anything right that's like a good and bad thing like it could be anything ah or it's like this could be anything right those are both those are both the same state it's a matter of perspective I guess but like you've got this idea and you want it to exist and it's just like you know it's going to be this like this churn and a motivation drain and all this stuff but you're like you're like kind of willing this thing into existence and you're you know you're gonna get like resistance or something but you know if you really want it you can just keep working at it and that's I think the difference between me and a lot of people that write like really amazing gems is I think like wow they just they just keep going they've got like it's right that's the difference I think in execution anyway so like this is the default screen for Ableton so this is like you bit it up and you just get all this stuff and I'm sure it looks like what is this even but that's not it's just like the editor to me and every other tool Photoshop I'm sure any you guys probably already can think of your own examples but for this particular project it just started with this clavichord patch like a sound that kind of sounded like a guitar and it had a little I hooked up to an expression pedal which gave me like a little bit more like expressiveness and that just kind of carried it is sort of like finding an awesome jam or something that the project kind of had a little bit of like gas behind it so I started this project you have to name it and it's untitled so you have to name it something I always name a project something really stupid like this is Dampy Patties I don't even know why so maybe because I'm like Irish and I live in Portland damp that's not it because I started right before I moved to Portland but you know as you see like I'm doing manual version control there's some like resources that are sort of like get I haven't found like an in-between get and SoundCloud yet I should probably just buy SoundCloud but yes I'm doing manual version control right on my exports yes so it's like the deployment resource or asset or something so that's awful that it works but the real the kind of interesting thing is the projects with all of its samples and recordings and stuff came up like one gig like almost every project is like a gigabyte of sound it's not even video right so it's like a lot of samples and then the wave when you bake it down like you mix down it's like a hundred and fifty mags and then you can code that as mv3 it turns out to be six mags I think this is like a really amazing metaphor for the kind of the project because it took me about a month to do the audio you know with like you know working at it like you can record in a week but then you gotta kind of make it good so like refined like sort of like refactoring right you could just type out but it's not what you want so like working at it it took a kind of a calendar month not straight or anything so like you know a gig to six mags sort of like the work that you do and then like the startup time of your your application right like it's a lot of work for anyway so then the animation took me a month so it's about four minutes long so a month whatever that ratio is a month to four minutes of content that's like the ratio okay so this is the project I'm sorry it's off the screen actually I really want to not be off the screen but like that that first track at the top with all like the bars you guys see all the little bars that looks like Morse code sort of everything that like the very top thing that's a MIDI track so like if I if I like export that out I think my DOS machine from 1991 could play that like MIDI hasn't changed it's just events it's like velocities it's like these numbers on an array of keys like a kind of like a map of keys and they have velocities it's just it's just numbers and many files just events basically so like that hasn't changed and the rest of its way files which was from gold wave I guess and then the extra stuff with the wood like the fancy stuff on the left that's just for the screenshot I don't even leave those up but it looks nice so you guys should be impressed okay so that's the music stuff which has nothing to do with Ruby so I had this visual idea I had this I had this song and it kind of has lyrics that like speaks a story so I want you know I wanted this this is the summon thing like I wanted it I wanted some visuals to it so I done some like graphics Devon like processing which is sort of Java and processing JS which is sort of JavaScript and some other like flash back in the day but I knew Ruby and I'd heard of gamebox.io I want to play with it so I just I spiked on it and just kind of learned its world view and it's world view is like I mean just I got lucky it's it's perfect it's like a elementary school play so there's a stage there's a manager there's actors and there's scenes so I was gonna make a non-interactive animation for the music video which is what music video is so it was perfect so I spiked on gamebox and I'm gonna show you it so yeah we could we could keep talking about it but I'm just gonna show you so so I'm gonna talk about why rake works here I'm gonna go on to like how the gem works but to just start about it's gonna create a window but it's gonna be maximized but it really creates it creates an application through go-so so this should go full screen hopefully and hopefully I have audio too on the laptop not audio at first do I not have audio out there that's audio it's buzzing it may just not cranked up you guys here outside and take your picture with the zeal folk in the little drawing to win the pairing headsets those of you who missed the story face you got to put your face in the superheroes check my twitter feed for an example how to do that with zzac zzac's a little bit drunk right now I maybe shouldn't admit that on camera he's had a lot to drink you should go out and get him to take some pictures with you it's super fun he is a riot so we're we're gonna do now instead is we're gonna get the audio to come out of the phone instead yeah did anyone get popcorn outside I don't see very many popcorn tubs I feel like the popcorn is kind of delicious here it's like movie theater popcorn imagine finding that at a theater I wouldn't have guessed right what are the odds it's pretty good the blackberry cider I killed the last blackberry cider keg it makes me the one who drank it all if I remember I'm winning the blackberry cider kegs right now they have an infinite supply apparently I think I feel like one of the years we actually killed it good let's try it again we're gonna try a sound output here just to test real quick see if we can play the audio out of the phone as if by magic how do you think it works that sounds good yeah so thanks so this is the part of the talk where we go back to like slides and this reminds me of just reminds me of we played this show in a field and it was it was actually in a field and like the deep there was a there was a band and there was a there's a DJ and he like he it was like a horn it's like a funk band with a DJ which no one does and so like he starts playing this like DJ record that's like I guess DJs by and it's like all his bass like this really produced thing it's like in the future you know in the rest of the band's like waiting they got like the horns player hold the drums are holding the stick the guitars like everyone's waiting for the intro to finish and then the live music plays which can no in no way compete with the production DJ record you know so it's like after this like huge bass it's like the the movie ads right like Transformers 17 now playing at the local Monty Plex you know like the local part of the ad or something so like now we're back to the slides so we're doing the thing that that I hate so anyway so so I want to show you the the game box gem so it relies heavily on a go-so which you guys probably heard of for the for the rendering and stuff it builds on top of it so the first line brew install is how you get go-so installed regardless and then after that you can install gem box this is obviously the Mac example I'm sorry for the the windows and the likes users but you basically just get the native lives and then install game box and then that gives you that gives you a game box command like like a like you know gem does or can and then you create a new project with game box new and call it polka Justice League if you're weird like we're gonna make an animation about Batman with the leader hoson or something okay so that gives you a structure like this which kind of looks real dish and it's got a gem file and a rake file which is how all tasks and then you put all your art into data under graphics your sound or yeah your music under sound sound effects under sound fonts if you want it can use true type font it's really cool and then it even has tests which I didn't do for this and I suggest not doing it because otherwise you have to watch four minutes yeah well yeah anyway like it doesn't have a dom right so I mean I don't know cavibars I can work so like pixel like pixel color test so yeah you can do it you can do it I just didn't do it so paid paid price manual testing watch the animation yeah so so the tricks that this thing uses can be broken down like this there's sprites which is like this static cat that's the actual PNG from the from the animation and there's the sprite sheet which is just a sprite arranged in the grid that is a square turned rectangle by the number of frames does that make sense like a film strip and then it knows to like animate by that that box so you have to make it square and so that cat on her on her bed is breathing because of the frames you know yeah okay and then tweens is the motion so tweening is is done by the tween gem which is really awesome was inspired by the flash API sort of and tweens are how you like move something smoothly in animation and like you can ease in ease out you can do all kinds of different styles but like tweens are how she moves across the sidewalk how the how the moon rises how everything moves it moves us with tweens and then timers are we're going to talk about timers but they're really easy and then I've got a visual aid for parallax to explain what parallax is and layers so let's talk about sprites real quick so sprites this is an actor it just happens to be a sprite but you get a game box gives you a DSL so define actor and you put it looks for assets kind of like naming convention so if you define a name on actor called starfield for like the background star like the night sky you need to create a starfield png and then you do mix ends with has behaviors you just give it different mix ends for different properties in this case it has graphical meaning it's going to have a an art file the scale is how it looks pixely because it's a small file and it's blown up by five acts and position gives it XY layer gives it to give it's a Z okay and I'm going to show you more a few more mix ends oh so then when it's the starfield symbol can be used later on at the very less line night create actor starfield because we define the actor so hopefully this makes it this so this is like how you define a scene and actors okay so that's just a static sprite it's not gonna do anything it's just gonna sit there unless you tweet it if you want to be animated like change frames and stuff then you just mix in the animated mix in and it has options on it frame update times like how fast it goes that's kind of like sleep so like the sleep time so the lower that is the faster it'll animate and then once I think it's set to false by default I just like thrown it in there just so I know that this is gonna repeat the cat's gonna keep reading thank God so this so it has an ENV environment file just kind of like rails would have or something else would have and in this case this just finds the order of the stages and also the symbols of the stages of the previous files were used so in like common config and stuff tweens so when I started this project I was the gym one of the gym creators his name is Sean Sean 42 Sean Anderson I think he lives in Michigan I believe he was super nice and I was telling what I was doing and he was like no one's done this with this gem so I was like hey you know if you're I'm like kind of make it manually making tweens and he's like I'll just add a tween manager so he added this tween manager so now this is how you do tween so you basically tell the actor in this case we have a variable called face and then have this hash of how we want it to change so this was actually used for when she falls asleep the face kind of fake like falls off sort of and then a time in case underscore T is the amount of time you want it to animate so this in short this just makes moving and animating really really easy and you give it the style that's the tween gem tween colon colon has constants for all the different styles so I really like that anyway so timers this looks like a lot of code but it just it works exactly like JavaScript timers you know you can add timer and then you can add timer and underneath that you know and they'll just fire as you as you directed this it's the same thing you can add a timer and then inside that timer you can add other timers this is really nice for like changing scenes when the music changes which didn't happen but yeah I want to take his face off yeah we're gonna get we're gonna get to that like I made a funny mistake which I captured and give form but anyway okay and so then layers you guys already know if you know CSS the highest layer wins goes in front so you can put things in front of things and so because now we have tweens and layers we can actually do this parallax effect which I made this this other project to help illustrate it so we're gonna step through what a parallax system is I think some people played games in the 80s but maybe other people didn't so a parallax system is just a thing that gives a parallax effect I'm explaining what the parallax effect looks like and this is wave verbose so it's gonna make sense at the end but this is like our monitor this is the box is our monitor and so we're zoomed out it's not like technically I guess if we call like a viewport so if we like put stuff on like here it's not going to show up on the screen right so it's like off-screen an off-screen actor off-screen buffer off- screen texture call it what you want we can't see it but we just happen to like line it up on the monitor so that like we've got these three actors placed here and there out moving and this is like the start of horizontal parallel horizontal parallax effect which you saw in like old-school arcade games and probably recently too but so if we start moving these things now we're just tweening these actors and I killed the first one and put a new one on the end we could do that and you still don't see the effect yet just the motion part then we kind of we could like do this I guess we could keep creating actors or we could just move the first one at the end so we could just respond like not kill it but just move it when it hits some certain criteria which is a little tricky because we're not dealing with when it's you know x equals zero because it's a game it's real-time so time slips these are stupid you know checks something that you weren't doing so it's a little tricky on the logic but I've got in this project I've got a I think a pretty good class that does this so anyway so now we're just moving now we're just doing the same thing we're just creating a chain and we haven't gone beyond five actors at this point okay so that probably makes sense so now if we just add a texture which just happens to be a seamless texture like you know with no borders then it's going to look like eventually that the background is repeating but again we're zoomed out so it doesn't look right I'm sorry this is over both so now I'm shading the off-screen and now I shade the screen all the way so now this is like what you would actually see if this was a monitor and not a viewport and you see it's starting to look a little bit yeah like okay so now this is the actual like parallax system object in action like it's just a class that just manages the actors and just goes forever but it still doesn't do the effect because it's we're zoomed out so let's zoom out we're gonna use bigger assets I didn't create these and I don't know I've credits for them so I need to update but you see that you see the clouds are just barely moving and also this is an unfortunate example because it's a far away background so like it's slow otherwise it looks weird but okay so now we're gonna put another texture just slightly in front of that or I guess in front of that anywhere we want and make it slightly faster and we can put another texture for that that represents something in front of that you know something with detail that's not blurred and if we wanted we could put like water and if we would let this run for a while you're gonna think that this is 3d right so this is like what they did in arcade games and it's really cheap you can do it on cheap hardware and it's pretty pretty easy that's a parallax effect it makes it's just 2d it's just tweenings and layers but it looks like the waters it looks like we're on the water right like we're going pretty fast and the clouds aren't moving but they are okay so another another technique that you do is timers it's no idea how much time I have okay like another technique you do a lot is like you do this like you draw the off-screen buffers to help performance and like I typically do that and other like even I think in objective see projects I've done that but so I kind of preempted me up pretty maturely optimized and I tried to draw to an off-screen buffer and this is what happened on some of my machines running you somebody you see that like that noise there we see the video noise so yeah that's just like random memory that's like a random video memory and I have no idea what why it's doing it so the other thing is like it wasn't faster so don't do that just draw don't draw the off-screen buffers just draw to the main screen and then random objects will will look or random shapes like this will look like that okay so that's just some circles and there's no tearing that final thing on the bed the spinning rainbow thing that's the only procedural thing in this the rest of it is just png's so like in this case it's a rotating line like the computer is doing it in other words like the rate command is making it happen in other words it's going to look different every time I run it because of CPU slipping and stuff like that so that's the fun that's like the only dream actor this is the mistake I made with the face where I tweened in the wrong access so her face comes up and I wanted her to tween slightly so it looks like she falls asleep and the biggest thing I'm mistake I made is I started my project at 640 by 480 because that's VGA and then I wanted a white screen so that like just like all iOS devubs are here anybody that deals with pixels all my assets like just looked broken the parallax effect doesn't work because it doesn't line up with the viewport anymore I've got like things floating in space I've got no content over on the right because it got wider and there's no content so like I was dreading this during the project I just finished it at 640 by 480 I was like I'm gonna go back and like fix all the textures and like it was irrational because it actually didn't take me that long but I was faring it for like longer than it took me so anyway I want to say thanks to Sean he did he did he did a ton of work on this I think this is a seven year gem which is amazing I think it was absolutely fantastic I didn't get stuck and I don't think it's me I think it was the docs are good he wrote a ton of examples got me through it he was super nice and he's not the only one that wrote it he's the one I interact with I think he co-wrote it with someone else and I don't know who that was or who that is but I just want to say thanks to him and both of those repos the demo and the thing everything is there thank you thank you very much is that amazing I've seen that video a couple times it is beautiful I am moved by your work so thank you so we are going to take a quick break this is your last chance to tweet a picture of your face in the zeal superhero prop out there and win some cool headsets so go outside to a quick break we will be back here in at 45 I believe is the next talk so I'll give you a warning I'm sorry 535 the next and final talk also if you're a speaker after Ryan's talk we'd like you to assemble on stage please thank you come on let's how many tweets have sent so far raise your hand if you've tweeted a tascadera no no one actually David was gonna lie about it though I can't believe you would lie to me I thought we were friends tascadera is actually me it's a joke I created tascadera and 300 other fake Twitter accounts so that I could win yeah tascadera's got seven come on tascadera hey there we go big win a round of applause please for tascadera alright so we'll be doing another one tomorrow you have another chance to win continue tweeting pictures of your face silly faces ideally we have our next speaker our next and final speaker the last announcement of the day is that speakers I need you up here on the stage after this is all done everyone else you're free to go up into the wilds and start your eating for the evening and then we will meet again at the Astro lounge for an 8 o'clock happy hour sponsored sponsored by app centric apps I did it I did it wrong I kept trying to do it wrong earlier and they corrected me it's absentee of actually I apologize so absentee of is so is hosting our happy hour at 8 o'clock so this is Ryan Davis he goes by Zen spider on the internet he founded Seattle RB maybe you've heard of it written rather a lot of code he is the author of our spec test unit tea package Maxi test which he loves he advised me recently and I think it's good advice to this day to use structs for everything anytime I can use a struct I should use a struct I don't even really have to make objects at all everything is struck in all my applications and that was Ryan Davis's advice ladies and gentlemen so you can look for Zen spiders actual work on the internet by looking up Zen spider and I present to you Ryan Davis a round of applause if you please so since I'm last I don't have to start the timer right they're all captive right please start the time starting so this is my first time here thank you very much for having me I think this is a great conference I want to thank Jonan Kobe Josh and everyone else that's involved I'm sure I'm missing a lot of names so let's please give them a round of applause and I want to thank all of you for sticking it out to the last talk I know you're all more than a little bit drunk and you've stuck it out through an entire day and now you have to put up with me so thank you very much as said I am the founder of CRRB we just celebrated our 13 year anniversary last Saturday and we've been meeting weekly for the last nine or so years we don't have a date when we actually started doing that but that's our gig and we really love it so I'm gonna be talking about standing on the shoulder of giants they're not on I got nothing I'm plugged in I thought we were good no I went to Evergreen I'm not seeing another interpretive dance in my life no I feel like I was doing okay is there should we try replugging turning it off and on again let's reboot great it's plugged in it's what the fuck f1 something f1 more f1 no no oh fuck me is it in 16 by 9 no that's not good hearing because I need my notes otherwise I'm gonna sound like an idiot oh is this thing on I do not understand what's going on so stop doing that so default for display on the external one that might work let's try that thank you very much yeah my nose and keynote so if you put playing go into presenter mode oh no we're on we're on we're on we're good we're good so pretend you didn't see that no that that one's on tension intentional because I'd like to start with the black screen as I said I'm gonna be speaking about standing on the shoulder of giants I'll let you finish but my talk at RubyConf Australia was the best talk ever and the reason why that just happened it was because I did the exact same thing to all of our Lacan at RubyConf because he gave a talk called polishing Ruby which is the title of my blog since 2005 and some people apparently took it seriously wasn't serious it was staged so anyways as I usually do so the expectations this is sort of a history talk and that's not really something I'm into it has very little code it's an ideas slash survey talk and it's basically about the things that I'm really enthusiastic about that's outside of Ruby that I think we should steal but first a quick little story I was a teetotaler for about 20 years I stopped drinking before it was actually legal for me to start yay college until Madison Ruby of 2012 where whiskey Craig and cheese lady Jeannie Carpenter gave a whiskey and cheese pairing that was sublime and I decided why am I not drinking I could drink the expensive stuff and it'll moderate me anyways and it'll work out so thanks for ruining my liver and on my current diet my liver ain't got time to filter alcohol currently has about a 5x multiplier for me so I'm a little toasty thanks Josh for the scotch so please bear with me when I start this slur if I'm not already so getting started about 900 years ago don't know really know when Bernardo blah blah said we meaning the moderns at the time are like dwarves perched on the shoulders of giants the ancients and thus we are able to see more and farther than the latter but and this is not at all because of our acuteness of our sight or a stature of our body but because we are carried a loft and elevated that's a weird font by the magnitude of the Giants and then this but had showed up about 500 years later and said if I'd seen further it is by standing on each shoulders of giants that is the correct spelling for the time deal with it so Zach we all stole the title but in other words this is not a new concept at all Newton was just iterating on a simple idea that every idea we've ever had builds upon the ideas before them but that really begs the question that when we created a language why do we build it anew more often than not but what does this have to do with Ruby well everything otherwise this talk would have been rejected so while it's probably unnecessary I'm gonna give a quick summary of Ruby for the sake of comparison later on so here's a Ruby's features is created by matz 1993 it's an interpreted file-based scripting system purely object-oriented class based runtime incredibly complex syntax and semantics which is why we love it some of us and it's got an extensive fairly extensive class library numeric tower etc and really it's designed and optimized for developer happiness which is really why we love it and just as a quick basic example of Ruby for comparison later on here's Fibonacci it's a simple recursive version Fib optimized entirely for line count not for readability so here's Ruby's history and it's actually pre-readable if not fuzzy and as you can see there were four years between 1819 which I consider the golden era and five more between 19 and 20 and basically you know what was going on there I don't I don't really know but that's what it was but the reality is that Ruby 1.0 shipped with almost everything used today as far as language features go not as far as the class library goes not much has been added since 1.0 we've had private and protected scoping was added in almost immediately after 1.0 class variables in 1.6 which was about I don't know four weeks after I started Ruby in 2000 and we had encodings version 1.0 and 1.9 which I refused to acknowledge existed and then it was fixed in 2.0 and actually works well and then frilly syntactic sugar was added in 1.9.2.0.2.1.2.2 Ruby is a fantastic language I love it don't get me wrong but it could be better in my opinion it's simply just not done yet at least I hope it isn't and it's done a terrific job of taking ideas from languages like small talk lisp and to an extent Pearl but this is what I want sometime in the future I want more lisp and small talk hence the thicker lines and I want new stuff from self and a system called cola which probably no one's heard of and I wouldn't mind de-emphasizing Pearl a little bit more so here are here are giants we have small talk by Ellen Kay self by David Unger scheme and racket by Guy Steele Gerald Sussman and Mattias Filiacin and funk slash cola slash a lot of acronyms again from Ellen Kay and many more I by no means imply that any of these people worked alone they all had teams and they worked with a ton of people I'm sure but they are the figurehead so to speak of those projects and that's why I represent them primarily so let's start shall we let's do basic introductions first first up a small talk it's one of the my first languages that I actually loved and I cut my oot on it a not so brief summary to compare and contrast in this case small talks pretty similar to Ruby as for the runtime goes or I should say Ruby's actually pretty similar to small talk but totally different nearly other every other aspect it's by Ellen Kay and Dan Ingalls at Xerox Park it was created initially in 1972 publicly released in 1980 it is bytecode compiled but it's an image based system not file it is purely object oriented class-based runtime which is exactly the same as Ruby it's incredibly simple and clean syntax and semantics you only have six keywords and it only has four precedence levels which is vastly different than what Ruby does it's got a fairly fully immersive development environment it is an incubator for ideas a lot they came from small talk including a lot of object orientation patterns the entire pattern system started from small talk MVC etc and it was way ahead of its time back then and it still is many ways here is an implementation of Fibonacci and small talk I've grayed out the pseudo syntax that really exists when you export small talk to files since small talk is image-based you don't normally see that stuff you only do that when you export it for the sake of schlepping it somewhere else otherwise it's pretty readable to us Rubyists you have the method signature the carrot means return in small talk so you have self less than two if that's true evaluate the self if false evaluate to self minus one Fib plus self minus two Fib nothing nothing interesting there next up is self which most of you probably never heard of is anyone heard of self lingua files yay so brief summary of self it's by David Unger and Randall Smith it was started at Xerox park as almost everything was back in the day but it was finished its son in 1987 the next year its bytecode compiled JIT based plus a JIT image based file system sorry image based system there is no files other than the image itself purely object-oriented but it's classless aka prototypes runtime and it's incredibly simple slash clean syntax and semantics much like small talks actually almost exactly like small talks and the thing that just blows my mind is that the VM itself only has eight bytecodes eight if you compare that to Ruby I have no idea how many rubies has we have a lot more than that and most languages do the book on the JVM is inch and a quarter thick and it's nothing but the instructions in the description of the architecture it is a fully inverse immersive development environment much like small talks we'll see differences in that later and it's also an incubator for ideas prototyping really came from self java hotspot was born here a lot of things were born here and it's kind of a shame that not more people have played with it so looking at some code the one thing of note here is that less than or equals to in self they really mean it when they say that self is optional so there's an implicit self on the left-hand side of that less than or equal to otherwise it's almost exactly the same as the small talk code except they use predecessor and that the self is also implied in the minus two as well which is bonkers but it's it's kind of neat that they want that direction okay my current non ruby love is racket which is a type of scheme and I'll be doing a quick summary of both those things so that you kind of get kind of an idea of where we're coming from so scheme was by Gerald Sussman and Guy Steele it was started in 1975 and the work on it went through the mid-80s I believe it's a minimal variant of a lexically scoped lisp which fixes a lot of the semantic problems that we have with the older lists and with common list today lisp is a functional language based on lists as the main data structure and it's innovation galore here these guys came up with tail call optimization the transparent numeric tower that we have in ruby today hygienic macros first class continuations and a lot lot more it could be an entire talk on its own in comparison racket is a maximal scheme it's by Mattis Filiacin and the PLT cohort it's a maximal variant of scheme it has a huge incredibly diverse library with lots of like graphic tools and all sorts of other stuff it's fantastic to plan it's bytecode compiled has a jit and is a file based system it is mostly functional and has a multi-language runtime which is vastly different than everything else I'm talking about it's got a very simple syntax like all lists and semantics with rich expressions like extensive macro system and structural matching and it ships with both an editor as well as a run time and here like lisp there's a lot more parentheses than there are in other languages it's a prefix notation some math operators go before the numbers involved otherwise this really isn't that mystifying it reads just like anything else and finally there's cola or what I refer to as a beautiful tiny tiny kernel and in the theme of this talk this comes back around to allen-k building upon the shoulders of giants brief summary of vpr i viewpoints research institute is allen-k's think tank they got a five year grant from the nsf to work on what's called funk which is foundations of new computing and their main project is called steps which is steps towards expressive programming systems which they want essentially to do a whole system from soup to nuts that's understood in one brain we haven't had that our entire lives the entire system from language to gooey apps that actually like allow you to produce real things in approximately 20,000 lines of code no OS no no nothing else no nothing just that 20,000 lines of code so a brief summary of cola it's main subproject or one of the subprime many subprojects of vpr i which is the carnation of the underlying runtime it's an odd statement but this is because vpr i is a rapidly moving target and every time I think I get an understanding of what they're working on they come out with another paper that says no we've moved six miles over this way and it's it's kind of hard but it's a machine compiled file-based system object oriented prototype based runtime it's small talk like but lisp like at the same time it's incredibly simple and clean syntax and semantics there's a pattern there that I really like that which is a wonder why I code and Ruby but I love both things and it's something I have to deal with and cola stands for combined object lambda architecture which I'll explain later and it's basically that system is a system designed to be the simplest possible language that can be described in itself and if you look at the implementation it is about as simple as it can get so the implementation fib can be both lispy and small talky though I think that that features either removed or de-emphasized in later incarnations of it but in this version of cola that I'm coming off of you declare that there's a method called fib on integer and whether you use the curly brackets you go lispy whether you use the square brackets you go small talky and otherwise the code is exactly the same as the other examples we looked at so those are the four systems I want to go into now it is time to plunder yeah as I said before small talk is where I cut my teeth my first year of college I was trying like mad to figure out what this object orientation stuff was about I tried with object Pascal and a whole bunch of other systems this is well before I really so prevalent as it is now and there weren't nearly as many resources and it wasn't until I came across a pure system that you were completely immersed in that I that I didn't that I finally understood what it was about so back on the day lnk and his entire cohort left xerox park because xerox park was notorious for coming up with really neat ideas of not knowing how to sell them and they went to apple to work on squeak small talk which is an open source project that you can download and play with today don't do it on this network they decided they really dislike coding and see which is what the implementation was written in at the time so they rewrote squeak in small talk and what they wound up doing was finding a statically compilable subset of small talk writing the entire runtime in that and writing a subset to see translator written in small talk as well and being able to use that to boot strap another version that you can then compile in link and then fire back up and be in a new incarnation of small talk all together and what that does is it lowers the bar increasing the contributor base because you've now dropped it down to one language that everyone can understand and is actually much higher level than C ever is and you get a lot more feedback and a lot more contribution from it the speed of releases and the speed of commits went up drastically once the system got up and running and of course you know they have their bumps and everything when they started off with the first version I'm sure they had tons of debugging code in there and it was slow as dirt and everything else but you do iterations and you increase those iterations and you increase the speed of those iterations and it smooths out quickly enough small talk has a huge class library right here is a quick little list or partially list because there's actually I couldn't fit it all there are 66 collection classes we have array and hash and if you require it we have set and we might have some other stuff but you know call it to we have they have 66 and you can basically pick and choose what sorts of optimizations you want and what type of storage you want etc they have 32 magnitude classes which is the one that does fit and it's basically anything number like at all is underneath the magnitude hierarchy our core and standard live aren't even close our core lives we have outside of the error no namespace we have 93 classes so basically just between their data structures and their numbers they already out mass what we have in Ruby but more than probably anything else small talk has language supported developer tooling that massively increases productivity like nothing I've ever worked with since small talk was one of the first GUI systems following the xerox star both of them born at xerox park here we see a workspace in pharaoh small talk which is related to squeak small talk it's a fork and we have a workspace which is kind of like a repel a class browser and a test runner all on screen the in-memory class browser this is your normal editing environment when you're actually writing code it's per method so the source code down in the bottom left is a single methods worth the source code and you use the selectors across the top to go through the categories on the left then the classes in those categories then the method categories on the third pane and then finally the methods in those method categories and it allows for a huge amount of organization and allows you to actually hone in on what you want much quicker than having to grab through a file or use tags or anything else it has a built-in debugger with resumable after modification contexts so one of the things that really differs in small talk is that failed unit tests bring up the debugger automatically and what they do they call debugger driven development rather than test driven development they write a test that fails the debugger comes up and in the debugger they implement the passing solution and they click resume and it goes green what that does is it just tightens the feedback loop absolutely and development just screams as a result they have introspection facilities like senders and implementers browser that lets you look across all your code for a single message and here we're looking at the to buy method and you can see that it's implemented in both date and time and number and you might use that when you're starting to refactor and you want to see all the different ways that a method is used or you need to see all the people that are implementing something or calling it and there's a lot more the first refactoring browser ever made was made in small talk every time I get an argument with someone who say that you need static typing in order to have all the information you need to do code analysis and that type of thing I just point to the refactoring browser in small talk and say no there are linting tools that go way beyond syntax checking and way beyond you know basic style issues they go into this is not as fast as if you use this method this is potentially buggy in these scopes so on and so forth and I ran it across their own class libraries and it started to point out problems which was amazing I really like that and there are a ton of dev tools in small talk about just the dev tooling in small talk and I can't do that so one of the things that I think is kind of painful and ruby is that there's all these little road bumps along the way as you code the equivalent to our inspect message in small talk is actually useful from the ground up small talk has a culture where the equivalent of the output of inspect is runnable and so if you asked for a darker version of the light red color you'll get that output if you say print this out and that code is runnable as is and you'll get another version of the same output or another version of the same instance whereas in ruby when you ask for the inspect of color.new with the exact same values you get this thing with hash, angle bracket, class name for some reason the address which is much less useful now that we're all on 64 bit machines and then the iVars and because it starts with a hash that's basically a comment and even if you took that out it's not runnable it's just not useful information at all and if we had started ruby from the beginning where inspect since it's meant for developers anyways output something that we could run then you can do a lot more with that so self is different it's a very different system it's a strange system and it's a system that I don't entirely understand but there's more focus on its run time than the language itself it is a direct descendant of small talks so in that sense the language isn't much different this was the birthplace of jit David Unger his PhD was under the David Patterson the architecture guy and his PhD thesis was titled the design and evaluation of a high performance small talk system his later publication called SOAR small talk on a risk is the best book on objective optimization I have ever read Barn none the man uses numbers for everything and it's impressive and as a result they made a small talk system that ran on a risk CPU custom risk CPU back in the mid 80s which is just unheard of this is the reason why javascript and java are fast he was finished self at sun java came from sun do the math basically jitting using monomorphic and polymorphic inline caching means that dynamic languages really can be fast self is also the place where prototyping was really if not born then popularized some agent systems did show up in the mid 70s but I don't know if they connected the dots necessarily between the two basically class to SOO where prototyping started itself as far as I'm concerned this influenced javascript and languages like IO heavily and prototyping is really handy since 1.9 and I just learned this on the airplane down we have been able to add methods to an instance of one class from a completely different unrelated class but you still have to write some rather ugly code to be able to do it at all and it still doesn't really work as you can tell on the last line it doesn't make sense basically self is wrong in the context of those methods and self has in much the same way as small talk but much not a lot of developer tools a big portion of the system is developer tools that again we lack like small talk self has a GUI right out of the box it is a lot more spartan than small talks GUI but with an emphasis on the objects themselves and in this case wow that's fuzzy where's it my eyes I'm kind of drunk so in this case you're actually you're sitting on this giant infinite canvas and you're actually walking through a tutorial that's telling you how to do self itself and the like the next step previous step buttons at the bottom will move you to a different part of a canvas with more of the tutorial it's really cool all objects are tangible GUI elements making them easier to inspect interact with and manipulate and as you can see on the left I have an instance of a slots object with a bunch of methods or slots and then that box at the bottom is kind of a repl for that instance self will evaluate to that object so you can interact with it directly and manipulate it directly and it's really really handy the standard tools let you get into and manipulate objects directly here we can see that we can add more slots or add a category of slots we can copy slots or move them around push them up or down with its parents or its children and do a bunch of things that we actually don't do very much because we are class based and of course there's a built-in debugger with a reasonable context that lets you easily experiment with the code live one of the things you'll do is you'll write some code in the evaluation box in this case I'm explicitly calling halt to bring up the debugger but you'll write something that doesn't work it'll say the method doesn't exist or whatever and then in the debugger you'll implement it make it pass and move on okay so as I said before racket is my current non-ruby love I am polylingual amorous racket is incredibly polished very responsive development team and just plain fun to code in it really truly is it ships with extensive documentation both in the reference side where we got functions being declared here and in a newbie friendly guide as well with hundreds of pages of stuff and honestly as much as we've put a ton of effort into improving the core library and standard library documentation rackets.co puts rubies.co and our doc to shame the system is just night and day different racket ships with an IDE oriented on beginners it was originally intended to be for teaching high schoolers and I'm running out of time how to code but it's perfectly usable for advanced devs there's a repul integrated on the right and you can split other direction and it can even display generated images as we can see with the Sipransky triangle here the documentation is integrated so you can quickly look up any function that you're using simply by selecting it and when something goes wrong you can see exactly where it is and where you came from that kills me racket has a family of functions all related to the to the name match which provide better structural decomposition than what we have with rubies splat operator or the array destructuring assignment that we normally use it's of limited use to us it really truly is because it only works with arrays or array like things meaning that they implement too airy it doesn't work with objects and we work with a lot more than array or array like things so we need to have more and the thing that kills me about racket is that that first line and all source files pound lang declares what language you're actually coding in racket supports a meta language system that allows new languages to thrive and it is absolutely perfect for our DSLs and the way that we like to write our code in this case we're looking at the manual variant of their documentation language Scribble and what this actually does is it runs this just like its code even though it looks like it's just pros to us or pros with some markup and generates a list that winds up executing itself and will output itself to either PDF or HTML or whatever else the the back end does so object orientation is good for organization it's good for scoping it's good for data hiding but at the end of the day lambda is king as a quick comparison doing the fibonacci code as above with fib 30, 31, and 32 you can tell that the runtime differences are night and day and some of that speed is attributed to how scheme runs versus how Ruby runs that's that's fine we're a much more dynamic language in that sense but it doesn't account for this level of difference they're 17 times faster than us and we need to speed up our method calls by at least four to eight x to compete on more than the python and pearl playing field which we're currently competing on and finally tail call optimization not to be confused with tail call recursion which is a subset is a seriously useful thing and can help us speed up Ruby quite a bit we do have it optionally but it's not on by default and I don't know how actually usable it is because it's not on by default it does make things like debugging harder so when you get an error in scheme you're not exactly sure where you're coming from unless you're in the IDE which will draw the arrows for you but there are pragmatic solutions to this so that's that's a technological argument that's bullshit so getting to cola I have two more minutes you stand back I don't know if I can do this in two more minutes this starts to get really hard for me and maybe I bit off more than I can chew but I love what these guys are doing so much that I just couldn't say no to this section steps vision of computing is massively powerful but it's also massively hard to explain especially since VPRI is rapidly moving target and they come out with a new paper and I'm just like but you said you were doing X and now you're doing Y they want to make an entire computing system up to productivity GUI apps in 20,000 lines of code and here is I believe the presentation view of their system they also have desktop publishing and email and web browsing in 20,000 lines of code so to put that in perspective Debian's 283 million lines of code iOS 10 is 86 million lines of code you know go down to free ASD which is a much simpler system it's 9 million lines of code Ruby's 1.2 million lines of code it doesn't do half of what steps does and they're doing it in 20,000 lines of code or 160th the amount that we're doing it in and part of that's just because they took an entirely different approach to it COLA the combined lambda object wow object lambda architecture yeah scotch is their combined object lambda architecture it's usually defined their entire runtime the concept is really simple use objects for storage and organization and use lambdas for execution for doing all the stuff and that makes sense right the code needs to go somewhere it goes in objects and the objects need to do things that's the lambdas and that makes a perfect dependency loop but bootstrapping that dependency loop is another issue entirely so this is the simple version of the object graph looks something like this this is absolutely minimal so if any of it is implemented incorrectly I'm going to pause the red go away if anything's wrong the whole thing's broken and you get to guess at it because you can't really debug it because it's just fucking broken ometta is their grammar engine it can parse both text and object syntaxes like asts and by having many layers of translation allows you to have thinner simpler layers this more than anything is probably their biggest multiplier on code size and this is several of their languages and how it translates down to the cpu the actual languages involved are immaterial to our talk the fact that they're translating through multiple layers through multiple languages is the key and they don't have to translate to other pieces of source they could translate to asts and then you write a grammar for the ast to do transformations against that to output a different ast so another thing you do is to define your systems using basic axioms but what the fuck does that mean that's vague as hell right it means that you teach your GUI geometry and give it a rule engine and have it figured out itself instead of implementing every combo of everything possible like you would if you were using GTK in their 650,000 lines of code these guys implemented it in about 250 so in your runtime between using grammars and transformers sticking to systems of axioms and a rule engine it makes your runtime much smaller much more understandable much more maintainable it lets it stick into one head in that sense it's something we need to seriously consider and I know that this section was very hand-wavy it really is it's really hard to illustrate as compared to the other ones where I can just show some code if you want to unhandwave it if that's a word please go read the papers that they've published here they're absolute gold so in conclusion in a couple minutes late I've surveyed a minority of ideas blah blah blah Ruby's really at it the best borrowing great ideas from other languages but it has fallen behind it's lost its way and it's time for Ruby to step up and do more with these ideas and keep pushing forward to stand upon the shoulders of giants thank you that is the end of our first day Ruby on Aels 2015 I want another quick round of applause for the organizers who brought us all here they did a really good job so again if you were a speaker we need to see you on stage here after this event for secret reasons there is a Appy Hour sponsored by App Tentive I got it right that time I feel like I owe them a little plug they actually write that ratings pop up kind of stuff that happens in your apps or like if you want to have a two-way message conversation with someone who's using one of your mobile applications when something goes wrong they can provide a service that does that which I think is kind of magic actually I would very much like to talk to some of the developers of the apps on my phone so again we have until eight o'clock where people are just kind of breaking off into groups and going to dinner at 8 p.m. we're all going to meet up over at the Astro we're going to have a few drinks and talk and tomorrow morning need to be back here at 9.45 where opening remarks first talk starts at 10 o'clock if you still need registration for some reason they're going to be here from 9 o'clock right here this is a great game I'm going to go blind it's funny because my cornea burned okay does anyone have any questions comments or concerns no any other announcements I missed organizers I'm looking for you we're good thank you very much I'll see you guys later tonight