We're doing the hot versus cold girlfriend challenge. So let's crank this up. I'm gonna crank it up to 90. The hot. A little bit. I gotta show him what the hot girlfriend is all about. This is the hot girlfriend side. I hope you don't go cold. I'm freezing. No, I'm freezing. She's set the temperature to 50 degrees now. No. No! I'm literally gonna get hypothermia. Good morning, Model Squad, and welcome back to our channel. So today's video, as you guys read by the title, it's about to be a juicy one. Bill actually does know about the video that is going on today, but I wanted to get on the intro really quick because he is in the shower. So as you guys read by the title, we are doing the hot versus cold girlfriend challenge, and we're gonna see which one Bill likes better. Does he like me more hot or does he like me more cold? So for the hot, I'm going to be acting all sexy, you know, romantic when I make him food. I'm gonna have everything. It's all just gonna be hot stuff. Like, I'm about to go turn up the thermostat. That's why I'm filming this intro because I'm about to go in the shower and turn up the heat and make him burn. So this is what he's gonna get for wanting a hot versus cold girlfriend. So guys, we're testing my boyfriend to see if he likes the hot side of me or the cold side of me. Like I already said, he knows about this video idea, but he doesn't know what I have planned right now. So make sure to give this video a big thumbs up if you guys haven't already. Make sure to go down and hit that subscribe button and join the Marvel family. We are moving to Florida so soon. I am so excited, guys. Let me show you guys my outfit for the hot. So I am wearing these bottoms with this top and these ears. I gotta go all out, guys. I have to see which one Bill likes better. Obviously for this one, I gotta act all sexy, romantic, and sweet. And then the cold one, I'm just acting cold. Not very nice, I'm more bitter. Everything's just gonna be cold. I'm gonna turn on the thermostat all the way down to zero. We're gonna freeze. We're gonna freeze today, but we're gonna see which one he likes better.  I want you guys to comment down below which side you guys like better. Would you rather be hot or would you rather be cold? So actually right now I'm gonna go turn up the thermostat to, I don't even know, what's hot? Like 85? I don't know, guys. So currently our heat is at 77. I'm sure some of you guys are probably like, oh my god, that's so hot, but it's actually really cold in this apartment. It doesn't really circulate heat very well. So let's crank this up. Okay, so let me go up to 90. So I'm gonna crank it up to 90. Oh, that's gonna be hot for me. I don't even know if I'm gonna enjoy it being this hot in here. Well, good luck. We're gonna be sweating soon. All right, guys. So now I'm gonna go in the shower.  He wanted me to be hot today, babe. This is what you get for wanting me to be hot. I'm doing things spicy for you today. All right, baby. Are you ready for the hot girlfriend? Are you ready now? Yes, right now. Why right now? I have soap in my eyes, babe. All right, babe. I'm turning it hot for you. You wanted a hot versus cold girlfriend? Babe, I cannot see anything. I'm so mad. Baby. No, no, no, babe. You want a hot versus cold girlfriend, huh? I did not want this. Yes, you did. No, you did. This is what you get for wanting hot. I'm gonna be hot. Don't even ask me. Okay, stop showing me. Babe, please, it's burning. You can turn it on yourself if you wanted. Babe, it's burning. Babe, I cannot see anything. Bye, babe. Bye, babe. Bye, see you later. Hang on, baby. This is what you get for wanting a hot girlfriend. I'm gonna give you some spites. Juice it up for you, hun. Are you done? I'm being chilled. Okay, well, I don't, you can't be using that towel. I actually warmed up a towel. You are only allowed to use this scolding hot towel.  Babe, stop doing over here. But you only get the scolding hot towel, so enjoy. Oh my God. Have fun. Burn to death. How are you feeling? Do I have to use it? Yes, you have to use it today. I'm showing off the video as a hot girlfriend. I'm freaking body burns. Good, this is what you get. This is not what I asked for. Bill, we are testing to see whether you like the hot side of me or the cold side of me. Not for a hot girlfriend, not a hot, literal, spicy. Yeah, you get everything. Look at me, I'm just hot for you. I'm still gonna be sexy and hot. You do look good, not gonna lie. Exactly. But this is not what I meant. I know you didn't have this plan in the video, but why am I gonna tell you things?  You got to just see for yourself. Okay, okay, bet. I was just showered. It was good. Even though I scolded you. It was a little toasty. Yeah, no, at the end there it got me a little bit. Well, baby, I'm about to make it even hotter. I'm about to make it even hotter for you. What do you mean hotter? Oh, just, wait, I have so much planned.  Like scolding. If you're making me food because I usually make Mariah food. Like scolding. If you're making me food, okay, I don't care. It's gonna be good. Well, you know what, you come sit. I'm doing things for you today, okay? The sexy girlfriend, hold on, let me come over here. A little bit. That's hot as frickin' here. I'm gonna make it hot for you today. It's, it's.  Look at, look at my princess right here. She's my little devil. It's fake, listen. What? This is the hot girlfriend side. I like it. I hope you don't go cold. Oh my God, okay, wait, let me respond really quick. I honestly right now, I think my favorite would be the hot girl side. Hot girl side? Yeah. Cause like hot girl, like how can you go wrong with it? Like you're about to be sweating soon, so. Why?     You know, you just chill.  I smell the furnace. Did you try the heating on? Maybe. Wait. And if you guys are wondering why we have an air mattress we've been sleeping out here recently, cause it's been super fun, don't mind that. I was supposed to be put away a long time ago. Yeah, it was. But babe, did you turn on the heat? You're actually making it hotter in here so it's like literally. Yes, don't turn it down because this is the part of the video. No, no, no. Go look. I was going to see what it said. Let's go look. What did you say to that? No, no, we have to see what you like better.  I'm already sweating, I just put this shirt on. I know. It's not in a little wet. You know what? I'm gonna have to be showered. This is called the hot girlfriend. Oh my God. Dang. This is so nice. All right guys, so Bill, don't peek.  My hair's gonna go flat because of heat. Oh, where, where. All right guys, so I'm gonna make him one of these, okay, which is what we love. And then, all right guys, and we're also gonna do this one. All right guys, I'm gonna make this right now. All right, it is done. Now it's time to spice it up because you guys already know it is hot girlfriend time. It's not cold girlfriend time yet. I gotta show him what the hot girlfriend is all about. We're gonna dice. You know I'm sitting right here. We're gonna douse it. Hey, you know I'm sitting right here, stop. We're gonna douse it. Oh my God. I almost used half of it. I'm gonna use the whole can and just fill this whole thing up. Oh yeah, that is just some hot, juicy lunch. Bill, you have no idea what is coming for you. I'm scared. You have no, hot, hot, hot, hot, hot, hot, hot, hot. You're getting it everywhere. It's underneath the plate by the way. Oh my God.  Have a bite. You just realized you turned one of the tastiest treats into something that is like unbearably hot. The whole point, baby. It is getting hot in here too by the way. Oh my God. I know, I'm sweating too. No, I'm actually sweating. My armpits are like juicy right now. This is what you want though. Now take a bite. When I asked for the hot girlfriend, I did not think I was getting all this, but I still love you no matter what. I'm gonna try it. That just looks. It's everywhere, babe. This looks disgusting. Hot? Oh yeah. Hot? Hey babe, no. Please, please. No. Please. Actually no. No, nope. You don't get a top. Nope. Do you mean black ice or something? Okay, let me see what else I got. Babe, this is hot. Let me see what else I got. Can you sell me a fuller down, please? Thank you. Uh. Make one exception. Here. You can drink. What do you think of the fuller down? You can drink this. Sriracha. Sriracha's still hot. Ah, baby. This is the whole point of girlfriend challenge. This would have been better than what I ate. You have to eat hot. This is not even as hot. The half the day is what you're doing and suffering things when you're hot. So I don't get any other food other than this. Nope, nope. Just today, if you want something else, I'll join you to the same thing with hot sauce. The hotness is going my nose. I can feel it for you. That's disgusting. I'm gagging for you.  Why do you gotta do this? I did not, come on. I want the hot, girlfriend. I don't want the spiciest. I'm sorry, baby, but... You want the hot. So, Phil, it's for you. Caught that. I caught that. You caught it? Let me have one of these really quick. Da, da, da, da, da, da, da, da. I'm getting hot in here, babe. Dummies are taking off my clothes for you. Actually, yeah. Yeah? Yeah.  I am the hot girlfriend. If you want to know how to get even hotter, maybe you can take a little bit of clothing off. Every time my boyfriend does something for me, eats. Ew, why are you still eating it? I would just suffer through it, but you're actually eating it. I'm hungry! I haven't eaten all day. I just got out of the morning shower. This is my breakfast for today. I love you. I love you, man. I love you, and I hope you enjoy the rest of what I have planned. Oh no, that's not it. No, it's not it. Dang, babe, your shirt's unbuttoned a lot. Are you okay over here? I'm so hot. It's literally getting hot in here. I think it's up to, like, eating. I have another surprise for them. It's not even a night meal. Can I please have some? Oh my God. That's not what I meant. Some hot chocolate. Tell me this does not look so good. It looks like in the movies, like in the nice, you know when you watch a movie and it's like, mm. Do you drink hot chocolate when it's 90 degrees outside of your mind? Take a sip and let me know what you think. Do you drink hot chocolate when it's 90 degrees outside? No. Okay, well... Why would I drink hot chocolate when it's 90 degrees outside of my mind? Phil, you're gonna put it to waste? You're gonna put it to waste? Drink it up, baby. Drink it up. Take a sip. I'm literally short of breath. Take a sip. Because it's so freaking hot in here. So, do you like the hot girlfriend yet? I love the hot girlfriend, but not all that hot stuff. I just like the hot you. I thought that's what you meant. Take a sip, baby. Take a sip. All right, after you take a sip, I want you to go, um. Yeah, I'm gonna pass out. I'm literally gonna pass out. Baby, okay, I have another surprise for you that'll make it worth it.  This is good. One minute. I want you to come lay down on the bed. On our messy bed.  Wait, so now I actually get the hot girlfriend? I have a whole surprise for you. So now I actually get the hot girlfriend. You actually get the hot girlfriend, but I have to be right back. I have to be right back and go get something. I might take my shirt off because it's actually freaking hot.  Get ready. Yeah, get ready. Hot girlfriend's coming out. We're not gonna film it, but I'm coming out. Are you kidding? I'm coming back out. Yeah, get ready. Okay. See you soon, love you. All right, guys. As you guys see, I made Bill think that I was gonna come back out there and give him the time of his life, but in reality, I'm not. I did just change into my blue outfit. You know, I'm so cold. It's bitter. And I'm about to go out there and turn the thermostat down. And I kind of feel bad because Bill literally thinks I'm about to come back out there and give him the time of his life, but I'm really not. I'm just going cold on him. I'm just going cold, guys. Oh my God. I'm excited. Let's go get it. I don't know if he's gonna be undressed. Let's kind of see. All right, baby. Are you ready for the time of your life? Oh, shoot. You really are. What? Stop filming. Stop filming. Yes. Thank you. Thank the Lord. She's turning it down. Oh my God.  I could barely breathe in here. I don't know how you can even like last. I'm sorry, baby, but I don't have something for you. Especially under these covers. I have something for you. What? So I know that earlier, I was being really hot. It's cold time. So here's some water for you, some cold water.  Why? Because I'm acting bitter. I'm cold. I'm not your girl right now. You did all that just to turn off the camera. No. You don't even deserve me. No. Sorry, but I don't want to do anything with you. I'm bitter. I'm cold. You don't deserve me, anyways. Aw, wham, wham. Go put your shirt back on. Wham, wham. Ooh. Actually, baby, flat. Oh my. You look so good. Oh God, don't do it like that, girl. Show your muscles. Show them what you got. Ew. Actually. How is that you? Because today it's cold girlfriend time. Doesn't mean it's mean girlfriend. It's just cold girlfriend. Evil, evil, evil, evil. It's just cold girlfriend. It's not mean girlfriend. You need to know the difference. Baby, what are you up to over here? Oh, wow, are you changing? Huh? What's wrong? You know what's wrong. Are you cold? I'm freezing. No, I'm freezing. I'm freezing. It's literally freezing. I'm freezing. She's set the temperature to 50 degrees now. Sorry. It's really, if I wanted to 50 degrees. Who are you liking better? So far, I'm really cold. It's hard for her to talk. I know. I know. I'm literally freezing. I can't go better than you can. I'm freezing. Do you want to turn it up? I'm turning up. I am so cold right now. You can turn it up if you want to. I'm so cold, but you know what? You are cold girlfriend. You don't have to make it extra, extra cold. No, I don't. Your hands are freezing. Stop, stop, stop. Babe, I'm already cold enough. I'm already cold enough. Babe, I'm so cold. Why is this needed? Because who are you liking so far? Who are you liking better so far? During the video, do you like the hot or the cold? I don't even know at this point. You don't know?  And the cold just ruined it all, babe. I'm freezing. How can you function like that? I like you no matter what. Even if you were hot, cold, mean, nice, I like you no matter what. I think I could function more when it's hot.  Please get away. No, you're so warm. Babe, please. Right, if I wanted this cold in here, I would have just opened all the doors. It's literally the same degrees outside. It's like 50 degrees. What? What are you doing? No, don't actually do that, no. Babe, please stop. Please don't open the door. You know, it's already freezing in here. Come on. Oh my god, it looks so nice out, but it's deathly cold right now. It's literally 43 degrees outside. So you're actually going to make it even colder in here, snap. What do you see? What do you see? Oh, there's a dog over here, that's why. What do you see? What do you see? You see that, Mariah, please turn it up. Babe, you're doing this to yourself. You can pull out now, please. Oh my gosh, guys. All right, baby, I have some more things for you that will help you with your coldness, okay? It will warm you up and it will be the best little treat for you, okay? Hold on, we put it on a plate for you. I have a treat for you, okay? That will help to make you warm. Here's some hot chocolate. I can almost, no. Here's some hot chocolate. Grab it. No, I can't even touch it. Grab it. Oh, it's freezing. I know, it's so cold. I'm about to come out of the covers with you. You got me. No, it won't pop. No. No! Bring it a little closer to you so you get it. Okay, look at the air's blowing. Stop, please, I don't like this.  How do you like it? You cold? I don't think I have a spoon. Are you freezing?  I don't even have a spoon. Oh, let me get you a spoon, okay. Guys. The only reason, all right? I'm about to get under with you. I'm freezing. No, you're cold girl. I'm freezing. You can't. You're cold girl. I'm freezing. Hold on. I have not eaten anything except the hot asperito. I honestly prefer the heat after this. Guys, it's actually freezing. Holy cow. The fan. I don't know if I can handle it. I put hairspray in my hair, but the fan is blowing all the cold air. I just feel like you can't function when it's cold. No. I just feel like you can't function. I can't function right now. This would be so good if it was hot. No, I have to be the cold girlfriend than I am. It's suffering through it. Can I have another hot burrito? I'll eat it this time. No. I threw it away, guys. I didn't even eat the burrito. It's not hot girlfriend time. It's cold girlfriend.  I'm literally. Why are you actually eating it? Look it. I know, guys. That's how cold it is. Look, and the air conditioning just got on. I wish I could. Oh my God. Oh my God. Stop. No. All right, guys. So, it's been an hour. It is so cold in this house. I've had enough of this challenge. I literally just want to get bundled up and close the doors and turn the fan off and turn the air conditioning back up to heat. I am so dumb to challenge, but I have to end it strong. So, basically what I'm about to go do is I'm about to go grab a cup of ice and I'm gonna tell Bill that, you know, he's been really good today.  But I'm gonna give you a nice massage and what I'm going to do is dump the ice cubes all into his back and see how he reacts. So, he's not done yet. The cold Mariah is still there. This is where the bitter part comes in where it comes a little bit more evil and I'm about to just drench him with ice cubes. Guys, it is so cold in here. You guys have no idea. Like I am shivering. I feel like I would rather it be hot than cold because the cold, it's like unbearable. Like you can't like speak. Your hands start to not be able to move. They become stiff. Like I think I would rather it be hot than cold. Cold is terrible. I would rather just sweat and pass out every once in a while, then be cold and like freeze up. Oof, but let's go get it guys, I'm excited. Babe, what are you doing? Nothing. What are you doing? Nothing. Are you putting hot heat on? No, no. Baby, are you about to do the challenge? Okay, you know what? You know what? I have one more thing. I want you to go sit on the couch or on the bed over here. I'm gonna give you a nice massage. I don't want to hurt you. Listen. Wait, massage? Yes, massage.  Cause I don't want you to see, I have a whole plan for about to make you really warm and nice. This is my treat for getting through today. This is, yes, yes.  So go sit on the couch and I'll be back, okay? Okay, no more popsicles. No more popsicles. No more ice cream. I got you, honey. Okay. All right, love you. I'm watching you. All right, go. Go sit on, don't watch me. I'm actually excited for this. Don't ruin it. I'm not. All right guys, so I actually don't have ice. So I'm gonna actually put this on his back. Okay, baby, ready for your nice warm massage? I heated up a heating pad thing for you, okay? Oh my God, babe. Honestly, I am so cold right now.  I need to get you a- I'm freezing. I need to get you the full, the full effect. But I'm freezing.  Okay. You got it, come on.  You don't even need that jacket. It's so cold, it's so cold, Mariah. It is actually, it's probably colder than 50 degrees. All right, later. That only set to 50, the outside, it's 43 out. It's hot. It's hot. It's cold. Please put it on. Please put it on. All right, I'm putting it on. Put it on, please. Stop! Stop! Stop! I should have known! I should have known! Maybe it's the bitter cold girlfriend.  I've had enough since the beginning. Are you done? It's the shower. Are you done? Are you done? I'm done. Okay, then turn off all the stuff and you lose a challenge. Turn off all the stuff then, if you're done.  I don't lose challenges. Even though Snap's loving it. I don't lose challenges. You don't lose challenges? So it's either you take an ice bath or you lose a challenge right now. An ice bath? Yes. Are you going to lose a challenge or you want to do the ice bath? I don't want to do an ice bath. I need to cool it. I'm literally going to get hypothermia. Can you see my breath? Wait, Mama's gone. I don't think you can see it. I don't think you can see it. I don't think it's cold enough. But guys, Snap is actually loving it. He actually wants to go outside. But babe, are you losing a challenge? So Snap can keep enjoying the outside warmth? Or the cold? Or do you want to be? It's so cold though, Mama's gone. I can't do it. You can't do it? I can't. Then turn off everything. I can't. Do it. I'm not touching it until you do. If it was actually warm in the apartment, I could. Not touching it until you do. So pick. Oh!  I turned it off. I turned it off! Go close the windows. I'm closing that sh** right now. You're not doing it. Watch out. Close it. Sorry, Mother Nature. We are not doing this. Wait, there's one more. There's one more door, bud. Oh, you opened up both of them? I don't know. You opened up both of them. What am I? I got so cold in here. Hold on. It's actually freezing outside here today. I'm going to heat up. I'm going to speed it. 90 is going back up. No, not tonight. You don't put up the 90. Yeah, I set it to 85. Oh my God, you guys. It was so cold in here. This, I can say bye-bye to. We're not using that anymore. You have no idea how cold it was in here. Hey, Mariah. Whoa! Do you feel that? What? Warm. Not really yet. My leg, look at that. It was the door. I have goosebumps. Hey, you actually do. I have literally had goosebumps the whole time. I think my body got so used to the cold. Crazy. I don't have them anymore, bud. Guys, comment down below which side you guys have wanted to be on. Bill, this is a test for you. All right. Which side would you rather have the hot? The cold or the cold? I'm going to say I honestly enjoyed the hot girlfriend more. OK. Even though the cold girlfriend has so hurt. Because you failed at the cold. So clearly, you like the hot. The cold? I just cannot do cold. This is why I'm moving to Florida, guys. Seriously. I'm wearing already my Florida vibe in shirts and stuff because I am sick and tired of being cold. It is freezing. What for, oh my God. All right, guys, so that is it for today's challenge. Bill chose the hot girlfriend's side. I want you guys to comment down below what you would do in this situation. Would you choose the hot or would you choose the cold? I prefer hot. I want to see what you guys like. I thought you rocked both the fits, but the hot girlfriend was definitely a one. That was a lot of time. Look at Snap. He's like, oh my God. For a minute later, guys, we treat him good, but it's too cold. It's cold here, too. It's too cold. We don't want him getting hypothermia. No, literally. But if you guys enjoyed today's video, make sure to give this video a big thumbs up. We love doing challenges like this, so make sure to comment down below any more video ideas that you guys also have in mind. We do have to give our end of the video post notifications shout out. And this shout out goes to Mackenzie Taylor. Mackenzie, thank you so much for being a part of our channel. We love you. All you guys got to do to get a notification shout out is be subscribed to our channel, turn on notifications, and then comment down below when you're done. And that's all it takes. You can be literally in our next video's shout out list. My God, guys, sorry. My lips are like purple right now because of how cold it was in here. I know. That's what I'm saying.  My hands are freezing. My hands are actually cold. Your hands are colder. I know. I'm telling you. Oh my God, this is like a, this is a downside on you though. It was. It was. I did not like being cold. Guys, before we leave, give this video a thumbs up, and we will see you in the next video. But until then, peace. Love you guys.


