Transcripts

Coding 101 37 (Transcript)

Shannon Morse: Today on Coding 101 we are building and App from the ground up.

Advertisement: Netcasts you love from people you trust. This is TWiT!

Bandwidth for Coding 101 is provided by Cachefly at c-a-c-h-e-f-l-y dot com.

Coding 101 is brought to you by Squarespace, the all-in-one platform that makes it fast and easy to create your own professional website or online portfolio. For a free 2 week trial and 10% percent off go to Squarespace.com and use the offer codes C101. And, by Lynda.com. Lynda.com is an easy and affordable way to help you learn. Instantly stream thousands of courses created by experts on business, software, web development, graphic design and more.  For a free trial, visit Linda.com/c101. That’s L-y-n-d-a dot com slash c101.

(music)

Fr. Robert Ballecer, SJ: Welcome to Coding 101, it is the show where we let you into the wonderful world of the dancing code monkey. I’m Father Robert Ballecer.

Shannon Morse: And, I’m the dancing code monkey, Shannon Morse. Welcome to the show. Today we’re going to get you all learned up on everything you need to know in the next 30 minutes to become a code master.

Fr. Ballecer: That’s right! And, now, Shannon , we’re doing something a little strange, a little different. This is unique.

Shannon: I’m kind of excited.

Fr. Ballecer: Kind of excited. So, what we’ve decided to do is, we’re actually… We’re kind of ending the C# module, but, not really, because, we are actually extending it.

Shannon : Surprise!

Fr. Ballecer: I know, Surprise! We will be building an App from the ground up in C#. Show people how some of the different concepts that we’ve given them over the past 6 weeks can be used to create something that is functional across multiple platforms.

Shannon : This is also a great excuse to give me less homework when I go on my honeymoon at the end of the month. So, thank you for this excellent idea.

Fr. Ballecer: Yeah! Well, I thought you probably don’t want to be prepping for shows during your honeymoon.

Shannon : Yeah! Probably not!

Fr. Ballecer: You know, this is a gift from all the code warriors to you.

Shannon : And, I bet you guys are super, super excited to learn how to build your own Apps. I know I am! But, first we have some Snubs Compiled to get into.

Fr. Ballecer: Let’s do that!

Shannon : Yea! So, I have my computer all set up with three different examples this week from our viewers. We got some really awesome examples in our Google+ community. Of course, if you guys want to visit it, go over to Google+, sign up, and go over to bit.ly/Twit.coding101. So we got this awesome one from Ayesh, so Ayesh basically gives us an array, a sample of an array. So, his code is really, really, really simple. You basically just go over here, you see it is called namespace AyeshExample. Regular class Program – that is just what is already in there, as usual. Then, static void (string[] args). So, he has an int called c101 array, then, he creates a new int with 10 different variables in it. So, 10 different…

Fr. Ballecer: Nice, values…

Shannon : Yeah, values, that will come out of it. Each time that he inputs it, it will increase by one and you should end up with 10 different ones that output onto the console. So, when I build the solution and hit start, it simply gives me a nice little array.

Fr. Ballecer: Which is what we wanted.

Shannon : Very easy!

Fr. Ballecer:  We wanted people to be able to initialize and array, to fill it, and then output it.

Shannon : Exactly! Now, I also had a really, really cool one, also, from…Go away, Darren! Gosh! I know you aren’t available for interviews. Uhh!  So, the second one is from Rick and Rick basically said he wanted to create one that was an iterator demo. So, he basically takes collections and gives us examples in an array, in a list and so on and so forth. So, I’ll go ahead and show you that one as well, the iterator demo. Now, this one is really, really long, his code is extremely long, but, he also included a bunch of different notes in here for each and every bit he created. So, you can scroll through his code and completely understand exactly what he is doing in here. When I go ahead and hit run, go ahead and build that solution. Ok, so I have to rebuild it every time I do this, but, you can see what he is doing, here. He is doing a Fibonacci array, a list, an iterator, and manual input. So, I’ll just go ahead and do #2 for list and then hit enter. Ooops! Let’s do that, again.

Fr. Ballecer: There we go!

Shannon : 2, how many numbers do you want to generate?

Fr. Ballecer: Let’s just say 13.

Shannon : 13, ok! Hit enter. So, it generates each of the numbers and then it outputs the Fibonacci sequence.

Fr. Ballecer: There we go, the Fibonacci sequence.

Shannon : Then you hit enter to exit. And if I hit it again, go ahead and run it. Let’s do #1 this time. We’ll do 13, again. Generates them again, gives you another list. Well, in that case, it was an array. Now, if I do #3, I’ll do the same amount – 13. Now, look at the difference with this one. Pretty cool, right?

Fr. Ballecer: What is it doing there?

Shannon : It generates in between each one.

Fr. Ballecer: Ok! Yes, yes!

Shannon : So, this is an iterator.

Fr. Ballecer: So, rather than creating an array of numbers and dumping it out, it is actually recalculating between each one.

Shannon : Exactly!

Fr. Ballecer: That is very cool! Nice!

Shannon : Then, #4 is a manual out…so, I’ll do 13, again and this time it says, ‘current number requested’ and it gives you 2, 3 all the way up to 233.

Fr. Ballecer: All the sequence numbers.

Shannon : So, each time, you’ll end up with the same kind of output, but they’re put on your screen in different ways, depending on what kind of collection, list or array that you put it into. If that makes sense.

Fr. Ballecer: And, again, very simple programs that require very simple algorithms. But, what we are trying to make our users do is, can you take a data set – something that is a known quantity – find different ways to use it. Any time you can iterate it in a different way, it means that you are learning a little something else about coding which is what we like.

Shannon : And, we have one last one – this one is from Joe. Joe keeps giving us really good examples.

Fr. Ballecer: We like Joe! Joe is awesome!

Shannon : We love Joe. So, Joe has continued on the pod casting app for us. This time he did a XAML only podcast viewer. So if I go ahead and run that code, you’ll se a little bit of a difference in here. Let me pull up, here – let’s see…I’ll bring up the code for you.

Fr. Ballecer: Oh, Joe! Went all XAML-y on us!

Shannon : Yeah, he went very XAML-y. He discovered you don’t have to have all the fun extras in here. You can just create a XAML output and make it look like something like this.  So we have a complete new window for it, we have some kind of pod cast that plays, and, then, all the different ones are listed over here on the side.

Fr. Ballecer: And, again, this is cool, because he is playing around with the view, in the view model, model view…

