Coding 101 26 (Transcript)

Shannon Morse:  Today on Coding 101, oh my glob, we are talking about some Perl GET form.

Netcasts you love.  From people you trust.  This is TWiT!  Bandwidth for Coding 101 is provided by Cachefly at  

Father Robert Ballecer, SJ:  Coding 101 is brought to you by  Hover is the best way to buy and manage domain names.  It's simple, honest, and easy to use.  For 10% off of your first purchase go to and enter the promo code C1017. 

Fr. Robert:  Welcome to Coding 101.  It's the TWiT show where we let you into the world of the code monkey.  I'm Father Robert Ballecer.

Shannon:  And I am Shannon Morse.  And for the next 30 minutes we are going to get you all learneded up and everything that you need to know to be a Perl code warrior.

Fr. Robert:  That's right.  We, thankfully, got past RedJacks.  We put regular expressions in the back, people were figuring it out, and we got to something really, really practical and really, really useful.  That is how do you dynamically generate webpages with Perl; very useful.

Shannon:  So there is a lot more advanced information about this other than just knowing Perl code.  You also have to know how to set up your own web hosting.  You have to make sure that it accepts Perl code and that it translates correctly to the client whenever they open up the webpage.  It's tough.

Fr. Robert:  One of the things that people were asking was well how come we didn't show people what CGI was and how do you set up your webpage.  It's going to differ depending on what hosting provider you use.  In fact, we had a very nice demo all set up and our hosting provider took a dump about 20 minutes ago.  Thank you 1and1.  You took a very wonderful demonstration and just kind of ripped it apart.  But yes, you are going to have to do a little bit of extra work to get these scripts running.  I'm sure any hosting provider will have a detailed FAQ on how you get CGI working on your site.

Shannon:  So what do you say we get started with some Snubs Compiled?  Whew!

Fr. Robert:  I like that.  I'm big on Compiled.

Shannon:  So first off I want to show you our Google+ Community Viewer submission.  This one is from Joe.  I pulled it up over here, and this is over in Google+.  It's if you want to join.  He just decided to send over a dynamic webpage that uses regular expressions to determine which browser you have.  So he already linked us to his example so we didn't have to put it on our own web hosting service.  It just says "What browser are you using?  Welcome.  Local Server." and then "You appear to be using Chrome."  Now, if I hit view source right here, you will see that all we see is the HTML.  But he has also sent us the code.  So if I open up his code right here, and I will maximize that, there we go.  Okay, so you can see that he has Perl code in here.  He tells it that it's going to be HTML, and then you scroll down and you see that it tries to figure out what kind of browser that you are running.  Now, of course, this is a little bit advanced.  He's using this dollar $agent thing right here.

Fr. Robert:  Right, right.

Shannon:  And then he closes it out with </BODY></HTML>.

Fr. Robert:  Right, but this is actually a really good example of server side scripting versus client side scripting because if it was client side scripted you would actually see the code in the page displayed in your browser.  Instead you see what runs on the server not the final product that gets delivered to your browser.

Shannon:  And it works yay!

Fr. Robert:  It works.

Shannon:  So thank you Joe for sending that over.  I also had an example for you as well.  Let me go find this real quick.  Here's my code, and where did I put it?  I think it's over here.  Ah ha, here we go.  So in my example all it says is "Welcome to Coding 101!  Watch our show at this page!"  You can click on the page and it goes to our TWiT Coding 101 website.  Now, if I view source for this all you see again is just the HTML, so I wrote out "Welcome to Coding 101!" and I made a little href link right here for Coding 101, this page, and a couple of different font types.  I guess I could have added a little bracket right here to make it enter onto a new line.

Fr. Robert:  If you wanted to.

Shannon:  BR, yay, and then /body /html.  Now if I go into my code as well, and I think I pull it up right here.  So very, very simple code, Perl code, content-type is text/html, and then we have down here the actual html.