In 1999, Aerodynamics was on the brink of bankruptcy, and with new kids on the block and much more competition than ever before, times were changing for the amusement park industry. Aerodynamics had to come up with a solution quickly. Right around this time, a young engineer joined Aero's team and would eventually work his way up to head engineer. This engineer's name is Alan Schilke, who is now known for having quite the portfolio of roller coaster designs to his name, but before he made a name for himself, he would help Aero Dynamics during their final years to deliver some of the most outstanding and technologically advanced rides the industry had ever seen. One such ride would be a steel roller coaster for a then small park in Pigeon Forge, Tennessee, who wanted a brand new signature attraction to take their park to the next level. Tennessee Tornado would be a custom Aero looping coaster, but this one was unique from all of the other Aero custom loopers of the time, most of which are now defunct. With Schilke's expertise, Tennessee Tornado would be an early testament to the kind of quality rides that he could produce. This Aero looper would use a track design which was different than every other Aero looper at the time and would ultimately lead to a much more pleasant ride experience than was typically found on these Aero loopers. This is my review of Tennessee Tornado at Dollywood. Tennessee Tornado is tucked all the way back in the park. After going through the main entrance, you will either make a left or right and trek all the way beyond Wild Eagle or Blazing Fury depending on which way you go. Upon approaching the entrance to the ride, you will see the massive steel creation looming above and weaving its way through the mountains. It is really quite impressive to look at. As you enter through a disheveled shack and make your way through the queue, you will board the Aero trains with the classic over the shoulder restraints. Upon leaving the station and making a turn to the left and going through a shed, you will climb up the mountain on the massive 163 foot tall lift hill. Cresting the top of the hill, you will traverse a small drop curving to the right then up and down into a tunnel for the main 128 foot drop which has an awesome head chopper effect with the tunnel and a support. You will also get a nice pop of airtime over the drop and you will also achieve the top speed of 63 miles per hour. Following this, there is a huge 110 foot tall vertical loop which provides a good amount of positive Gs at the bottom. Before hauling through a nice rising bank turn to the right, then you will dive back down into the mountain and go through the second vertical loop and as you can see, you are absolutely hauling here. Once again, very good positive Gs. Following the second loop, you will fly through the third and final inversion of the ride which is a sidewinder which provides a good amount of positive force as well. As you exit the sidewinder, you will quickly go through a small bank to right hand turn then make a small rise up into the final brake run where you will get a nice pop of floater air if you are in the front. You are still traveling at a great speed as you fly into the brakes with much momentum. One obvious thing to take away when analyzing the layout of Tennessee Tornado is how short it is in length. You are traveling at a pretty solid top speed of 63 miles per hour along a pretty modest 2682 feet of track. As a result, the ride experience from drop to break is only about 32 seconds long. So yes, Tennessee Tornado is a very short ride and there are only a few real elements, three inversions, and a couple bank turns. However, what this ride does with its elements is great. Nothing seems out of place, it is paced extremely well throughout, and most of the elements are full of great positive Gs. This ride by nature is not meant to be an airtime focused experience, so there are only a couple decent moments of airtime. Compared to all of the other looping coasters made by Aerodynamics, this is a very unique layout in that it is a terrain coaster, following the mountain very closely as you may expect from Dollywood. The elements themselves though are nothing too special. There are two vertical loops, although these feel very different from the other aero loops as they are huge in diameter, instead of being the smaller cookie cutter loops typically found on arrows, which are all one standard size and raised up very high off the ground in moments of high speed. The sidewinder is a bit different, starting out like a huge vertical loop, but then pulling out like a corkscrew to the left. It doesn't feel too drastically different though when you are on the ride. Of course, the layout also has a couple bank turns which help to transition very nicely from one element to another. These are much better than a lot of the older aero loopers as well, which often would feature very janky turns into pre-designed elements, such as the uniform sized vertical loops and corkscrews. The overall design and engineering of this ride is remarkably improved upon in comparison to the older aero loopers that preceded it. When I look at other aero custom loopers I've been on, such as Vortex and especially Anaconda, they both feature some weird twists and turns that are a bit out of place and seem like they are pure filler. Tennessee Tornado cuts all of the fat, instead being very straight and to the point. The ride hits you with some pretty good positive g-force and before you know it, it is done. Of course, due to the improvements made at the time, Tennessee Tornado is also an incredibly smooth ride, even with the classic over-the-shoulder restraints from aerodynamics. As mentioned, the track designed for this coaster is an improvement of the old aero track and you absolutely feel the difference. The profiling is so much smoother and there really isn't any roughness to the ride at all as I found from getting at least 7 or 8 rides. I did marathon the ride at one point and I did notice that after about 3 rides I had the slightest bit of a headache and I think that can be attributed to a very subtle vibration of the cars against the track. Although the track is extremely smooth, I feel as though the intensity of the ride does amplify the vibrations of the car on the track a bit, but it really is not bad. Tennessee Tornado is a ride that is far from perfect, but despite its flaws it still provides an exhilarating, smooth, and fun ride experience and for sure stands the test of time as one of aerodynamics best creations in my opinion. I would have liked to see more added to the ride as it just feels over too quickly. I feel that if there had been maybe an extra 500 feet or so of track and maybe a couple more elements to use up more of that energy, this ride would only excel even more. Maybe this is due to budgetary reasons at the time, but nonetheless it is worth noting. Over 20 years since opening and even after the same park has received more modern and thrilling coasters in their lineup, even bringing back Ellen Schilke to work his magic once again, I strongly believe that Tennessee Tornado still holds up as one of the best coasters at Dollywood and I would love to see it thrilling coaster fans for decades to come. My final score for Tennessee Tornado is a very solid 8 out of 10. What are your thoughts on this ride and would you consider it one of Arrow's finest moments and what more could they have done with custom looping coasters if the company had lasted well beyond 2002? Let me know all of your thoughts and I will see you in the next review. If you enjoyed this review be sure to like it and subscribe as well as check out many others in a coaster review playlist on my channel, like my page CoasterDaddy on Facebook and follow me at CoasterDaddyOfficial on Instagram. Thanks for watching, this is CoasterDaddy, bye.