Shannon : Exactly, yes! So, we had a lot of questions about that and our Google+ community was really, really helpful, explaining, not only that, but, also, the differences between lists and arrays.  So, if you guys are still confused, I know I was a little confused after last week’s episode, as well. Check out our Google+ community because I got some really, really good answers in there as far as all the differences with all the different terms that we’ve been using here.

Fr. Ballecer: Very cool! Very nice! You know, our audience always amazes me. Because there are always people in there that say, “You know what, I wonder what would happen if I did this, instead?” That is how I learn. I mean, I know there are lots of people that learn the traditional way, you know, went to a class and they did this and did this and this. That’s my background!

Shannon : That is how learned my first programming class.

Fr. Ballecer: But, then you expand by breaking things and stretching them and making them do things they weren’t expected to do.

Shannon : It is so much more fun when you can break things.

Fr. Ballecer: I like breaking things!

Shannon : That is so bad! (laughing)

Fr. Ballecer: But, you know, sometimes you don’t want to break things, you want to be able to present them just kind of nicely, right?

Shannon : True!

Fr. Ballecer: And, on the internet, you know this, we’re both people who make our living on the internet…kind of…interwebs.

Shannon : (laughing) My beer money.

Fr. Ballecer: Uh huh! Not mine! You need to make sure that you got a site that attracts people. That means you are going to have the domain that you want, it means you are going to have the content that you want, and it means that it is going to have to be up, and it is going to have to be functional and it is going to have to look good.  This isn’t the 90’s any more; you can’t get away with the html file that says, “Hi, I’m under construction.”

Shannon : Ahh, man! No more gif (jif), animated gifs? Or gifs (gifs).

Fr. Ballecer: No more animated gifs (jifs) or gifs (gifs). We have to cover both, because people get mad if we don’t. You know, sometimes, you just want to get your great idea, your portfolio, your pictures, your videos online. You don’t care about any of that back end stuff. That is why we are happy to have Squarespace. Now, what is Squarespace, Shannon?

Shannon : I love Squarespace! They are an all-in-one place for everything you need to build a website.

Fr. Ballecer: Exactly! It is that one-stop shop which is what we like so much. Squarespace gives you one place where you can go pay a low monthly fee and have everything taken care of for you. No backend add-ons, no wondering whether or not I’ve got the right framework up, no wondering whether or not I can get the domain that I need and make sure that it is paid for each and every single year. Squarespace takes care of all of that for you and just lets you create, which is really what you want to do. Now, I’ve been using Squarespace over the last couple of years because I deal with a lot of non-tech savvy organizations. You know, hey have content, they have ideas that they want to get out to the world, but, they don’t have an on staff programmer, they don’t have an IT person. Squarespace is perfect for that. They’ll take care of all the tech, all you have to take care of is getting things up that people actually want to look at. Now, they are constantly improving their platform, which is one of the things I like about Squarespace. They don’t sit back on their laurels saying we’ve got a good service, let’s leave it there. They are always giving you more functions, more features, more templates, more beautiful things to look at. They’ve got 25 beautiful templates for you to start with and you can customize them to get the exact look that you want. They’ve also recently added a logo creator tool which is great for individuals or small businesses who want to create their unique identity online, but, they can’t pay a graphic designer.  It is a great way to get up and running with your Squarespace. It is also easy, crazy easy, to use, but, of course, if you want help, Squarespace has live chat and email support 24 hours a day, 7 days a week. Plus, they’ve got a completely redesigned customer help site for easier access to self-help articles and video workshops. If you need a step-by-step on how you get your content on Squarespace they will be there for you. They also have e-commerce available with all their subscription plan levels which includes the ability to accept donations which is great for non-profits. For example, setting up a wedding registry, any time you need people to be able to give you resources; Squarespace will be with you, backing you up. It is also inexpensive, at only $8 a month, starting price, with a free domain if you sign up for a year, it’s not going to break the bank. And, it’s mobile ready, this is one of the things I really like about Squarespace, and that is, if you’ve every designed a site and it hasn’t looked right on a tablet, but, it does look good on the desktop, maybe not good on a phone, that’s because it’s not dynamic. Squarespace takes care of all of that. You just create the content and they will automatically adjust it so it looks right on a phone, on a tablet, on a desktop, on a smart TV, no matter who is looking at it, it is going to look right. Now, even their code is beautiful. This is important to us on Coding 101. That’s right! If you take a look behind the curtain, the code that makes Squarespace so beautiful is not just the jumble of junk, it’s code that I would right. That makes me know they’ve put the time into making sure that they are giving the product I’m paying for. Now, Squarespace includes their hosting, which means there is no reason for you not to try them. Right now! Start a free 2-week trial with no credit card required and start building your website, today. When you decide to sign up for Squarespace, make sure to use their offer code C101 and get 10% off and show your support for Coding 101. We thank Squarespace for their support of Coding 101. A better web awaits and it starts with your brand new Squarespace. Thanks, Squarespace!

Shannon : Thank you!

Fr. Ballecer: Shall we get to some, uh, app action, here?

Shannon : Yes! I’m ready!

Fr. Ballecer: I can tell it’s going to be a little bit different, here, because, we wanted to take a step back. We’re not talking about specific coding techniques, we’re not talking about specific functions, specific methods, API ’S, none of that.

Shannon : But, I thought this was coding?

Fr. Ballecer: This is coding, but, you know this, you know this! Any time you start a new project, the best thing that you can do is actually to take a step back and look at all the things you need to do, because then you can figure out how you are going to do them.

Shannon : Absolutely! You have to think outside the box, to look at the big picture.

Fr. Ballecer: You have to think outside the box! And, for an App – we’ve been saying this from day one – the big challenge of coding is not learning what pieces of code do what, the big challenge is learning how to take a real world, big problem, and break it down into smaller pieces that can be solved with code, right?

Shannon : Uhh! – Yeah! That makes sense.

Fr. Ballecer: Ok, so, what we’re going to do – we’re going to take and App, a typical app that maybe you might create your first time out. Something not too difficult, but, also, not so easy that it just prints out a list of something. We want to create something that people might actually buy or might actually download, because it sounds interesting.

Shannon : Ok!

Fr. Ballecer: So, I’m thinking, how about like a task manager?

Shannon : I love task managers!

Fr. Ballecer: ‘To do’! Your list of all the things…

