 Video equipment rental costs paid for by peep-cood screencasts What have been your favorite session so far this this weekend Which ones And what was that session hidden gems excellent. What was the best job? Excellent, what were some of the things that blew your mind? Anything that really stretched you yet? I remember the first couple of ruby conferences and there was always something that so last year Do you guys remember the talk about how to hack any system with a with a ruby exploits? That was a bizarre talk, you know, okay, I felt like I had to take a shower after that one, right? So I'm gonna do is he's still alive I don't know Hack to CIA site or something, right? I'm gonna spend some time today Talking from a different perspective I haven't been on the speaker circuit for about two years Instead, I've been spending some time writing for a company that builds nonprofit software So the idea is that we take an important social problem and we try to find a way to make money solving it So last year we worked on a system called changing the present the idea is that there's Six billion dollars or so that we spend on gifts and a lot of them are bad gifts, right? Like I heard somebody coming back from job one. He said gosh I got another backpack because you can only give your dog one, right and So I'm sure that those things are stacking up and you know We can only have so many ballpoint pens or fuzzy slippers and the idea behind changing the present is that you can say Give your wife a donation gift so an hour of a cancer researchers time or something like that So we send sent a web service request to a just-in-time printer and printed give a card And you give a donation to Habitat for for humanity or any nonprofit that's important to use that was last year This year we're working on teachers the typical teacher will come out of pocket for somewhere between two and four thousand dollars per year for Supplies that her budget doesn't cover so um, so this application will let you build like a wish list from a bunch of vendors on the web and We'll take a chunk of the affiliate fee to actually maintain the servers so that So that teachers can ask parents and other people in the community to give right so This has taken a lot of time and I haven't been spending as much time doing the writing and speaking kinds of things But I thought that maybe today. I could give you a little bit of a different perspective a perspective of a ruby user because I'm really nothing but a user right now and Along the way, we'll try to give away a couple of My most recent book and Dave's going to help me pick one of the best Questions that you guys come up with throughout the talk to kind of keep it interactive and I'll pick another one So we'll give a couple of these away, but I'm also working on a revision of rails up and running I'm I did another book with with Dave's company the pragmatic press from Java to Ruby a couple years back So um, but recently I've just been spending my time coding so what I'd like to do today is talk about a number of themes of the talk and Sort of the underlying the undercurrents of the talk if you will and Then we'll spend some time on some some frameworks that are I don't know that that have some conventional wisdom and Maybe I'll take you against the grain in some ways keeping in mind some of those some of those themes and Then we'll talk about some quick hitters Just some one word thoughts that That can can tell you what I'm thinking And what Ruby is doing for me So the first question I'd like you to be thinking About is how do you see yourself? What do you aspire to be? I? Often start a lot of these conferences Or signed up with a bio Even on my books that says I'm a I'm a kayaker a mountain biker and a father of two right Those are the things that they kind of stamp Who are the way that I see myself my ego of my identity and I think a lot of this can identify with the idea of us being you know Mavericks if you will of us being a little bit different aggressive the idea of I Don't know taking the industry in places where most people are kind of afraid to go and There's an element of Interest an element of fun how many people picked up Ruby in the first place because it was just a lot more fun than what you used before Yeah, that's a whole lot like what I feel on the kayak the other thing that I like is that I Am the captain of my own ship. I can point that thing wherever I want it to go And whether it's it's a it's a bad decision or a good one. I can be right or die trying right Now I think a lot of this are like that But when you get a whole lot of mavericks You kind of get this this weird This this weird vibe, right? So a whole lot of independence that found the same thing and you have a whole lot of these loners together in a community They can turn into something else Right What is that thing? Anybody know That's a lemon So what happens when a bunch of mavericks get together and Maybe one builds this great round peg And a bunch of us come follow along behind with these great square holes and we try to cram them together Right what happens when the opinions underneath opinionated software? suck Right What do we do? What do we aspire to be are we the mavericks or are we the Olympics in some ways? They're one in the same. There's this necessary tension between the energy that you get when you try new and different things and Going along with the crowd right So I love this this description in Wikipedia. It's kind of paraphrase But the idea is that that lemmings aren't really stupid It's just that when that that they will produce a lot and when there's an urge to migrate Basically for the species they can find themselves in some scary places like on the edge of a cliff Overlook look in the ocean and when the urge to migrate gets strong enough they jump and I love this this description they jump off the cliff and start swimming Sometimes to exhaustion and death That's pretty interesting right and so the undercurrent between The lemming and the maverick who do we aspire to be? The second question that I have is What motivates you is it beauty? in fact a whole lot of people at this conference are The people who lent beauty to our everyday lives and code right This this evening. I hope to get to meet Matt's Who who made this this language with with a foresight that we can actually build a language with a language that can look Any way that we want to now talk a little bit later about the idea that our coach should tell a story And when the code loses the story, it's dead What motivates you is it beauty is it the inherent simplicity or is it something else? You know money is not a bad motivation in fact when you're coding for a living These two slides are actually in precisely the wrong order and that's a hard thing for a maverick to hear that The idea that beauty is sometimes secondary Sometimes beauty and money are one and the same Right like the idea of Ruby on rails that the that the configuration goes away And I can see the story in the code. That's a beautiful thing Sometimes Adopting the beauty can cost me and it can cost me large Right does that make sense as anybody been in that situation the last couple of years a little bit more Then you've wanted to be in that situation for adopting Aggressive frameworks right do I adopt this cool new testing framework that lets me tell the story and Stop the business world for three months while I poured all my test code Right is the old stuff good enough? so the idea here is that is that money Should be the overwiding motivator and beauty should help you get there beauty should give you things like happy programmers that should led your code code tell the story and So that's that's the second question. What motivates you the third question is Who is the beholder? So what's this a? Dung beetle everybody in Texas knows that right if I if I flipped the limiting at the dung beetle in Norway None of them would know what this is and they wouldn't know why we Texans get into dung beetles, right? It's taking waste and it's feeding the earth It's actually an incredible thing But when you're looking at that pile of crap that thing is alternately beautiful or ugly depending on who's looking at it and We in this community don't look hard and long enough at the pile to understand what we're looking at And it cuts both ways So these are the things that I want to talk about One who do we aspire to be that tension between the maverick and the lemming and the idea that sometimes The limiting should women went out the community should went out and sometimes the maverick should went out right the second idea is what motivates you and the idea that When I'm coding for a living money should be the motor motivator and Beauty should be one of the things that helps me get there and the third question is who's the beholder? Okay I'm going to spend a little bit of time on a couple of major rails frameworks these are in Some cases framework innovations and some cases these are thought innovations that we've seen in the last year or two The first one is West and what that's what that's doing the rails The second one is testing and then there are a couple of quick-hitting things that we'll talk about along the way But let's start with rest So a show of hands how many of you have really liked the the new direction of wrestling rails How many of you really don't Okay, that's probably pretty consistent with with what we'd see The conventional wisdom is that rails rock or West rocks so lots of brass has to rock harder, right? And you know in a lot of ways I agree we get a whole lot of behavior for free All right We write very little code to get To get all of these incredible routes. I mean if I had to type Controller equal greater than something action greater than equal something One more time. I think it was going to puke right but the the restful API's let me really distill some ideas and The conventional wisdom is free and I'm here to argue that you know, maybe the first hits free Right and that there's an underlying cost Now I'm not here to tell you that rest on rails sucks, right? Especially with all those hands that went up, you know, in fact, I'm about to pull all these slides all together, right? But I am to I am here to tell you that there isn't an associated cost But first let's look at the impacts on our code This first line must be the most brilliant line of code that I've ever seen I mean instead of controller users action update ID User ID I Get an automatic. How many routes does this generate so I said seven somebody says they who me who says four? 14 Anybody can anybody name them. What's that? How many so so map resources is going to generate some named routes, right? Do you hear this do you hear this rolling conversation, right? So so that's that's a good thing that means that the code is alive But it's the eye to be holder, right? We'll talk about that in a second And it lets us to do some beautiful things like this saves us lots of typing and also builds in Some additional meaning into the typical eight HTTP verbs that weren't meaningful before right? so instead of having the The gets and post and have the post like overloaded to mean inserts and updates and deletes Well, we use all four restful HTTP verbs a get does what? This does a show does a read a put does what? and post does what and Delete does I mean we get off-champus right everybody can you know for now from the time that that little five-year-old Developers grew up. They're going to be able to say, you know, just like the ABCs, right? there's get but anyway The impacts one of the impacts is that We're now taking the single purpose controller and we're flipping that to a multiple purpose controller So that for a very tiny bit of additional code We're getting an incredible amount of functionality. So what does this do? Yeah, one controller multiple formats whatever formats I want the typical ones are HTML and XML and also JavaScript for our Ajax, right and It lets us refine our user interfaces to a standard format. These are all great things, right? But I don't so what we have Is a lot of happy restful goodness We have a standardized way of looking at of looking at models controllers We have this new concept called resources. We have a standard set of routes We have less typing and a whole lot of places right How many of you have have talked to a new Wales developer about rest So how did that conversation go? How many how many people I had a great experience with that? Yeah, yeah Well, I've had some of the same experiences Actually, I've just had to revise a book that went from the the initial version the 1.0 version of rails to the 2.1 version rails and You know, the author at the same time the Publishing company was working through their templating system and that was awful But so it was just it was a very difficult situation is Lance here so Lance How did you feel when you were trying to organize the book? Hey, right, it's that so we had that the problem is that we had to introduce so much to the user Like right off the bat, right? It's it's instead of saying, okay Well, these are the views these are the controllers. These are the models You can't go into that without teaching the user a whole lot of stuff, right? So I guess what I'm arguing is that West has a cost It has a cost and we all agree how many raised your hand when you said When I said do you like West how many raised your hand? Let's see him again We've got to agree That it's at least sometimes worth it, right? It's the eye of the beholder again, right? So, um, I think the one of the things that we're giving up and this is a place that we've got to be careful This is a place that the whole rails community Um needs to consider the different perspectives You know am I at the dung beetle or am I am I somebody else, right? I've got to consider all of the different perspectives as I introduce things especially things that are as central in the learning process as Is what the scaffolding, right? How many of you learned rails? Or how many of you use scaffolding a lot when you were learning rails? So this plays a huge role in the development of a new rails programmer Let's go back to that previous slide This is what I used to show a rails developer for a show method. This is what I show them now, right? This is what I used to show But this is what I show the new rails developer for an update now That's a lot to grab a lot of rails developers are also being introduced to Ruby for the first time so one of the cost is that I'm introducing the concept of rest, right? Put I didn't know an HTTP put existed. I thought it was just post and get Right, that's the way the rest of the world sees it until they've they've you know gone back and read the the fields rest paper and Then there's the whole idea of the code block. Yeah What's that? Oh, man, I love you Dave So unplug my Kensington unit plug in Dave's oh Oh Man, okay. Oh, I love you again Dave Okay, so um So the second thing is that we are introducing a lot of concepts to people that have learned Ruby for the first time Now code block is normally an easy an easy construct to get right? I'm just passing a block of code in It's taking an argument back out But how do you explain that in the context of response to? That's a little bit difficult right So there's a little bit of black magic that we've got to get through and again This isn't insurmountable. This is just one more thing that's in that's in the learning channel that we've got to attack What is this path magic that's going on? Right, what is this format magic that's going on? This is just a decision But it's it's a difficult it's in a difficult format for a new Ruby developer to encounter and This is this is also one of the things that's dangerous about this is that um, I Am no longer able to see the story in the code Yeah Yep. Yep, or you know The wants the WANTS. Yeah, I like that I learned with that paradigm as well But you still have to teach like the the whole paradigm But you know what that thing does and it takes a code block and the code block has a decision in it, right? It's it's there's some magic I mean, do you remember the far side cartoon where you know guys writing on a whiteboard and he says okay You know do this then do this then do this and then do this and then there's a thing that says a little black magic occurs in here Right, and right. There's a big cloud and those are the clouds that you're trying to eliminate. Yeah I'm saying that one of the things that we have to consider when we make Decisions like do we replace the old scaffolding with the new scaffolding is how approachable doesn't make Ruby, right? And I guess I'm definitely not saying that rest is bad or the rails implementation of rest is bad I'm saying that and I the beholder if we make too many decisions like this one. We're not going to be approachable anymore Right. Do you guys remember? There's a go ahead day The point you made that scaffolding is kind of like, you know the entry drop for rails is There's no understanding how you get there. Why are we even there? I think that's a problem that we'll understand. Why do we do this? Right Right, right. And so, you know, I've seen you know breaking things down with the presenter frame or presenter pattern or there are a number of ways to simplify this but We've got to pay attention to the way that the initial user Approaches rails, right? This is the feeling that I used to have right But now I take this these problems and then I stack them on top on top of other problems that are actually central to rails, right? Do you remember how we used to parse parameters? I can tell a user. Okay. This is a pattern This is where to find the pattern. It's in routes Did you encounter the pattern you scan down when you see the match? You use this pattern to map the route, right? So This would actually are you in favor sometimes of the controller action ID having to type all that stuff out being explicit Had had a definite a definite plus Depending on the beholder, right? Now the routing rules are a little bit more polluted I shouldn't say polluted because that's that's a loaded word I should say they're more complicated. They're more powerful, but with the additional power comes, you know more responsibility so that means that that Now I have to walk through the existing routes and what am I looking for a lot of the named routes and what are the named routes? We couldn't even agree on how many named routes there were Right It's pretty complicated, right? So I take a new user and and this was one of the issues that we went back and forth with When we were trying to introduce rails to a new program. It's not an easy thing And The dangerous thing is that the new paradigm breaks the old paradigm a good example HTTP my application users login If I have a map resources users that breaks, what's that going to try to do? It's going to do again. It's going to do a show on a user with the idea of login right And I don't know what the answer is I'll suggest Suggest one possibility a little bit later But I do know that this is breaking the approachability of rails and how many of you have have dealt with With somebody that's bringing an old application up to the new model How did that go? It's tough and I mean it's tough for me We've got we've got an old application that we want to leave out there and we want to Basically let it grow or die right the user base is going to grow that's our model We take a social problem. We try to solve it in a way that's going to make us money And if it doesn't live that's great if it lives then that's great too, but you know, there's there's another one of these dichotomies and that's between backward compatibility and Keep in the language fresh and new and I've been a loud proponent of breaking backward compatibility But there is an associated cost and that's one of Punch line here. I'll get you in a second So it's the eye of the beholder right this fluffy little clown Doesn't look like a fluffy little clown to a beginner Anybody ever seen that movie by the way? With the popcorn guns and the client the clowns that will just eat you It's it's pretty bizarre pretty sick So we had a question over here Had ability realm there's a cost of being back with compatible to right me if you guys ever did Java And they have to deal with daytime. They know that like, you know, when they deprecate it stays there for Whatever I'm the original I'm the original I mean I I'm always arguing to break back with compatibility I'm just saying that there's an associated cost and sometimes so so I guess the reason I'm mentioning this is that One of the questions asked at the very beginning was who do you aspire to be? And there are a lot of mavericks in this room In fact, you know, we have one of the original mavericks and Dave Thomas that basically Drug and industry kicking and proclaiming and into into a beautiful language and and Dave is better at this than most people are a lot of mavericks tend to sell hard and When we sell hard we overstate the benefits and we undersell the cost and again I'm one of the originals in that space and And you know as being a rails customer stepping back from the consulting world and being a rails customer for a little while Has changed my perspective a little bit But yeah, I completely agree with you I mean if there's a there's a question between breaking backwards compatibility and polluting the language you break backwards Compatibility and you walk and don't run right? But we're pretty aggressive in this community and I'm not sure where the line is right Okay, so the next the next thing I want to talk about is is Rest for the rest of us not not for newbies, right? There are a lot of paths that I introduced in this code First if I were to run the the typical our cup tool on this, how many paths would I have to would I have to cover really? How many tests would I have to build or how many? Http correct request what I have to make to cover everything I need to in this Really, too, right? Well to get a hundred percent coverage That's not to test everything right that's to get me to a hundred percent coverage I need to get to right. I know that if I make if I make that if I make this succeed Then it's at least going to execute the front half of this even if it's XML right Right, so that's that's the point right there's one Two three four there are five paths in here, right? So the restful resources are powerful, but they're not cheap. They're built-in costs all over the place powerful but not cheap So, you know use it when when you need it and don't use it when you don't It's kind of it's a little bit scary to me that You know that the that the typical that the typical model of Rest breaks so many of the old things that are that are actually attractive for a user. Yeah, Lance Yeah, yeah, but so much of what we see Has not just the I mean it's all it's all encapsulated right? It has the format stuff in there the math resources in there and both of those things are very problematic for users Right it just it introduces a whole a whole new learning curve very early in the process And it breaks the old model, right? So so that when I'm trying to get the mechanics of rails down I also have to get this nuance of how to can how to design a web application That's that's just crud based resources, and that's very difficult You know just one example. How do you do restful authentication? Well, we know one model One model is that to create a new Or to log in You know I call sessions slash new But what we really want is a login method on user, but rest says I can't do that. So I don't do that, right? so, you know maybe Users maybe accounts Shouldn't be a restful thing, right? Maybe that doesn't fit the paradigm Maybe that login method belongs where we want to park it in the first place So anyway Here's some here's a mapping that I often use with routes That allows a little bit more clarity if you will So I have objects for example in the nonprofit world to have nonprofits plural And that works with lists and and creates and have nonprofit singular and that works with beautiful URLs Yeah production why do you care whether? Yeah, exactly what? Yeah And I'm arguing that precisely that that's that that's what you you should do right? You should you should write your code for your business requirements. That's that's all I'm saying here It's the eye of the beholder right if I've got if I'm If I want to build I want to build a restful system the rest stuff is Going to be beautiful to me right if I have anything that I have to enable for a third-party API You know I'm all over it if I don't need it I don't use it and we ought to all think that way, but yeah, I completely agree with you okay Let's shift gears a little bit and get a little more controversial get myself in a little more trouble talk about testing and Of course that the big controversy that everybody is talking about now is pictures right? How many say fixtures are evil? Not evil It depends Right So I don't have to go after go through this part of the talk right We're starting to this is starting to be an area of dogma Much like we saw with the early adoption of the rest stuff right fixtures were evil never code that way But there are some advantages to the original development of fixtures right They're dry. They're very simple. They're very quick to understand when I've got a user I say this this YML file Maps right onto fields in the database right There's some danger can you guys in the back read this This sign says seven people have drowned here right you can't see it very well because it's with the underwater camera It's it's taken with an underwater camera because we're about to get in our Wet suits and run down this river and this guy has not read the sign yet Right so we drive all night. He stumbles out of the car leans on the sign He starts yawning the sign that he's leaning on is saying caution seven people have drowned here right? That's a pretty good metaphor for fixtures right you stumble into this thing You know you you build these fixtures and YML for relational databases and there's that word right relational and There are a whole lot of relationships intertwined in the data, and you find yourself tying test cases together That you don't want to tie together right does something up pretty well How many people have blown up bad with fixtures, and I'm definitely in that camp right? so One of the big things one of the big problems is that Data especially relational data with complicated models can tie your tests together in pretty surprising ways right and When you get to that point creating a new test is tough How many of you have worked with fixtures where? Where somebody was doing a quick and dirty job, and they verified an ad by counting all the rows in the fixture oh? Man, that's awful right because you know you get you you make one change somewhere, and then somewhere else it says Up five expected for right Yeah That's a stupid test right but One of the things I'll talk about is that If you allow a lot of fingers into a code base that kind of thing can happen pretty easily right? so One of the things that one of the breakthroughs for a lot of people when they start thinking about fixtures is that Maybe drying up the test cases is the wrong thing to do if you're trying to isolate things Which is the important thing about the test case? You want to be on an island and by definition islands are not dry right? You have to build in all of the knowledge into the test case You have to encapsulate the test case right? So there are a lot of ways to get to the island one is through the the mock objects frameworks Is Jim wire here? Probably in the other room, but But I talked about do you value beauty in code? Gosh flex mock is beautiful software. It lets you express in an English sentence How you want your dependencies to to be managed in your test cases? You can also use frameworks to create the the objects instead and get you to the island state There are a number of different frameworks or frameworks for APIs or even helper methods that you can use to create your data So the unconventional wisdom at first seems to be Don't use fixtures like ever right? Because there are some downsides But there are some downsides to the fixture less approach right? The first one is that we're increasing the setup costs for early tests and Sometimes you can absorb that and sometimes you just can't right you're also one of the things that I think is is underrated in In rails testing circles is that we are building on a framework that builds dynamic behavior Into the model objects based on the contents of the database And if you take the database out of the picture often enough Some something down the line is going to break Right. There's no mist. There's no substitute for enough tests with the databases behind you So The big question here is who is the beholder right if I have a team That's That has heavy dependencies as big database or even a complex database if they're just 50 tables But they're heavily intertwined. That's a complicated model. I'm going to look at the fixture list alternatives If I have a very large team or if I have a team where I'm not paying the developers very well So I have a lot of turnover that's going to drive me Toward the fixed sure list alternatives. This is the safe approach But if I have a small team with small simple models and they've been through They're actually experienced so they've been through the fixture pain before I feel pretty safe with a fixtures based approach I've started three projects this year two were started with fixtures One was started without and the one without is going to have more coders in the base They're going to be less experienced and the models are much much more complex and We we feel confident that we're going to build a maintainable set of test cases We feel confident that if we built it the other another way then then we'd be in trouble and the other approaches very small teams small number of tables and we do Small things to mitigate the damage that a fixture based approach could work One of them is when the when the number of fixtures grows beyond four We start to look at the design of our we start to look at that as a code smell and Often we'll be using another approach to help us isolate The next thing that we do is when we're dealing with edge cases We don't try to use fixture data We try to load a fixture and modify that fixture or we try to create a Piece of data from scratch We also use mocks often and to increase our isolation So when we've got one contained area of the system and another contained area of the system We try not to cross those boundaries in the unit test We save that for the functional integration test usually the integration test and then Don't count or don't do roll-ups on fixture data. They make your test cases brittle in dangerous, right? The other things that I don't see often in this community But but we really should see is people that use fixtures should label them really really well Probably most of you were starting to label your test cases that way. Do you guys like long test names? I really like I mean test should render update if blah blah blah blah blah You know, you know, I can use the whole length of of the of the screen on one test name. I Name the the fixture data the same way, especially if there's something that I don't want change for a particular reason Okay, so the quick answer is again, it depends. It's kind of a wishy-washy talk, right? The answer is always it depends So quick hitters I Think that we need to consider the purpose of the software that we're building that So When we built the first web application with with well-good We we thought that we would actually blast the user with features, right? You can you can buy a gift you can associate a gift card with it You can build a wish list of things that you want you can build a memorial or a wedding registry We have information from our advisors. We had news feeds from RSS We had literally 17 major features that took more than a man month or more to implement Right, that's a lot of features and then we said when a nonprofit enters new data We're going to have a state machine behind that so that we can understand we can make sure that if somebody That uploaded a pro-choice gift Somebody else couldn't or was a pro-choice nonprofit a pro-life nonprofit couldn't go grab that nonprofit up site and basically vandalize it When we built class wish we took the opposite approach this thing is about teachers building wish list and Parents and and friends making donations and that's it and everything is simple and now if we are stalled for a business reason We if if we if there are any features that we can be building on the backlog We're playing the Xbox. I mean the best the worst thing in the world is an idol programmer that making his own work right That's an expensive thing Second thing is money. We've talked about this one. We need we need more value on the economics of our decisions in the programming community We don't consider the cost the bottom-line cost to the business When we make major decisions I know that I don't enough and I need to do a better job with that I Think that stories are incredibly important in your code When your code stops talking to you when you can't see the story from just scanning the code, that's a dangerous thing Stories are also important across developers. We need to be able to say hey This didn't work. We need to be able to share our war stories and we need to make time for that to happen We need to spend time together outside of the context of development And stories are important in conferences like this one too. We need to be able to hear what works for people and what breaks We need to get different opinions out there. This is how community really thrives The last thing that I'd like to leave you with is a challenge and this is completely unrelated to the talk The challenge is three-fold. The first one is to is that is the idea that that we are Fortunate to be in a great industry and a great time in that industry with Ruby We live in a great place And and that great, you know, the great region is in a great country, you know, we're fortunate Take a programmer find a programmer that doesn't know what you know and and help them learn Whether that's a mentoring relationship whether you're writing find a way to take what you know and give it to somebody else The second piece that challenges This whole community is basically built on people giving Right on people giving away Free software and services, but it's a community. So find a way to give back to the community The third thing is probably the hardest challenge of all try to find a way to use your skills to change the world And that's all I've got to say so questions and comments Mm-hmm Right I Could be Well, you know The rest the rail software is opinionated software and a lot of the opinions are great and that's why we're sitting here, right? You know, we basically broke some some hard conventional wisdom with with the convention over configuration Everything was XML configuration until this point We said that worry another piece of conventional wisdom was that we need to be worrying about scalability when scalability matters Not right out of the gate, right? So, you know, if there are a couple of Decisions that are you know, maybe borderline, maybe maybe suboptimal Maybe they're just controversial decisions for areas that are hard to get right inclined to give a pass Framework Yeah Could be could be we had another comment over here Okay, yeah So I came in I just started I bought some books on rubies and books on rails I figure I'm gonna start learning it just so I start learning it everything switched to 2.1 None of the stuff in the books just don't work anymore, right? My book broke man, I got all kinds of hate mail Yeah, it's probably from going to the restful restful. I think it's really cool. I don't understand it I mean, I understand what restfulness is, but I don't understand behind it. What it's really doing, right? So, yeah, so as a newbie, yeah, I'm confused a second. I don't know where to start So that takes me to the second one where you have your challenges, you know and find a newbie So I'm here in the Austin area There you go You might get more health than you bargained for Yeah, Lance Okay, before we get too much further, we'll take some more questions, but um Dave was there a question that you really liked today? here That's a great question All right, Scott And there's there's you got another one was there another question that you liked Excellent So raise your hand which oh excellent Deploying rails applications What's that Okay, another question go ahead Dave loves you man. So you you pick a question that you really liked You got There you go deploying rails applications, yeah This is the way to do it, but this is where to start Yeah, it was a wonderful place to start. I got something up and running. I could play with it Now that code has remained. Yeah But it is that's not the original There's debate about that was the original And so I don't know which quote I read that said would have been put in a good way Some one-year group people thinks that it should be the example of the correct way to do things One group thinks that it's the example of how to get started and because there's a disagreement It's somewhere in the middle Especially when You know the whole world is red A lot of people like you read on the forums Oh, well, I don't understand how do I make my login has to be red and I'm not allowed I saw this a lot of time. I'm not allowed to put another method in my controller Right, right, right, right And when you do put another method in it breaks right because you have the user slash login Which is why is it trying to show a username login? Right And again, I'm not throwing stones. I'm not saying that the restful stuff is crap I'm saying that there is a cost to the rest. That's it So, um, let me take one more question and then we'll shut down and for dinner. Yeah Right Right, right, right. Yeah. Yeah. That's a that's a great question and and you know, that's a pretty unnatural design, right? It's session slash new It's like now i'm testing my friends w2f question mark question mark, right? Um, I gotta take I gotta take another question Yeah I use that plugin and I use it like every that's that's the first one I install so i'm not slamming the plugin I guess i'm slamming. Yeah, and I I grew with you that that Right, or you're trying to get to provide a consistent design across your whole application, right? And that's that's a laudable Um idea right so but but there is a cost and that's that's the whole point um, okay guys, thanks a lot so so um My question to you did did I hit the mark is was that an interesting talk top of working? Okay video equipment rental costs paid for by peep code screencasts