This is a Prakash and Venkat, we are from ColabNet. So next 10, 15 to 30 minutes, so we are going to showcase our solution. So one of the industry leading solution from ColabNet is Team Forge. I will just highlight the key capabilities of Team Forge before getting to the demo. Team Forge is an application lifecycle management platform for distributed teams. A single environment to connect, collaborate and develop globally.  So all these components is embedded in a one single platform. So what I am going to do is, you know, so I will showcase the product, you know, so in 15 minutes. So the moment when you log in to Team Forge, you know, so it will take you to your project work phase, so wherein you will be able to see, you know, so what are the items that are assigned to you, what are the items that are created by you and if you are in an approval role, you know, so it will be showing, you know, so what are the items that are required for your approval and what are the recent projects that you are visited and, you know, so all those information that you get to know in your project work space. This is not only limited to a project, you know, so project, you are across the project, you know, so you are belongs to what are the project, those information you are going to visible there.   So ColabNet is the only company, you know, so covers all the three mega trends in the IT. So one is agile LLM and as well as cloud and as well as, you know, so your DevOps. So the moment, you know, so when you log into the project, you know, so you can do your plan. So this is what the plan view, so where you can capture your stories, you can capture your epics, you can capture your defects, everything and, you know, so you can plan very well for your project, you know, so it's a dynamic planning wherein, you know, the moment when you capture your, you know, so product backlog and then derive to a release backlog and the sprint backlog. So you should be able to see, you know, so switch over between the artifacts from one iteration to another iteration. I mean, there's one sprint to another sprint.  So you can prioritize your work items.   So assume the case, you know, so you are working on some of the task and then, you know, you wanted to ask for a code review. Then, you know, so we have an integration with review board wherein you can request for a code review and then once the code is reviewed by your manager, then, you know, so once if you say ship it, so it will automatically commit those changes to our source code. So once if your code is reviewed and then, you know, so you can go back and do your continuous integrations with Jenkins. So we have integrations with Jenkins and as well as that son.  So once, you know, so it will pull the commit and, you know, so it will create a build and, you know, so the output of the build looks like this, you know, so while committing, once the commit is done, you know, so it will use either if it is a Eclipse based development, it use May 1 for your build and then, you know, so it uses JUnit for your testing some of those test cases and it uses sonar for your, you know, so functional testing. So internally it does all those things and once the build is done, you know, so if the build is successful, you know, so it will upload it into your file releases. This is one of the key capability wherein so you have a, you know, path where you can see all your deliverables in a one go and the advantage here is, you know, so what was planned in this particular release and what was fixed and what was associated in this release, you know, so to derive that particular, you know, executables.   So in which case, you know, so I'm using a Tomcat and, you know, so I'm deployed to my Tomcat server locally in my laptop. So this is what, you know, so we have deployed in that. So as I mentioned, you know, so we have a capability of orchestrating where you can connect various point products within the tool and then, you know, so you can derive your, you know, so delivery pipes. So which means to say that, say for example, you know, so for this particular work item, you know, so what are the commit happens? So it will take you all those commits and what was the build and what was the commit.  So we are the only vendor, you know, so supports ALM 2.0 with this capability. And moving on to the next thing, you know, so as I mentioned, you know, so we not only concentrate on the ALM part, we also concentrate on the deployment part. So we have a flagship product with the city of, you know, so either you can use with the Chef. Chef is, you know, a open source release automation tool wherein you can deploy to your, you know, so various target nodes. So this, you know, so really covers that entire ALM and as well as deployment part. So that's our capability and, you know, so strength of our product, you know.  So if you have any questions, see TFS is actually another ALM product, you know, so if it's predominantly focuses on your, you know, Visual Studio, MSDN licenses, right? So if you buy MSDN licenses, it will be there. But, you know, so CTF and as well as TFS is both are, you know, same. But our advantage is, you know, so we support on the cross-platform, you know.  So TFS is only limited to N, you know, so Visual Studio kind of an option. You have plugin for.net studio where somebody, as well as Eclipse, if you commit a code, you can add a comment, it'll land up in our system. Automatically, you'll have to log in here. So what Venkat is trying to tell you is, you know, so Microsoft works very well with only the.net environment.  I'm just opening my Eclipse platform wherein, so all the functionalities of CTF will be in the same ID itself. So we, our self is not limited to, you know, so only one development platform. So we are a, you know, so cross-platform window. You can also have add-on for Microsoft Project. Somebody sends you an email of requirement. I click up a button, you can convert that into a story or a task, and it'll land up into our system. So there's a lot of add-on. There's also integration for MS Project, integration for Jira. Yeah, we have a lot of, you know, so integrations with our solution. Okay, so as I mentioned, you know, so we are the only vendor provides of ALM 2.0.  So this is just to showcase an example, you know, so whatever I showcase in the tool, you know, so everything is incorporated within the same ID, you need not to switch between the different IDs, you know, so to perform your day-to-day task.  Okay, so our approach is, you know, so federation. So if your engineering team or if your development team is on multiple tool chain, you know, so you can get them into our environment and, you know, so you can plug in and then you can develop your applications. And there's also a collaborative connector framework where you can integrate with your own legacy application by calling some of the APIs we have. So some of, we also have HP QC integration. Like, do you have any corporate social media integration with ColabNet or integration with any other corporate social media applications like Jive? Can I get your question, please? Corporate social media, like Jive. No, no, we don't have it. No.  So if you wanted to get connected to your in-house product or any other applications, you can easily get into a team for the environment. So that's our strength in the product. Okay. Do you have Q&A feature, like, a question answer, like somebody can post a question and- That's right. So what we do is, you know, so we capture them in a discussion forum. So the moment when you navigate it to a discussion, you know, so you can create a discussion, you know, so it could be your, any general forum. So you can capture them.  It could be a requirement or it could be a task or it could be, you know, so in agile term, if you call as a story, you can, you know, so associate that as well. So it'll send you an email when somebody communicates or discuss within those forums. Yeah. You'll get an email notification. I have another additional thing is, if you want to use a Q&A, it's open source, which has, like, question and answer, there are a couple of open source. We have a feature called linked app, where you can link any other application and use our app as a single sign-on. And you can on the fly create a button here. So for example, if you want to have Google Calendar, you can create a button here, Google Calendar, and have your Google account linked. And then you just log into our application automatically. It does underneath connect to Google Calendar or whatever you want to do. OK. Yeah. So one of the customers using Q&A open source product as well as a linked app. Yeah. Either you can use your integrated app, RLs, you know, so as Venkat mentioned, you know, so you can use as a linked app. So you can choose either you wanted to bring that interface into the platform, RLs, you know, so you wanted to have a tighter integrations with the product itself. So when we say integration, it is like what Jenkins said. Yeah, exactly. Review board? Yeah. Yeah, like this board. This is actually the bottom part is directly coming from review board, review board. Any other questions? Thank you. Thank you for your time. Thank you for the opportunity to showcase our solution. Thanks. And if you guys need the brochures, you know, if you need more information, you can reach me at, you know, so Prakash has collabed at Net, and this is my mobile number. So wherein, you know, so if you wanted to evaluate the solutions for your development, you can reach out to us. So we have both the licenses. One is subscription and as well as perpetual licenses. So, I mean, you can, it's based on the users, yeah. You can buy and install it yourself, or we also have a dedicated server in our data center for customers. Or you can use it. It's a hosted environment, yeah. Or you can use the cloud. Exactly. And you can also sign up for cloud for free. I think you get few products, few projects. You can try it out for 10, 20 users.