Shannon : I use them all the time. Those are some of the most useful and productive Apps that I have.

Fr. Ballecer: Now, when we are considering our App, the first thing we want to do is that we want to make sure it is a little bit distinguished; it’s got to be somewhat unique. I can’t make a task manager just like every other task manager on the internet, otherwise there is no reason for people to download it.

Shannon : Sure! So, we need to come up with some essential features that it would include.

Fr. Ballecer: Right! So, for example, what if, what if we made a task manager – a to-do list – that also let you take pictures of the task!

Shannon : Oooh! Then you could include those in the task list.

Fr. Ballecer: Yeah! Let’s do that!

Shannon : Ok! I like that!

Fr. Ballecer: So, you’re walking around and you’re like, ‘Oh look, the lamp is broken.’ So, you take a picture of the lamp and you attach it to a task and, so, now you have a visual representation of something you have to do.

Shannon : What about if you could include a location with your tasks?

Fr. Ballecer: I like that! Oh, that’s great! Because, then I could map out my day. Let’s say, ‘Oh, you know what, I’m going to be in San Jose earlier today and I’m going to end up in Petaluma and I’m going to end up in San Francisco .” What if it could cluster my tasks near those geographic locations, so I know when I’m in San Jose I need to do all my San Jose tasks, when I’m in San Francisco, do all my San Francisco tasks and when I’m in Petaluma, I just sleep in the …..

Shannon : Ha, Ha, Ha! Perfect!

Fr. Ballecer: Yeah!

Shannon : Well, if we’re going to include locations on there, I don’t want, like, crazy people showing up at my doorsteps, so I want to have some kind of user authentication procedure so it knows who I am whenever I log into it.

Fr. Ballecer: Right! Great! So, now we’ve got it. Now we understand what our app is going to be. Our app is going to be a task manager that is going to include the ability to take pictures, to use location data and to have some sort of authentication.

Shannon : Would we need some kind of back end for it – like a server?

Fr. Ballecer: Probably! And that is actually…now we are getting to the true first step. Once we figured out what our App is we’ve got to break down its functions.

Shannon : Yes, absolutely!

Fr. Ballecer: Because, it’s no good just to say, ‘Oh yeah, I’m going to have an App that does all these things…’ What are the things it is actually going to do? So, Shannon , I’m going to throw this over to you. If I wanted to create that, if I wanted to create a task manager that can take pictures of my tasks, that can associate with geographical locations, that can authenticate so I can either choose to share or not share… What are the actual functions of a task? And, I like to go from the inside out, so start on the phone and then end up with what is off the phone.

Shannon : Well, I need to securely communicate those.

Fr. Ballecer: You do. Ok.

Shannon : If I’m starting on my phone, I need to make sure that nobody is going to be able to do a man-in-the-middle attack and see whatever I’m doing.

Fr. Ballecer: Ok! That would actually be off the phone, though. That is starting on the other side.

Shannon : Yeah, I see that.

Fr. Ballecer: That’s ok, though. That is our demarcation point. Right? So we know that at some point we are jumping off the phone to outside. So, what would be the other functions of this App?

Shannon : Ummm! Oh – it would use your GPS ,

Fr. Ballecer: Ok! Yes, it’s got to use GPS .

Shannon : And your camera.

Fr. Ballecer: It’s got to use GPS ; it’s got to use a camera. It’s also got to be able to maintain the task list at some point.

Shannon : Yeah! So it stays memorized.

Fr. Ballecer: It stays memorized. So, it’s got the ability to make tasks, it’s got the ability to take pictures, it’s got the ability to use GPS coordinates, it’s got the ability to have an authentication process, and you already mentioned, it’s got the ability to communicate with the outside world.

Shannon : Ahh! So, would we want it to communicate with like Yahoo or Google or something?

Fr. Ballecer: Yeah! Now we are starting to look at the second thing.

Shannon : Oh!

Fr. Ballecer: Once I’ve got my list of functions that I actually want to include inside of my App I have to start looking at what are the resources that are available for me to do that.

Shannon : Right!

Fr. Ballecer: So, when I look at functions, I look from inside out. What is on the device to what is off the device.  Whenever I start looking at resources I go from the outside in. What is available off the device and then what is available, locally.

Shannon : So, one thing you could do is, if you want to use two factor authentication, you could use the Google authenticator, because it is already made.

Fr. Ballecer: Exactly! I can use the Google API ’s. Google has some great API ’s that are available for me to use. Just like we were using classes we didn’t create, if I can use someone else’s API it means I don’t have to program all of that.

Shannon : You might as well do it!

Fr. Ballecer: Might as well do it! Right! And if I didn’t do that it would mean I would have to build my own backend. I don’t really feel like doing that.

Shannon : No, you don’t want to do that. It is too much work.

Fr. Ballecer: It’s too much work and Google’s server farms are way more parallel than mine will ever be. Let’s also talk about, in terms of resources, I need to have my GPS and I need to have my camera. Those are three things I absolutely want. I want to be able to access someone else’s backend because I don’t want to build it, I need to access, on my phone, my camera and my GPS . So, now I’ve got my App description, I’ve got my App functionalities, I’ve go the resources I need to do it. Here is actually the fun part. I have to create the logic tree for the App.

Shannon : The logic tree? What is that word?

Fr. Ballecer: We’ve talked about this before. Remember when we were discussing how you would take a binary sequence and turn it into a decimal number?  And it was all that… ‘If this is this then I have to do that, and if this is that, then I have to do this.’

Shannon : Yes! I do remember that.

Fr. Ballecer: Right! You could actually flow chart it. You can say, ok, I’m going to need this, this, this, and then the phone has to do that, that, that and the back end has to do this, this, this. We’re going to give a super generalized logic tree because we don’t want to get down into the minutia, that would be silly. But, considering what I just said what I want my App to do, and considering what I just said my App should have resources for, let’s look at the logic tree. The first thing the App needs to do is it has to connect to and authenticate with Google’s API ’s.

Shannon : Yes, that makes sense.

Fr. Ballecer: That is going to be the start of everything. That is where my data is stored. That is where the App location starts.

Shannon : Ok!

Fr. Ballecer: Once I’ve authenticated, I need to get a list of my tasks from that API . Because, remember, I’m using…I’m assuming I’ll be able to sync across multiple devices, which means my data can’t be stored on my device, alone. It has to be stored …

Shannon : It has to be stored somewhere else and you’ll just be able to access it anytime you open the App.