Fr. Robert:  Right, and again a really good description, and a really good example of server side versus client side scripting.  This is one of the things that we tried to drill in to the audience in the last episode.  That is if it is going to be client side more likely than not you will actually see the actual scripting code inside the browser.  That means it's executing on your computer.  In your example we needed to have server that was set up properly, which is why it was horrible that 1on1 decided to die before the show.

Shannon:  We ended up putting it on one of Patrick's servers instead.

Fr. Robert:  Yeah, we had to drop it on Patrick's.  But it gets executed on the remote side and all you get is the finished product and, of course, you should be able to see the pros and the cons of doing it either way.  If it's on the client computer you have access to more things than you would if it was server side, but if its server side it also means you typically have a bit more security because they don't have to see any of the scripting code.  They just see the finished product.  

Shannon:  If you guys are confused about this watch last week's episode of Coding 101.  Patrick showed us examples of both with html as well as just with Perl code so that you can see the differences in the sources.

Fr. Robert:  Absolutely, yeah.  Now we are going to be getting into forms.  Forms in html have been around since html has been around.  Normally they are kind of ugly, right?  

Shannon:  That's true.

Fr. Robert:  Type this and hit this.  But forms are one of those basic ways to get information from the user.  Just like we would have user input inside of an actual compiled program on your computer.

Shannon:  You see forms on any site you go to these days.

Fr. Robert:  Right, exactly, exactly.  It's a basic part of coding for the web.  However, we can combine forms from html with a few things in Perl to give us dynamically generated pages depending on what a user has inputted.

Shannon:  Oh, really?

Fr. Robert:  We are going to show you how to do that, but first let’s take a break.  I want to talk a little about, oh, I don't know, domain hosting.

Shannon:  Well, I think we have a pretty good one that you could check out.

Fr. Robert:  We do.  We've got a vendor here.  We've got a sponsor of Coding 101 that has been around for years.  In fact, their name is almost synonymous with the early web, and that's Hover.  You may say, well Padre, I don't remember Hover.  But you do remember Tucows.  Tucows was one of those repositories, one of those sources of data, of information, that grew up with the web.  When you have a great idea you want to secure a domain name for it.  You want something catchy and something memorable to represent your online identity.  Well Hover gives you exactly what you need to get the job done.  You will find the perfect domain for your idea so that you can get started working on it right away.  Right now Hover is having a sale on all new domain extensions through September 1st.  The sale is for new and existing customers.  Summer is the perfect time to start a new project, and every single new domain is deeply discounted with Hover so you can chose whatever you like, .club, .ninja, .guru, .just about anything.  Now people love Hover; geeks, designers, developers, and programmers because they know that they will have the best tools and support for their domains.  You don't have to be an expert to get a domain.  The service is really simple enough.  Now Hover takes all of the hassle and the friction out of registering your domain.  It gives you an easy to use powerful interface to manage your domain so that anyone can do it.  You can get the perfect domain name and start building your web presence right away.  All you have to do is search for a few keywords, and Hover will show you the best available options and suggestions.  In fact, right now Hover is a clean and simple website, and what you can see Brian doing is scanning through some domains that he may want for his nom de plume as the Cranky Hippo.  Now, in less than 5 minutes you can find the domain that you want and get it up and running.  That's what they are all about.  They also offer a valet transfer service to make the process painless.  For free Hover will take care of the entire process of transferring your domain and let you know when your domains are settled in your Hover account.  They will transfer all of those DNF settings.  No matter how many domain names you have it's no additional cost.  So if you are just fed up with your domain host, right now your domain registrar, use Hover.  They will take care of all of that back stuff and get you to your domain bliss.  Now here's the big thing for me.  Hover is honest.  They don't believe in heavy handed upselling.  They include everything you need with your domain, no more and no less.  They also include a custom email.  You will get a smart control panel so that you can do what you want with your domains plus OS privacy is included free on every domain that supports it.  Now if you ever need it Hover has the best customer support around.  It's known for its no wait, no hold, and no transfer phone service.  When you call a real person is ready to help.   Right now they are offering volume discounts.  They will give you a discount on your domain renewals starting at just 10 domains and then going up in value from there.  The idea is the more domains you have in your account, the less you have to pay to renew them.  So here is what we want you to do.  We want you to visit Hover today to register your domain.  For 10% off your first purchase take advantage of their summer sale by going to and using their promo code C1017.  We thank Hover for their support of Coding 101.

