Coding 101 47 (Transcript)
Father Robert Ballecer: On this
episode of Coding 101 we’re wrapping 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.
Fr. Robert: 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.
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 Robert
Ballecer the digital Jesuit and I’m joined by my personal favorite code
warrior, Mister Lou Maresca. Lou, thank you very much for
coming back on to Coding 101. When we last left our audience we had just
finished up the final rough cut code for Santa’s Little Helper. The whole idea
was to give people an application that could go out into the internet, look for
particular items or products that we want to compare through the holiday
season, and then grab prices from different websites. Fantastic program but
there was one thing that was missing: the interface. We’ve kind of fixed that
yeah?
Lou Maresca: Correct. We
wanted to make it more useable for a user to basically continue to maintain
their database of items, be able to search through all the different minimum
prices for each item that you’ve seen over time. So we’ve kind of added some of
that logic and we’ve created a UI that makes it a little easier.
Fr. Robert: Fantastic. Now we’re going to get right
into that. But before we do that lets talk a little bit about what’s going on
in the world of programming. There’s one story in particular that has me very
excited. If you have been keeping watch you’d know that Microsoft has been
donating more and more of their code into their open source project. The idea
is to let other programmers have a go at some of the core technology that
Microsoft has been holding on to. Now the last one we heard of was .net, that was absolutely fantastic. Actually that happened
at the start of this last module I had with Lou. They gave some of the most
important parts of the .net framework into this open source foundation which
means, if you’re programming for .net you can now take that same code and push
it to Android, push it to Mac OS 10, to iOS. That was kind of a surprise wasn’t
it Lou?
Lou: Well, it wasn’t a surprise, but it was
one of those things you never thought was going to happen because it was so big
that it was hard for them to do on open source, but I think it’s a huge step
forward.
Fr. Robert: And I think it’s a sign of the changing
times behind Microsoft. They’ve realized
that you can’t just make a lot of software and expect people to buy it over and
over. You have to build up community. It’s all about community, about
environment, it’s always about building up the good will between the developers
and the monolific company that’s hosting. So to that, Microsoft has gone a
little farther by pushing project Orleans to this effort to open source it. Now
there’s going to be a lot of people who go, what? One word, Halo. Lou, what is project Orleans?
Lou: So it’s a cloud service, its platform
really, to allow you to build really high scale computing applications with not
needing to understand or learn about complex scaling patterns and distribution
and distributing computing and cashing and all that stuff. It’s a platform to
allow you to build an app that its single threaded but asynchrony’s, it allows
you to basically scale the amount of users that you have without having to
understand what’s going on.
Fr. Robert: Yeah. Now one of the things that’s just amazing about this is its automatic
instantiation. So when we were talking about classes, in the last, last module,
we talked about how you could create a class but it didn’t automatically become
an object. You had to instantiate it. In other words, you had to tell it okay, I’m
declaring it, I’m giving it these parameters, here we
go. In project Orleans, when we make a similar item, it actually becomes real.
So, and they call it an actor. And these actors are persistent. So once you
create this actor, it’s always there, it’s always going to be working. Which means that scalability is through the roof. You can
start with one or two actors and you can just keep building and building and
building. For the lay person at home, what does that do for scalability in the
cloud? This idea of persistence?
Lou: So let’s talk about it from the concept
of Halo. So with Halo you have users that are multiplayer users that are in the
game and they want to keep track of information about what they’re doing and
consistently you can add more users, you can scale up to millions of users, so
that’s really the concept. For instance, they have what they call static
services which means that they’ll keep track of all the shots fired in the game
and which weapons they’re using and all the achievements and personal
information of that user. And that’s all scalable. It could be static for each
player, for each user, for each actor, and then that can also scale up to
millions and millions of users and being able to do that all concurrently on asynchrony
in the back ground. So that’s really kind of the key aspect of the service,
what Orleans can do.
Fr. Robert: Right. And those actors can actually
communicate with one another. So it’s not as if you just have a bunch of
processes that are running in the background. You can have them interact.
That’s the whole idea behind using it for the Halo engine. You have to have
that in the framework so that you can have different bits of AI or scripting
interacting with one another. Imagine if you were to apply that to an
application along with some deep neural networking which is what Microsoft
research has been doing for Skype, and you can have actors that are actually
modifying themselves and other actors to get essentially a learning cloud
system that’s infinitely scalable. It’s very exciting. It’s kind of high level
right now. I don’t think there’s a really good way for the beginner to jump in.
but Lou, if people wanted to find out more about Orleans, what should they do?
Lou: So it’s also on Microsoft research, if
you go to Microsoft.com and just search for project Orleans it’ll show up. Also
it’s on coplex, which is Microsoft’s kind of open source library of data. Its
real easy just do a search for project Orleans and it’ll show up and point you
to where the codes at and how to get started. They have a ton of examples on
coplex and they’ll give you a startup package and what to do and they’ll give
you examples of how to do it. So try it out.
Fr. Robert: Yeah. And everything will be available
by the start of 2015. They’re going to be releasing it under a MIT license. The
code should end up on GitHub so even if you have no idea what we’ve been
talking about right now, at least download the code examples and take a look
because that sort of scalable cloud computing where you’ve got persistent
objects, I think it’s a pretty good bet that’s going to be programming in the
future. Lou, shall we jump back in to Santa’s Little Helper?
Lou: Yeah, let’s do it.
Fr. Robert: Okay but before we do that, I want to
ask you a question. Did you spend any time, before you went over to Redmond,
doing any sort of independent consulting?
Lou: Of course, yeah. Through
college and everything.
Fr. Robert: It’s a rite of passage for programmers
and geeks. And you always end up starting your own business and then maybe you
go someplace else. Let me ask you this, because I know the answer for me. When
you were doing independent consulting did you find it a pain in the butt to
just get money?
Lou: Yes.
Fr. Robert: Doing the job is fun, dealing with
people is fun, but the whole idea of accounting, and it was never my thing.
There were a couple of instances I had where my invoices went out too late and
they look unprofessional and I just didn’t get paid for the jobs that I had
already done. This is not unique. You’re going got have people running small
businesses all around the world who are going got have this issue of not having
the time, resources, or experience to run a proper accounting office in their
small business. Which is why we’re happy to welcome to Coding
101 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 support 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 get into it. We’ve decided to make Santa’s Little Helper
pretty. How do we do that?
Lou: Prettier. So one thing that we wanted
to be able to do is consistently be able to list the items, lets quickly
download the app. so pop this guy up here and we’ll zoom in. so really, really
simple app, but functional. So what we want to show here is, one thing that we noticed is we get a list of our items, we get the minimum
price and then I can actually scroll through the items. These are all the
things I’m tracking now, and its showing me the minimum price.
Fr. Robert: Did the images come from the JSON blob?
Lou: Yes. so the kind of cool thing about it
is that it actually didn’t come from the JSON blob itself, the links for the
images came from it, and you actually have to make another call and say they go
get me the images and display it.
Fr. Robert: But that’s a standard HTTP, that’s
nothing.
Lou: Right. So that’s kind of the key here.
So what we wanted to do is we wanted to build this out and make it look really
nice. So one thing I wanted to show you is, this is the main form right here,
and you notice it doesn’t have too much to it. All it really is, is just a square, and it has a list item control in the middle of it. And so
the key here is I wanted to be able to display each item by itself in a
specific format. So what I did was, I went here and I said I wanted to add a
new control. So I went and hit add and I clicked on new user control. And it
created this, what we call a product search result control. And so what this is, is a new control that I broke it up into different
pieces. I have an image location over here and title and price. And then again,
we used data binding, in this case I binded it to the title and price. And then
you can make it look however you want it to look. Like I can put more
information in here, I can put when it was created, If I wanted to put another label
here and say, maybe when it was actually created or whatever, I can put that in
here and then every time this actually showed the list item, it would basically
look like that. So when I would run this, the list item would look like however
I broke it up in—
Fr. Robert: You know Lou, we’ve actually had people who got freaked out by this. They were saying well,
we don’t understand this whole data binding idea. Over the weekend, someone
actually explained it to me in a way that I can explain it to others. They said
if you’ve ever made a mail merge- if you’ve ever done a mail merge between
Excel and Word, let’s say you’re doing holiday cards and you want to print out
envelopes or stickers, that’s essentially what we’re
doing with binding. We’re saying look, we’ve got these fields that have been
indexed. Remember we took the big JSON blob, turned it into something that was
readable and then we indexed it into individual pieces of information. And then
we made a mail merge template. We said, this field will go here, this one will
go there, and that one will go over on this side. It is a bit more complicated
when we do it in programming because it is bidirectional, but if you think of
it like a mail merge template then you’re not going to freak out when you start
to see this code. All Lou is doing is saying, this is how I want the fields
laid out and then it’s going to interact with my back end.
Lou: So when you’re building a UI, you start
with the layout and then you worry about how you’re going to bind it to the
data later on. Normally I just start with the layout and again, I’m not
normally the best designer in the world, so I ask people what would you like to
see and how do you want it to look? What’s the information you want to see? And
then I just build my little control, my list item control and how I want it to
view in that list. And then I put that on, I create the XAML for it and then I
worry about binding it later, after the fact.
Fr. Robert: Right. The binding- once you get used
to it, it’s not that hard. It really isn’t. And like Lou said, neither of us
are designers. I can’t make a UI look pretty to save my life. But what we can
do is give you the basic tools, and if you are a designer, and once you see how
Lou has been binding these elements to the back end, you can make it look
pretty and the functionality will be maintained. That’s one of the beauties of
this approach. Okay, continue. So we’ve got the elements on the screen, and they’re
starting to look the way that you want them to look. They’ve been bound to the
back end, where do we go from here?
Lou: Well the first thing is, a lot of
people say, well hey, I’m not a designer, I don’t really know how to code. So
the thing about XAML is, you can use a tool called
Blend. And what it does is it’s supposed to blend the ability of designing an
app without really having to write the code, and then it’ll actually generate
that code for you. And so what they normally do first is, first what you want
to do is set the data context. And so what this means is, it’s like I write a
letter of information on a piece of paper. And then I’m handing it to you and you’re
displaying it on the big screen. To everybody in the room. And so that’s really what data context is, is I’m saying for this entire
window, whatever’s inside, whether it’s a list item or a list box, or a text
box or whatever, I’m going to give it a bunch of data, and the data is going to
come from this one thing. This one thing being my view model
that I created. Item search view model. And so
if I go look at item search view model, this again is something I created
before and it has like, in this case, the public thing that I have on here is a
collection of, it’s a list or an observable collection of products. And that’s
really all I care about. Because if you go inside the retail
product it has things like the price and the item and all of that information
on there. So that’s what I want to bind to because that’s what I want to
display. So now that I have my data context, I say okay, now I know where the
data I need to get it from, now how am I supposed to display it? And so that’s
when you go back into your control and now it’s really easy. Now in the control yourself, when you want to actually- let’s say this
specific label content- for the title. This control right here, the content of
it, I’m just going to say bind to the title. And that title, let me go back to my object, it’s from this retail products, and if I go inside
here, I want to bind to title. And that’s it. So I gave it data context, and I
say I want to bind to the title of this object. And now when I go and run the
code, if that title has data in it like a string, then it will display. As easy as that.
Fr. Robert: Nice. This, again, just as a refresher,
this is our MVVM again, right. Because we built out the back
end. We built out the view model, now we’re building the view here. And the model. If I remember correctly, this is actually a
pattern called the presentation module right? That’s where this comes from?
Lou: That’s right, yeah. The infamous legend
in the object oriented development world, Mark Fowler, came up with a thing
called the presentation model. And again, the gentleman who actually created
the MVVM pattern, actually generated it off of the PM
model. It’s almost identical. And the key here is, if
you notice a lot of the things around the web, like knockout JS and Kendo and
all these other frameworks are trying to bring this pattern to something like a
web application. Or even native applications in Java and Android are doing this
too. And the reason why is, because it’s allowing you to separate your code
from your concerns. From your view. So
your view from your concerns. And that’s really kind of the key. And its
newer, MVC is a little older and its – an old asp.net thing. And this is a lot
newer and it actually works a lot better with today’s technology.
Fr. Robert: Right. It’s a little bit of an update
for the newer languages. So Lou, are we done now? Is this fully functional, is
this where we want to leave it? We’ve got it bound, we’ve got the items where
we want them, it will go out into the world, look at those webpages, hit those
APIs, it will pull in the products that we’re looking for, what else do we need
to make this functional, complete?
Lou: I think one of the things you want to
do is make sure that your – for me what I was doing originally is I was just
displaying all the items on the screen that I got and that was it. So what you
want to do is add a bunch of logic to it that makes sense to you. For instance,
In my case, I didn’t care, in this case I might have an entry in this
underlying database that’s behind this application, that has a line entry for
every time I pasted a URL in there. So I could go to Newegg and paste a URL to
a TV and then it’ll go get the price and insert it into the database. And so
every time I loaded the app up id see like 50 different lines of Newegg and all
the different prices. But the key here is, why is that
useful to me? I guess for me what I wanted to do is I wanted to display what
the minimum price it ever was and what the price it is right now. And that’s
useful. Because I can say oh, at some time it was a lot cheaper, why would I
buy it now? So that’s kind of the key. So now you have to think about how you’re
going to manipulate that data, or the data that you have, and how you’re going
to return it back in a better way so that it’s more useful to your application.
Fr. Robert: Right. And again, this is where a
designer, a UI person really comes in handy. Because most of us can do
everything we need to make sure that the data is there, and it’s tabulating
properly. But you need the UI person who is going to say okay, now that we’ve
got all that, lets change the view so that it actually presents useful
information, instead of everything. Because right now, if you look at the
interface, so it’s properly pulling the item off of Newegg, it’s getting the
thumbnails, title, price, a link so if we’re
interested we can jump over, but a UI person may look at this and say you know
what, we need more interactive functions for price. We want to be able to say,
okay show me lowest price, show me vender with lowest price. Or show me
products similar to this. This is all functionality that you can bake in with
the existing information. You just have to move things around in the view
itself.
Lou: That’s right. Another thing is you
might have to manipulate the data a little bit. So as a developer you have to
manipulate the data a little bit more. So what I did in the back end, and again,
this will be part of the code that you’ll get, is I actually added a special
method called retrieve minimum prices. And again, it’ll generate a query that
will go and get the minimum price for each item and return that. So now I’m
building up a retail product and returning that from the database. And then what’s
displayed to you, again, is just the minimum price of that product. So this way
you can display it a lot differently and I can even get the historical data and
display it as a nice pretty line graph or bar chart or something like that.
Fr. Robert: Because that’s the thing. You have that
data. It’s there, it’s just not being displayed right
now because you didn’t call for it. If you felt as the designer, as the UI
person, that that’s the data that the user wants, or maybe there is another
screen that will show that data, it’s easy for you to pull that forward and it’s
not that hard to program because all the really hard programming has already
been done. All you’re doing is setting up that mail merge. You’re saying I need
this field and this field or maybe I need these two fields in relation to a
third. That’s the beauty of this MVVM model. The nice thing is this program
probably showed off MVVM better than anything we did in the last C Sharp
module.
Lou: I think so. I think one of the things
that I kind of pride myself in, is this is what we call the code behind in the
file, and there’s nothing in there. And that’s when you know you’ve used MVVM
correctly.
Fr. Robert: That’s the way it’s supposed to look.
When it looks like that, it means you’re doing your job right.
Lou: That’s right. so I think the key here
is, one of the learning experiences I have is there’s a lot of parts to even
this very simple utility, and so being able to kind of separate them and then
test them separately is really kind of the key to MVVM. Is I have a piece of code that just calls the database and gets the products out
of the database and then – some tests around there. And that’s my model. And my
view model is being able to get that data and binding it or putting on my
objects, called my retail products object. And then taking that and displaying
it to the user and that’s where the view jumps in. so separating those concerns
made it a lot easier to build- it’s actually a very complex app now that we’ve
done all these different providers and everything.
Fr. Robert: Right. And remember, this was all built
up from the first episode which was just calling APIs. So
from calling APIs to formatting it into useful information, to manipulating
that information, to presenting the manipulated information to the user. And I think that’s a really, really good summary for how you make a useful app.
Lou: Exactly.
Fr. Robert: Now if you were going to prove this, I
know that you’ve already stated a few things that you’d like to change, like
the historical, so on and so forth, but what are the things that people should
look for as they’re perusing the code? Because all this code
will be available to every user who is watching the show right now. What
are the things they should look for and what are the things that you would
suggest they tweak? They play with on their own time?
Lou: So right now a lot of the code is a
little bit static and it will go and say okay, go get me this item and then you
know, parse this URL and to get the item ID off of it. I mean, what it could be
done is it could be a lot more dynamic, so you could continue to add providers
very easily. Like I have all these products from Sam’s Club and Walmart and so
on, but you can add some more in there very easily and making that dynamic for
the UI too. Because right now the UI is kind of bound to these different providers.
And so the way you can do that is you can use data binding even farther than I’ve
already done. And starting adding new providers, and then just by default when
you put a URL in there, the items will just magically just show up from
whatever provider that you wanted. Whatever new store or whatever you wanted to
add in there. I think that that would be kind of the key. So look inside the providers
and look inside the data binding code and find out a way to make it more
dynamic, more useful to you. As well as check out some of the
controls, like the chart controls. I think that would be the most useful
for me, as a data presentation, is just being able to take all the data, all
these listing that I have every day that I’m getting from all these providers
and displaying it in a much more useful manner. And then that would make the
app even better.
Fr. Robert: Fantastic. Lou Maresca, senor
programmer for Microsoft, it is always an honor. It is so much fun to have you
on the show. We’re going to have you back again and again and again. Because I
got to tell you, I learn every time you come on as a code warrior.
Lou: I appreciate you having me, and in
fact, I learn every time coming on this program.
Fr. Robert: You say that, it’s funny though,
because sometimes as you’re repeating it, you’re going, oh yeah, I remember
that, I’ve learned that before. This is a shorter abridged version of Coding
101, because this is our last live show for 2014. We will be prerecording this
Friday for the new year, but next up is the best of, and then Coding 101
actually falls on Christmas and on New Year’s and we’re not grinchy enough to
have shows on Christmas and new year’s. But we will definitely have you back
when we’ve got another project cooked up for you. Could you please tell the
folks at home where they can find you, your work and you elsewhere on the interwebs?
Lou: You bet. Twitter, always LouMM, and of
course my work here at Microsoft is all found at crm.dynamics.com. And look out
soon, check me out at LouSM.com, it’ll be up and running soon. For some of my
other projects I’m running into.
Fr. Robert: Again, we’ll have you back on. Happy New
Year, merry Christmas. We bid you farewell code warrior. Folks, I know that
this has been a lot of information, but here is the fun thing, we’re actually
going to give you all the code. You will have the exact assets that Lou designed
for this module. It will be available on the coding 101 show notes page. We had
an issue last week, the upload didn’t go correct, but this one will be there
and we hope that you’ll take it and tweak it. It will work as is, but add those
features that Lou talked about. Play with some of the controls. See what kind
of joy you can get out of modifying his code to make it look a little bit
better, work a little bit better for you. That’s all part of the joy of being a
code monkey. Also, please stop by our show notes page at twit.tv/code in order
to automatically subscribe. It’s not just a place for show notes, it’s a place where you can get every single episode automatically into your
device of choice. Don’t forget that we also do this show live, every week on
Thursdays at 1:30pm pacific time. You’ll find us at live.twit.tv and as long as
you’re watching us live, jump into the chat room at irc.twit.tv. On most
episodes I’ve got you right down there so I can see what you’re talking about.
If you have questions we can normally answer them right on the show. Don’t forget,
you can also follow me on twitter, at twitter.com/padresj. That’s @padresj.
Until next time, and until next year, I’m Father Robert Ballecer, and my TD is Mister
Bryan Burnett, who I’m surprising right now.
Bryan Burnett: I did not have a camera ready for that.
Fr. Robert: Where can they find you?
Bryan: On Thursdays at 11 Pacific Time we’re
doing Know How, so check that out. Oh I do have one on here. Been doing a lot
of quad copter stuff so check that out. I finally fixed mine so I’m excited
about that.
Fr. Robert: Until next time, I’m Father Robert Ballecer. End of line!