Fr. Ballecer: Right, right! Now we know from what Lou did with using external data sources and actually from what Patrick Gallahanty did with Perl, that when you get that information, that’s one thing. It is just like a big string, it is a jumble of data. I need to turn it into something useable.

Shannon : Ok! So this is where the gooey comes in.

Fr. Ballecer: Well, yeah, yeah! So, now that I’ve authenticated, I’ve gotten data, I’ve got to turn it into some thing useful. Actually, I have to turn it into a list of tasks. My task list.

Shannon : But you have to be able to interact with those different tasks.

Fr. Ballecer: That will come later. That will come later. We are still doing all the back-end stuff. So this is preparing it for use. Now, I have to interact with it. So, once I’ve gotten that ready, I have to present it to the user, because there has to be some interactivity, because, otherwise it is just some stupid list.

Shannon : Yeah! Ok, so you want to be able to delete tasks.

Fr. Ballecer: Yep!

Shannon : You want to be able to copy them, or maybe duplicate them. What else?

Fr. Ballecer: You’ve got to create them.

Shannon : Yeah! Be able to create them. Um, maybe like color code the different tasks, um, what else?

Fr. Ballecer: You need warnings, scheduled in warnings.

Shannon : Oh, yeah!

Fr. Ballecer: So if I have a task that is supposed to happen at a specific time or if I’m doing the whole geo locating thing, it should tell me, ‘Hey, you are in this area and you have a task scheduled for this area.’ ….

Shannon : That is a good idea!

Fr. Ballecer: ….Maybe it is time for you to take care of it. 

Shannon : I like this, why doesn’t this exist, already?

Fr. Ballecer: It should, well, we’re going to write it.

Shannon : Um… including your photos in the tasks. That needs to be available.

Fr. Ballecer: Right! And, including your GPS coordinates in the tasks.

Shannon : Including the GPS coordinates,

Fr. Ballecer: So that is all the interactive levels, so that is the stuff that has to happen between the user and the device and the API .

Shannon : Oh, that is a good one! Dallas in the chat room says, ‘Voice input would be nice!’ That’s a great one!

Fr. Ballecer: Voice input would…why not attach a voice memo to your list of tasks. And, of course, the last thing – when I say the last thing – this is going to keep happening in a cycle, because we don’t do this once.

Shannon : Kind of like a loop.

Fr. Ballecer: It is looped over and over until I tell it to stop. The last bit would be to make sure that any changes I make, any pictures I attach, any GPS coordinates that I do, any tasks I delete because I’ve done it, I have to save it back up into that back end server.

Shannon : It has to be saved. Yeah! That makes sense.

Fr. Ballecer: Ok, so that’s my logic tree. That’s what I have to do. Now, if we were doing the logic tree for real, the board would be huge, because each of those has a process that is attached for it. For example, I want to access the camera on my phone so I can put a picture. Well, I need to access a particular API that would give me access to the camera. Once I have the picture done, I have to access another API that will bind it to the data that is coming from my data source, which can then push it back to Google Task. We’re not going to cover that because the show would be too long.

Shannon : Oh my goodness! That sounds confusing!

Fr. Ballecer: The last thing we have to do, we go through our logic tree and we make every step of the logic tree, reality. We have to find a way to do it. And, Bryan , do you have the things I put in the document? The first thing would be to get the API ’s, now our code warrior, Lou, was wonderful enough to gather these resources.  The first one is the NuGet package that allows . NET programs to access many of the Google API ’s. This is it, right here.

Shannon : It’s a nugget.

Fr. Ballecer: It’s a NuGet!  But, this gives me a very easy way, if I’m writing in . NET to do an ‘include’ which will suddenly allow me to access everything in the Google API . Now, Lou is going to have to go through the process of actually applying for access to the API , because, it’s…yeah!  We’ll let him do that.

Shannon : Oh, ok!

Fr. Ballecer: Now, once we get this NuGet package, it will allow us to access the Google API ’s. If you go ahead and show off those Google API ’s, there is a crazy amount of them.  These are all the Google API ’s that you have access to, and if you scroll down towards ‘T’, you’ll see that one of them is called, ‘Tasks’. You’ll have to scroll a little higher, Brian, it is hidden by the bug. ‘Tasks’, the ‘Tasks API ’. The ‘Tasks API ’ is the part of this that is specifically going to deal with our applications. We want a way to store tasks, a way to modify tasks, it is all built in right there.

Shannon : Awesome! You don’t have to do any work, yourself!

Fr. Ballecer: Actually, that is kind of true, right? We’re going to be borrowing all these bits of code from other people. Now that we’ve got that down, we’ll have to talk to our code warrior to find out how we have to turn this concept into a reality. But, before we do that…

Shannon : Before we do…

Fr. Ballecer: We gave you a nice, fuzzy walk-through on how we would develop an App, but, there is an organization that could actually fill in the minutia. All those things we didn’t talk about, and help you develop your own, App. Shannon, who might that be?

Shannon : Oh, I know, I know! I call them Lynda.com. Easy to use, super affordable and they are the place to go for thousands of courses on everything that you ever need to know about pretty much anything – software, web development, graphic design and so much more. Lynda.com works directly with industry experts and software companies to provide timely training, often the same day that new versions or releases actually hit the market. So, you are actually up to speed every single day that you go back to their site, and you want to learn new stuff for anything that hits the news. All courses are produced at the highest quality so their not like, you know, homemade videos on YouTube with low audio specs, not very good video quality. These are excellent courses and they are broken down into bite sized pieces so you can learn at your own pace. And, you can learn from start to finish or you can just find a really quick answer. And, their tools also include searchable transcripts, so, hey, I mentioned you can find a quick answer, just look in the transcripts. You can just hit Ctrl F and find whatever you are looking for. They have playlists and certificates of course completion.  So, you can publish them to your LinkedIn profile which can definitely help you get a job in whatever kind of thing you are trying to learn about. So, you are actual professional in your field. So, whether you are a beginner or advanced, Lynda.com has courses for all experience levels. And you can learn while you are on the go. So, hey, I’m going on my honeymoon later this month. I want to be able to get those videos while I’m on the plane. So, I’ll just connect on my iPhone, my iPad or my android device and watch those videos while I’m on the go. And, all this can be done on one low monthly price $25. That gives you unlimited access to over 100,000 videos tutorials and that number just keeps on going up.  Premium members also get an annual plan. They can download courses to their iPhone, their iPad or their androids and they can watch them offline, as well.  Premium plan members can also download project files and practice along with the instructor. I’ve been using Lynda.com for years. I’ve used them for everything from photography expertise; so, I’ve learned a whole bunch about photography and even how to build my own website. So, they’re really, really handy for pretty much anything, especially if you have tech questions. If it has to do with programming, this is the place to go. Lynda.com also has courses on ‘up and running’ with CentOS Linux.  I love CentOS. It is so fun!  Practical cyber security, Amazon web services, Essential Training, and ‘up and running’ with Symphony 2 for PHP. So, hey, coders, check it out. Very, very good! And for any software that you rely on Lynda.com can help you stay current with all software updates. And, you can learn the ins and outs to be more efficient and more productive. And, we’ve got a special offer for you to access all the courses for free for 7 days. That’s free learning for a whole week. Go visit Lynda.com/c101 to try Lynda.com free for 7 days. That’s l-y-n-d-a.com/c101 and of course, we thank Lynda so much, from the bottom of our hearts, for supporting our little show over here.