On today's episode, Anthony reviews the SteelSeries Rival Gaming Mouse and determines whether it can help you take your gameplay to the next level. Thank you so much! I appreciate you and I appreciate our audience. Today I wanted to talk to you about the SteelSeries Rival Optical Mouse. This mouse is a great mouse for average everyday use. It's not necessarily like an MMO mouse or anything like that. However, it does have some stats worth bragging about. 6500 CPI rated for 300 million clicks. That's a lot of clicking! I feel like I should go play Cookie Clicker with this mouse. It's got a 1 millisecond response on it, 200 IPS, and 50 Gs of force. If you don't know what those numbers mean, don't feel bad. I didn't at first either. I had to Google it, which I suggest you do the same, especially if you're in the market for a mouse. This is the unit that we will be looking at today. This is what the packaging looks like all the way around. And on the inside, this is a beautiful package, which is why I'm about to go do an unboxing on the geek channel. The mouse itself comes with about a 6 foot cord, which is phenomenal for a mouse. A lot of times you'll find that mice, you know, they just don't come with a long enough cord. It is USB connected. It's not one of those weird PS slash 2 thingies. So that's great. Also, rubber grips or rubberized plastic grips all the way around for a really good comfortable smooth feel. It is ergonomically designed, which means that it fits my palm perfectly. Hopefully yours as well. On the sides, you'll find that it's got a really good gripped pattern on it. And that is rubber. So it allows you to grip the mouse and keep a hold of it. So even if you're, I don't know, playing League of Legends while eating pizza, really greasy pizza, you'll still be able to grab your mouse and when it counts. As far as buttons on the mouse, you have your standard left, right and middle button, as well as this one up here. You also have browsing buttons back and forth for browsing the internet or whatever. You can also bind these in many games to do other things like, let's say, I don't know, you're playing a lot of League of Legends lately. You can actually bind these to be able to cast your slash J, which is your joke or your slash D, which is your dance or other spells if you really want to do that. The feet on the mouse are extremely slick, which helps with your response time. Overall, I love this mouse. I put it into about eight to 10 hours worth of playtime playing League of Legends. This isn't really a feature. However, the nameplate at the back that says Rival, you can actually take it out and put in one that says Steel Series. My question to you is, do you know of anywhere that will allow you to print your own nameplate for Steel Series mice? That would be awesome. Also, one of the things that caught me off guard is the fact this mouse, in fact, does glow. Now, I don't mean like glow in the dark. There is a light at the back of this design here and it will glow orange. For those of you interested, if you don't like orange, yes, you can change it to blue, yellow, all kinds of different colors from the spectrum of rainbows and whatnot. If you have any experience with this mouse or any mice like it, let us know in the comment section down below. And yeah, I'd like to have a conversation with you about it. What do you think about this mouse? What do you think about gaming mice in general? Do you think they're worth the slightly higher price tag? Again, let us know down there. This mouse retails for anywhere around $45 to $60, depending on where you buy it. And to be honest with you, I think it's worth it. Overall quality of this mouse, I would put it at about an 8.5. I don't really have any major gripes about the mouse. However, there are a couple of things that I see that I would have personally done different, but then again, I'm not the one who did tagging. To all of you budding tech reviewers out there, this was a review unit from SteelSeries and all it took was a well-worded email to get it. Keep that in mind. Sometimes it's not about who you are or what you have, but how professional you are. That's my time for today. Bye guys. If you have any experience with this mouse or any mice like it, let us know down in the comment section down below. I said down twice. If you have any experience with this mouse, I just hit myself. As far as buttons on the mouse, I promise it's easy to hold on to. I just can't do it right now. It's really easy to hold on to. I promise.


