Coding 101 46 (Transcript)
Father Robert Ballecer: On this episode of Coding 101 we’re finishing up Santa’s little helper.
Netcasts you love, from people you trust. This is TWIT. Bandwidth for Coding 101 Is provided by CacheFly. At cachefly.com. Hi, this is Leo Laporte, and if you’d like to help us design our new website, I invite you to visit twit.to/navtest. We’ve got 8 quick questions we’d like to ask you that will help to make the navigation easier to use. Twit.tv/navtest. Thanks a lot. This episode of Coding 101 is brought to you by FreshBooks. The simple cloud accounting systems that helps entrepreneurs and small business owners save time building, and get paid faster. Join over 5 million users running their business with ease. Try it free at freshbooks.com/c101. And by Mandrill. Mandrill is a scalable reliable and secure email infrastructure service trusted by more than 300,000 customers. Sign up at Mandrill.com promo code TWIT and you’ll receive 50,000 free email sends per month, for your first 6 months of service.
Fr. Robert: Welcome to Coding 101, it’s the TWIT show where we let you into the wonderful world of the code monkey. I’m father Robert Ballecer, the digital Jesuit, and joining me today, my code warrior, my good friend, Mister Lou Maresca. Senior software engineer at Microsoft. Lou, thank you so much for coming back.
Lou Maresca: Thanks for having me. Hopefully I won’t scare you with the cold voice that I have today.
Fr. Robert: You’re having all sorts of issues. Your body has some sort of virus, your computer has issues and you just crashed our Skype.
Lou: Yeah, remotely somehow I crashed it. I have talent.
Fr. Robert: Go figure before we get into Santa’s Little Helper, let’s go ahead and take a look at an item that I thought programmers around the world probably should take a closer look at. This one comes to us from a blog by Kevin Williams, called the 10 Things that Annoy Programmers the Worst. It’s funny, whenever we get one of these top 10 lists, there is always going to be people that have different opinions, but these 10 are really good. Number 10 was comments that say nothing. Lou, both of us know this. We tell people comment, comment, comment, but there’s a difference between a comment that helps and a comment that just leaves you going “okay, now what?”
Lou: It’s a holy war with comments in code. A lot of people like to over comment and sometimes I like over commenting more than I like vague commenting. Because if you don’t comment and then- the ones that do the best write a design document that talks about and puts little links into the code so you can go look at the code comments too, that’s even better. But code commenting is super important so you know exactly what a piece of code is doing and what its meant to do and what its purpose is to do. And then if it’s breaking or not doing what it’s supposed to, then at least you know the original intent.
Fr. Robert: I had to work on a project a year ago and all the comments were, this is a loop. This is a counter. This resets the counter. I’m like yeah, but why is it there? That’s what that’s all about. #9 is being interrupted by coding. I kind of thought this was just petty. But then I thought about it and it’s true. Programmers usually get into a zone. It takes a while to get into the zone, you know this, you might be staring at your screen for the longest time thinking about how you’re going to do something and then you start feeling it and pumping out code and it’s all good and then someone comes in and they bother you and its normally something that’s just lame, it’s stupid, they’re wandering around asking a dumb question. And yeah, I think this applies. Are like that?
Lou: So I don’t hate it, right now I have locked my office door and there is a sign that says do not disturb, but sometimes I have to do that, because if I don’t do that, I’m doing something, I have written notes about it to keep contacts and so then someone interrupts and I’m like okay, I’ve got to answer to be nice. I talk to them and come back and I’m like what the heck was I doing? And so I think that happens all the time. I haven’t seen a tool today that can fix it. Whether it’s a link or skype or whatever that I can put that I’m busy on there. Unless I lock the door, pull my shades and turn the lights out, I’m pretty much open for business.
Fr. Robert: This next one, #8, this is near and dear to my heart. Scope creep or mission creep. And we all know this, this is that idea that as the project progresses, they’re just going to start adding on requirements. Features that they like or they see something in another app and go, you know what, and our program should do that too, with no regard for the fact that that might completely change what you were doing with the code. Of course, you’ve never run into anything like that right?
Lou: No, never. We don’t have that problem every day that I work here at all either. But one of the biggest things that you’ll see is, there’s an acronym called MVP, most viable product. And that’s one of the things that startups push very hard to do is ship a very simple thing up front, let users complain and ask for things. And then add to it. But companies, whether it’s Microsoft, Apple, Google, they never do that. And so there is always scope creep that come in and force the release dates out.
Fr. Robert: My favorite is the scope or the feature creep that happens and then they expect you not to change the release date because, we’re just asking you to add 3D features right. That’s like 2-3 lines of code, what? And then the next thing, I think this gets a little bit whiny, because this happens for everyone. This is not just coders. But having a project manager who does not code and who doesn’t understand or care about understanding about what programmers actually do. This still does exist. You won’t find this a lot at companies that are well run, but having a programming manager who cannot program is torturous. Lou, have you experienced that?
Lou: SO there is different levels of programming. Here at Microsoft we have what we call the domain experts, and then the technical leads. And so the domain experts are the ones that, for instance, I work in financial software, or business software, so ones that understand sales, financials, ledgers and accounting, those are actually still fairly good PMs that could understand the domain expertise around calculations, but they might not necessarily understand how I’m coding it or the technology behind it. So there’s a little bit of a crutch there. but they’re still fairly good PMs and so it all depends on if you’re a domain expert, if you’re a technological expert and what your project requires, and sometimes it requires both and so they’re at kind of a loss at that point.
Fr. Robert: #6 and #5 are interesting. Because they’re kind of the same thing but not. #6 was listed as being asked to document our own code, and #5 is working on code that is not documented. And I think this is absolutely a truism. I hate documenting my code. I know I have to do it, and I end up doing it because I’ve felt the pain of not having it. But I don’t want to do it. And sometimes people have to ask me to do it. And yet, if I find code that’s not documented to my liking, I think that programmer is the worst thing ever.
Lou: Yeah. Microsoft requires what we call a white paper. So when you do a project you have to do a white paper about it too. And you kind of remember the old English engineering classes I had to take in college and thinking man, I could have used a little bit more of those because I literally have to write a document that customers have to read about my code. And it’s sometimes difficult to do.
Fr. Robert: #4 is an interesting one, because I’m more of a hardware guy, but hardware generated faults. Specifically errors that are generated because we’re running code. Especially like beta code, on janky hardware, is a pet peeve. I’ve actually seen this a lot where we’re running on prerelease hardware and we get change logs back saying well, it doesn’t work on XXY that’s going to be released next year. I’m thinking, is that a finished version? Then why do I care? If you can’t show me something that they say is stable, why am I going to change my code to accommodate them? #3, vagueness. You know this one. In fact, anyone in IT knows this one. You don’t have to be a programmer. That idea of its broken. What’s wrong with it? It just doesn’t work right. Okay, can you tell me what happened? It didn’t do what I wanted it to do. That’s- yeah, you see that a lot I think. #2, other people. I think programmers, as a rule of thumb, we don’t like other programmers. We may understand that other programmers are necessary, but Lou, again, I’m going to throw you on the tracks here, do you sometimes feel as if the world would be better if everyone just programmed like you?
Lou: Honestly, I only stay on teams if I have someone who is better than I am. That’s the truth. It makes me better anyways. If I’m not on a team where I can learn from somebody, then I normally jump off that team. That’s the rule I follow. But I do agree, sometimes you work with programmers that just don’t have the skill, maybe they’re just getting started and they cause some issues, some delays. And it does cause some problems with our code too. So it’s kind of a balancing act.
Fr. Robert: And the #1 from this posting and yeah, this is true, my code. 6 months later, I think every programmer has had this moment where they’ll look back at a project they started and go what was I thinking? This is not elegant, this is not good, and I should rewrite all of this. Of course this happens a lot, but never at the corporate level, right Lou?
Lou: Honestly, I’ve had emails from people, I’ve been here 11 years, I’ve had emails from people, they’ll be like, you wrote this, and can you help us fix this? And it’s like 11 year old code. So I have that all the time, don’t worry about that.
Fr. Robert: Now other potentials that weren’t listed in the blog, actually my #4 was that exactly. Answering questions about my code, especially if its code I can’t remember. I almost feel shame whenever someone says “your code is breaking this and we don’t know why, you wrote this, you can tell us what it does?” And I normally don’t have an answer. I also hate old repositories with really bad revision keeping. That tend to want us to – projects. That’s been a pet peeve of mine. One other thing is, and I’ve seen this in the valley recently, star programmers who are brought into a project, who don’t seem to ever want to program. They do all the high level thinking and then they leave it to the peons to turn that into code. What pet peeves do you have Lou?
Lou: I think that is one of them. Where they’ll come up with a really complex design, they never communicate with the team, and then they go and say “here’s the design, go and code it”, and then you really have no idea where to even start. And the second one is if I go to a developer and they wrote the code but there is no comments, there’s no tests, it doesn’t even necessarily compile sometimes. And you ask them what they were even thinking and they have no idea. And so there are those 2 things that can cause some huge blips in a project you could say.
Fr. Robert: Well Lou, we’re going to try to stay away from all of those errors when we get back into Santa’s Little Helper. Today we’re going to be finishing up the project, people have received all the code and all the code snippets they need to be able to access those APIs from Best Buy and New Egg, do a little bit of screen scraping if you will. But today you’re going to show them how to wrap all of that in a nice UI. Am I right?
Lou: That’s right. And we’re also going to go and show you how to use what we call a local database to save the data so that when you open the app every time you don’t always have to go and get the data and it can kind of show historical data as well.
Fr. Robert: Fantastic. But before we get to that, let’s take a break for our first sponsor. If you run a small business, if you run a SMB, if you run it out of your home or if you are an upstart who is looking for a little bit of help, but you still like that pioneering spirit, there is nothing like a helping hand with finances. That’s why we’re happy to welcome FreshBooks to Coding 101. What is FreshBooks? FreshBooks is the cloud accounting software designed from the ground up for entrepreneurs and small businesses. I’ve actually used this at a couple of our organizations around the country whenever they need billing. Now billing is troublesome and normally requires an accountant and you’ve always got errors when you’re entering numbers. Not with FreshBooks. What FreshBooks allows you to do is to generate professional looking invoices. To automatically bill customers and automatically enter in numbers into your accounting software. In other words, it’s like having an accounting department in the cloud. FreshBooks is built for a growing business and on average FreshBooks customers double their revenue in the first 24 months and get paid an average of 5 days faster. Figure that. 5 days extra with the cash that you deserve. Are you still using Word or Excel or Google Docs to create invoices? I’ll admit, I was doing that for the longest time. FreshBooks is the easiest way to create professional looking invoices in minutes so you don’t get an invoice that looks like it was scribbled on the back of a piece of a paper. Now you get to avoid those awquard emails and phone calls to your late paying clients. Because FreshBooks does it for you. They have automated late payment reminders that let you set a way to get paid on time. Worry free. Now you can set up recurring profiles so you can put your billing on autopilot and FreshBooks customers spend less time on paperwork. Freeing up to 2 days per month to focus on the work that they love instead of the numbers that they detest. Now do you still keep your receipts stuffed in your wallet to keep track of expenses? Do you snap photos of your receipts right after your phone and instantly capture expenses? That’s what FreshBooks is for. It lets you record billable hours and track your time with multiple rates. FreshBooks integrates with your apps like Google Apps, PayPal, Stripe, Mail Chimp, Fun Box, and Zen Payroll. FreshBooks even has an open API so developers can integrate with the FreshBooks platform and make everything nice and neat. If you ever need help you’ll talk to a real person every time. FreshBooks’ award winning support is ready to help and software is free forever. Now Amber McArthur of BNN’s App Central says “FreshBooks mobile allows me to quickly send invoices and check in on my business no matter where I am.” There’s no reason for you to not try it. Here is what we want you to do. We want you to try FreshBooks free for 30 days with no obligation and see if maybe it helps change the way that you do business. Go to freshbooks.com/c101 and enter coding 101 in the how did you hear about us section when signing up. Start your 30 day free trial today. Go to freshbooks.com/c101 and don’t forget to enter coding 101 in the how did you hear about us section to throw some support to coding 101. We thank FreshBooks for their support of this episode of Coding 101. Lou, let’s go ahead and get into the nitty gritty. Now we have given all of our audience the code so they can access the APIs of these different vendors and look for particular product. But that’s just the start. That just gives us the back end. It gets the information into our software but as we’ve learned from previous modules, we still need a way to present that view to the user that is useable. Where do we start?
Lou: So I think we should start from a bottom up approach, so we basically talked about the providers that we were able to go get the data. In the projects you have several providers. I give you Amazon, New Egg, Best Buy, Sam’s Club, Target, Walmart provider. By the way, there was a bug in the Walmart provider and I’m sorry about that, I did fix it and we’ll give you the latest code to get that fixed. But basically these all just get the data, they’ll return it back and then you just get this big blob of data. So I think that in the project we gave you a console app that basically allowed you to copy and paste a URL in there and you’d run it and it’d go and get the data and it would output for all the different providers, whatever. The whole idea for this app is for you to be able to track prices, maybe even cross retailers. So the way to do that is you want to be able to save this data, whether it’s on a flat file, on your hard disk, or within what we call a relational database that allows me to query the data out of it. And do there is a really cool embeddable relational database called Sequel Light. Which you can actually get if you go to your famous nugget packages and you can actually type in sequellight.net and it will allow you to actually embed a Sequel Light database. So it will save it in your local app data so you notice this is my local app data folder. There should be a TWIT folder that it’ll create. And if I jump in here, Santa’s Little Helper version 1, you’ll see an actual product sequal.lightDB file. And so this is actually real tiny. Its only 3 kilobits, it’s got maybe 100 items in it right now. But it’ll basically create an embeddable database for you and all you have to do is add this project to it.
Fr. Robert: Also, I’d like to say, if you want to know more about nugget, I believe you can check out episode 39 and 40 of Coding 101. It’s the last C Sharp module. It’s a fantastic tool that allows you to bring in things like this new repository. Also, remember that the code that we’re showing you gets that blob. Remember that JSON blob that we were talking about? And you have a utility link in the last episode of Coding 101 that will let you turn that JSON blob into unique fields which will then be put into this database that Lou is now showing you how to set up.
Lou: Exactly right. So let’s go ahead and do that. I’ll go ahead and put a break point here. Let’s do like another New Egg one really fast. So stick one right here and I do like kind of stepping through things. So I’ll go ahead and hit go. And here it hits the New Egg provider because I copied and pasted a New Egg URL. And if I step into that it’ll actually step in and say give me the price and so it’ll go in and retrieve the price internally. And then the blob that you’re going to get is the last thing that gets back here. So we get all the way to the bottom and make the call here. And the response should come back and the response was successful. And if we look inside here there is this big blob of JSON that comes back.
Fr. Robert: We can parse that. Exactly. So this is the blob. The JSON blob. We parse this so we can pull out the individual fields so that we can compare data against other JSON blobs.
Lou: That’s right. So what I normally do is I use what we call the JSON serializer and what it can do is it can create what we call strongly typed objects. And that would mean create an object and then I can pull the information off of it without having to go and do any additional work on it. And so you notice in here I have this new object called search result and if I can look inside I see that it has a bunch of properties. And this might be a little small for everybody, but what you can see is I can get product details and keep drilling down until I finally find the price. And so this way I don’t have to sift through that entire string and use a bunch of regular expressions or whatever to kind of sift through the data, I can just use .net and it’s object providers to basically get the data off of it. So now what we want to do is save this data. So I’m going to return this back. I’m going to pop back out to the provider code that I had here and-
Fr. Robert: Actually, before you do that, do you have a way to bring up the JSON file after its been parsed? Because that’s always a nice before and after. So they see the blob-
Lou: To be honest with you, the serializer, what it does, it does it at a binary level. So there’s not much I can actually pull up.
Fr. Robert: There is, it just wouldn’t look like anything.
Lou: It wouldn’t look like anything, right. So it’ll just match, it’ll do a bunch of hash set matchings and it’ll basically convert that into an object rather than just show you a big blob. That’s basically what it’s doing.
Fr. Robert: Nice.
Lou: Basically what I did was, then I returned this retail product object. It’s something that I created a while ago and it has a bunch of properties on it like title and price and image. And that’s common amongst all the retailers. So I created this so this way I can kind of bind that later. So that’s what I’m returning in all of the different provider codes, this Newegg one is going to return this price object. If I look inside you’ll notice that it has the 4k television that I asked for, New Egg’s ID, of course it came from New Egg, and then the price that they have for it right now. So I’m going to pop back out, this is what we call my item search view model and so when you’re writing a UI- we talked about this in one of the past episodes, the MVVM concept. Where you have a model, the view model, and so this is what we call our item search view model. This is how I’m going to get the data from the provider, which is my model. And then I’m going to present it to the user UI somehow.
Fr. Robert: Right. And of course that’s only possible because you’ve already worked with the JSON file to turn it into useable data. Because you can’t present the blob, it won’t look like anything. But now that we’ve serialized it, you can pull specific fields that are actually useable. Like name of product and price and vendor.
Lou: And honestly that’s the bulk of the work. I’m not going to pretend to be the best UI person, UIs take me months to get it correct, but the bulk of the logic, the complexity of the logic is really in getting that data from these providers. And so once you have that, which we do, now we need to know how I’m going to present that usefully to a user. And how am I going to save that so when I later open the app, how can I see the historical if I’ve already saved that item once before? So that’s what we’ve got to go into next is how we want to save that data so we can look it at, what we have from once before.
Fr. Robert: Exactly. Because you can’t expect to pull all this data every single time you make a query. You want some way to store it all locally in a fashion that makes sense, so of course, you’re going to store it in….
Lou: Right. So we’re storing in a database. So we create a wrapper class, I like to call retail product storage. What it does is if you look inside here, the first thing it’s going to do is call load database. And it’s got some coding here, but luckily sequellight.net has really good documentation. But all you’re really doing is creating a connection to the database, I’m using my local storage path. That was that path that I showed you here that’s within my, this is my user name and then my app data local. And this is just something if you’re on a Windows machine, it will be available for all users who log in. it’s the app local data storage. And its only available to you as the user, nobody else can access that, unless you’re an admin. And so I’m just using that path and then I’m just calling this, this is the name of the sequel database. And then I create a connection. And once I create the connection, boom, the database gets created. And then I have to create this table. And so this is the hard part because if you’re not really familiar with databases it might be difficult to create tables. But there is a work around. There is always tools for everything. And there is a really cool tool called a sequel light toolbox. And it’s this really neat UI that allows you to basically build a table just by using a UI. It’s like building an Excel spreadsheet, and you can build a table and like I have ID, I could put retail ID, I could put title, and this could be text. And I could basically build up a table here and then I can hit save or script and it will generate a script for me. And then once I hit the script button it’ll generate a script and this is the script that it’ll actually generate for you is this create table script. And you notice inside here I have the retail unique ID, the ID of the item, the retailer, the image of the item, product URL, when it was created and when it was modified.
Fr. Robert: Wait, is that part of the plug in or part of the visual environment itself?
Lou: That’s part of the plug in. so the plug in will allow you to basically create the script, and then you just copy and paste the script from the tool into your code. Really simple. It’ll actually create the tool for you. This is a connect to the sequel database here, and you notice I actually have retail products table here. And then of course here are all the different columns in that table. And I can actually right click and go select, and now I can query that table, execute this. You notice now I have a result of that New Egg item that got put in there. So fairly simple and there’s tools to do it so you don’t have to actually know how to write sequel code or Tsequel code or whatever to do it. And it will create the table for you.
Fr. Robert: Okay, so this is creating the table based on what we’re receiving from the JSON blobs after they’ve been serialized, but how do we then push the data into the tables that we’ve just created?
Lou: Good question. So now we’re going to use the same tool, and I’m going to go right click on it and go select script as an insert. And so what it’s going to do here is generate a script for me. You notice it has insert statement here that then has a bunch of values. And so here’s the key here. You need to basically erase this and we’re going to put in these place holders. For sequel.net you put in place holders. So p1 is the parameter for the unique ID, p2 would be the ID and so on and so forth. And you just keep replacing it with a bunch of place holders for the parameters. And then you copy and paste this back over here and we’ll go up to my retail product storage. And I put in a save product method and then here is my insert. This is what I copied and pasted over and you’ll notice that I just replaced those parameters with a bunch of place holders.
Fr. Robert: Now we’ve got a couple people in the chatroom who are freaking out. Like wait a minute, we haven’t covered databases yet. We know, we’re not doing a through tutorial on database management just yet, just take the code as it is. At the end of every module we want to leave you a little challenge, this is the challenge. You’re going to have it working. The code will actually work and then you can play around so you can figure out exactly how the database functions work. This is just simply a place to put the data that we’ve been pulling from the websites in that JSON blob, serializing and then storing so that we can compare them against other values. That’s all we’re doing. Just think of it as that and think of the code as sort of a black box at the moment.
Lou: Basically all we’re doing then thereafter is we’re taking these place holders, what we call tokenizers, tokens, and we’re basically using this special command object that you get with sequel.net, it’s called sequellight.command and it allows you to put in the script that you want to insert with, and then it allows you to use what they call a command builder and you basically bind the parameter to the data. So you notice here that my property that I’m sending in here to this method is called product. And again, it’s my retail product that has all the different properties of retail product, and then I’m just binding the data that gets sent in to the parameters. Fairly straight forward once you get the hang of it. And then the last thing I’m doing is executing the query and committing it to the database. And that’s all you have to do to save it off and make sure that you have it for later.
Fr. Robert: And of course the reason why we’re doing it this way, because I can already hear the wheels turning of people saying well, if it’s just a bunch of values why don’t I just set up a bunch of variables to store the values? We want to make it easier. We want to make the functionality easier as we go into the view part of the programming. Because remember, just presenting the data is useless. We want to be able to compare and databases are fantastic at comparing.
Lou: Also if you save everything in memory, after you shut the app down it’s gone. And another thing is a lot of people say why you don’t save it in a flat file like a text file or something. Just think, over a year, how many products do you look at? Do you track a lot of products? It could be thousands of products and that means that now you have to parse this text file for all thousand products every time you load the app up and when you parse text files sometimes you have to do it in memory and so now you have a memory problem. It just gets to be old. The better thing to do is save it in some kind of data storage mechanism where you can stream from it and that’s where the database comes in.
Fr. Robert: Right. The way we look at it, yes, it’s more complicated, but you can either cludge together a way to store the data, or you can store it into a framework that’s designed to store data. And one is clearly better than the other, even though it does take more effort.
Lou: That’s right. So now I guess once we store it off we can basically decide on whether we want to store it and how we want to present it to the user. So the next thing I want to do is determine how I want to present it to the user. So what I started to do was I built what we call a product search control. And what this is, is just- think of a list box with a whole bunch of products in it and this is just a placeholder image right now. But it’ll actually have different components to it. It’ll have a placeholder image, and then the price over here, and then the minimum price of the item, the title and what retailer it came from. And so this’ll be a big list and it’ll have an image of the item and it’ll basically be able to tell me what the price has been, what it is now and what it’s been. So I basically just built a very simple XAML control that can do that. If I actually minimize all this you can see, the XAML code is only maybe 15 lines long. So I’ve basically created a line item that will have an image of the item and then all the information for it.
Fr. Robert: If any of you are freaking out with this, take a look at Coding 101 modules 1 and 4 because we actually look at this design. Essentially we’ve already written all the code. We’ve got all the features baked into the bottom, we’re just going to copy and paste, we’re going to drop it out a little item so that they can trigger actions.
Lou: Right. so there is also a lot of code backing this too, so for instance I have a product search view model that has the image, the minimum price, and these are all properties that again, I think we talked about this in one of the later episodes that talked about the identify property change event, which means that anything that changes in the view model, it will basically go and fire an event to the UI to go get the new data. And then it’ll go and update that data. So the UI is now bound to this special view model that I created. Again, it has these properties in here.
Fr. Robert: We’re heading into the home stretch here. We’re going to start talking about how we’re going to create the binding so that we have nice two way, bi directional control of the data that we’re presenting to the user, but before we do that, let’s go ahead and take a break to talk about the second sponsor of this episode of Coding 101 and its Mandrill. What is Mandrill? If you are in a small to medium business, if you’re in an enterprise, you want an infrastructure service that’s trusted by the industry. That’s what Mandrill is. It’s an easy to integrate, scalable, reliable, and secure, email infrastructure service that’s trusted by more than 300,000 customers. You get to integrate, deliver, track and analyze your emails as they move through your system. And Mandrill gives you detailed delivery reports, advanced analytics and a friendly interface that means your entire team from developers to marketers can monitor and evaluate your email performance. With servers all over the world, Mandrill can deliver your email in seconds. Not only that, but they’ve got multiple ways to deliver your messages so that you’re always making sure that your messages get out in a timely manner. You don’t have a lot of stuff that gets queued up and sent out hours, days, even weeks later. But Mandrill will make sure that your message gets out when you intend it to. Mandrill started as an idea back in 2010. They’re growing fast and integrating faster, Mandrill is now the largest email as a survive platform on the market. You can use Mandrill to send automated one to one emails like password resets and welcome messages, as well as marketing emails and customized newsletters. Mandrill made it for developers, and developers love documentation. And Mandrill definitely gives those developers that documentation that they need for easy integration, for high delivery rates and all the web hooks they need to make sure that it’s going to work with your existing software. It comes with a beautiful interface, flexible template options, custom tagging and advanced tracking and reports. Mandrill is the only email infrastructure service with a mobile app that lets you monitor delivery and troubleshoot from wherever you are. It’s powerful and saleable and affordable. And we know this because we’ve actually used Mandrill. But you don’t have to take our word for it. Right now Mandrill is offering the TWIT audience a special deal. Sign up at mandrill.com, promo code TWIT, and you’ll receive 50,000 free email sends per month for your first 6 months of service. That’s mandrill.com promo code TWIT. Mandrill.com promo code TWIT. And we thank Mandrill for their support of Coding 101. Lou, take us home. We’ve got the data. We’ve got it in a database. How is it going to look?
Lou: Let’s show it. Let’s show the user data. The first thing we have to do is bind the data that we got to the UI. So what you have to do, you have to set up a Windows resources to do that. By setting up a view model mechanism. So the view model mechanism, is you just use a Windows resource and again, there is some documentation on this online, but all you do is set up a data source or a static source for it. And then what I can do down here then Is I can look at every time I want to bind, let’s say I want to bind the text box, or I want to bind the actual text box content to my URL. And so if you look over here, the binding says the text of the text box binds to my URL text property. If I pop over here to the view model. I have a URL text property, there it is. And I basically bind that view model to it. And so I bind it and I do it in a two way, meaning if something changes in code, it will update in the UI. And if something changes in the UI, it will update in the code. And so that’s kind of the key, basically all I’m doing is setting up the binding. The coolest thing behind this though, look at the code behind for this file. That’s it.
Fr. Robert: Ha, ha, ha. We love this, this is your super advanced program, this is what it would look like and everything is basically just includes.
Lou: Missing, exactly right. So this is what we call declarative programming, this means that we declare everything in the UI, bind it to the view model and it’s kind of a disconnected environment. So let’s see what we can see here. This might be a little small because I can’t zoom. So you’ve got a little URL box here and I can basically paste in the URL and if we go- I’ll put a little break point in here so we can see what’s going on under the covers. I’ll go to the IM search, there’s a break point there already. Pop back over, I’m going to hit the search button and boom. So now you notice that the URL text right now is the URL that I put in the text box. And now it says okay go find – so I’m using the current code that I have to go and search. And boom, I get the provider, retailer, boom, calls out to the service, returns in a second. There it is. Then is it going to save it to the database first? Yes, it’ll save to the database. Now it’s saved. And then we should see a line item in the UL. Oh, we don’t. But it could be the binding problem that I have. This is one of the later releases that I had. Basically what you should see is you’ll see this search control right here with the image and then the title and the actual description of the item. That’s what normally will happen. But at least we can go look at the database real quick just to see if it showed up in there.
Fr. Robert: This is the simple part, making the items in the database appear in the view. And it’s just not bound properly at the moment.
Lou: It’s just not bound properly. Instead of playing with it we can just show you where the data is right here. So just to make sure it works –there it is. There’s the 2nd line, Samsung 40in television, boom it’s in there. So it’s storing the data. So now if I were to shut the app down, close the app and then restart it, I can basically just pull the data directly from the database rather than having to go and call the New Egg service again and then get in trouble for calling on them too much.
Fr. Robert: That’s absolutely fantastic. And as you go, you can build up the database of the items and prices and descriptions inside your Santa’s Little Helper database. And this is the whole idea. Over time you will gradually work up the inventory of products that you would like to keep an eye on.
Lou: Right. and we talk about scope creep, I guess the idea that I had was I would show you this really neat line graph of the trending of that item and there could be a whole bunch of things I could do for you but again, I wanted to give you a framework on the basic concepts of how to bind the things and how to set up the UI and do list items, how to do sequel light database, how to call the complex services, and then you can always add features after that on top of it.
Fr. Robert: Right. Well Lou, how about this. The code is done. This will work as it is, as we just have to bind it. What if we were to bring you back for one more episode and let’s just take what we’ve got and make it pretty?
Lou: Yeah, let’s do it. I’ll have to pull in a designer to help me though.
Fr. Robert: Yeah, I’m horrible at UI design. I’m fine with a couple of boxes, and someone else will come in and say no, no, you have to have this bigger and this should be a different color, and then it does get beautiful. Lou Maresca, Senior Software Engineer at Microsoft, thank you so very much. Your example will be available, people can click on the link and download the assets. So again, if you don’t understand what we were talking about, get the asset file and scroll through it. Be with us as Lou is taking us through the program because then it makes a lot more sense. Also, if you do understand what we’re doing and you understand that this is just a binding problem, why not give us examples of what you do with Santa’s Little Helper and make sure that it ends up on our G+ page. Lou, could you tell the folks at home where they can find you, your work and where they can find Lou Maresca in the real world?
Lou: You bet. So of course @LouMM on twitter, Lou MM on About Me and of course all my work that I’ve been working on tirelessly, which is why I was late today, is on syrum.dynamics.com, check it out.
Fr. Robert: Fantastic. Lou Maresca, it is always a pleasure, thank you for being part of Coding 101. You are a master. A code warrior.
Lou: Thank you for having me Padre, appreciate it. Love it.
Fr. Robert: Don’t forget that you can always get the notes for all of our episodes at our show page. Go to twit.tv/code. Not only will you be able to find all of our episodes, and this is important if you want to get the references from the earlier modules, but you’ll also find a way to get all of our episodes automatically onto your device of choice. Also, you need to join our G+ group, it’s where you’re going to get your questions answered. Go to plus.google.com/twitcoding101. There you’ll be able to join the community, answer questions if you’re an expert and make sure everything works just fine. Find me on twitter, twitter.com/padresj. That’s @padresj. If you follow me you’ll find out what we’re doing in every episode as well as what I do when I’m not here on the TWIT TV network or when I’m doing the other shows I do on the TWIT TV network. We do our show live every Thursday at 1:30pm pacific time. You can find us at live.twit.tv and you can join our chatroom at irc.twit.tv. And ill answer your questions from the chatroom as the show goes on. I want to thank everyone here at the brick house who makes this show possible. Leo, Lisa, to my super-duper fantastic TD, Mister Bryan Burnett.
Bryan Burnett: Yeah, what a toss. Find me doing Know How earlier with you on Thursdays 11am Pacific Time. And quad copters. My new baby. Check out Know How and follow me on twitter, @Cranky_Hippo.
Fr. Robert: Thank you so much for watching. I’m father Robert Ballecer, the digital Jesuit. End of line!