Fr. Ballecer: You know I love Lynda. And, you know I use them for a reference.

Shannon : I do, too! I’ve used them a ton.

Fr. Ballecer:  I will say this, though; I download videos to my devices all the time. If you are downloading videos to your device for your honeymoon, you are doing it wrong.  I’m just going to put that out there.

Shannon : It’s a very long flight. It’s a very, very long flight.

Fr. Ballecer: That’s true, I’ll give you that. I’ll give you that! Actually, you might be able to brush up on GoPro basics.

Shannon : Oh, yea! There we go!

Fr. Ballecer:  Because, you’re going to be…  I expect beautiful video…

Shannon : My underwater snorkeling with GoPro Basics.

Fr. Ballecer:  It’s going to be, seriously, it is gorgeous out there.

Shannon : I can’t wait!… Anyway…

Fr. Ballecer:  It’s gorgeous, clear water! Anyway, this is the time where we don’t talk about honeymoons, we talk about code warriors.  Ladies and Gentlemen, we welcome back to the show, Mr. Lou Maresca, senior software developer from Microsoft. Lou Maresca, thank you for coming back to be our code warrior.

Shannon : Hi!

Lou Maresca: Thanks, guys. Ready to build an App, today?

Shannon : Yea! So excited about this!

Fr. Ballecer:  Build an App…  Now, Lou, it’s funny, because, everyone talks about building an App right now.  We were building these things way before they were called Apps. These are just programs that just happened to fit on a screen.

Lou: Right, yep!

Fr. Ballecer:  So, we talked a little bit about what are the basics, the fundamentals of going through an App. And, you know this, anytime you spend enough time at the beginning, actually talking about the process and mapping it out and charting it, so that you know it needs to do this, this, this and this, it makes the process so much easier. In fact, in the chat room, they were talking about this thing of feature creep. In fact, it was even happening while we were talking about it. People were like, ‘Well, wouldn’t it be nice if it did voice annotation and what if it could control a robot that did your tasks for you.

Lou: Unlimited possibilities.

Fr. Ballecer:  Yeah! If you map it out and you say, these are the things I want it to do, it allows you to get through the program without constantly adding new features so that at the end, you end up with – bloat!   

Lou: That’s right – bloat!

Fr. Ballecer:  So, Lou, we talked a little bit about gathering these resources and one of the principle issues was getting access to API ’s. Can you take us through that process, because Google is a great place to get API ’s?  We’ve got issues with Google right now, but, it is still a good place to learn. Could you show us what the process looks like?

Lou: You bet! So, like, one of the…I kind of thought about it for a while, there’s a lot of different places we can go to get API ’s. Google is one of them, Microsoft’s got a bunch, um, I think Google’s is a little bit… It has some structure API ’s that you can do, like around tasks and, like you were talking about, calendar and email and all that stuff. It’s really easy to kind of get to and I’m actually going to show you how to set it up and get going. So, if you actually show my screen real quick, the first thing you are going to want to do is, obviously, you are going to want to login to your gmail account, if you have one. If you don’t have one, go and create one. And, you’ll notice up here in the left hand corner, you’ll be able to go to your gmail, your contacts, your tasks. And so, down here, if you click on tasks, you notice this little guy in the corner pops up.

Shannon : I use that all the time!

Lou: Yep! Yep! You can create tasks there, you can, you know, set the tasks when the due date is and all that stuff and you can create different lists of tasks. So, it is basically broken down into like a small hierarchy for you. Well, what I want to do, is I want to basically be able to access all this, so let’s say I have a whole bunch of tasks in here, like grocery list, or maybe I need to do something else. So, what I’m going to do, I’m going to go over and navigate to a page called, Console Developers.google.com. You notice I already have an App here called, Coding 101 apps. But, I’m going to go through and the first thing you want to do is create a project. So, we need to give it a name, so I’m going to call it – the TasksApps. And, you have a project ID. It is usually supposed to be unique. I’m just going to call it TasksApps1 for right now. And then, down here, you’ll notice it is going to start doing this background process and what it is doing in the background is Google’s creating some space for you. And, it’s free space at this point and time until you start using it too much and then they’re going to start charging you for it. But, for right now, they are going to create some free space for you. If that doesn’t come back, then I’ll just show you the Coding 101. Ok, so it came back and, now, it created this special dashboard called TaskApps and what I can actually go through, here, now, is I need to set up the App. So, what do I want, I want to set up what I actually want to do with it, so, first thing I’m going to do is go to API ’s and off and I can turn off and on hundreds, I think there is about a hundred API ’s that Google can do, yeah!.

Shannon : Wow!

Lou: Crazy! So, they …

Shannon : Oh, that’s cool! So, you can do other things with Google, as well, like you can use their messenger and stuff like that.

Lou: That’s right!...Yeah! Even Google…

Fr. Ballecer:  And, actually, Lou, the important point here, this is actually why you’d want to use the API . We’re using Google, but, you could use Microsoft’s, you could use Yahoo’s, there’s a bunch of different services, cloud services, that give you API ’s to get hooks into their services. You want to do this, because, as Lou showed you at the beginning, it is so easy to use Google services on your desktop. If you can use it on your desktop, it means there is an easy way for you to get information into it and then, you can write an application to use those same data points on your phone, on your tablet, or wherever. That is the strength of using the API of an established cloud player.

