Coding 101 66 (Transcript)
(Net casts you love from people you trust. This is Twit! Bandwidth for Coding 101 is provided by Cachefly at cachefly.com.
This episode of Coding 101 is brought to you by Linda.com, the online learning platform with over 3,000 on demand video courses to help you strengthen your business, technology and creative skills. For a free 10 day trial visit Lynda.com/c101, that’s Lynda.com/101.
And by Digital Ocean; simple and fast Cloud hosting built for developers. Deploy an SSD could server in 55 seconds. Try it today for free. Visit digitalocean.com and once you sign up be sure to enter the promo code c101 in the billing section for a $10 credit.)
Father Robert Ballecer: On this episode of Coding 101 it’s time to jump into Rails. Welcome to Coding 101. It’s where the power of code compels you. I’m Father Robert Ballecer.
Lou Maresca: And I’m Lou Maresca.
Fr. Robert: And for the next 45 minutes to an hour or so we’re going to let you into the secrets of the Code Monkey and the Code Warrior. Now Lou last week we had a chance to speak with Carlos Souza and he gave us a fantastic introduction to Ruby but you know this; Ruby by itself is interesting but until you put it into a frame work you don’t really have a powerful language right, which is why this week we’re going to go into Rails. Have you played with Rails at all?
Lou: Yes I have. It’s actually a pretty easy going framework to get ahold of and tool set to get ahold of and again it gets you really quick up and running and so I’ve played with it a little bit to kind of get going and to understand where everything is going.
Fr. Robert: That’s been my experience with Ruby and with Rails which is it’s an easy language to learn and then when you start doing all the hooks you start going “oh wow; why doesn’t every language do it like this?” Why isn’t every framework like this? Now we’re going to get into that but as is our custom before we do that we’ve got to cover a little bit about the news. Now Lou, you’ve got a little something here about coder to programmer. Now we’ve talked about this paradox before. We’re not trying to put anyone down but there’s clearly a difference between people who’ve just learned to regurgitate code or maybe offer up a couple of insightful uses of different logic trees and then the programmer. The programmer is the person who has that skill, desire and passion to keep finding out new ways to solve a problem. What does that mean exactly though?
Lou: This was a really great article and I thought I’d bring it up. It’s from the Fire Hose project which is actually a Ruby project. But what they’re doing is they’re trying to teach people how to become programmers. Not just become coders. Coders are just people who learn how to do the language, they need a lot of tutorials, and they need to kind of have a lot of people walk them through stuff. This whole idea is how do they become… they talk about what they call the inflection point and that’s the point where you realize, oh I’m now a programmer.
Fr. Robert: Actually I could see that because it’s very easy when you’re just doing a boot camp. Because let’s be honest boot camps are kind of the rage. That’s how you learn rather than sitting down or going to a traditional schooling method like a university or a college or even a trade school. You want to get 8 weeks of just intense immersive programming. That’s the thing. But even in those programs there has to be at some point where you realize that you’ve got enough of the knowledge, you’ve got a critical mass of knowledge about a particular language where you realize oh I can start taking this off on my own. I no longer have to follow the examples that are given to me. I can figure out another way to do xyz.
Lou: They kind of break it up in 2 points. They say there’s what they call a tutorial phase which they say is about 3-8 weeks and they talk about how you start to recognize patterns at that point but they’re still kind of walking you through things. But then there’s a 2nd point which is called the inflection point and that’s the point where you all of a sudden just realize there is a bigger world out there – let me start moving beyond that and doing my own thing. There’s something very similar to that, there’s a guy by the name of Dave Thomas and you know him as the Wendy’s Guy…he doesn’t make burgers. But this guy he actually wrote a book called the Pragmatic Programmer and he also does a lot of talks externally. He talks about this model called the Dreyfuss model of understanding and that model has I think 5 different layers if I remember correctly and it talks about how you start out as a novice and you still need people to tell you want to do. You really can only do 30 minutes worth of work and then you start to move into what they call the advanced beginner mode and that mode is where you start to kind of really understand things but you still need kind of hand-holding. But then you get into the point, level 3 where you’re confident. Now you’ve realized there’s a bigger world out there. It’s kind of like a 2 year old when they begin to walk. They start running around the house thinking they own the world but then it’s to the point where they get to the front door and they open the front door and they realize wow; this world is a lot bigger than I experienced. That’s the level 4 – the proficient. At that point you almost feel like you take a step backwards because you realize wow this is a much bigger world that I’ve experienced, I need to learn a lot more, and mentally take that step out.
Fr. Robert: That’s natural to learning and that’s what happens in any programming language where you realize you’re not just looking for that solution that you have stored in your memory of oh I know this pattern, this is the solution. But you realize here’s a pattern, I wonder how I could solve this. I think you’re absolutely right, that’s that differentiation between the coder and the programmer. The coder is just going to keep regurgitating the same sad solution whereas the programmer is going to say there might be a more efficient way to do this. Let’s talk a little bit about that pattern recognition because that’s not the 1st time I’ve heard about it and we actually haven’t talked about it much on Coding 101. It’s something that every programmer and coder needs to have which is, when I look through the logic tree of what I want to have and what my inputs are, what are my goals, my outputs and what happens in between I need to start recognizing certain patterns. And those patterns will determine what algorithmic solutions I use. When you’re programming what are the patterns that you most often see?
Lou: It’s all dependent on the data that you’re using. So like for instance the pattern that I like following for instance if I’m throwing lots of customer data around maybe understanding their geo location or something like that, I need to understand the data before I start to understand the pattern. So that’s a bit one to follow. Another thing is understanding the system that you’re using because a lot of software out there… there’s 3rd party software, there’s systems and services that you use so you need to understand how those services are being used so that you can understand how you can regurgitate that service and be able to understand how to use it. So those are a few things I like to follow.
Fr. Robert: Now speaking of patterns we had a chance to once again speak with our Code Warrior Mr. Carlos Souza and he’s taking us into the Rails framework now which is perfect because in order to use a framework properly you really do need to recognize those patterns. We’ll be jumping over to Carlos Souza in just a second but before we do that let’s go ahead and thank the 1st sponsor of this episode of Coding 101.
Of course the 1st sponsor of this episode of Coding 101 has to be Lynda. Now what is Lynda.com? Lynda.com is the online repository for knowledge. For all knowledge. If you are a developer or someone trying to learn new business skills or maybe you just want to pick up a hobby Lynda.com is the place to go online when you need to pour knowledge into your knowledge hole. Now Lynda.com for us has been a place for problem solvers, for the curious, for people who want to make things happen. Maybe you want to talk better photos, design a responsive website, master Photo Shop or sharpen your Excel skills. Lynda.com has everything you need to feed your curious mind. Lynda.com is a series of courses that I recommend in particular; it’s called “The Foundations of Programming”. We talked about this on Coding 101, if you don’t have the foundations, if you don’t understand what’s actually going on then what are you doing? Now there are installments covering fundamentals, working with data bases, data structures, design patterns, code efficiency and more. There’s even a fundamentals on programming for kids. Regardless of your experience level you’re going to want to check out the series. Lynda.com also has the essential training series which covers different programming languages like PHP, and J query as well as developing for specific platforms like Android and iOS. Now we here at the brick house have been using Lynda.com for our transition from Apple with Final Cut Pro to Windows PC with Adobe Premier Pro. Lynda.com is perfect for that kind of knowledge because they’ve got searchable transcripts, they’ve got excellent videos. Because you can go straight to the answer rather than messing around with video after video after video. Now with Lynda.com you can watch and learn from top experts who are passionate about teaching and they’re the top in their fields. You can search thousands of video courses on demand and most importantly learn on your own schedule. That means that you learn at your own pace, at your own desire. Courses are structured so that you can watch them from start to finish or consume them in bite size pieces. Now you can take notes as you go and refer to them later and you can download tutorials and watch them on the go; including access on your iOS or Android device. They let you create and save play lists of courses that you want to watch so you can queue up your learning. Lynda.com really has something for everyone. Speaking of something for everyone your Lynda.com membership gives you unlimited access to training on hundreds of topics all for 1 flat rate. Whether you’re looking to become an expert, you’re passionate about a hobby or you just want to learn something new (I know you do because you’re watching Coding 101) I want you to visit Lynda.com/c101 and sign up for your free 10 day trial. That’s Lynda.com/c101 and we thank Lynda.com for their support of Coding 101.
Thank you Lou and Padre. I’m here on the sky desk and I got a chance to speak with our Ruby and Rails guru Carlos Souza from Code School. Carlos thank you very much for coming back.
Carlos Souza: Thank you very much for having me Padre. It’s a pleasure to be here.
Fr. Robert: Carlos last week you dropped the knowledge on the Coding 101 army about Ruby and you showed us why it is a language that is more concerned with how programmers program rather than with how computers take that code and turn it into something that they can understand. Now we saw some very interesting features from Ruby but now we’re moving beyond Ruby. You want us to move into Rails. Why is that? Rails is a framework but why can’t we just stay with Ruby?
Carlos: Rails is a web framework that takes Ruby to a whole other level. It’s built on top of Ruby and the same productivity that it gives Ruby programmers it gives web programmers. So we can program now for the web with the huge productivity.
Fr. Robert: I got it. So of course Ruby is a language. Ruby is a very interesting language but Rails allows us to take that and push it server side.
Carlos: Exactly. It allows us to build full stack web applications.
Fr. Robert: Alright. If I’m a complete newbie here and I just started getting my feet wet in Ruby and now I’m moving into Rails where do I start?
Carlos: The first place to start would be the Rails website itself. So RubyonRails.org is an excellent website that you can go and check out a bunch of resources and there’s links to screencast presentations, book and a bunch of other stuff and then towards the end of the episode we’re going to talk about a couple of different places where you can go to try out Rails in the browser. So that is my recommendation to try and see what Rails is all about.
Fr. Robert: What kind of complexity are they looking at here? Let’s say that they followed your homework from last week and they have a decent working knowledge of how Ruby works. How much more complicated is it going to get to install Rails and get that up and running?
Carlos: Installing Rails really depends on what type of machine you’re using. Windows tends to be a little bit more complicated than on Mac and Linux machines but it is not super hard.
Fr. Robert: Alright. Now once they’ve got that installed and we may have to do a knowhow on how to get that up and running. Just because I know there are going to be some who are going to want it step by step. What’s the 1st part of programming that they’re going to want to get into?
Carlos: The 1st part of programming in Rails is I want to say just start your Rails application. So this is what’s cool about Rails, it give you a bunch of commands to create stuff for you. Because Rails tries to combine, it tries to group all of the best practices in conventions that are used across the majority of web applications. So it gets your outdoor giving your 80% of what all the web applications need. So all you really have to worry about is the 20% if that makes sense.
Fr. Robert: Yes it does. Ok so I’ve started it up and if I want to create my 1st application how would I do this?
Carlos: Let’s do it right now.
Fr. Robert: Alright.
Carlos: Ok so I’m here on my terminal and I have Ruby installed and I’m using version 2.2.1 which is the most recent version as of this recording. I already have Rails installed and I’m using Rails 4.2.1 which is also the most recent version as of this recording. Now I don’t have any files at all and I’m going to tell Rails that I’m going to create a new application. So let me clear this up. Alright cool. So Rails has a command line which is the Rails command and it gives us a couple of hints of where to proceed. So if you just type Rails new it’s going to say hey you need an argument for new. So the argument is going to be the name of the project which is also going to be the name of the folder that it will create for us. So let’s create a project called Reading List. When we do Rails new reading list it’s going to create a bunch of files, a bunch of folders inside of that new reading list folder that it just created. So now if we do a list of the list of files we can see that there’s a reading list folder. Let’s jump into that folder and… let me make this a little bit smaller…and you can see there’s all these files that Rails automatically created for us. Before we jump into them I’m going to go ahead and just run our Rails server. So each Rails application comes with its own standalone Rails server. That’s what I’m going to run now and to do that we run Rails server or just a short cut Rails s. So we run that. Our server started and it’s saying it’s listing a local host port 3000. So if we go now to local host 300 we can kind of see that the full Rails welcome message. What’s cool about this is if you’ve ever worked with any other web framework or pretty much any other program language you know that each step you take you want to make sure that you’re going in the right direction. So when you load local host on your brand new Rails application and you see a page like this, this is a success message that you were expecting right so everything is working. Rails was properly installed which you know and your application was properly created. So it not only give you the success message saying Welcome Aboard, you’re riding Ruby on Rails but it also gives you a couple of hints on where to go next.
Fr. Robert: What would be some examples of that process not going well? The dependencies don’t get set properly, it doesn’t start up a new server for you to use; is it as long as I get that message everything is good or are there certain other things that I need to make sure are there before I step into the next procedure?
Carlos: So for this first step if you see this phase you’re good. Some of the errors that you might encounter are maybe you’re running another service on port 3000 and then when you try to load it you see a different page. And when you see a different page you might be surprised; well I thought I had my Rails server running but perhaps you have another Rails application or a different application altogether running on that port. So you might see a different message. So this is kind of like that safe point where you see this, you know that your application was created successfully and everything is running at this point.
Fr. Robert: So by and far for our audience who will probably not be running any other Rails installations, who will probably not have any other services running on the machine that they’re going to be programming on, as long as they get to that screen they’re good to go.
Carlos: Exactly. That screen is good to go.
Fr. Robert: Step us through.
Carlos: Let’s go and create our 1st little custom page and Rails is an MVC framework so it follows the MVC pattern where we have our models, our views and controllers and these different aspects of the application usually are concerned with different parts. So that’s the typical way that we split our concerns in our application. Something either goes into a model, a controller or a view. So let’s start with a routes file. In a routes file we want to tell it that we want to go say to Welcome. If you want to zoom in here it says /welcome and that’s the URL that we want to add to our application. Let’s go ahead and open our routes file which again was created by Rails for us. We did not create this file. So if we open it up we can see there’s stuff already written in there and it’s again another really cool aspect of Rails. It’s pretty good documented. As you can see here this is actually the documentation on how to use the routes file. It’s telling you how the routes work, how you can write your routes and different examples of code that you can write in there.
Fr. Robert: Very nice.
Carlos: It’s always a good reminder. I’m going to go ahead and create a root route. A root route means that every time that we go to slash we want to go to this specific controller and action. So the route rout is going to be; welcome, index. Which is the same thing that it says here in the documentation. So just for example purposes. Now if we go to the application again… oh our server isn’t running. Let’s close this and run our server. There we go. Now we see this error message and it says uninitialized constant Welcome Controller. I’d like to say this is a good type of error because it tells us what to do next basically. It’s saying hey we couldn’t find the welcome controller so the next step is to create this welcome controller which we haven’t yet. So I’m going to leave the server running in this tab and I’m going to open another tab and create our welcome controller and it’s just a class that inherits from application controller. Now if we save this. This is what inheritance looks like in Ruby. We’re creating a class that inherits from another class and this is a class that’s a Rails class basically. If we go back and run our page again. Now it’s giving us a different error. It’s saying that we couldn’t find an index action for the welcome controller. The action is nothing but an instance method which is very similar to the one we created on our previous episode.
Fr. Robert: Now application controller, that’s a default right? What’s contained in there?
Carlos: This is application controller. It already exists in Rails. So it creates it for us, it’s there. So all of our controllers are going to inherit from application controller. As you notice here application controller inherits from another controller called action controller base. This is pretty much the pattern on most object oriented web frameworks or pretty much any object oriented framework. A framework is a tool box so it basically gives you a bunch of classes that inherit from other classes. When you want to creator application you create your classes…
Fr. Robert: And you inherit some other classes.
Carlos: Exactly. They inherit some classes from the framework. Alright so index controller; what I’m going to do here is I’m going to render a text straight from the controller. So what I’m going to do is render…called the render method, text end, and options hash saying O hai. When we run this again you can see O hai is printed to the screen.
Fr. Robert: Can I define other destinations within that controller?
Carlos: Yes you can. When we start doing something, a couple things more complex where we’re going to see different actions, different routes. The index action is typically used for listing stuff. We’re going to look at different methods, actions to create stuff to delete stuff to update stuff. We can see we’ve rendered a text on the screen. Pretty simple, pretty straightforward. This is just fling text. If you open up the source you can see this is just fling text. But if we want to return some HTML, what if we wanted this to be an h1. It works, it’s an h1 but it’s not really good if we start writing our HTML inside of our actions like this.
Fr. Robert: Yes, that would get a little unwieldy.
Carlos: That would get kind of weird. This is a controller. Now we’re going to move onto the view. So let’s move on and create a view file. If we look at the folders that Rails creates for us it already created a folder for view as you can see here – the last one. All of these folders were created by Rails. We didn’t create anything. Inside of our views we’re going to create a folder that’s named after our controller. This is so that we can leverage something that Rails calls convention over configuration. So if you follow the Rails conventions there’s very little stuff that you have to configure in your app. So I’m not going to say where to look for the welcome view, for the index view from the welcome controller. By following the convention of naming the folder welcome which is the same name as the controller Rails knows how to look for each convention named after that file. I’m going to create an index file and I’m going to use the ERB templating language. This is just a folder and now I’m going to create the index.html.erb. Then inside of here I’m just going to write HTML.
Fr. Robert: That makes much more sense. That doesn’t need to be in the controller.
Carlos: Exactly. So I wrote my HTML and just to make sure that my controller now doesn’t have any of this and if I render it now you can see it still prints O hai. Just so you know… h2 from template. So this is the template. As you can see we didn’t have to write the code that said to look for this specific view when we hit that URL. This is all a convention. You can even take this 1 step further because we’re not doing anything in here so we can pretty much kill this and Rails still knows that it needs to render the index view.
Fr. Robert: Oh, is it just because it is a default because if there’s nothing in the controller…
Carlos: Yes. It’s the convention.
Fr. Robert: Alright.
Carlos: That’s the 1st step. Now let’s say that we want to add some interactivity with the user. It’s going to be very basic stuff. Let’s add some links here. Let’s go ahead and do a link to a search engine. If you’re familiar with HTML you can probably figure out what this is going to render. It’s going to render a link which when you click it takes us to Google right. This is the pure HTML. We can use Rails helpers to write this for us in a much shorter syntax. So we can say link to and http dot com. I think search in 1st. Yes like that.
Fr. Robert: And again we’d just be using this for consistency.
Carlos: Yes for consistency and also because it’s more of a Rails style as well. You don’t have to remember the html syntax. Although this is a very simple example rails has helpers for other stuff as well. So if you want to send out, if you want to link that to an email it knows what to do and… ok let’s stick with the Rails one for now. Search, google and you can see the link down at the bottom. It’s going to open up Google.
Fr. Robert: Alright, that gives us our controller that gives us our view.
Carlos: Right. There’s no interactivity yet. So what we want to do here is add a query string parameter. We want to be able to set which search engine we want to use. So suppose we want to use Yahoo instead of Goggle, let’s say that we want to pass this as a URL parameter here at the top. So all we’re doing is saying search equals Yahoo and we want this to point to Yahoo.com instead of Google.com.
Fr. Robert: Zach why don’t you go ahead and zoom in on this a little bit just so our audience isn’t squinting so much.
Carlos: Yes, so we want to be able to pass a parameter. In this case Yahoo or we could use Bing and we want this to point to Bing instead. So let’s do that. Now we have to define our index action because we’re going to be setting an instance variable here. Again this is where the object oriented principles come into place. Anything we set here, any instance variable that we set inside of this action can be accessed from our view using that string interpolation technique that we learned. So if you remember from our previous Ruby example this is pulling out a variable and evaluating and replacing it. Right now it’s just hard-coded to Google. But it should work. So if we go here… it’s not supposed to be Bing. Here you can see at the bottom is Google.com. Click it and it goes to Google.
Fr. Robert: Of course now we need a way to make that not a hard-coded variable.
Carlos: Exactly so we need to read from the query string parameters so let’s go ahead and do that. Here we’re going to read from our params and this is an object that we get from Rails and let’s call this search. There’s our symbol again. Anything you put out there it’s going to replace so now if I click here it takes us to Bing.
Fr. Robert: How many parameters can I pull in?
Carlos: As many as you want. If you do Yahoo it takes you to Yahoo but if you leave this out it is going to error out. It doesn’t have a value for that.
Fr. Robert: Right because you didn’t fill the variable with anything.
Fr. Robert: I can set a default parameter can’t I?
Carlos: Exactly. Let’s see how we can do that. There’s a couple different ways. I’m going to start with the more verbose and then shorten it up. Just like we did before. We could do something like this. Let’s do if there’s a param search we’re going to set search, param search, else we’re going to have search equal to Google.com, end. Close this. In Ruby anything that’s not null or false validates to true. So if there’s a value set to search this is going to validate to true and then we use that to set the search.
Fr. Robert: How good is Ruby on Rails at garbage checking and error correcting? If someone starts typing in some really strange parameters do I have to throw a lot of checking into that to make sure they’re not trying to hit something on my backend?
Carlos: If you follow the Rails conventions you don’t have to worry too much. Because I want to say that the same way that Rails gets you 80% of the way into building web apps it protects you from 80% of stuff that’s out there and that’s typical attacks on web applications.
Fr. Robert: That’s one of the biggest issues with Java which is Java will do basically what you tell it to do and if you tell it to check for that you’ll be in trouble. So Ruby by default if you follow the conventions which you’re handing out now…I’m sorry Rails, it will take care of 80% of that.
Carlos: Yes a lot of stuff will be taken care of for you. As we’re going to see in the next episode when you’re using the active record framework and it already protects you from Sequel injection and a bunch of other things like web attacks.
Fr. Robert: Which is 90% of the script kiddie stuff.
Carlos: Right, exactly.
Fr. Robert: Alright, keep going. So now we’ve got a way to have a default value, we’ve got a way to take parameters and put them into our view. What’s next?
Carlos: Let’s just shorten this code. This is the most straightforward way if you’re coming from other languages.
Fr. Robert: Oh so now you’re going to give us the Ruby way to do it.
Carlos: Yes. So if you say search it’s going to be search. (Let’s just kill everything here) or google like that.
Fr. Robert: I love it.
Carlos: So that’s the short circuit right, the “or”. If this evaluates to false, if it’s empty it’s going to jump to the other side of the pipes when it’s false and it’s just going to set to Google.
Fr. Robert: It seems so strange to me but yes that’s a better way to do it. It’s such a better way to do it. So just to make sure it works if we render this, no parameters, this takes us to Google. Now let’s add a very simple business rule here. Let’s say that people we accessing our site and they were misspelling Yahoo right. So if you want to zoom here to the URL you can see that I’m misspelling Yahoo. Instead of Yahoo I’m saying yahu. Alright, so if we try that obviously it’s going to link to that exact stream and takes us…wow look at that, it redirected us. I didn’t know.
Fr. Robert: Ok that’s not you, that’s Yahoo being clever.
Carlos: Yes that is Yahoo being clever. Let’s do something else stupid. Alight, Yahaaa.
Fr. Robert: Right, they can’t have them all.
Carlos: Yes. Let’s say people are misspelling it right, calling it that. So we wouldn’t want this link to lead to Yahaaa. Let’s say we wanted to correct this to point to Yahoo. For everybody that passed this misspelled version right. So what we could do is something like that. How did I write it, yahaaaa, 2, 3, and 4? That’s 1 way to do it.
Fr. Robert: That would be a very complicated way to do it. To actually come up with all the different ways they might misspell.
Carlos: Right but it solves our issue. So right now it is linking to Yahoo.com. But that is not really the problem that I wanted to point out. The problem I wanted to point out here is the fact that we’re writing this logic inside of the control floor. Like you said if we were to match on all the possibilities of misspelling we’d have to come up with a bunch of different things. But the point here is not that the logic for some of this is stupid which it is because it’s sort of contrived. What I want to point out is that the logic for this does not belong inside of the controller. It belongs inside of the model. That is where the business logic should go. So instead of having this over here the next step would be to extract this business logic like I said to a model. I’m just going to start writing what the model will need to look like and then we’ll create the model itself. Let’s say this would be sort of like search term, new and again remember this is just a Ruby class. This is the constructer and instead of search this would be search term. And search would be search term and I want to call this engine or something like that. We’ll move all this inside of our model. That model we’ll call search term and another convention. We’re not telling Ruby where to look for this model. We’re calling the model here a controller and we’re naming a file in the models folder. So we’re not telling Rails how to find that model, we’re following the convention. I’m going to create a class called search term and inside the class create the constructer. If you remember here from the controller the constructer takes the param search, so I’m going to call a search and then we’ll do all of our business logic inside here. That example “if search equals Yahaaa then return Yahoo”, else return search. Remember we went over this in the previous episode, we don’t have to write explicit returns.
Fr. Robert: Right, it figures out what you want to return.
Carlos: It figures out that it’s the last statement of… I did something wrong, it’s not initializing. So that was a constructer.
Fr. Robert: Now we’re getting closer to what a MVC should look like which is the view is just the stuff that we see, the controller is just updating the state and the model is actually changing the view when a state has been changed.
Carlos: Exactly. Controller shouldn’t have a lot of code inside of their actions. You might want to keep it around maybe 2 or 4 and perhaps… but the thing is business logic should not go in the controller. That is the rule of thumb. Right now we have our model here that’s doing all the logic and then our controller is just calling the amount, the model and then we can see that everything still works. When we try to access yahaaaa it corrects to Yahoo or if we pass Bing… So it knows Bing or if we default it knows that it’s not… Let’s do this here too. I can actually do it up here too. Search or Google...the code we had over there. So you can see we’re changing the model, we’re not changing the controller. The API is still the same. This is a good example because right now because I don’t want to introduce this yet but this is a perfect scenario for unit tests; to write automated unit tests. If we were to write automated unit tests for this model we wouldn’t have to rely on Rails to run those tests. We write very focused and very fast unit tests that test our business logic for our application.
Fr. Robert: Carlos, we are just about out of time for this particular episode but I’d like for you to pass on some final wisdom for the folks who are wondering about this model view controller model. You said a few times as long as you stick to conventions, stick to the convention that things work better. Ruby and Rails will protect itself and you get everything where it is supposed to be. Could you please explain in no uncertain terms why it is so important that you not put business logic in the controller and why you keep the view to only the things that the user should be able to see? Explain why those pieces need to stay where they are otherwise things break.
Carlos: 1st because it just makes the application easier to read, it makes it easier to understand and it makes it easier to maintain not only by you but by other people working on your team. Because changes are the controller will respond to different actions so every time that you need to edit business logic or 1 specific action, if you need to edit that same controller and then you have other people working on your team, changes are that you’re going to have multiple people working on the same file which increases the chances of conflict if you’re working with something like Gits or Mercurio or some sort of virtual control system. It’s going to cause a bunch of errors and conflicts and it’s also harder to test. So the thing is if you’re able to organize your stuff in components and modules, calls so to speak, if you’re able to focus each concern on different places, on very focused, on very granular components it’s just easier to maintain your application. And it’s easier to have more people in your team working on the same code base without stepping into each other’s toes.
Fr. Robert: Carlos thank you again for being our Ruby and Rails guru. Next time we’re going to be stepping beyond basic input output. I’m very excited. But I understand you’ve got a little bit of homework for the folks at home who maybe want to catch up on what you’ve been doing here.
Carlos: Yes, absolutely. If you’re home and you want to try to take 1 step further than what we did here what I want you to try to do is try to be able to read multiple arguments from the URL and generate multiple links. So suppose that in the URL we want to be able to pass Bing, Yahoo and Google and then the view needs to print “search Bing, search Yahoo and search Google.
Fr. Robert: There you go folks. That’s the challenge, the gauntlet has been thrown. If you do come up with a viable solution make sure to post it into our Google Plus group and we’ll show it off on that episode. Now Carlos I know that you’re at Code School and we learned last week that Code School is a great place to get knowledge about programming. No matter what kind of web programming knowledge you want, what kind of web application you want to build you’re going to find it with the experts at Code School. I treasure that, that’s fantastic but could you please tell the folks at home where they can find you? I know your GitHub is impressive. If they want to go a bit beyond what you’re teaching here that’s a good place to start but where else can they find you on the inter-webs?
Carlos: My Twitter is @caike, it’s down here below my name. That’s what it looks like. People can follow me over there and also on Codeschool.com or like you said my GitHub is the same handle – caike and they can check out all the projects that I contribute to. My personal projects, all the different sort of stuff that I push out there and I think we mentioned Rails for Zombies at some point…
Fr. Robert: Yes. Do it.
Carlos: So if people want to try out Rails but don’t want to spend the time installing it on their machines Rails for Zombies is one of our free courses at Code School. It’s a great way to get your feet wet and see if this Rails thing is for you. It’s all in the browser, you don’t have to install anything and you get to code Rails inside of a browser. You watch a couple of short videos and then after the videos it’ll give you a couple of challenges that you can go through and earn points and get a badge and all that stuff. By the end of the course you should have a pretty good idea of the Rails architecture and some of the conventions that we talked about here. You can figure out whether or not you should invest any more time into your Rails journey.
Fr. Robert: There you have it folks. We give you a little bit of a taste here on Coding 101 but if you want to dive deeper into Rails… and you should because this is an exciting framework – go ahead and try Rails the zombie way. Again Carlos Souza from Code School thank you very much for being our code warrior, our code guru and we will see you next time.
Now let’s take some time to talk about something that is near and dear to every code warrior or code monkey’s heart and that is what do you do with your applications, your services, your hard earned programming once you’ve completed it? The old way was to build up some servers, build up some iron, maybe buy a rack or a server in a rack or a piece of a server in a rack and maybe you can get your service up and running. Of course you had to manage that, you had to make sure it was running and it was your responsibility to update it and do all those things or hire someone to do it. Sure you could go that route and that’s probably the route that I started off with because I like getting my hands dirty but that’s not really the way it works any more. These days you want to be able to take your application, wrap it up and get it running immediately. That’s why we’ve got Digital Ocean as a supporter of Coding 101. Now what is Digital Ocean? If you’re an experienced code warrior or just getting started then you know what Digital Ocean is; it’s a flexible, reliable and affordable hosting option. Digital Ocean provides developers with droplets which are virtual private servers that can be customized and deployed quickly to host websites, web apps, production applications, personal projects, virtual desktops and pretty much anything else that you can think of, all with root access. We’ve been using Digital Ocean here for the last couple of months to play with applications that we think we want to deploy either in house or through the internet. It’s a great way to test our programming and maybe even open it up to members of the public so that they can help by hammering it, to break it, to show us the exploits so that we can make everything right before we go full public. That’s what digital Ocean is for. Everything from sandbox to full production. Digital Ocean is built by developers for developers and it’s used by over 400,000 of them including me. You can deploy and configure your droplets via a streamlined control panel or simple API. You can choose your OS, Ubuntu, set OS, Fedora and Freebee SD, 1 click install allows you to quickly deploy apps like Jango, Docker, Droople, Git lab, media-wiki, Word Press, Ruby on Rails and more. Now all servers are built on hex core machines with dedicated ECC RAM and Raid SSD storage. Servers can have up to 20 CPUs, 64 gigabytes of memory and 640 gigabytes of SSD space. They are highly scalable to meet the demands of rapidly growing application or business and auto backups and snap shots that you can easily clone, deploy and resize your droplets as you grow. Now my personal favorite is the fact that these are going to be deployed in regions across with world with gigabit speeds; that means 99.99% out time. You get full featured DNS management and easy to manage domains or if you want you could use dedicated IPs. They give you full console access with HTML5 plus SSH SFTP and KVM/VMC for virtual desktops. They’ve got an extremely active community with a large and detailed set of tutorials so that you can use your droplets with the support of your community. If you want to deploy Docker well go ahead, if you want to set up a personal VPN you can do that. If you just want to run yourself a web server well Digital Ocean has got you covered there too. Really it’s so easy to just get started. You can just deploy your own Cloud in literally minutes. Now here’s what we want you to do. Digital Ocean has incredibly affordable and straightforward pricing that we think you should take advantage of. Their servers start at only $5 per month. There’s also hourly pricing available for when you need to get that project done, that Sandbox or maybe that burst of traffic. Starting at less than a penny per hour but we’re going to make it so that you can get started today and deploy an SSD Cloud Server for free. Just visit DigitalOcean.com and create an account. Once you confirm your email and account information go to the billing section and enter the promo code C101 for a free $10 credit. That’s plenty to get started and explore what Digital Ocean can do. That’s digitalocean.com and once you sign up enter the code c101 in the billing section for a $10 credit. Now Lou, I like this whole bootstrap thing, this idea that you run the Rails command and it will build out all the dependencies including all the libraries and give you this nice play ground to work in. It seems like it is how every framework should work.
Lou: It really should.
Fr. Robert: Why don’t I see that more?
Lou: There’s actually a boot-strapper web framework that’s built like Java Script that does something very similar so they’re starting to learn from things like Ruby and Rails where they can bring in what they need at run time, even at compilation time. So this is kind of the key. They’re the ones that really started to do this.
Fr. Robert: 1 of the pieces that Carlos talked about which… I’ve been playing a lot since the pre-record and it’s absolutely true and that is; in order to get the efficiencies out of a framework you have to follow the conventions. It’s not optional anymore. It’s not like well I’ll follow the conventions when it’s good but if it’s going to take me awhile I won’t. If you don’t follow the conventions you might as well not follow the frame work. Like the example that we used here was having welcome as the folder for the controller. If you don’t do that none of the other hooks are going to work. Do you see a lot of that in other framework languages? Like when you’re working in C sharp and you’re working with the model and then view and the controller is there a convention that you’ve trained to use?
Lou: I think that’s a problem. A lot of times there are frameworks that come out with… they target 1 specific thing and if you don’t follow that 1 specific thing you move outside the Rails so to say. You start to lose the advantage of using that framework. But yes I think there’s a lot of times where if you have a framework that doesn’t have those conventions, they’re just very generic and they’re easier to use. But in this case you want to follow those conventions.
Fr. Robert: Yes, it’s sort of a 2 sided store because yes the bootstrap process really does cut down on the amount of scuttle work that you had to do but at the same time if the boot strap isn’t leading to what you want to do…and I’m spending a lot of time kind of pushing it back the other way, or you just break the conventions at which point you probably should be using the framework in the first place. What tips could you give because you are our permanent code warrior; we may have guest code warriors but you are permanent. What tips would you like to give the audience about the use of a framework? It doesn’t have to be Rails, it could be any framework that they’re going to pick up. As they go along how do they find the strengths and the weaknesses of each 1?
Lou: Like Ruby and Rails it’s a framework plus a tool kit. For instance some frameworks like in Dot net you have to go all the way in. You’re all in when it comes to a framework so sometimes when you’re choosing a framework if you feel you need to go all in that’s when you need to understand whether you want to take on that big role of going all in on a framework or not. There are some frameworks where you don’t need to go all in. There are some that you can say ok I’m only going to do part of this in Ruby and then part of this in something else. In that case you don’t have to learn everything or you don’t really have to understand everything. But in things like Java or C Sharp or even Ruby these are things that you sometimes have to go all in and understand everything from the top to bottom.
Fr. Robert: There you go. Go all in. Wise words from our permanent code warrior. Lou unfortunately that’s the end of this episode. Next week we’re going to be jumping straight back into Ruby on Rails. In fact Carlos Souza is going to be letting us into how we manipulate persistent data sets. So we’re finally going to get to real work. I mean it’s been a lot of set up and showing us how it works and how servers get set up automatically so we can test but now we have to try our hand at manipulating data and making sure we don’t break things as we’re programming. Until then though there’s a place that they can go if they want to find all of our episodes. Do you know where that is?
Lou: I think it is Twit.tv.
Fr. Robert: Yes just go to Twit.tv/code and there you’ll find all of our back episodes, all our back modules and you’ll also find a little drop down menu that will allow you to automatically have every episode of Coding 101 dropped into your device of choice each and every single week. If you want it on your iPhone you can do that and if you want it on your Android device we can do that. Your Mac, your PC, your laptop, your desk top, we’ve got you covered partner. It’s just because we love you. Yes that’s it. Also don’t forget that you can find us on Twitter. You can find me at twitter.com/padresj, that’s @padresj.
Lou: You can find me at @LouMM, LouMM.
Fr. Robert: If you follow us there you’ll find out who we’re going to be talking to each week and the language that we’ll be covering. It’s also a great place to ask us questions. If you’ve got questions about programming, questions about some of the topics that we’ve covered Twitter is a great place to go. Also you can jump into our Google Plus group. Just go to Google Plus and search for Coding 101. We’ve got lots of experts in there and lots of beginning programmers. So there are no stupid questions, there are only stupid people… no there are only trolls. But seriously it’s a great community to jump into and it’s actually a lot of fun to see people hash out different ways of solving a single problem.
Lou: I really love the competition they have on there.
Fr. Robert: Yes they are good. And you know what they are not all wacky, they will be critical of the show when they need to be critical so it’s a really good place to jump in and see whether or not we’re doing our job right. Now thanks to everyone who makes this show possible. Of course that’s to Lisa and to Leo for letting us do this show and for bringing on Lou as our full time co-host. Also special thanks to a man who sits behind the scenes; he pushes the buttons but he doesn’t get a lot of recognition. He’s the man, the myth, the Eskimo, Zach. Zach can you tell people where they can find you and your work?
Zach: Thank you Padre. You guys can find me on the Twitters @eskimozach.
Fr. Robert: Until next time you’ll find us every Monday 2:30 PM Pacific. I’m Father Robert Ballecer.
Lou: And I’m Lou Maresca.
Fr. Robert: And this has been Coding 101. End of line!