 Now on stage here, using the InfoChimp State BI, it's just gonna be a data-driven app that just kinda shows you how to use the InfoChimp State BI and how to use APIs and do cool things with them. And we're gonna do it in Rails. I wanna show you what the app is called at the end. We're gonna build something like this, and it doesn't look like much right now, but this is actually really cool. We've got a list of users over here, and we can sort by count and wait. This is a list of a network, a network, that's something that currently can't do on Twitter very easily. Oops, didn't have my control key. Okay, so, so a little bit about me. I'm a product manager at InfoChimp's. I started on Rails 0.9, actually I think 0.8, but my first app was 0.9. Then I got sucked away from that, and I started doing enterprise-y stuff. I worked for a bunch of big, scary, evil companies that made me a lot of money, so now I can actually go back to the startup world, and now I'm back in the Ruby world, working with InfoChimp's. We are a data marketplace with InfoChimp's. I'm a product manager. I'm also the dev evangelist. I also do a lot of code, so I do a lot of Ruby coding, but I'm not necessarily our best co-owner at any means. One other thing, yeah, I worked, I did enterprise content management, so things like interwoven, SharePoint, and then you have content management, document, so Drupal, because we're related to Drupal at least. It's like an open source one on Fresco, maybe. So that's pretty cool. They made it funny, and now I'm back in InfoChimp's. A little bit about us. We're at the amazon.com for data. We are a data marketplace. Anyone can buy and sell data online through our website. That doesn't matter how big or how small we happen to do with a lot of big data, but we also have a lot of small data as well. We also do really cool things with huge data, such as Twitter data, MySpace, and we also have an API, or sorry, IP census. The Twitter data is just a collection of tweets that we've collected since 2006, and when we're talking about big data, we're talking terabyte scale, so this isn't something that you deal with on your laptop. This is like cluster computing, that sort of thing. So anyone familiar with cluster computing? You guys do that? A couple of people. So to give you an idea of what kind of shop we are, these are some of the technologies we use, and you'll notice a lot of them are very Ruby based. We use Rails and MySQL for InfoChimp support, and all these other things for all our other stuff. So not sure we've got like a few small apps. A lot of the stuff on here that you probably don't recognize is you, Pig, Chef, Cassandra, Flamingo, Tokyo, Tyrant, Bukong, these are for big data compute. We use Amazon EC2 for our API. It's a little bit scalable. Rack is the front end for that. Our two co-founders are like really technical guys, so that's why we have so many Ruby things. We're like a completely Ruby shop. We don't have any Java or anything at all. Like it's 100% Ruby. The only thing that's really not Ruby that we coded is Pig, which is like SQL for big, giant data, and it's just as ugly as SQL. Okay, so here's a picture of what we're gonna build today. So this is what is really cool because we have, my time down, we've got, right now you can only, most apps, you can only view the Twitter space with a very finite area, right? Like it's very user-centric. Like you can view that user and that user's network, and you can view that user's content. So like their tweets, their friends, blah, blah, blah. You can't really expand out of that well, and you can't examine it very well. And the Appertrims API allows you to do that because you've done the huge data compute on this stuff. So right now, like the brown circle and the blue circle is like all you can view. Appertrims has expanded it to be like the green and outward. So what we're actually going to build is something to do with our API called strong links. And strong links shows the interactions between users and how strong those are. So if you query strong links, it will tell you the top 100 people you interact with most on Twitter. And I'll show you the API call for that right here. And this is, you can actually do the API calls to get requests from the browser. I don't know if you guys can read that if you can't. Just go to api.infochamps.com and it will tell you how. These are, actually you can't do it very well there. So this is the entire string that you get back. So I query on username.infochamps and it's returning the user IDs and the weight of that link. And what the weight is representative of is replies, retweets, and mentions. So this actually tells you just how interactive you've been with the ex-user. So like the first user, you know, this is going to be your most interactive user. Last user is going to be the least active. You see like 0.5 link here. Does that make sense? Okay, so we're going to build the app. So the reason this is so cool is because you can examine outside of your network. So say you're following all these people, right? And they're your strongest link. So these brown circles represent your strong links. They might also follow some other people that you might be interested in. So like the screen guy on the left here, he's just like one friend of one friend. So like he's a friend of a friend. You might want to know him, he's kind of important, but I don't really care. This other dude over here though, he's connected to five of your friends. So he's a friend of five friends. So this is significant because he's not just a friend of five friends, but he's a friend of five strong links. So these are the people that you interact with most and then the people that he interacts with most. And this is like really cool because you probably want to know this guy. He's someone you should probably follow because he's probably either really interesting or like really close to your circle of friends. So we're going to find him. So what we're going to do is, and this is really high level, we're going to loop through your user's all 10 strong links. If the query call returns 100 of them, we're only going to go through 10 because 100 strong links times 100 strong links, that's like two hops out of your network is 10,000 and that's a lot of API calls. So we're only going to do 10 out of 10, which is 100. We're going to count number of times that user shows up and this is cool because that's the number of times that it's a friend of a friend. So if he shows up one time, he's a friend of one friend. If he shows up 10 times, he's a friend of 10 friends. We're also going to, and it's not just a friend, but because it's strong links, he's like the strong link of a friend. So he's the one that they interact with most. We're going to find the total weight and this is how much interaction they've had. So retreats again, replies and mentions and we're going to find all their trust ranks. This is another metric that InfoChimp puts out to the API and it's based on Google PageRank. Are you guys familiar with Google PageRank? Yes? Okay. It's a really awesome algorithm for measuring the global importance of pages. So like Google and Facebook have like PageRank nine or 10 and everybody else doesn't have a good PageRank. But this is to measure overall influence in the Twitterverse. So for example, Mashable has like a huge PageRank or Lady Gaga would have a huge PageRank and I have like a PageRank one, something. And then we're going to sort them by using SQL and that's going to be really cool because it's not SQL and you don't have to do sort in your Ruby app. Okay, so I'm going to go ahead and build it. If you guys want to follow along, here's the GitHub URL. You can also find an API here to use to demo here. If you just want to play around with the InfoChimp's API. And you can also check out my tag as I'm going along because I'm just going to code. I'm going to check out my tag too. It's just the command is get check out and then the tag name, their progress dash, whatever. Okay. You guys are ready to build. Let's go. Okay, so we got to start our app. We're going to just do, so the dependencies are going to be Cedar Gem install. We've got chimps, which is the InfoChimp's library that you guys can use for any Ruby app. You need Rails if you don't have already have it. And friendly ID. And I'm actually not going to install this because I already have them. So I'm going to make a Rails app called SpringLynx L-S-R-C. And I also need a single controller. And we're going to have one view called show. Oops. Oh, I guess I need to see it there. We've got it. And it says J, I guess. This is like, this is TexMake before TexMake existed. You can see I practiced it a few times. Okay, so I've got all my files in my file tree here. So I'm going to go through how to set up an environment for your Rails app if you wanted to do the InfoChimp API. First, we're going to configure chimps, let's say, from the ID. We also need chimps. That just goes into your environment rd file. This is the really important part here. So in environments, you can actually specify this elsewhere. I prefer to do it here. We actually have to go through and specify our, I'm just going to copy this one. Get hope, it's easier. That was my connection. I did. Are you guys also connected? Yes. Have you moved to the con connector? Connect the con right here when you're actually online. Okay, so this is online. And this is just configing. I'm going to switch this now just so I don't forget. We're going to cache later. And I actually work on virtual machines. I'm going to change into fonts. You guys don't have to be that far. This is a really important line. And this just pulls the environment variable for the ID. And you can set this pretty easily in things like the review. And we'll set it in just a minute here. And then we need to set up our rd file. And in here, you're basically just going to map resources. It's going to be something to do. And then we'll start building in the controller. So we've only got one controller. And we've got the show, and we've got the tweaked controller. So it's really simplistic. Okay, so we've got that. Okay, so what we're going to do is we're actually looping through strong links twice. So everyone definitely understands what strong links is. It's your most important people that you interact with. So it's your most important people, top 100. And then they're most important people. So we have to loop through all of your guys. And then I have to loop through all of those guys, which can be a total of 10,000. Or I'm going to do 100. So in order to do that, I'm going to actually just build a method here that just loops through it. So we're going to do it twice. So we have to repeat. Then we can do a little bit of drawing, right? So we're just going to call it strong links for user. I'm going to pass two arguments, which are going to be ID and ID type. This is going to be the actual things that you would add into your API call. So if we look at the API call itself, this is everything that's after the question mark. So you've got the API key. So this is the screen name. So this is going to be the type. So you can call screen name or you can call Twitter ID. So if you know your Twitter ID, you can actually call by that instead. This is actually really common and big data that they only return the Twitter ID. Is anyone familiar with the Twitter API? I think you guys actually mess with Twitter. Okay, so like you guys know that you actually get the Twitter ID back a lot more than you get the Twitter screen name. It's kind of annoying, but that's how Twitter works. So you can query by both. You can query by screen name or user ID. And we're just going to specify which type that is there. Okay, so we have to loop through both. So I'm just going to do a really simple for loop. Let's see here. So we actually have to do the query first. Here's the important part. Here's how you do the query. The first argument is the path to the query. So strong links. And you can find this in the inputchamps.API.com documentation. And here's all the stuff that we pass at the end of the string. So we're actually going to say, here we want to say ID type. And I'm also going to say version number. And you can specify this and this helps you stay just current with whatever version that you're working on. And then we're going to say .get. And that actually does the get request on these. Then we're actually going to return them. So we have to say query, strong links. And that's what you have to get out of the query. And we're going to reject all the nils. This is actually an inputchamps bug at the moment. And we have to work around it. And then we're also going to say query, strong links. And this is a Ruby term. That's how you do just the ones that you want. So we only want to do one through 10. And I think you can actually say one dot dot dot 10 if you want to, if you want to. I don't really like doing it that way. I'm going to throw in some arrow handling here. And this is so that when we throw things through there, if we get back a blank request, we actually don't have to worry about anything. We're just going to pass it a blank string. So the inputchamps API gives you back errors in JSON. So if you query for something and it doesn't have it, it'll say, it'll give you a little JSON hash and it'll say error and it'll give you the actual error. So if we have one that's present, we're just going to say blank. That's all we need. That's our entire thing there. So I'm going to go ahead and skip. I think we're, I really don't want to run this much. So I'm actually just going to check out what we have here. Okay, so if anyone just walked in the room and kept up here. Okay, so this is the big method built out. Okay, so as you can see, this is just a little bit prettier than how I read it and how I write it as well. You guys can probably throw this in like a model or a helper or something. Actually not a helper, but a library problem. And here's how we actually do it in the show. So the first thing that we're doing up here, this is really cool and this is something I should pay attention to. This is auto-vivifying. Is anyone familiar with auto-vivifying? Any parole writers here either? Auto-vivify is a feature of parole. It's actually a really cool thing. Imagine it is, I like to imagine it in a way. It's like an initializer for a hash. So you can actually call a data structure without actually creating it. This kind of just auto-populates in a way. And this is something that we actually need to do in order to go through the API keys because if we come back with one that's empty, it's not gonna work right. So the next line down, we're just looping through the first bit of strong links and then this one, we're looping through the next bit. So like if these didn't have the 10 out of 10, we'd be making 10,000 calls, but in this case, we're only making 100. We're passing the third program of whatever your ID was that you asked for and it's gonna be a screening and then since strong links returns a user ID, we're gonna call it that. So here's a part that does all the work, everything in here. So the things that we're getting again are count, weight, and trust drive. And this is the count of the number of times that user serves up in your strong links, of your strong links, and then the weight, and that's the total weight that you accumulate as we tally through them. And then we're also gonna query the input change API again here and that's what this little block is. And we're gonna add that to the hash, just as trust. I just did it as a symbol. I think I actually put this up there, make it shorter. And trust drive again is like page on per Twitter. Then we're gonna sort through all of them and this is just like really simple Ruby sort. I assume you guys all know how to do this, but this is a really cool way to deal with data that you don't have SQL database to deal with. You can actually go in and say, deliver by descending or whatever. So you can actually sort by this, we can sort by count, we can sort by weight, we can sort by trust drive whatever you want here. And then we do the respond to format. And this should run. So the way to do this on the API or on the command line is you actually have to declare your API key in the command line because we declared the environment variable. You can actually put this in a config file if you really want to, but I like to do it on the command line because it's easier and keeps the stuff out of my code. And I can also do it on my code very easily. So the first thing here is just declare your variable and you guys can grab this key from the GitHub repo. Anyone need that URL again? Okay. That's just an API key. If you sign up on api.imperchamps.com, you can get your own. Don't use this one over because it's going to be limited after today. And then I write a unicorn just because I like unicorn but it's my bird because I want to have it with me. You guys can use a script server if you want. So I also need to know where I am. Okay, here we go. So now we're going to call tweeters, which is our controller and we've got friendly ID so I can just call the username. So I'm going to call it in perchamps. And so now is a good time to talk about performance because as you can see, we're still making a request and we actually didn't have a database. So the performance issue here is that we are making 100 API calls for strong links because we've moved through all your API users, right? And then we're making 100 more API calls because we're moving through trust right. So that's 200 API calls that you can figure for about 30 milliseconds a piece and then you have a few time after that. So here's a list. And I didn't show you guys the show template yet, but first column is username, second column is count, third column is weight, and fourth column is their trust right. So this is really, really cool here, right? Because this is a list of your second hot out and it tells you just how connected you are to all these people. Are you guys familiar with LinkedIn? Yes, all LinkedIn. So are you guys familiar also with LinkedIn's little blue circles that they put next to the names when they say first and second? This is essentially developing LinkedIn's second thing, but it's even cooler because it shows people by weight and there's various metrics along with them. So we're actually building something that's cooler than LinkedIn for the Twitterverse. So you can see like some of the people that input changes, I can't really see them. There. Most connected whether these folks, anyone on this list? Anyone in the top? I think James here. I think we're in the right space. There's Damon and Michelle Greer from black space. Yeah. Yeah, those guys are cool. Okay, so I'm gonna keep on going. I'm just gonna check out the next iteration of this. So now our other goal was to be able to sort, right? And do something really cool here. So what I've done is I've created a layout and this is really simplistic. Can you all read that? It's jQuery and then there's a jQuery plugin for a table sorter. It's this line. And then we have actually grabbed Twitter's anywhere API, which is weird, but it works cool. And then I got the idea to put him CSS just to make things pretty. And then we're gonna yield it all right here. And I'll show you how to do the JavaScript in here. Let me just run it so you guys can see what goes on. So refresh that one. Again, continuing the performance. So when you make an API call, you have to figure for network latency as well as compute time on each one of those things. So we need to go there and back. So you have to figure for at least 30 milliseconds if you're making 288 API calls that's 6,000 milliseconds to six seconds. Then you have to figure for the compute time on each of those calls. So that's actually a really long time. It's not the most performable thing that we can do, but this is the simplest thing. Okay, so now we've got it pretty. And we've got it sortable. And can you guys see what's going on here? I can sort the columns and we didn't use SQL at all. So the reason this is really cool, of course, is because we can actually do all this crap. And the only thing that I actually did was drop some JavaScript in. And I'll show you what it looks like. This is the extent of the JavaScript right there. And this is just, everyone familiar with jQuery? Yes, jQuery. So jQuery, if you aren't familiar, allows you to do really cool things in JavaScript very easily. This is a selector for jQuery. It selects the user ID. So if we have an ID element in our HTML called users, it'll select it. And the jQuery table sort function knows where to find t-head and t-body and it knows where all these table headers are. And it says, hey, there's a column. I need to sort by it. And that's the entire extent of everything that you have to do in order to sort. So all you have to do is actually declare these table columns and then say this. So we magically made this sort of goal. And now I can go through and see who's most important more easily. So we actually just sort of count the same people at the top here. You can sort by weight. So this is the number of interactions. So you can see that this list is a little bit different than how. So say, for example, if you go, are you guys familiar with Justin Bieber? Oh yeah. So he's kind of semi-famous within Memcuchamps. He's the top-tweeted-at person. So while a lot of people believe that people like Barack Obama and such are like the top users because they have the most number of followers, Justin Bieber is followed as far as actual interaction goes, is by far the most powerful user on Twitter. So he's kind of interesting, especially considering he just popped up and we have data back all the way to 2006, he's still number one. So he's pretty interesting. So someone like him, if you have a friend say, who's really into Justin Bieber, might show up there really high-weighted because he or she just treats Justin Bieber all day and it's like, I love you Justin Bieber, blah, blah, blah. So that's why you may not want to sort by weight and it may not be as accurate. Trust right, again, really cool. First person on here is ReadWriteWeb. We added the hover card thing with the Twitter API and you can pull this up really easily. It gives you a little bit of information about them. ReadWriteWeb is rated really high because they're followed by a lot of people who are very well followed as well. I don't know what's the other people on top here. Generally anyone, so this is logarithmic, to 10, zero to 10 scale. So anyone, so imagine like on the web, Facebook, Google, Myspace, Twitter are all gonna be like in the eight, nine, 10 range. Those are gonna be the ones that you actually like to recognize on Twitter. I can show you real quick on Trust Me. This is our public exposure website for Trust Ring. And as you can see, Justin Bieber's our top guy. A plus K is Ashton Kusher. I'm Diddy, John C. Mayer. These are all the top people. So I'm sure you guys probably know who most of these guys are. Amazingly, I didn't. There are a lot of people on Twitter who, and I don't really follow the popular culture very well, so I didn't know who was it. This girl, Kim Kardashian, I didn't know who she was. But this is just an example of like, these are like the most influential people on Twitter, as far as Trust Ring goes. You get kind of nosy, take it, Perry. Okay, let's go back to the app. Oops, what time do we get out of here? 40. What's that for? No, not at all. Okay, so I'm gonna go actually back to the slides here. Okay, so again, if you guys wanna follow along with the example, you can do this and you can just check out the whole thing. I got it in some performances at the end. If you wanna check out app progress dash four, that's where, sorry, progress dash two, that's where we are right now. Okay, takeaways. So it's freaking easy. Everything that we did with this is right here, and this is the Equishms query API call. We're eventually gonna make these easier, but right now it's basically just telling the path and then some query parameters. This is all you have to do to get like, that massive for kid string that I showed you guys earlier, and this is an incredible amount of data right here. We do all the big data compute on it so you don't guys don't have to. All of them are fine. Again, this is really cool. You should read about it more in your spare time. Wikipedia's article is okay. Look on the rest of the web, just like Google for it, and you'll find some interesting resources. Again, it's something that's native to Perl, and you can do it really easily in Ruby just by doing something like this. It's just the beginning of this actually, and then after it, it's basically whatever you wanna put it there. And again, this is like to kind of auto-populate or hash. And this was really cool. We did everything that I just showed you without a database. So we did sorting in Ruby one time, and then we did sorting again in JavaScript the other time. We never used any SQL. Everything's entirely Ruby and JavaScript, sorry, JavaScript based. So I wanna talk a little bit about performance. I know you guys are probably concerned because you said the load times, we had probably about like a 30 second load time for that page that was 200 API calls, six seconds plus compute, blah, blah, blah. The network is being hammered to this here. Yeah, the network's slow here too as well. The FHM's API is actually very performant. So like if you guys are querying for a poem, I think most of our response times are pretty much instant and network latency to us is we're in, we're on Amazon, so we've got like actually distributed. We're not CDN, but we've got load balancing and that sort of thing. So the different ways that we can deal with this, the way I dealt with it in my app, if you download the GitHub app, the full one, I did it with page caching, and this is like a really, really simplistic way to go about it, right? Because you can actually just go in and say, hey, I just want to cache or anything that actually gets viewed. And you can, am I too close to that thing? No, okay. You can cache or anything that gets viewed and that it never has to load again. It's a really cheap and hackish way of doing it. The other way is to limit number of requests and we actually did that as well. And the way we did that was by saying the zero dot dot nine and not only to 10 of the 10, so we only had to make 200 API calls instead of 2000, or sorry, 20,000. Cache in the local database. So this is something, if you want to follow up with this on like how to deal with an API, are you guys all like super API hackers? Yes, super API hackers, awesome. Follow up with when another one's presentation, he's gonna do one, I think later today or tomorrow, Jason and the Argonauts, and he's gonna talk a little bit more about caching in local database. This is probably one of the, this is probably the next step that you should take. It's one of the easier things to do. The other thing that is easy in concept to do is concurrent requests. Are you guys familiar with like concurrency and parallel versus serial sort of thing? Yes, okay. If you're not, I will explain it very shortly here. And that's kind of small. So the way that we're actually making the calls right now is like serial. So we make one call and we wait for it to return, we'll make another call, wait for it to return and we'll make another call. So every 20 milliseconds we have to wait and it's all in a line, it's just a bit cute, right? The better way to do it would be in parallel. And this is so that we can say, hey, I wanna make a hundred API calls. The original take 20 milliseconds, but the thing is we're gonna do it all at once and if the infotainment API can handle it, which it can, we can do it a lot faster. And the one way to do this would be with something like Event Machine. And I think, I think Event Machine's C-base, I can't remember, but this allows you to do concurrent requests more easily. The other way to do it is with JavaScript. And that's a really hacking way to do it. So actually if you end up with a page and you wanna do all your code in the JavaScript, you can actually kinda cheat around making those requests by just looping in your JavaScript with Ajax. Then this allows you to do concurrency without having to actually do concurrency in your Ruby code. Now does your API allow you to batch requests? Not currently, we're working on that. It's gonna be something that's gonna come out really soon here, so that should limit your, or sorry, decrease your load time quite a bit. Okay, so some other cool stuff. 10 minutes, okay. Some other cool stuff. Scaling data, this is an example from our wordbag column. So this is something that you probably wanna do in data a lot. If you guys aren't familiar with logarithms, it's basically making big numbers more understandable. So for example, the Richter scale, the one that measures earthquakes, is on a logarithmic scale. So instead of having numbers like zero to 20,000, we have zero to 10, which makes it somewhat more understandable. The interesting side effect of that is that like a, not a Richter scale of nine earthquake, is 10 times as powerful as a Richter eight scale earthquake. So even though it's only one number up, it's 10 times as much. So it's somewhat misleading, but it actually makes things a lot more easy to deal with. This is a quick way to do it in Ruby. It's just the math library. Another thing, Twitter's API sucks for avatars. If you guys are just building Twitter apps, and you just wanna build a really quick app and put an avatar on, I promise you, if you try to enter basically the Twitter API, you will be really pissed off. I rented this the first time that I did something, but there's this really cool thing. Are these guys here between images guy? Anyone? I think they're PHP guys. But it's a really simple API call. You don't even need an API key. You just call this and I shoved in an ERB thing there. You just put the username inside and it'll return you a nice, and you can have like five different sized avatars. Tracking your outgoing users, this is something if you're gonna have a small app you're gonna wanna do with Google Analytics because you're gonna end up with a lot of clicks out and you're gonna wanna know how many times people actually did that. This right here is event tracking. There are two ways to do this. There's event tracking and there's also, you can change this to like an outgoing thing. Are you guys all familiar with Google Analytics? Do you guys do work with Google Analytics? So you can either do event tracking, which is kind of okay. I prefer the other way, which is actually doing it through an outgoing link and you can say, hey, this traffic was outgoing and you have to specify it in JavaScript. It's just like this. It's very simple to do though. Just look at that. More cool stuff. Consent, this took me forever to find. Probably like a week before I was very close to writing it myself. And it's a really, really cool plugin that allows, it's like a firewall for your Rails app. So it allows you to rate limit people. And this is cool for Rails in general, but this is even better for your API because you just let your API just sit there. You're like, sorry, your app just sit there. People can use your app kind of straight to the push-ins API, which is gonna run up your bill instead of theirs. So you can do that based on IP. It's really, really simple to use. It's really cool. This is probably the coolest plugin I've ever ran into in my entire life. This is Cacheable Flash. Typical came up with this, I think. At least they don't get a repo for it. It allows you to cache whatever you want. So you can do page caching and not have to worry about anything. So you don't have to worry about like private caching, which is a big pain in the ass if you ask me. Page caching will let you just be really fast. It'll actually put in the plugin unless you put stuff in JavaScript. So you don't have to worry about your caches getting like captured inside the flash and then like not caching for certain pictures. Okay, I'm gonna end. I guess I'm early. You can find me on Twitter and you can email me, feel free. And you can find me on the web, too. Any questions? Oh, yeah. Yeah. How hard would it be to adapt this to Facebook? I know their API is kind of harder than Twitter's. So most of this is with the InfoChimp's API. The only thing that we made with the Twitter API was the Twitter anywhere thing. Facebook currently doesn't have anything like that, mainly because it's so much more private than Twitter is. As far as the data for Facebook, we have just begun collecting that data and we actually haven't done any big data compute on it yet. We have MySpace and Twitter only right now. So as far as making an app like this, you could not do it unless you were willing to do the big data compute yourself. But we will get around to it very shortly here. Facebook is our big step. Yes? What, if anything, do we need, in terms of business for you? Do we have to pay you money to get access to this stuff or what's the story? Yeah, so I'll show you the InfoChimp's API site. It's free for your first 100,000 calls about the levels that's written here. All you have to do is sign up. It's just like a simple sign up page on the InfoChimp's.org website. We get 100,000 calls, so this is like so you can build your basic app. Our next level up is really cheap. It's $20 a month. It's really simple. As you go up, this is like if you're making lots and lots and lots of calls, you're one of the big guys. So we're back and we're going to make pretty much more expensive. But yeah, if you want to just start out, it's completely free. And when you sign up, you get an API key so basically you can start playing right now. Anybody else? Okay, I'll let you guys keep lunch. Thanks for coming. Bye-bye.