Now, Shannon, I want to talk a little bit about GET.

Shannon:  GET.  

Fr. Robert:  GET.

Shannon:   I know some GET.  Well, mine is more Linux.

Fr. Robert:  GOT.  It's a little Linuxy GET.  So when we talk about forms we are basically talking about stuff like this, so if you go ahead and switch over to my computer.  In fact let me change the format here so that it's not so small because I know that people have really bad eyes.  So this is the simplest form of what a form looks like in html.

Shannon:  I remember doing this in the 90's.

Padre:  Right, you are opening and closing html and body tags, and then form.  So it's just another html command.  Form method=GET action= and then you have the input name and the input type.  That gives you a button, right?  We are going to show you exactly what goes into that.  Brian if you come back to me.  When we talk about html forms we really are talking about 2 different possibilities of getting information from the user.  One is called a GET.

Shannon:  GET.  And the second one is POST?

Fr. Robert:  POST, exactly.  We are only going to be talking about GET today.  So we are going to limit it to GET.  Next week we will talk a little bit about post because they are different.  They kind of interchange a lot of the characteristics.  The main thing to remember about GET is all it does is it takes whatever the user has entered and appends it to the URL.  

Shannon:  Oh, that sounds pretty simple.

Fr. Robert:  Fairly simple.  For example if you are using GET on a form and inside of its little action URL you have the it is going to add to the end of the whatever the user has entered and that gives you a new URL.  

Shannon:  Easy.

Fr. Robert:  Really easy.  We will show you why you would want to do that, but it's a very specific type.  It's very useful.  Now what we want to do is we want to use GET to somehow get data from the user from a form and then push it through Perl so that Perl can do whatever you want Perl to do with it.

Shannon:  So this is where Perl comes into play.

Fr. Robert:  This is where Perl comes into play.  This is where Perl can do some dynamically generated webpage magic.

Shannon:  Okay, how does it do that?

Fr. Robert:  Let me show you how this works.  So, for example, we are going to go back to my computer.  This right here, this webpage is actually a result of this code.  So this code has generated that.  Very simple, all it does is that I've got "Name?" and I've got a button below it.  And if I go to the browser I've got "Name?" and the button below it.  This is the name of the bunny, so I'm going to put Roger.  Roger is the name of my bunny.  And I click "Submit".  Watch the address bar right here.  It's giving me an error because the page doesn't exist.

Shannon:  Bunny name.

Fr. Robert:  But, see, it just appended "Bunny Name=Roger".  

Shannon:  Right.

Fr. Robert:  Now, think back.  I know you are on the web a lot.  You've probably seen addresses like this.  

Shannon:  I have, yeah.

Fr. Robert:  Anytime you do like a search it just appends it to the end of the URL, right?

Shannon:  And I've noticed if you just delete that ending after the ? you can just get back to whatever it is you were at.

Fr. Robert:  It just goes right back to Bing, right.  That's a GET.  That's what it's done.  I think YouTube does that.  Not really, let's do Google.  So Google does that.  So if I'm searching for something, and let’s say I'm searching for "snubs".  See, it did something.  It appended to the end of that URL my search term, right?

Shannon:  Cool.  

Fr. Robert:  This is just a version of that.   All it means is that I'm going to take whatever the user is and I'm going to drop it on to the end of the URL.  

Shannon:  Exactly.

Fr. Robert:  You will probably ask yourself Padre, what use is that?

Shannon:  What are you going to do with it?

Fr. Robert:  It's kind of stupid.

Shannon:  You are going to make your own search site?

Fr. Robert:  Well, maybe you are.  That's going to be what we are trying to do.  We are going to show you how you could take that new URL that you have used GET on a form in order to create, run it through Perl, and then make it do something magical.  

Shannon:  Okay, I want to see some magic.