Lou: That’s right! They make it super easy, basically, all you have to do is you click, like some of these are on by default, so, I’m just going to turn these off, because I don’t need Google cloud storage and any of that stuff. I just want to get access to my tasks. So, I’m going to turn those all off, and then in here, I’m just going to type in ‘tasks’ and it is going to show me…oh, there’s the task API . I’m just going …it says I’m allowed 10,000 requests per day. I think I’m probably going to be under that, so, I’ll go ahead and click ‘on’ and so that is going to enable that guy. And, of course, it shows my quota like how much of those 10,000 you’ve gotten so far. Which is kind of cool!

Shannon : So would that be like the users of your application, that many…

Lou: Um… that’s the…that’s a good question. So, basically, what that is, is how many times I either go and get the list of tasks, or I create a task, or that kind of thing. So, every time I make a request to Google API it is going to kind of take it away from my tally.

Shannon : Ok!

Lou: So, yeah! So, if you have a lot of users, then…using the same app, then, yeah, you’re probably going to, at some point, get over that quota, which means, then they are going to ask you to start paying for it. And, it’s not going to be that much, but, it’s going to be to the point where now you are a real app and you need to start paying for space.

Fr. Ballecer:  Yeah! This is really for the developing side. If you’re just developing, unless you’re developing with a huge team, you’re not going to go over that quota. Once you realize you’ve got a product, then you can actually negotiate with Google to say, I need full time access to the API , I’m going to have millions of hits every hour, what do I need to pay you?

Lou: And these are pretty reasonable, like if you’re just building an app for yourself, like at this point we’re just building it for ourselves, right now. We’re not here to sell it. I mean, this is pretty reasonable, like I could probably get by using this for, like, an entire month without having to worry about ever hitting or over hitting that 10,000 request mark. So, one of the things, if we pop over here, the next thing we want to do, once we’ve created the status on for that task API , we can actually go to, what we call, the content screen. And, what this is going to do, I’m going to need to choose my email address that I want so, there is a drop down, you can type it in there. And, you’re going to give it a product name. So, I’m just going to call it TasksApp for right now. That’s really all you have to do. Then, you’re going to hit save, and then, now it is going to set everything up for you. It is just as easy as that. Now what I want to do, is I want to give the ability, like you guys were talking about, to authenticate the user. So, the way you do that, is you hook on credentials, here. There’s two different ways of doing it, there’s what we call OAuth, which I think we already talked about that a little bit with the social app we built with Facebook and Twitter. All these cloud services, nowadays, offer this OAuth protocol to light authenticate. It’s just, sometimes, overly complex, but, they make it pretty easy to do, here. So, what you do, is you need to basically click on the ‘create new client ID’. It is going to ask you what type of App you have. And, in our case, we’re just going to do ‘installed App’. And, it is going to ask you, ‘what platform’. I found it kind of funny that Windows Phone wasn’t in here, but, we’re going to go ahead and choose ‘other’ and ‘create client’. And, really, all these kind of create similar stuff. I think Android’s a little different, because they have some code within the platform that should make it even easier, but the rest of them are pretty much the same, so I’m just going to click, ‘create client ID’ and what you’ll notice, over here…I’m actually going to delete this App after the show, so you guys can’t use mine, but, what it’ll do is it creates this unique, secret hash that I’m going to use within my App. And, it also creates a client ID so they can locate your App. This is basically your TasksApp in a big hash and it has a URL, obviously. Google user content at the end. So, that’s really it, now I’m set up, I’m ready to go, and they know what I’m going to be using, I’m going to be using the Task API and I’m going to be authenticating and I’m going to be using this code. Pretty simple, so far, right?

Shannon : Yea, ok, simple so far!

Lou: Yep! So, now, it is time for me to actually start using their API . So, that’s kind of the key. Now, we have to pop over to visual studio.

Shannon : So, now we’re getting into the code.

Lou: Now, we’re getting into the nitty-gritty, yep! So, the first thing is, there is all these fancy-schmancy frameworks, like for instance, Xamarin. There’s one called Cross or Xcross – or something like that. There’s a bunch of frameworks that allow you to build an App once in C# and then can kind of convert it over to these other platforms that we talked about before, creating and Android App or an IOS App.

Shannon : So, this isn’t going to be like a regular console application, like we’ve been doing, right?

Lou: Right. Exactly. But, what we’re going to do is, like what Padre talked about. You want to get the logic down before you start building the fancy-schmancy UI’s or user experience. And the reason why is, once you get that down, then it is really easy to kind of build the UI on top of it. Sometimes, you have to change the underlying infrastructure a little bit to code underneath, but, not too much. Normally, it is better to start with the nitty-gritty before you kind of move up the UI. So, what we’re going to do is, we are still going to build a console App, but, what I’m going to choose is, there’s one called a Class Library Portable. This is something Microsoft has created, called the Portable Class Library. That allows you to move it between, let’s say, Windows Phone or Windows Store App or Windows 10 – it is kind of all about this, moving it across any device, you know, that they offer Windows for. And, so, what this also allows you to do is then run this code through Xamarin or these other cross frameworks to allow you to compile for IOS or Android and it will automatically just work for you. That is kind of the key. So, we’re going to start with a console App. I’m just going to call it the TaskApp and hit, ‘create’. And, once that gets created, the next thing I’m going to do is add another project to this, so this is just the little App that allows me to test it. I like to call it my test App. Then, I’m going to add another project, ‘add new project’, and then in here, I’m going to go to, ‘again’ but, instead I’m going to choose, ‘Class Library’. I’m just going to call it Task Library. And this is a PCL or Class Library Portable. And, that makes sense so far, I think. So, Portable Class. So, pretty simple. So, now it is going to ask me, ‘where do you want it to go?’ How portable do you want it to be? So, I’m going to say, ‘Hey, I want it to be . NET 4.5, this is a Windows App for a desktop, Windows 8.1, Windows Store App, Windows Phone App. And, what this also allows me to do, then, is then if I choose all 3 of these, is pretty much every platform Microsoft offers. So, they are allowing you to build for this library to run on all these different platforms. But, also allows you to build inside a Xamarin, too. So, you can build it for IOS Android. So, I’m going to click, ‘OK’. And, now, I’ve got this Simple Class Library.

Shannon : Ohhhh!