Income tax 2021-2022 reporting rental income expenses and losses part number two. Get ready to get refunds to the max diving into income tax 2021-2022. Most of this information can be found in publication 527 residential rental property tax year 2021 IRS website irs.gov irs.gov Income tax formula we're focused on line one income but we would have a sub schedule basically an income statement with income and expenses expenses basically being deductions the net then is what rolls in to line one income of the income tax formula and eventually page one of the form 1040. This is the schedule is basically the income statement schedule the supplemental income and loss we're focusing in on the rental real estate. So we're continuing on here with limits on rental losses so when we have the losses with regards to any kind of losses you got to think the government is going to be more skeptical of the losses because the government wants to be your silent partner when you have income but like if you have a loss they don't want to pay you on the loss they don't want to allow you to deduct the loss against other types of incomes although you may be able to in some instances but you can see how they'd be a bit skeptical of the losses especially with the rental income because with the rental income we're often not just engaging in that practice of rental property just to get the rental income we're also engaging in it because we might be hoping that the property goes up in value over time and then if we take losses on the property and then the increase in the property happens again the IRS could be more skeptical on rental property with regards to losses than possibly other businesses like service businesses for example. So if you have a loss from your rental real estate activity two sets of rules may limit the amount of loss you can report on schedule E. You must consider these rules in the order shown below both are discussed in this section. So number one you've got the at risk rules. These rules are applied first if there is investment in your rental real estate activity for which you aren't at risk. This applies only if the real property was placed in service after 1986 and then number two you've got the passive activity limits generally rental real estate activities are considered passive activities and losses aren't deductible unless you have income from other passive activities to offset them. So in other words on the passive activity you're trying to basically say that we're going to limit your passive activity losses and you have to wait until you have other income related to passive activity to take the losses as opposed to taking the losses against active activities such as say W2 income. So however there are exceptions as we'll see. So excess business loss limitations in addition to at risk rules and passive activity limits excess business loss rules apply to losses from all non corporate trades or businesses. The business loss limitation is figured using form 4 6 1 after you complete your schedule E any limitation on your loss resulting from these rules will not be reflected on your schedule E instead it will be added to your income on form 1040 and treated as a net operating loss that must be carried forward and deducted in a subsequent year. So if you got a limitation on the loss then the question is well what happens at that point in time. Does the loss just go away. Do I not get any benefit from it or do I get to roll it forward into a future period possibly and possibly take it against other kind of income and so on and so forth which is that's the that's the thing you would be thinking. So if you got a loss you can say I got a loss is the loss limited if the losses limited do I lose the loss or do I get to carry the loss forward if you do get to carry the loss forward then it's nice like if you're a tax professional to be using the same tax software or in other words you've got a more complex return. So if you were taking on a 2021 return for example for a new client you would probably want to take the full tax the tax return of the prior year enter into your 2020 software so that you can mirror exactly what happened on the prior year tax return and then roll it forward in the software the software helping with these limitations and any kind of carry forward that would take place on with the limitation. So at risk rules what are they you may be subject to at risk rules if you have a loss from an activity carried on as a trader business or for the production of income and amounts invested in the activity for which you aren't fully at risk losses from holding a real property other than a mineral property placed in service before 1987 aren't subject to the at risk rules and most cases any loss from an activity subject to the at risk rules is allowed only to the extent of the total amount you have at risk in the activity at the end of the year. You are considered at risk in an activity to the extent of cash and the adjusted basis of other property you contributed to the activity and certain amounts borrowed for use in the activity any loss that is disallowed because of the at risk limits is treated as a deduction from the same activity in the next tax year you could see publication 925 for discussion of at risk rules find that on the IRS website form 6198 if if you are subject to the at risk rules file form 6198 so quick look at that form. So here's your form 6198 at risk limitations you can obviously look at the instructions as well as the publication on the IRS website for more information so if you are subject to at risk file form. 6198 with your tax return so then we have the passive activity limits in most cases all rental real estate activities except those of certain real estate professionals discussed later are passive activities. So the real estate was basically put into this category of being passive activities and so and that means they're going to be subject. So when you think of passive activities you're basically thinking about those losses again if you have income. The passive activities don't really come into play because the IRS is happy to just take some of your income if there's income if there's losses then the IRS is skeptical they're saying hey it's a passive activity and you might have limitations then on the losses and to have that general requirement of being able to kind of match the losses from passive activity to income from passive activity not matching it up to income from non passive activity such as basically W2 type of income that's the general rule. Now you can imagine that many people that worked in the real estate profession started to say well hey wait a second other people get to take to get to take losses in their business like any other business gets a loss. Why are we being being excluded from that and so now you've got these kind of compromises that basically took places. So you hear these terms like if you are real estate professional into place and you might get some of the passive activities if you actively participate. So now you got these terms of active participation and real estate professional which of course then we have to define what that means because they could have different tax consequences. So for this purpose a rental activity is an activity from which you receive income mainly for the use of tangible property rather than for services. So we're not you know if it was services you'd be doing an active kind of thing if you provide services then of course you're doing something active and you're not basically just getting passive income from the renting of the property. So for a discussion of activities that aren't considered rental activities you can see rental activities in publication nine to five deductions or losses from passive activities are limited. You generally can't offset income other than passive income with losses from passive activity nor can you offset taxes on income other than passive income with credits resulting from passive activities. Any excess loss or credit is carried forward to the next tax year. So you're kind of limited you're kind of in the lane of passive activities with regards to taking advantage of your losses and netting them out against income. But you can't net them out against what's in the other lane of a type of income which is like normal income like W2 type of income. But if you can't match your losses up against income you might be able to do it in the future. Ruling the laws forward to hopefully have passive income in the future that you can net your loss that you couldn't take before because it was passive to the income that you might have in future time friends. So exceptions to the rules for figuring passive activity limits for personal use of a dwelling unit and for rental real estate with active participation. So there's another key term active participation. So there's an at least partial exception but we'll discuss that later. So we've got now if someone a real estate professional key term are they an active participant is going to be a key term that will come into play. So for a detailed discussion of these rules you can see publication 925 to dig into that in more detail. So we're looking at real estate professionals now so you got the real estate and now you're categorizing as a real estate professional. I mean if you are a real estate professional complete line 43 of schedule E so line 43 of schedule E that's basically schedule E page number 2. We're down here in part number 543 reconciliation for real estate professionals. If you were a real estate professional see instructions enter the net income or loss reported anywhere on form 1040 form 1040 SR or form 1040 NR from all rental real estate activities in which you materially participate under the passive activity rules. There's there's the line that we're looking at so you qualify as a real estate professional for the tax year if you meet both of the following requirements. This is going to be more stringent of requirement than basically actively participating right. So you've got someone who's completely passive to someone who actively participates to someone who's a real estate professional. And you would think that if someone was completely passive they would be most restrictive on being able to deduct their losses.  And then if they're a real estate professional you would think they have a larger capacity possibly to be deducting some of their losses. So more than half of the personal services you perform in all trade or businesses during the tax year are performed in real property trades or businesses in which you materially participate. You perform more than 750 hours of services during the tax year in real property trades or businesses in which you materially participate. So if you qualify as a real estate professional rental real estate activities in which you materially participate aren't passive activities. So now you can see that passive activity is removed so they're not passive anymore which means you should be released from some of the restrictions on the losses possibly being able to take those losses against other types of income because you're actively participating as a real estate professional and like W2 income for example. So for purposes of determining whether you materially participate in your rental real estate activities each interest in rental real estate is a separate activity unless you elect to treat all your interest in real estate as one activity. So in other words if I looked at my schedule E and I had multiple real estate activities here I'd have to determine for each one whether I was actively participating or not. And that will have an impact on whether or not the losses could be deduct deductible. You could see then the losses pulling over to to the page one eventually of the form 1040 in that instance or in that example at least. So for purposes of determining whether you materially participate in your rental real estate activities each interest in rental real estate is a separate activity unless you elect to treat all your interest in rental real estate as one activity. Don't count personal services you perform as an employee and real property trades or businesses unless you are a 5% owner of your employer. So if you're an employee then that's something different generally unless this exception applies then you know doing your own rental property that you would be reporting on the schedule E. So you are a 5% owner in your own or a or consider to own more than 5% of your employer's outstanding stock or capital or profit interest. So don't count your spouse's personal services to determine whether you meet the requirements listed earlier to qualify as a real estate professional. However, you can count your spouse's participation in an activity and determining if you materially participate real property trades or businesses. A real property trade or business is a trade or business that that does any of the following with real property develops or redevelops it constructs or reconstructs it acquires it converts its rents or lease it operates or manages it. So choice to treat all interest as one activity. So now if you have multiple real estate the option was to treat them all differently and apply this test to each one of them or do you do you treat them as one. So if you were a real estate professional and have more than one rental real estate interest during the year you can choose to treat all your interest as one activity. You can make this choice for any year that you qualify as a real estate professional. If you forego making the choice for one year you can still make it for a later year. If you make the choice it is binding for the tax year you make it and for any later year that you are a real estate professional. So once you make the choice then it becomes binding. So it looks like if you if you don't make the choice and you're then then you can continue with that you still have the option to make it. But once made then you're basically locked in it looks like is the general idea. So you want to consider that choice carefully. So this is true even if you aren't a real estate professional and enter in any intervening year for that year. The exception for real estate professionals won't apply and determine whether your activity is subject to the passive activity rules. See the instructions for Schedule E for information about making this choice. So if you want to you might want to do that check into it dive into it in a bit more detail because it's it could lock you in. So material participation generally you materially participate in an activity for the tax year. If you were involved in its operations on a regular continuously and substantial basis during the year for details you could see Publication 925 or the instructions for Schedule C participating spouse. So now you got the spouse involved because your joint in the in in in essence. So if you are married determine whether you materially participate in an activity by also counting any participation in the activity by your spouse during the year. Do this even if your spouse owns no interest in the activity or file files a separate return for the year for 8582. You may have to complete for 8582 to figure the amount of any passive activity loss for the current tax year for all activities and the amount of the passive activity loss allowed on your tax return. So here's a quick look at the form 8582 passive activity loss limitations passive activity loss limitations. Okay so then on your return C form 8582 not not required later in this chapter to determine if you must complete form 8582. If you are required to complete form 8582 and are also subject to the at risk rules include the amount for from form 6198 line 21 deductible loss in column B of form 8582 worksheet one or two as required. Exception for personal use of dwelling unit. If you use the rental property as a home during the year any income deductions gain or lost allocable to such use is not to be taken into account for purposes of the passive activity loss limitation. Instead follow the rules explained in chapter five.