Fr. Robert:  I do too.  But in order for use to this magic I think we need to bring in our code warrior.

Shannon:  Oh boy.  I'm ready.

Fr. Robert:  So if you could hook up that satellite Brian, I think that we are going to bring in Mr. Patrick Delahanty from TWiT TV, our code warrior.  Patrick, thank you for coming back.

Patrick Delahanty:  Oh, my pleasure, coming here from the starship orbiting the earth using the TWiT friendship satellite.  

Fr. Robert:  It's been a very, very long journey.

Patrick:  I will put the warp drive back there.

Fr. Robert:  Let’s put the warp drive.  Now, Patrick, GET and POST on forms in html.  It's not exactly advanced.  You could look at a form primer and you will know how to make a form in like 5 minutes.

Patrick:  Yeah.

Fr. Robert:  But...

Patrick:  Whoa.

Shannon:  That was kind of cool.

Brian:  That was part of the satellite beam.

Patrick:  Okay.

Fr. Robert:  That was different.

Shannon:  Apologies from the desk, the operators.

Fr. Robert:  That was technical difficulties.  Patrick, now that we've got this really weird looking URL what do we do with it?

Patrick:  Well, now that you can pass data from an html form to a script, the script is able to use that input.  Just like we were able to do back in the first couple of episodes of this module where we used standard input.  Except now we are submitting the data through a form instead of just typing it.

Fr. Robert:  Hard coding it in, right?

Shannon:  So, similarly it's still treating it as an input just from a form instead of a form instead of standard input from the user?

Patrick:  Yeah, yeah, it's coming from a different source.  That's the only difference.

Shannon:  Cool.

Patrick:  And then we are outputting it to a webpage instead of just the command line.

Shannon:  Yay.

Fr. Robert:  But this is what you have to do, right?  Because people running your Perl script aren't going to have your command line in front of them on the computer.

Shannon:  Yes, exactly.

Fr. Robert:  They are going to have that form.  So the form is like the standard input.   So when we start playing with Perl this is standard input but over the web.  It's going to add it to the end of the URL so that when it runs the Perl script the Perl script goes, oh, there's my input.  Take my input, run it through my code or through my script.

Shannon:  Got it.  That's cool.

Fr. Robert:  Alright Patrick, show us how it works.

Patrick:  Alright, now remember we are not here to tell you how to do html.  That's not even programming really. 

Fr. Robert:  Careful.

Shannon:  Oh come on.

Fr. Robert:  You are going to piss off a lot of people Patrick.

Patrick:  It's markup.  So we are here to look at the Perl part of this.  So I've just kept a very simple form.  It's asking "What is your favorite animal?"  I think I did this in week 2 when we had the command line.

Shannon:  Yes you did.

Patrick:  So here is the html code for this form.  It's just one input and then the submit button.  You can see I'm submitting the form element here, the input type is text, and the name is "animal".

Fr. Robert:  Patrick, one of the important parts if you go ahead and blow up that screen a little bit, Brian, we want to see his code, the action part; that's what the form is going to do when you push that button.  The action is to call the URL "cgi-bin/c101/  

Shannon:  So it's calling that Perl code.

Fr. Robert:  It's calling that, exactly.  That particular script,, but it's going to append after that ? everything that the user put in to the form.

Patrick:  Yeah, and it ends in .pl, that's what we use to refer to Perl.  You can also do .cgi.  Different hosts have different requirements.  Some want it to be certain ways.  You may have to make it to be executable.  

Fr. Robert:  Which again is why we didn't show you how to do that because it's probably going to be wrong.  You have to find out how your provider does it.

Patrick:  Yeah, but there are just a few common things that you might have to check out so I thought I would mention them.  So anyway, we've got this form, and here's what it looks like.  "What's your favorite animal?", and of course we would enter "bunny".  You see I've typed that before.  Submit, and "This is Example A result..."  "You said bunny!  Yes, bunnies are the best!"  This is the same program we had before.  I just made it work on the web.

Fr. Robert:  Exactly, exactly.