Lou: And, pretty simple, and so then, I’m going to go into the properties and I’m just going to make sure the frameworks match. I think I chose . NET 4.5.1. and I want to make sure they match, because, otherwise, you’ll get an error saying, ‘it doesn’t work’. But, that was just the properties of this console App that I created.  So, now if you notice over here…they call this the solution package….solution file. It’s got two libraries.  One is my console App and one is my Portable Class Library. The one that we’re going to put all of our code in is going to be the task library. We’re just going to use the console App to test it.

Shannon : Ok!

Lou: So, pretty easy! So, what we’re going to do, now, is…and now I’m going to…first thing I’m going to do is make sure my console App can call into this Portable Class Library. So, I’m going to add what we call, ‘Add a Reference’ and, I’m just…it’s going to be right here, it says, ‘projects’. There’s another called Task Library. I’m going to check the box and hit ‘OK’. And, now, magically, down here it adds Task Library. So, now, anything that I build in this library I can access it in this library pretty easy.

Shannon : Oh, that’s cool, so you don’t have to reuse it in both places.

Lou: Yes, correct! So, basically, I don’t have to rewrite the code duplicate, called code duplication and I can basically just write all my code now in here. So, now, we have to start…let’s start talking about Google, how we access its API . So, for me, it’s…there’s like Padre showed us, there’s a bunch of places you can go to learn about it. But, it’s tough to find all the documentation, sometimes, and sometimes it doesn’t pertain to . NET . In Google’s case, though, they actually have . NET , Java and Objective-C. They have code samples for all three. But, there are libraries and we talked about this last time inside a NuGet that allows it to make it even easier. And, so, what I’m going to do is I’m going to add some NuGet libraries. So, I’m going to go to ‘Tools’. You guys remember NuGet, right? The package manager?

Shannon : Yes, I do!

Fr. Ballecer: Of course!

Shannon : Very easy to search in NuGet.

Lou: Yes! So, that’s what I’m going to show you, I’m going to show you how to search, so I’m going to go to NuGet manager and it is at NuGet.org and what I can do in here is, I can just type in Google API . Hopefully, this returns quickly. Yes! So, you’ll notice that there is a couple that you can choose from in here, but, what I want to choose is, let’s see, which one did we choose before? I have another sample one over here. So, we chose Google APIs, with an s. Going to do that. There we go! So, there’s one called Core, one called Client, um, so, what we want to do is we want to notice that the Client one also needs Core, so I’m going to choose ‘install’ the Client one. And, it’s going to ask me which one of my projects, and I’m going to say, ‘both of them’. And, it is going to easily install that stuff. Then….

Fr. Ballecer: Alright, so what we’ve done so far, Lou, is, once you’ve gotten access to the APIs, so you did everything that you need to be able to use the Google’s external interface into their cloud services, we’re now using NuGet to get this package that will allow us to interface, easily interface with the API . Rather than programming our own hooks into it, NuGet will do it, we’ll just have to use the documentation for NuGet.

Lou: Exactly! Right! And, now, so I got the API to basically talk to all the different, I’m sorry, got the the DLL or the libraries to talk to all the different Google APIs, but, I also want the one for Tasks. So, there is one called Google APIs Tasks, so I just type that in there, then click ‘install’ and again, it is going to ask me which project and I click ‘ok’ and again, it is adding everything for me. I think I got everything! I think that should be everything for now. So, now I click ‘ok’. So, now I’m already, like, added so much stuff in here that I’m almost there to basically start calling and accessing tasks. Makes all of it pretty easy. And, so what we can do here, is, now it is time to kind of start constructing our logic, like what do we want to do with this program, and I think you guys talked about getting tasks, getting lists of tasks, creating tasks, updating tasks, that kind of thing, right?

Fr. Ballecer: So, yeah, the first thing we have to do, is we have to connect to and authenticate with Google’s API and we want to get the list of tasks from Google’s API , then we want to be able to turn that list into an actual task list.

Lou: Right! So, let’s do that real quick, so, I’m just going to rename this because, I’m going to call it the Task Manager. And, you can just do right click and refact or rename and you can rename it and make it pretty easy. And, I also want to rename the file, so I make sure you guys can follow. So, now what I want to do is I’m going to build a construc…now, there’s a way to do this called ‘build a constructor’, but, I’m just going to make a method called ‘initialize’ for right now. All it is going to do, like you said, it is going to allow me to call into the Google APIs. Alright, I’ll show you (…) the Google APIs. So, the first thing is, there’s a special broker, they call it, they call it a web broker, that basically allows me to, it’s called Web Authorization Broker. And allows me to authenticate it, so this is inside the Google API Code. I’m going to pop back over here so I don’t have to type so much. So the Google broker allows me to basically authenticate, using my Client ID, and my Client Secret that I created. And, so if we go back over here, all we’re going to do, we’re going to copy the Client ID and the Client Secret into my App and I’m going to create an object called Client Secrets. That is inside the Google APIs OAuth namespace. We talked about namespaces a couple of weeks ago. And, so you’re going to create a Client Secrets, and then, you’re just going to put, inside that Client Secrets, I’m going to put…so, I can basically copy and paste what I get from Google’s dashboard, here. If you guys can still see this. So, I’m going to copy and paste those in here. I already have mine in here. Mine are in another pro…in another part of the project, that’s why you can’t see what they actually are, but, pretend like I basically copied and pasted in here. So, I could put, like, strings, and I can put a whole bunch of stuff in here. And, then, I also copied the Client Secret in here, too. So, let’s say I copied all the secret. And so, now, I have my Client Secret, and now, I need to basically authenticate, ‘send authenticate’. So, I do that by using this, what we call Google Web Broker. And, so I’m going to basically Google Web Broker has this method, called ‘Authorize’ and it asks for the Client Secret, so I’d add the Client Secret. And, it asks for things that I can do with it, when I can actually do with it, I need to give it a list of stuff that I need to do with it. In that case, I’m going to tell it I actually want to just use the task API . That’s it! So, basically, what it is going to do is it’s going to tell Google that this user is trying to authenticate and, this app, all it needs to do is access their Tasks, is that ok? And, then it is going to ask the user if that is ok or not.

Shannon : So this is matching up your Client Secret and your secret ID with the Task API that you want to use with Google. And, this broker thing is basically saying, ‘Ok, this guy is totally legit and he’s allowed to use this.

Lou: That’s right! So the key here, too, is that anytime you install an App on a lot of platforms like Windows or Android or IOS, they tell you this App is going to access the following items, right, and then you get a list of stuff. You guys have seen that, right? Yeah!

Shannon : Yeah!

Fr. Ballecer: Yeah!