country of New Jersey. And I've been having a super great time here so far. Hope everyone else is as well. And I definitely hope I get to meet some more of you before the end of the conference. In the case that I don't, you can always find me on Twitter or GitHub at Britney Storos. And I'll also be tweeting out a link to my slides as soon as I'm done up here. So I work on the apps engineering team at Mozilla and one thing that we've been working on a lot is creating Firefox OS applications with Ember CLI. And I know we've all heard a little bit about Ember CLI so far during the course of this conference, which is Ember CLI is everyone's favorite command line tool for creating Ember applications really quickly and keeping them super organized. Before Ember CLI came along, there's a huge void in the tool set for JavaScript developers. There are things like Rails for Ruby apps and we were just really missing this core piece of our tool chain when we were developing our JavaScript applications. So a couple of months back, my team at Mozilla was actually trying to fill this void by creating our own command line tool. And it was cute. It was called Rec Room. And it definitely catered towards Firefox OS applications. You could scaffold any kind of applications with it but we really wanted to focus and cater towards Firefox OS developers as well. And as we were building this, I would come across some features that I wanted to implement and I would run into a problem or I would struggle through creating some sort of feature and I would find myself creeping on the Ember CLI code base to see how they solved it. And when you find yourself doing that, when you catch yourself doing that often enough, it might be a sign that you're building a tool that already exists. And maybe you should stop. So we did. And we decided to leverage Ember CLI instead. But the problem now was that Ember CLI didn't care about Firefox OS. We had this custom environment that we wanted to build for, that we wanted other developers to be able to build for. And Ember CLI didn't know anything about it. So we had to make Ember CLI care about our environment that we wanted to build for. And what exactly were our requirements? What were our needs? Firefox OS applications are actually just built using current standard web technologies. I actually couldn't have asked for a better person to speak after because Brian did a great job showing everybody how far the web has come and how great it is and how powerful you can do, how many powerful things you can do with it now. So Firefox OS applications are built completely with web technologies, which makes our requirements just a handful of modifications. The first one is that we need a manifest file. This is the same concept as the package JSON file. They are going to share a lot of the same properties and values you're probably very familiar with with this kind of concept. So we need Ember CLI to generate and validate this file for us. We also need some kind of UI components that kind of mimic the Firefox OS interface. We want our web apps to look and feel like they belong in Firefox OS. And we wanted a way to publish to the Firefox marketplace. So those were all of the requirements that we had. And each of these examples is a great use case for creating an Ember CLI add-on. And Ember CLI add-ons are the way that you extend the core functionality of Ember CLI. They're basically just NPM packages, so they follow all the standard NPM conventions that you're already familiar with. They'll have a package JSON file that will point to an index file as its entry point. So that's where you'll be able to add all of your custom logic and really modify the way that Ember CLI works for you. And they're super easy to create and install. In order to create one, you can just run Ember add-on, name of your add-on. And then to install one within an existing Ember CLI project, you can run Ember install add-on, and then the name of the add-on that you want to install. Okay? So the first requirement that we had, we wanted to create... Sorry, one second. I'm going to back up. And we're actually going to use an application to demo a couple things with this. So I have an application, an Ember CLI application, running here just on the desktop. It's super simple. It just shows you your local time. And then you also have the ability to select different time zones to display and compare against the local time. So you'll always know what time it is in any given country. I don't have New Jersey in there yet, but I will put that up at the top of the list as soon as I'm done here. Okay? So we're going to kind of walk through creating an add-on. What would an add-on look like that turns this application into a Firefox OS application? And if we think about our first requirement that we had, we wanted to create a manifest file. So we need Ember CLI to generate this file for us. And we also mentioned that it's going to share some common values with the package.json file. So not only do we want to create this file, we want to keep it in sync with our package.json so that we don't have to have our developers updating the same values in two different places, right? So we want Ember CLI to do that. We're going to create blueprints to do this. Blueprints are basically just rules for generating common code and file structures. Ember CLI has a lot of these built in by default, and you can also add your own with a symbol command, Ember generate blueprint, and the name of your blueprint. So in the context of an add-on, when we create a blueprint, there's a concept of a default blueprint for add-ons. And what this is going to do, if we name our blueprint the same as our add-on, it's going to tell Ember CLI to install whatever files we specify as soon as the user installs our add-on. So if we go to the terminal really quick, I stubbed out a practice add-on that has some of this stuff implemented already. And let's say we ran our Ember generate blueprint command. This is going to generate some files and folders for us. See if you guys can see this? So if we run that blueprint command, we have this folder here called blueprints, and underneath it we have a blueprint called Ember CLI FXOS, and that's also the name of our add-on. Within here we have an index file where we'll be able to add some custom logic to the blueprint and modify the way that it works. And then we also have this files directory. And what this files directory does is we, within it we want to kind of mimic the directory of the consuming application. So if we want to create a manifest file in the public directory of the consuming application, we're going to create a manifest file in a public directory in this files directory. If we wanted to create a file in the config folder, we would create a config folder here, and we would put the manifest file in there. So what Ember CLI is going to do when it installs this blueprint is it's going to kind of merge these trees, the files from your consuming application with whatever you specify in your blueprints. So here we have our manifest file stubbed out with some of the default values, some of the required mandatory properties, and then you'll also notice some of these values have, are prefixed with out signs. And what we're going to do with those is replace them with package JSON values so that our developers don't even have to touch those, they don't have to think about them at all. So we have our blueprint set up in our add-on, and we have our application running, our Ember CLI application running. So I've already installed the add-on in this application that I'm going to be working in, but for the sake of demoing how this manifest gets generated, we could run ember generate ember CLI FXOS, and we should be able to see there that it created public manifest.web app. Is everyone able to read this code? Is that, yes? Okay. So let's just open this in our text editor real quick, and we can see in our directory we have public, and then there's our manifest folder, there's our manifest file. So it got copied over into our public directory just as we expected. So now how do we implement the part where we want to replace these variables with package JSON values? If we were to run ember build right now, this manifest file would get copied into our dist directory as is, and obviously these variables don't mean much. Version number is not a version number, and app name is not an app name. So let's take a look at the logic for implementing that. Okay. As I mentioned, in your add-ons, you're going to have your package JSON file point to an index file, that's your entry point. This is where you have all your custom logic for your add-on and how you're going to modify ember CLI's behavior. And from this index file, ember CLI provides us with some basic hooks that we can play into so that we can modify things at certain points in the build process, or we can add different properties and values to our application. So one hook that's available to us is called post-process tree, and it's a little bit obscure, or it sounds a little bit obscure, but what happens here is this hook is going to run every time you run ember build. It runs towards the end of the build process. When you have access to the trees that you can modify right before they go into the distribution directory. So we're going to say whenever we run ember build, we want to take our manifest from the public directory and also grab the values from our package JSON which are available within this method at this project package, and we're going to replace them. So I've already required in a function called sync manifest. We're not going to go over the logic for that, but the logic in that function is what is going to do the replacement for us. I just wanted to show you guys the hook and how this winds up affecting the way that ember runs its build command. So if we go back to our application and we run ember build, we should see in our disk directory a manifest file, and now we see that the version number was updated, the name of our application was updated, and the description was updated. All of these values were pulled from our package JSON at build time so that the developers never have to touch this manifest file. They never have to know that it even exists. Okay? So the next requirement that we had was UI components, and we want developers to be able to create applications that look and feel like they belong in Firefox OS, like they're native applications. We want them to mimic that. The interface layer of Firefox OS is called Gaia, and there's a repo with a bunch of different Gaia components. They have tabs and switches and menus galore, but it's very much a work in progress, so this is going to be a little bit of a contrived example. But say we wanted to create a tabs component, which would be available as a power package, Gaia components slash Gaia tabs. And creating a component off of this is a two-step process. You have two main responsibilities when you're creating a component. The first is to include your dependencies and actually create your add-on. So we want to include this power package for our Gaia tabs, and then we also want to write any kind of set up logic or teardown logic for our add-on. The second responsibility is making sure that both of these things, the dependencies and your add-on, are available to the consuming application. And this is the part that kind of muddies down creating components. It's not difficult, but there's a lot of different steps, and it's easy to miss something or it's easy to forget to do a particular one of them. So we're going to walk through an example really quickly. Don't worry if it's a little tough to follow, I'll circle back and review all the steps that we went over before I move on. So we're in our add-on right now, and say we already did our Bower install of the Gaia tabs component. If we look in our Bower components, I have this folder structure right here, Gaia tabs, so we have that available in our add-on, because our component is going to depend on this Bower package. But it's not enough that our add-on has this Bower package. We need to tell the consuming application that it's going to need this Bower package, too. So when we were creating our blueprint file, I mentioned that there's an index file there where we could add some custom logic. And I also mentioned that this blueprint gets generated automatically after you install your add-on to an application. So this would be a great time to tell your application, hey, you're going to need this Bower package, too. You might as well install it now. So just like in our index file of our add-on, we also have a couple different hooks for blueprints. One of which is after install. And what we can do here in this after install hook is just return this built-in method, this add Bower package to add GaiaTabs. And that will tell our consuming application you need to do a Bower install of this package, of these GaiaTabs. And our application will do that. Now that makes the Bower package available for our consuming application, but we still have the JavaScript file and the CSS file from this Bower package that we need to include into our application. We need to not just make the Bower package available for use, we need to actually use it. So in the index.js file of our add-on, we have another hook here that was sitting here earlier and I didn't mention anything about it, but this included hook is another one of the hooks that runs during the Ember build process. And this is a great place to import any of the dependencies that you need for your consuming application. So one of the things we can do here is run an app import and then we're going to grab the directories, the paths of our JavaScript file and the CSS file that we need. That has never happened to me before. That's funny. Okay. So we have our dependencies. We took the Bower package in our add-on and we also gave our consuming application access to this Bower package. Now we still have to actually create our add-on. So what we're going to do here is we want an add-on directory with a corresponding components directory underneath it and we're going to have a file named after our component that we're creating. So we're creating GaiaTabs. And this is where you can, this is the meat of your component. This is where you can define your tag name or set up attribute bindings and do any set up or tear down logic. And now we have a component in our add-on, but just like we did with our dependencies, we have to tell our consuming application about it. We have to tell the application that wants to use this that it's available for the application to use. So the way we want to do that is by creating an app directory. And under the app directory we're going to have another components directory and another file called GaiaTabs. But literally all this file is going to do is import our component that we just created and export it back out so that our consuming application knows that it exists. And then finally we need a template for our component. So again under the app directory we have a templates folder with components underneath and a handlebars file that simply defines the template for our GaiaTabs. So in our application that's using this add-on, that's using this component, if we look at our application template file, we see I have this already implemented in here, so I have GaiaTabs and then I'm setting the menu tabs that we need to populate our tabs component and that's what's controlling the clock and the time zones links back and forth. So that was a decent amount of information and like I said I promised I would review what we just did because it's a little confusing, there are a lot of files involved. What do we do with dependencies? We Bower installed our GaiaTabs dependency into our add-on. We told our consuming application that it needs that Bower dependency as well. And then we actually included the dependency files so that they can get processed at build time. The component logic, we created our component, we did our setup logic, we did our teardown logic, we gave it a name, we created this component in our add-on. We exported the component to the consuming application so that the application can actually use it. And we defined a component template. So there are six steps basically in creating a component. This is one of those things that hopefully in the future it will get a little bit easier to do. Even if it's still a little hard to follow right now, I promise the documentation on Ember CLI's website goes through every single one of these steps so you just have to not miss one thing. And there's a lot of good example add-ons out there that you can use to follow and you can learn from to create components. Okay, so we had one more or two more things on our to-do list, validation and publishing. We wanted to validate that manifest file and we also want to be able to publish to the marketplace. And unlike our syncing of our manifest file with our package JSON file, we want to have more control over when these things are run. We don't want to be publishing to the marketplace every time we build our application. So this makes them really good candidates for being commands, for creating commands. So just like you might run Ember New or Ember Serve, we want to be able to run something like Ember FXOS Validate or FXOS Publish. So let's look at what a command looks like in Ember Ember CLI. So I have a lib directory with a commands directory underneath and an index file here. And this index file is just exporting an object where the keys are the names of your commands and the values are the actual commands. And if we look at this Validate file with our Validate command, we can kind of see the basic structure of what a command should look like. It should be what you type in the terminal to run the command. It can have aliases in case it's super long and you want some shortcuts. It should have a description and we should be able to tell that it works inside of the project, inside of an Ember CLI project. And it also has a run method and this is where all the magic is going to happen. This is where we're going to actually write our validation logic. I've already imported a Validate file. We're going to get the code for that because it's not relevant exactly to you guys. So we're just going to return this. We're going to validate our manifest file and that's what's going to happen when we run our Validate command. But Ember CLI doesn't know that we put these commands in here. It doesn't know about these yet so we need to tell it that these commands exist and that the application can use them. If we go back to our index.js that Ember CLI has built in for us to utilize. This one is a lot simpler to understand. It's just included commands. And all I'm going to do there is return my object of commands. So I already required that in at the top of this file. And we're just going to return that object of the Validate command and the published command. And now if we go to our terminal and we try to run one of these from our application let's do Validate. We see that it validated our manifest for us. The validation passed. We have a warning message but we don't care about that right now. And we know that our command was there and it works. It's doing what it's supposed to do. Another way we could have told if this command was available to us is by running Ember help. And besides just running the core commands and information about Ember CLI what it's also going to do is list out information about the available commands from your add-ons. So that's a super helpful thing when you have add-ons that are incorporating commands. Your Ember help command will also list those. And we see that we have a Validate and a published command here. The published command I'm not going to go too much into. We're actually still editing this but I have it set up locally. One thing I just want to point out is another property of commands is that you can specify available options. So if you want to throw in a flag when you're running a command you can throw in one of these options. You can define a name type and set default values for these. And these options that get passed in are going to be available to you through this options hash in the run method. So when we want to run publish we want to publish to the developer marketplace, the development marketplace versus the production Firefox marketplace. We could pass in an environment option that says development. If we're ready to publish to production we could set environment to production and it would publish to the production marketplace. So I have my marketplace opened up here. I'm logged in. And if I click on my submissions I see that I don't have any applications right now. But if I run my publish command from my application I should get an app ID back. So we have app successfully created and we have an app ID to reference. And now if we look over at our marketplace we see that we have our application. So we have our application and we refresh. We should see our application time zone clock right there. So those were just a couple of different ways that you could use add-ons to extend the functionality of Ember CLI. There's a lot more use cases and there's a lot more examples out there. I encourage you to look at the documentation because there's a lot of things that you can do with Ember CLI that you can follow by example. You can really get Ember CLI to do almost anything that you want. It's kind of a push over like that. But it's a really great tool so definitely take a look at it if you haven't. Start working with it if you haven't. Also if you're interested in learning more about creating Firefox OS applications you can take a look at this add-on that we watched last week. It's a really great tool and it's a great tool to see in the app's channel. I don't believe I left time for questions but if you have any feel free to tweet at me or find me before the end of the day and I would be happy to talk more about this with you. Thank you.