Patrick:  Brian, if you would go up a little higher here we would see the URL which I am running my local main server again.  But we've got cgi-bin/c101/  This is exactly where I told it to go.  Then it's got animal=bunny.

Fr. Robert:  It's got the name of the input and then it's got the input itself.

Patrick:  So if I look at the code for this, we will go over here, I've got...

Shannon:  So this is the example 26a code?

Patrick:  Yes.

Shannon:  Okay.

Patrick:  So it starts off, it's got Perl.  We've set the content type to html and then I just threw in an html head.  This is doing nothing but setting the title of the page and the big Coding 101 text and the header text.  Here is the meat of the program. 

Shannon:  Wow, there is a lot in there.

Patrick:  Yeah.  We've got the query, and this is just saying query string is equal to this variable so that I don't have to type out query string every time because it's long.  Then I just print it out so that I can show what that value it.  Printed out your query string says, and it says animal=bunny.

Shannon:  So query is the input from the user?

Patrick:  Yes, for what I entered it says animal=bunny.

Shannon:  Okay.

Patrick:  So what I did here is I looked at the length of the query string to make sure it's larger than 0 to make sure that something is entered.  If it is I do this split on an ampersand and what I am doing is I'm splitting it so that every variable becomes a different entry into this array.  Then for each item in the array I assign the name, which would be animal, and the value, bunny, and it splits on the equals.

Shannon:  Oh, that's cool.

Patrick:  And then here I just kind of normalize the value.

Fr. Robert:  Right, so just for the folks at home what Patrick has done is, remember when a pensive to that URL it's calling that particular script, so ep26a, that script, then it's handing it that entire chunk.  So the name of the action and what it was.

Shannon:  Animal.

Fr. Robert:  In this case it was animal=bunny.

Shannon:  Animal=bunny.

Fr. Robert:  But that is just coming in as a single string.

Shannon:  Right.

Fr. Robert:  It's not like it’s got 2 pieces of data.  It's got 1 piece of data.

Shannon:  But you have to split that up because if you didn't the entire value would be animal=horse, or animal=bunny, or whatever.

Fr. Robert:  Exactly, which is what his code does.  So that first part of the code, the first thing he does is assign everything to that variable called query.

Shannon:  Rave for a raise.

Fr. Robert:  And then he breaks it apart.  He wants to break it apart so that he can manipulate it better.  He can manipulate the name apart from the value.

Shannon:  That makes sense.

Patrick:  Yeah, and so I did this.  This will be apparent in my next example; why I went through all of this.  But then it just says, okay, if this in animal, which is the value I set, if it exists then just set animal=then this value just because I don't want to type all of those brackets over and over.  But if it's not there then I tell animal=0 so I haven't entered anything, its 0.  So then it's the same script we had back in I think the 3rd episode where if animal contains bunny or animal contains rabbit, then print out "You said animal!  Yes, bunnies are the best!"

Shannon:  So you basically just took your code and copy /pasted it in here.

Patrick:  Exactly, so this is nothing new in here.  Once I've got the input I can do whatever I want with it.  So what I'm showing here is how to get the input.  Then this just ends with end of the html, and I have a convenient link back so that I can resubmit again and again.

Fr. Robert:  We've got Dr. Morbeous in the chat room who is saying that she is having difficulty figuring out where is the print statement.  How does it know how to print?  All that it's doing is printing an html file.  That's what the script will do.  It's printing an html file that will go to your browser so it's just html.  If you know how to do html you know how to do the print statement out of Perl for dynamically generated webpages.  The other interesting thing about Patrick's code here is that, if you remember from our lessons from C Sharp and from Python, there is always a way to call a function or to call a method and you passed at a couple of variables, right, because otherwise it would just do the same thing over and over.  That's essentially what we are doing.  This is a way to pass the script, a piece of data from the user that can be anything that the user wants it to be and have it process that particular piece of data.  

Shannon:  It makes sense.

