CHUCK: He’s probably deleting all the naked pictures of himself off of his phone.
[Do you wanna have conversations with the Adventures in Angular crew and their guests? Do you wanna support the show? Now you can. Go to adventuresinangular.com/forum and sign up today!]
CHUCK: Hey, everybody and welcome to Episode 7 of the Adventures in Angular Podcast. This week on our crew, we have John Papa.
JOHN: Hey everybody, from sunny Florida.
CHUCK: Lukas Reubbelke.
LUKAS: Hey everybody, from sunny Phoenix.
CHUCK: Joe Eames.
JOE: Hey everybody from sunny Utah.
CHUCK: I’m Charles Max Wood from sunny Utah, as well.
LUKAS: That’s a lie.
CHUCK: [Chuckles] The cake is a lie! We also have a special guest, Tyler Renelle.
TYLER: Yeah, from Salt Lake City.
LUKAS: Is it sunny?
TYLER: It’s sunny.
CHUCK: It’s supposed to be really warm today.
JOE: Oh, good.
LUKAS: Like 80 degrees?
CHUCK: High 80s, 88. We brought John today to talk about HabitRPG.
TYLER: Yes, my pride and joy, AngularJS project.
CHUCK: How does AngularJS relate to Rocket-Propelled Grenades?
TYLER: We get a few of those. So obviously, HabitRPG stands for Habit Role Playing Game, kind of a throwback to Mario RPG Super Nintendo game. Every once in a while, we’d get a tweet that says, “So, I can destroy my habits with missiles, right?”
JOE: [Chuckles] We need a sound bite for that.
CHUCK: Yeah, we do.
LUKAS: Where’s that Ace Ventura Popeye laugh? I think that would be an appropriate sound effect for that.
JOE: That would be a good one. So, tell us about HabitRPG.
TYLER: Sure. So it’s a video game for improving real life habits. It’s a fantasy role playing game, and the way you progress in the game is by accomplishing real life goals. So when you do good things in real life like going to the gym and eating healthy, you get experience and gold. When you do bad things in real life, like smoking cigarettes or forgetting take out the trash, and you lose hit points. And it’s a social MMORPG. It’s not really interactive; there’s not really a whole lot of animations and stuff, but you fight bosses, you go on quests, you join a party. And it’s got like a class system: you can be a warrior, a hero, a rogue, etc. and they all interact with the party in different ways. So it’s a social accountability MMORPG for improving real life habits — kind of World of Warcraft for self-improvement.
CHUCK: I have to say I’m usually pretty good… well, I won’t say ‘pretty good,’ but I’m usually decent at online games. I’d totally suck at HabitRPG.
TYLER: [Chuckles] There’s like a very respective strategy to playing it. And at first you kind of think you are working around the system, and then you realize that’s the way it’s intended to play. So the things you are bad at turn red over time, and you learn to start focusing on your shortcomings, and ignoring the things you are good at just take the hit… So for example, if you go to the gym every day, but you haven’t done your one hour personal project of coding for a very long time, your ‘go to the gym daily’, will get really blue, and it’s not worth very much value, whereas your personal project daily gets really red and starts hurting you really bad. So you learn to ignore all the blues on your list, and focus on the reds. And at first, it seems like you’re kind of working around the system, but that’s exactly how it’s intended to play, is to help you focus on stuff you’re really bad at. You just kind of have to get in to the swing of how it plays.
CHUCK: How long has it been around, and has it always been in Angular?
TYLER: No. it’s been on three platforms. It used to be on Rails. So it’s been around for three years. It was just an open source project. It started off just as a personal project; I was using it on my own computer, on localhost:3000 as a Rails app.
CHUCK: Yay, Rails!
TYLER: [Chuckles] Yeah. I never intended to release it to public initially, and then I’ve heard about all these NodeJS hotness, so I just kind of wanted to sink my teeth into that framework and get experience with it, so I converted it to DerbyJS. Anybody ever heard of Derby?
TYLER: Anybody know MeteorJS?
TYLER: So about two years ago, it was Meteor’s biggest contender.
So MeteorJS got a lot of flak in its early days because it was basically breaking all the rules. So in order to achieve SEO, they would take a PhantomJS snapshot of the webpage, and then make that available as an HTML file. They would not use NPM; they had their own packaging system. I don’t think it even used NodeJS proper; it used… I can’t remember what the… it’s not ‘threads’ or what is it called? Fibers? Something like this. It used some spin off node.
Anyway, they were breaking a lot of rules and a lot of people didn’t like that. So they steered away from that and a lot of people were keeping an eye on DerbyJS. It’s followed all the rules. So it’s using Express, it’s using NPM, it was doing proper server side rendering. Since then, MeteorJS has mitigated all the main concerns that people had with them. So now, they’re using NpmJS and they are doing a lot of things a lot better these days. So I think Meteor is a very good framework that’s based standard, especially compared to what it was before.
So we were on DerbyJS, and Derby at the time, was not ready for primetime. It had a lot of scalability issues. And we started to see those concerns really fast. We got hit by Reddit and Kotaku, and Life Hacker, and we jumped in the number of users, we had really fast. And so we started to really see the scalability issues that Derby had. It couldn’t scale horizontally at the time, so we jump shipped and went to Express and Angular.
CHUCK: You keep saying ‘we’. Is there a team behind it now?
TYLER: There is. So the project is open source. Everything is open source. There’s three cofounders, and we’re still kind of trying to figure out life in the business. There’s about 100-140 contributors. There’s a website, a mobile app, a chrome extension and then a few other little utilities.
CHUCK: That’s really cool. I had never heard of DerbyJS. Are you using MEAN stack or are you using a different database?
TYLER: We’re using the MEAN stack. Angular, Express, Mongoose. There is a MEAN.JS framework now. I feel like I would do my next project on MEAN.JS framework. It does a lot of Rails kind of scaffolding, it gets you generators on the CLI, and it uses the whole MEAN stack, and it will, you can say like generate the resource user, and it will create the model, it will create the API routes and it will create the HTML page with the associated AngularJS code. We’re not using that framework, but we’re using the conceptual MEAN stack, and we’re very, very pleased with it.
CHUCK: How much work was it to convert it from DerbyJS to Express?
TYLER: It was a lot of work. Fortunately, because DerbyJS uses Express on the backend and NPM, we were able to retrofit most of the backend code. And the frontend code is quite similar to AngularJS. It’s a little bit more Handlebarsy. So we could convert a lot of that too, but we just kind of had to like wire together since DerbyJS has this whole real time Socket IO modifications with the model of the browser that propagates directly to the server, create all the API routes and then string together of course like propagation to the server when things are edited on the client. At the time, our biggest contenders were Meteor, I think we avoided that route because we didn’t wanna hit the same issues, we’re basically hitting with Derby.
SalesJS was something that was being considered, and then we’re also looking at Firebase with AngularFire. We did not go that route because we needed a lot more direct control over API routes, since we have a lot of other properties besides the website such as the mobile app and Chrome extension. And a lot of the value of HabitRPG derives from integration with other projects, so people have created like GitHub integrations so that when you made a commit to GitHub, then you get points In HabitRPG. And people have created Anki integrations, so that when you review your flashcards, you get points; and if you don’t review your flashcards, you lose points etcetera. So a very solid kind of proper RESTful API was very important form the get-go, so that’s why we went with Express standard MEAN stack, instead of AngularFire or Meteor or SalesJS or anything like that.
LUKAS: We mentioned that you run into some performance problems. What kind of traffic do you have now, and what’s the ability being on the MEAN stack to handle that? I’d be interested to hear some of the stats there if you have any.
TYLER: It’s hard to analyze our user base; we’re not yet tracking mobile traffic, and we’re still trying to get a proper breakdown of the active users and stuff. But we have about 40,000 active users; we have over 400,000 total. Anytime, it’s just probably like 300 users on the site. It’s not a whole lot. But Derby was breaking down at that point. Big reason was because you couldn’t add instances. And the big reason for that was because it was using Socket IO, and it has its authentication strategy. So you couldn’t like round-robin request per single user with multiple instances.
And what I’m thinking of is Heroku. So right now, we’re on Heroku. Anytime we get a big traffic search… every once in a while, we’ll get like a Life Hacker will post about us, or Reddit life pro tips will post about it and we’ll get a big surge in traffic. And we just added dyno on Heroku. I just add an instance and it works out of the box with Express. So that just allows us to just scale up or scale down horizontally. It’s really easy that way. I think Derby has since mitigated a lot of the issues they had with horizontal scaling, but I’m not sure. It’s been a while since I’ve checked up on that project about a year and a half, so I don’t know how active the project is anymore.
JOHN: Why Angular? We talked about a lot of frameworks here, and kind of their pros and cons, but why Angular for this particular solution?
TYLER: It’s two big reason. One, Angular was the most similar to the current stack we were on, so it was easiest migration path. But the biggest reason was it had the biggest mime share. It was just far and away, the most popular coming framework at the time. Backbone was still the most popular front end framework at that time, but I just couldn’t get it into Backbone. It was too slim for me, that it didn’t do enough work.
So, Angular and Ember were the two frontend contenders. And at that point, it was just a popularity contest. And I know that’s not the right way to go about it necessarily, but I think it’s telling when something is substantially more popular than its alternatives. So it’s got more mind share, it’s got more modules, documentations, resources.
LUKAS: And not even popularity per say, but I think like ecosystem. And I think that’s a big thing is having vibrant community in an ecosystem; it just makes it so much nicer to get into a technology, And so having lot of commits and activity and support. You could say popularity, but I prefer to think of it as kind of an ecosystem.
JOHN: That’s a better way of saying that. I agree. It’s more about you wanna make sure you are not the only guy in the world doing this thing, right?
LUKAS: Yes, it’s so important. Any single question I’ve ever had or pitfall or issue with AngularJS, I found with Stack Overflow. Somebody else with the same issue, and I’m able to solve it with simpler code or a module. Whereas when I was on Derby, I had to custom build to most of the issues that I was experiencing. And it was nice because people were following my projects, like I built the authentication module for Derby, but it just was too much overhead time.
JOHN: So how much experience did you have with Angular when you started this? I mean, was this something you had done a couple of projects with, or was this your first endeavor?
TYLER: It was my first endeavor.
JOHN: How long did it take to get it going? Because there’s a lot of people out there trying to get in to Angular. Was this a day? Was this a year?
TYLER: It was about a week to get started, the flow going in that migration process. Getting up to snuff on Angular. Like I said, it was quite similar to Derby. And I think many of the frontend MVCs are quite similar to each other nowadays. Like, Ember isn’t a far cry from Angular. So once you familiarize with yourself with one of these MVCs, then it’s not very difficult to become acquainted with the next.
LUKAS: Most vibrant, ecosystem-esque frameworks.
JOHN: Thank you. Lukas is our eloquence expert, so.
JOE: Good terminology there.
JOHN: If you look at all that, and you think about it as a whole, Ember and React and Angular and all these, they are all accomplishing the same thing. If there’s innovations in the way to do it, but I think in the thing that they solving, I think because there’s so many people attacking that particular area, that kind of just proves it. That’s a space that needs solution.
TYLER: Yeah, totally.
LUKAS: And to piggy back on that, John, if you don’t mind me; just kind of an anecdotal story, I had an opportunity about a year and a half ago, I actually had lunch with Yehuda Katz. And so this was kind of when there was big Angular Ember beef going on. Brian Ford and I were at a conference, and we were talking about…
JOHN: A cage match between Brian and Yehuda?
CHUCK: I’d pay to see that.
JOHN: I would too.
LUKAS: We’re on a panel, and it was mostly civil. Then we went and head lunch and we were talking about Ember and Angular, and we kind of just realized that we were trying to solve the same problem. Just philosophically, we were coming at it from a different way. It kind of ended like, “Okay, I see where you’re coming from. Let’s high five. Really nice to meet you.” And the convergence was is that we’re trying to solve the same exact thing; you’re just coming at it from one and, and we’re coming at it from the other end.
JOHN: I agree. And having competition out there, it really validates the existence of what you are doing too, because if you are the only guy in the game, you got to start wondering too. First of all, might be able to push the envelope and always competing with you, but second, is this really a valid case if I’m the only one out there?
And we want that to be calculated on the client first for performance, so you see it happen all at once. And then that operation is sent out to the server, and replicated on the server with the exact same code. So using Browserify, we’re able to do that with this common library.
So how does habitrpg-shared constitutes about 80% of our code throughout all of our properties. And it’s just included in every single property. And it saves us a tremendous amount of time. And all of our developers since it’s all one line which they can just switch between the different properties of experience a bug on mobile, because they are using the mobile app themselves, they experience a bug on mobile, they switch over to mobile app and they fix the bug. Very likely that bug was in the shared repository, and then that bug fix gets propagated to the website for free because it’s shared between all the properties.
JOHN: Are using any native features on the phone with this?
TYLER: We aren’t. We haven’t found a need yet for any of the device’s capabilities. We will end up using notifications; so like at the end of the day, it’s going to ping you and say, “You haven’t checked off any of your dailies. You are going to get hurt at the end of the night if you don’t log in now.” But for now, we’re not actually using any of the native capabilities.
JOHN: Okay. I was just wondering if you are using something like ngCordova for example, which works great with Ionic.
TYLER: Right. The only one I saw was the keyboard plugin. Have any other modules been released yet?
JOE: There’s a couple in there, but that’s just things for like vibration and things like that for it, but I can imagine keyboard to be one or even for some of the RPG that you might wanna take when let’s say your Habit is shaving. [Chuckles] You take a picture of yourself everyday when you are shaving.
TYLER: Proof to like anybody you’re in a challenge with?
JOHN: Yeah, exactly. What’s that November challenge…
TYLER: ‘No Shave November’. So then one of the other cool pieces with these common libraries, because the mobile app is using AngularJS by means of Ionic Framework, we’re able to put services and directives directly into the shared repository, and then share actual AngularJS code between our website and our mobile app.
JOHN: So there’s a lot of code sharing going on?
TYLER: I think that’s really what makes HabitRPG’s case study very interesting is the habitrpg-shared repository.
JOHN: One of the questions I have is about the contributors on this. So you’ve got some folks to mention here, but what’s the process if somebody wants to get involved and contribute?
TYLER: We’ve been a little bit cavalier about accepting contributions. There’s a proper process we’re going through. So HabitRPG as a commercial product. So the proper way to go about accepting contributions in an open source commercial product, I don’t remember what it’s called, but it’s something about open source and IP. There’s a four part process: first is having a license. Every open source projects should just have some sort of license. And that just ensures that it’s going to continue to be open sourced.
LUKAS: Pro tip!
TYLER: The second piece is Contributor License Agreement. And that just makes sure that anybody who contributes to your project… it kind of protects yourself, so that anybody who contributes to your project can’t pull a quickie on you. So every major open source project has a Contributor License Agreement. AngularJS has a Contributor License Agreement. And basically, what it will say is like so, Google owns AngularJS, and Oracle could have some clause in their employment manual that says, “If you contribute code to an open source project on the clock, then we own part of that open source project.” And that makes sense, you are on Oracle time, you are working on some personal project, then it’s partly theirs. So Google’s Contributor License Agreement for AngularJS will say something to the effect of, “If you are contributing to our project.” No, in fact, the company on who is behalf you are coding does not on our project, and you agree to that. Things like these.
There’s this third part which is a Corporate Contributor License Agreement. And I believe AngularJS actually might be using something to that effect. And then the fourth piece is if you’re a commercial open source project (which HabitRPG is, AngularJS is not), you have a copyright assignment form, which basically says, “The code that you have contributed is granted as the property of the company you are contributing for.” And a lot of open source contributors don’t like that but they, for the most part, understand that if you are a commercial product. And that’s really to protect yourself from law suits.
So those are the four pieces. We’re working on catching up on a lot of that, but for most projects, a Contributor License Agreement is sufficient. Anyway, as far as just technical side, obviously the proper way for handling lots of pull requests is have a good testing in place, and then using Travis CI to make sure that every pull request checks out. It has a little checkbox with X to tell you each pull requests status against the repository’s tests.
JOE: Could you say ‘tests’, I like haring the word, ‘tests’. Can you say that again?
TYLER: Our testing is a little bit poor. That’s a project we’re working on getting up to snuff, but atleast it’s sufficient to tell whether or not something will really bust the system, and that’s saved our hide in many, many cases. So what HabitRPG is, it’s insentivizing good behavior, but in the form of a video game. This notion is called gamificaiton, and it’s all the rage these days. I had no idea what gamificaiton was going in to the project. I learned the term through the project. So where gamificaiton systems, it’s kind of corny, but we insentivized contributions that get this really rare in-game gear for each pull requests they submit. And sometimes, contributors like that.
CHUCK: We’re getting toward the end of our time. Is there anything in particular who you’ve run into with this that was hard or tricky, or not standard AngularJS that you had to do?
TYLER: Well, I will say because we’re not following strict guidelines, we have contributors from all over the place, and everybody is at varying levels and expertise in AngularJS and Express. And sometimes, we get pull requests that’s not proper rest on the backend, and all these things.
The next time around, I think I will investigate MEAN.JS framework. I do believe in opinionated paradigm, so I really do like the Rails model of kind of forcing you to abide by strict principles. Because as a result after merging many pull requests, sometimes we get a ticket that says, “This REST API end point isn’t proper, and I wouldn’t expected it. Can you change it?” Or this AngularJS code took me forever to find because it’s kind of spaghetti. So next time around, I think I would personally investigate this MEAN.js framework.
CHUCK: All right. Well, should we get to the picks?
JOHN: I’ve covered all points that I wanted to cover, so it’s perfect.
CHUCK: Let’s do the picks then. Joe, do you wanna start us off with the picks?
JOE: You betcha. Today, I’m going to pick a couple of games. First is the Robot Turtles Game, which is for sale right now. I think you can get it in other places, but basically, it’s a game for kids. It’s about turtles, but it actually teaches them to program. And they have no idea; they are just organizing cards and stuff and making their turtles around in the board, but it actually teaches them looping and conditionals, and all that stuff. It’s only $25. You can pick it up on Think Geek. There will be a link in the show notes.
JOHN: So it’s really a trick?
JOE: Yeah. [Chuckles]
CHUCK: Yeah, you can also get it on Amazon.
JOE: The second game is one that I just noticed at a local game store. Just came out. I haven’t picked up my copy yet, but it’s based on the same system; the legendary system that is the Marvel card game that’s really fun. I played the marvel card game legendary card game that’s really super fun, and this is called Legendary Encounters, which is basically the same system, but it’s set in the aliens universe from the aliens movie. And so you’ve got Ripley and Hicks and all those guys, and you are playing aliens card game. And I love aliens, and I love card games, so super excited about that one.
And then my final pick is going to be a TV show that my kids have been waiting to for a long time. And everytime I watch an episode, I laugh and watch something else that’s very skit. It’s just like Saturday Night Live, but it’s actually done here at BYU, and it’s called Studio C. So it’s put on by a bunch of BYU students, and it’s becoming super, super popular. And their skits are just absolutely hilarious. Some of the funniest skits. My kids love it, and I’ve been watching it and really getting into it. So that will be my third and final pick.
CHUCK: Very cool. BYU alumnus right here. John, what are your picks?
JOHN: I’ve got a couple of picks. My son and I, seem to play an inordinate amount of hours of Lego Star Wars. And I’m putting that as a pick in there, because it’s just a great way to get on to your favorite console — Xbox, PS3 or whatever — and just having a lot of fun with any age. My son is five and my daughter, is ranged all the way up to 15, and we all play together. And it’s just is a lot of fun because we get to go in and smash things. And then afterwards, they get to go out to the mall, or one of the parks and pretend we’re Lego smashing different things on the sidewalks. So as long as your son doesn’t think people are things you can smash, then that’s a good thing to play.
My second pick is going to be more in the lines of movie. And I think that it Aaron picked this earlier, but I just recently get to see it, so I wanted to pick it again is Guardians of the Galaxy. It’s just an amazing, fun, movie to watch. The comedy in there really drew me in. And something specific I really liked in it is I have some family members who actually have Asperger’s Syndrome. And some of the context of the characters like Drax, I’m saying he has Asperger’s, because some of his behaviors and mannerisms are very much along the lines of Asperger’s.
JOE: [Chuckles] Yeah.
JOHN: And made my family members who have that, kind of really relate to that person, going, “Wow, a person like that kind of like me, and I see that and that’s one of the heroes of the movies.” So that was really darn cool. I really appreciated that.
JOE: Just so that you know, when we watched that movie, my wife said that I remind her of Drax.
JOHN: Because you are so awesome and large?
JOE: Probably, yeah.
JOE: No, when they are sitting down and he asks when, “When did we establish that?” And his answer, I swear, I said that exact same phrase to my wife. I don’t wanna say it because it will spoil a really funny line to anybody who hasn’t seen it.
JOHN: Yeah, definitely check that movie. I like the stuff where it’s like, “Hey, that’s over your head.” He’s like, “NOTHING goes over my head.”
LUKAS: Is that that big, shirtless, tattoo guy?
TYLER: Yes. You can see the resemblance between him and Joe.
CHUCK: Lukas, what are your picks?
LUKAS: My picks are, speaking of games, I’ve been playing Vim adventures kind of on and off as I learn try to learn Vim. And I just finished Lock In by John Scalzi this week. Super awesome book. Wil Wheaton did a great job narrating it.
And even more shoutout, Joe did a super awesome job at helping me out on my book, with some test questions that I had. And so again back to the ecosystem, it’s really awesome being a programmer having good friends with good ideas, so thanks a lot, Joe.
JOE: You’re very welcome. I love testing.
Last month, I got a Rocket Raccoon comic book. It was kind of a special edition for them. I also got like Grut bobblehead, since we’re talking about Guardians of the Galaxy. I got a little Ninja Turtle thing. The Grut bobblehead is funny. My kids, whenever they come in my office are like, “What’s that?” And then once I tell them, or my son he just saw it, and “Gruuut!” Because I took them to see the movie. But then they’ve all asked like if they can have it. And it’s like, “No, this is dad’s toy.” So just a bunch of stuff like that. There were some posters in the villains one.
The next one is space shows, so it’s Star Trek, Star Wars and Firefly. And so I’m really excited to see what’s coming in that one. You don’t actually know what you’re going to get, until you get it. So kind of interesting, but it’s just fun. It’s a nice thing that it’s like, “Oh, I get this.” And I get a little excited for a week when I know it’s coming. That’s my pick. Tyler, what are your picks?
TYLER: I’ve got a few. First one is ZenHub.io. it turns your GitHub issue queue into a trello style Kanban board, and that way you can sort things as far as priority and stuff like that.
My last one is Pomodoro. It’s a productivity technique, where you work for I think it’s 20 minutes or 30 minutes, and then you take a break for five minutes. So, it helps you minimize distractions. So what I do is I code. They’ve got desktop apps. The one I used is Ugo Landini’s Pomodoro. And you hit a hotkey start the timer for 20 minutes, and you code for 20 minutes without any distractions — don’t answer emails, don’t look at your text messages — and as soon as that timer is up, you get five minutes to catch up on everything else; so then you answer your text messages and answer emails, check Facebook. And then as soon as that five minutes is up, you go back to 20 minutes of work. And it’s really, really, effective strategy for increasing productivity. It’s probably the thing that has increased my productivity the most in life, even more so than HabitRPG. And I’ve been using it for a very long time, so I very highly recommend Pomodoro.
CHUCK: When you said ‘Anki,’ I was thinking the Anki drive cars that they show at WWDC.
TYLER: I think it’s Anki like the Egyptian symbol, maybe?
CHUCK: I found the website. I was just… well, thanks for coming, Tyler. It was fun to talk about. And if people want to go look at the source code or ask you questions about it, what are the best ways to do that?
TYLER: The website is HabitRPG.com. The codebase is at GitHub.com/habitrpg and you can see all the various [unintelligible] there in the website [unintelligible]. So that would be the best way. Or through the contact page on HabitRPG.com.
TYLER: Thanks for having me.
CHUCK: Thanks for coming.
[Where can you learn from designers at Amazon and Quora, developers at SoundCloud and Heroku, and entrepreneurs like Patrick Ambron from BrandYourself? You can level up your design, dev and promotion skills at Level Up Con, taking place October 8th and 9th in Downtown Saratoga Springs, New York. Only two hours by train from New York City, this is the perfect place to enjoy early fall and Oktoberfest, while you mingle with industry pioneer, in a resort town in Upstate New York. Get your tickets today at levelupcon.com. Space is extremely limited for this premium conference experience. Don’t delay. Check out levelupcon.com now!]
[This episode is sponsored by Mad Glory. You’ve been building software for a long time and sometimes it gets a little overwhelming; work piles up, hiring sucks, and it’s hard to get projects out the door. Check out Mad Glory. They are a small shop with experience shipping big products. They’re smart, dedicated, will augment your team, and work as hard as you do. Find them online at madglory.com or on Twitter at @madglory.]
[Hosting and bandwidth provided by The Blue Box Group. Check them out at bluebox.net]
[Bandwidth for this segment is provided by Cache Fly, the world’s fastest CDN. Deliver your content fast with Cache Fly. Visit cachefly.com to learn more.]