Lou: So, basically, this…what this is doing, I’m using this broker, this special class, to authorize my App, but, then I’m telling it that all this App is going to ask for is to access this User’s Tasks.

Shannon : Oh my gosh, I get it!

Lou: That’s it! Yep! So, I’m just going to list that. And, I can put other things in here. I can put gmail, I can put email, I can put, you know, whatever…whatever I want in this list. But, my App doesn’t need to access all that stuff, it’ll only access the tasks. So, I’ll just put that.

Shannon : So, for example, if I was to download this, and I put my information in there to authorize it, it would basically just tell me this App is authorized to use your tasks list.

Lou: That’s right! Yeah!

Shannon : That’s cool!

Fr. Ballecer: Now, Lou, we actually have to stop there, so what I want to do is I want to tease him a little bit. So, what we’ve done is, we’ve just given them a way to complete the first two steps of the logic tree. So, it’s going to connect to Google and it is going to authenticate. Now that we know it’s connected and authenticated, what we can do in the next episode is we can show you how you take that now-authenticated process and pull in the data into your App, off of Google’s Tasks service. And, that’s going to be kind of fun, right, Lou?

Lou: Yeah, yeah! There’s lots of stuff we can do with this, now, I mean, like you said, geo-location, images, you get it! You bet! Yeah!

Fr. Ballecer: Now, what we’re going to be doing over the next couple of days, as we said, we’re going to be building up this App. This is the first step. Now that we’re connected, now that we know what our process is going to be, Lou is going to help us build every single step of it. We’re connected, next step, let’s pull in that data, then, after that, let’s turn that data into something that is useable.

Shannon : This is so exciting!

Fr. Ballecer: Step after that is to turn that data into something I can interact with, step after that is, let’s go ahead and make our App.

Shannon : Wow! Application creation is so much more complicated than I thought it was. (laughing)

Fr. Ballecer: (laughing) Maybe it is complicated, but, it is easy if you realize that all you are doing is programming that logic tree.

Shannon : Right, there’s a lot of steps, it just…it’s easy to understand the steps when somebody shows you how to do it, but, man it is complicated if you don’t even know where to start.

Fr. Ballecer: It’s complicated! Which is why we’re going to give you access to all of Lou’s code. We’re going to show the logic tree that we created for this particular application, so that you can follow it, or maybe you can tweek it. There’s people in the chat room who are saying that they would like to add voice annotation, ok, add that to your logic tree, use the process that we’re giving you and see if maybe you can make your own version of this new Task Manager. Lou Maresca, we want to thank you, so very much, for being our code warrior, again. It is always a pleasure, especially when you blow our minds. (laughing) Could you please tell the folks at home where they can find you?

Lou: You bet! So, at Twitter.com/LouMM, and, also, at about.me/LouMM, and, of course, all my work is on CRM .dynamics.com

Fr. Ballecer: Ladies and Gentlemen, he’s Mr. Lou Maresca, he’s the man who made Windows 9!

Shannon : Ha, ha, ha

Lou: That’s right!

Shannon : Which was too good, so they just had to get rid of it.

Fr. Ballecer: (and Lou) So, they just got rid of it. Lou Maresca, thank you very much for being our code warrior and, sir, we salute you!

Shannon : Thank you!

Fr. Ballecer: That’s a horrible salute, that’s a bad salute. Now, you actually aren’t going to be here, next week. You’ve got this amazing thing going on, so, we’re going to have to run along without you, but, it’s cool, because…

Shannon : You guys hold down the fort.

Fr. Ballecer: We’ll hold down the fort for you. When you come back, we should have something for you to play with – a little something (…) It will be fun!

Shannon : Yes! Don’t worry, I’ll watch the episode.

Fr. Ballecer: I won’t! Mah!  No, no, if you were watching us live and if you were just kind of getting buried by everything that Lou was telling you, of course, you’re going to want to download the episode, so that you can watch it several times. But, we also give you the notes and the code that he was actually using. Where can they find that?

Shannon : TWiT.tv/code. That’s where you can find all the information, including all of our old get hubs for every single module that we do, as well as the zip files for all the code that Lou has been sharing with us.

Fr. Ballecer: Right! We’ll be zipping this up, just so that you can download it and have all those associated files and it makes it a whole lot easier for you to get your hands on our code. Also, did you know that we’ve got a G+ community? It’s kind of vibrant!

Shannon : Yes, we do! Bit.ly/twitcoding101. Definitely, join in! It’s a great place.

Fr. Ballecer: Yeah! And, if you put your code examples from each week, we’ll show them.

Shannon : We’ll show them!

Fr. Ballecer: And, Shannon loves going through that droop and finding examples of people who, especially if you take something that we give you and you go one step further. Maybe tweek it, or maybe you show us that we are completely wrong. We love showing examples that are just blowin’ our minds…our code minds.

Shannon : Absolutely! And, of course, we’re also on iTunes and YouTube, so search for us in the iTunes video pod casting data base, and you can also find us over on YouTube.com/twitcoding101. Definitely subscribe, we really appreciate it if you guys do.

Fr. Ballecer: And, don’t forget, you can also find us on the Twitters. That’s right, you can find me at twitter.com/padresj, actually, that’s @padresj.

Shannon : And, I’m @snubs.

Fr. Ballecer: Yeah! Follow us and find out what we do when we’re not coding. It’s actually kind of fun!

Shannon : Like taking pictures of my cats.

Fr. Ballecer: (whispers) She’s a fascinating person and she has cats.

Shannon : My cats are fascinating.

Fr. Ballecer: Until next time, wait, wait, no, we have to tell them about the live, right?

Shannon : Yeah, we do live shows.

Fr. Ballecer: Yeah, we do live shows! I forgot about that.

Shannon : Live, what is it, yeah, live.twit.tv. And you can join in our chat room, irc.twit.tv, so can join along during the show. We definitely love taking questions from our chat room.

Fr. Ballecer: You guys are down there.

Shannon : So, now and then, you’ll see us look down there.

Fr. Ballecer: You are right down there. Anytime you see us looking down here, we’re looking straight at you.

Shannon : Ask questions!

Fr. Ballecer: That’s right, don’t forget live.twit.tv and irc.twit.tv, here every Thursday, 1:30pm Pacific Time. Until next time, I’m Fr. Robert Ballecer

Shannon : I’m Shannon Morse…

Fr. Ballecer and Shannon: End of line!

All Transcripts posts