Fr. Robert:  Yeah, this is one of the things that we wanted people to start doing after a couple of modules, which is that you can overlay the languages over the top of each other.  Even though the syntax may look different, the ideas are going to be the same.

Shannon:  That's crazy.  I've seen a lot of my coding friends be able to do that.  Put different languages all in the same line of code.  It totally confused me; I figured it would give you all sorts of errors.  But it works in some cases.

Fr. Robert:  Pretty much once you get a grasp of how programming languages work all you need are a couple of reference sheets so that you go, oh, that's how I write it in C, this is how I write it in Python, this is how I write it in Perl, and boom, you are golden.  Alright, Patrick, you have got more for us.

Patrick:  Yes.  No keep in mind there is a million different ways to do things in Perl so the way that I'm doing it here I'm not using a Perl module because we will talk about that later.  I wanted to show exactly how this works.  In my second example I've got 2 input fields; favorite animal and you get to name this animal which I know everybody wants to do.  So we will say it is a cat.

Shannon:  Luna!

Patrick:  Schrodinger.

Fr. Robert:  Oh, that poor cat.

Patrick:  So we will submit that.  I will print the query string and it said, "You said cat...  Okay, whatever.  I hope Schrodinger brings you joy anyway."

Shannon:  Aw, that's cute.

Patrick:  So if we look at my script for that over here...

Fr. Robert:  You wrote this before.  This is just a regular expression exercise.

Patrick:  And so everything up here is exactly the same.  I'm still getting the input from the query string.  I'm still separating it into different values.  Here, you can see I have the same if its animal then set that.  Then I did name, so I have a second field.  If I've entered name, set it to that.  If I haven't then it's unknown.  So if I left that field blank then it would come back unknown.  Then it prints out the values down below.  It's just another field to look for in the URL.  If we look at the URL up in the top of the browser here you can see it has animal=cat and name=Schrodinger.

Shannon:  So it appended both of the form answers at the end.

Patrick:  Yes, and it puts the ampersand between everything.

Fr. Robert:  You can get really, really long.  You've seen those URLs that seem to go on forever.  That's because they are appending all of the data that has to get pushed to the scripting code.

Patrick:  Theoretically I could change the cat's name to Luna right here in the command line without even submitting form.  

Shannon:  Oh, that's awesome.

Patrick:  So it's changed here.  

Shannon:  Oh my gosh, that blows my mind.

Fr. Robert:  Because remember, all of the GET function did was appended the data that the user entered into a URL.  So you can just change the URL and bypass the form altogether.

Shannon:  I think I just figured out how to bypass.  There is a coupon printer thing that only lets you do 2 per user name, yeah.

Fr. Robert:  By the way, what we are going right now is pretty much what people do when they start testing databases for a sequel injection.

Shannon:  Hacks.

Fr. Robert:  If you see a sequel database, it's got a really long URL.  People can just start pushing values into that string to see if the sequel server falls over.

Shannon:  That's awesome.

Patrick:  Yeah, if this form had hidden fields you could change them easily by just changing the URL even if it's not available apparent in the form.  

Fr. Robert:  Which, by the way, we are not doing it right now because we don't have the time, but this would be a really good place to sanitize your inputs because you need to make sure that someone didn't say the name of my bunny is "DROP TABLES" because that would be bad.

Patrick:  I'm trying to provide easy examples that just show the basics.  Really if I was doing this I would have all sorts of error checking like, oh, you didn't actually enter something here, or you entered this invalid value that has +, and ;, and everything which just trying to keep it simple for these examples.

Fr. Robert:  Right, right.  Now, what I really like about this, Patrick; if people are freaking out, if they are looking at your code thinking this is too difficult, go back to Episodes 2-4 because this is just a rehash of code he has already shown you.  If you were able to understand Episodes 2-4 this is just taking that code and wrapping it with a piece of script that allows it to work on the web.  That's all it is.

Shannon:  We've got a pretty interesting one down here from eSoul.  He said, "This is why you want to use POST instead of GET."  A POST isn't safe either.

Fr. Robert:  Stop cheating!  We are not getting to POST until next week.  Yeah, it's not like POST makes all of the problems go away.  No it doesn't.

Patrick:  No, it doesn't.  It's just as vulnerable.  It's just a little harder.

Fr. Robert:  Alright Patrick, what else do you got?

Patrick:  One more example.  In this one I took the same thing.  I've added a few more fields, but we've got checkboxes and radio buttons.

Shannon:  Oh boy.

Fr. Robert:  We love radio buttons.

Patrick:  So if you want to see how this happens.  Favorite animal we are going to say hippo.  Animal's name is Bryan.  What does the animal eat?  Vegetables, meat, no so much seeds, we will say hay.  Is this animal cute?  Sure.

Fr. Robert:  Is there an entry for steam buns?

Patrick:  I could have put steam buns in this form.  This is just the html over here.  We've got just checkbox and radio.  See the value is food for all 4 of these and cute for these 2.  So this could be something interesting that happens here when we submit.  So you can see the query string here has food, food, food, and 1 value of cute.  So it said, "You said Hippo...  It eats hay.  Okay, whatever, I hope Bryan brings you joy anyway.  At least Bryan is cute."

Shannon:  Aw.

Patrick:  And so if you look at the code for this, I kept everything the same.  Going down here I've got animal name, but then I have the if food, it eats, and then print the name but because hay was the last one checked, it's the last one in the order.  The way I've got this set up it's only doing that.  So if I was doing this for legitimate program I would have to go through and make sure that I got every value of hay in the URL.  So that would need a 4 loop and more stuff.

Shannon:  More stuff.

Patrick:  Yeah.  But in this coding I assigned name and animal up above, but down here I'm just calling this these variable directly without reassigning them.  If it's cute, say this, if it's not then say, "What do you mean", and it's doing more down here. 

Shannon:  If they didn't and are lame...

Fr. Robert:  We will have this up on our GitHub so you can go ahead and pull it down.  

Patrick:  So everybody can look at it.

Fr. Robert:  Thank you very much.  Now, Patrick, we've only got 2 episodes left, and I know that next week we are going to be dealing with POST because we have got to figure out the other way to pull data in.

Shannon:  I can't wait for that.

Fr. Robert:  I'm wondering if because we do believe this, we've always said that you should sanitize your input, should we show them at least a rudimentary way that they could sanitize the inputs coming off of forms?

Patrick:  Yeah, I think that we can do that.  Week 8 would be a good time to do that and regular expressions come in really handy for that.

Fr. Robert:  Yeah, yeah.

Shannon:  And then we can show them how to hack the form if it wasn't.

Fr. Robert:  Right now actually, I think that's the homework.  The homework is to figure out what sites are not sanitizing their inputs.  Report back, though, don't do that; if we told you to do that than we would get in trouble.  There are a lot of sites out there that are not sanitizing their inputs.  They have really crappy forms hitting a sequel database and you are like, I could just type anything in here and the sequel database will take it.  That's essentially what is happening, and that is what we are going to try to teach you to not let happen.

Shannon:  I have a form I need to check.

Fr. Robert:  Hacks.

Shannon:  I'm not going to tell you where it is.

Fr. Robert:  Hacks, lots of hacks.

Patrick:  Is it at

Fr. Robert:  But Patrick, of course we are going to be covering more forms next week with POST, but I want to thank you very much for being our Code Warrior again.  Can you tell the folks where they can find you?

Patrick:  They can find me on Twitter.  I'm @pdelahanty, and also check out my website,, I mentioned it last week.  We have a new episode where we take a dremel to a Game Boy.

Fr. Robert:  Stop that.  You are destroying my childhood.

Patrick:  Man, that's what we do, we destroy stuff.

Shannon:  That's awesome.

Patrick:  That was actually recorded like 2 years ago, but we finally posted it.

Shannon:  Oh my gosh.

Fr. Robert:  Chibi Project destroying everything I loved from my childhood.   Actually, thank you Patrick.

Patrick:  It was my pleasure.

Fr. Robert:  We love you, and thanks for opening our eyes to something that I think a lot of us take for granted.  When we thing about forms we think, oh, just type it in and hit submit.  Once you understand actually what is happening in the background I think you get a bit more respect for what the programmers had to do to make that happen.  Again, that is Patrick Delahanty, our Code Warrior, we salute you sir.  

Shannon:  Oh, Mr. Monday, no; Coding 101 is not cancelled.  Two episodes left for the module.  

Fr. Robert:  We change modules.

Shannon:  We do 8 episodes per module per coding language; so we did 8 of C Sharp, we did 8 of Python, and then 8 of Perl.  In between each of those we have 2 episodes where we do really cool interviews.

Fr. Robert:  Which, by the way, I think we have finally got those lined up.

Shannon:  I think I know one.

Fr. Robert:  Ah, yes, unless we have a fall through, we believe we are getting a representative from Google from Go.  So we will be able to talk about Go and all of the cool things about that language.  The other one, I think you know.

Shannon:  I think I do; Mr. Darren Kitchen maybe?

Fr. Robert:  Darren Kitchen is going to come on and tell us a little something something.

Shannon:  From Hak5.  I don't know, kind of familiar.

Fr. Robert:  Maybe some of the blacker side of programming.  I'm just saying.

Patrick:  I had better sanitize that input right now.

Shannon:  Yeah you had better.

Fr. Robert:  No, seriously; you better.  Now we know that this was a lot of information for you to take in.  You are not going to be able to get it on the first pass, so if you want to find our episodes in any way, shape, or form, any possible format that you want you can always find it on our show notes page, which is or  Either one will get you there.

Shannon:  Make sure to check out the GitHub link in each of the episode's show notes.  That is where you can find the code for each and every episode.  Also, make sure to follow us over on iTunes.  You can just search for Coding 101 in the iTunes Podcast area.  You can find us there.  Please subscribe; let all of your friends know about it and tell them to subscribe, too.  Download the show every week.

Fr. Robert:  I know that in the past we have been telling you to go to  That's not working right now.

Shannon:  We do have the new Google+, the legit Google+ link.  It's  You can go over there and join our awesome community.  We check it out every single week to see what you guys are up to.  Thank you so much for sharing your coding examples with us, too.  We love showing those off on the show.

Fr. Robert:  Don't forget to push them in there because Shannon pulls from that community to find examples for each and every episode.  

Shannon:  They are also really helpful for me, too, whenever I am learning about this stuff.

Fr. Robert:  Well, that's the other thing.  It doesn't matter what level you are, you can be beginning, advanced, or expert.  That's a great community to be a part of because if you are an expert you can impart your knowledge on the people that are growing in the coding world.  If you are a newbie you get to reach out to people who have been doing this for years, and years, and years.  It's a win.  It's a win win for everyone.

Shannon:  That's true, very true.  Also, we are on YouTube, aren't we?

Fr. Robert:  Yeah, you can find us at  We understand that most of the people actually watch the show on the download from the RSS feeds.  That's cool, but if you want to catch it on YouTube we offer it because, hey, we loves ya.  Now, Google properties aren't the only place that you can find us.  You can also find us on Twitter, at least I'm on Twitter, I'm @padresj.

Shannon:  And I'm @snubs.

Fr. Robert:  And don't forget that if you are going to be joining us, why not join us live?  This is like real.

Shannon:  We are doing live!

Fr. Robert:  We are doing live, yeah.  Every Thursday at 1:30 Pacific Time you can find us at  As long as you are watching us jump into the chat room.  You see us grabbing questions from the chat room because our chat room is filled with some really, really bright people, including Tjoecodeforsalellc.  He's been a long time member of the community since day 1 actually.  In fact, he was one of the people who were asking Leo for a coding show.  We are trying to set up something with him where we are going to have him come in and do 2 guest coding episodes.  It's awesome; make sure you join us at  Until next time I think we are about done, right?

Shannon:  I think we are.  I'm Shannon Morse.

Fr. Robert:  I'm Father Robert Ballecer.

Shannon:  End of line!

All Transcripts posts