Hi everyone, Joe for jazby'scasewrakes.com along with Nick. There's his hands right up there and right He's right over my shoulder. He's gonna start opening up this 2021 top series one jumbo six box case pick your team number nine As you can see the next one is in the store already go get your teams all card ship and at the end I'm gonna re-randomize or randomize everybody's names the name on top is gonna get a Rip party pack an exclusive rip party pack He pops gonna send these to us around next week or something that that will be shipped separately from the break Big thanks to these folks for getting into the action Pick your team number nine The official printout right here as well Six box jumbo pick your team number nine Thanks everyone for getting in really appreciate it This is just a straight up. Everyone gets a shot at the pack. Yeah, all 30 names everyone has a shot at the packs Thanks, everyone All right, so we've got some silver packs here. I think I'm gonna do these lab Plus that little stack So good news is that all card ship? So you can get the future stars Aristides Aquino all these rookie cards, of course so I'm gonna try to pull some of the some of the top Potential rookies here as much as possible, but in the interest of time, we're gonna try to move this a little bit more more quickly and First thing here is Casey Meis. It's a manufactured patch, but they still look really cool Some of these could be autographed as you've seen on our Instagram at Jasper's breaks when we pulled that nice Nice one. Check it out at Jasper's breaks on Instagram You weren't supposed to tell them now they're not gonna go Yeah, it was a mic. I was out of five. It was pretty nice actually what people people thought it was game used Okay, we're in the comments everyone's like, oh, wow Game used patch Of course the case breakers get it. Oh, right. It's our fault Christian Pache could be one of the bigger names this year Braves Collin Ryan Mountcastle so so people people were hating on us thinking that we were flippers There's Carter Keeboom to 300 a lot of a lot of misinformation that we have to battle out there folks I mean Is he on our band list You know that is Stolz and Yeah, I'll flip the first letter I don't think that Eve Olson. Oh I don't think that person's purchase from our side Yeah Yeah, it's not that's not fair Yeah, maybe not like it's just kind of like lame. Oh And there's a Davey Garcia Yeah, yeah, I mean, I don't know what people think we have like like Nick has nothing better to do than to go to target Like the five million targets there. We're trying to run a business here Let's let's run to target Spend day spend our hours. We're looking for retail stuff just to make that small profit Like it doesn't really make sense. We've got bigger fish for we're trying to sell full cases of this stuff Shane Bieber 2021 Nice optic five is two spots up. That's gonna be tomorrow. Unfortunately John. We think we are booked for the night Special with optic with optic four already taking us already to the 10 o'clock hour schedules in the chat But that'll be one of my first breaks of the day tomorrow once that sells up Oh boy, uh-oh Yeah, if you please I'm waiting to see who's on this band. This is the second half of the first box that we popped open. We'll share a name Am I gonna be disappointed? It might be a temporary band. Did we like him before? Huh? That's a that's a bummer. That kind of bums me out Alright, we've got a tiger here. We've got Jaimer Candelaria Candelaria. Yeah To 2021 for the Tigers that will be for Matthew Stubblefield Matt. You'll get all the Casey Mises that I Will attempt to catch as much of As I flip through all these Joe Adele supposed to be pretty good There's a gold foil rookie right here Brandon B. Lack and we've got there's the Casey Mice for you Matthew Sixto Sanchez is pretty good, too Thank you. Oh, I was just gonna say there's Joey Bart and he's always seems to be paired with Dylan Carlson here What's that? Oh, yeah, they are, huh? You got some good good pairings there. We got Aaron judge piece of his jersey Going to Russell and the Yankees And it exactly because they just Joe Speaking of Curtis and his blue jays he gets the Nate Pearson the 1986 design We'll set that aside. Those will get sleeved and top loaded before they're shipped out Obviously our all-card ship. So anything I accidentally miss will be Be pulled either pulled by our shipping team will be shipped in that stack and we got a car that's flipped around But not numbered anything that means it's a variation. So that is Manny Machado in Golf pants, they did have the Petco Park driving range up for a while. It's true Yeah, that's what that's what Nick said the Manny Machado variation for the Friars EA with the podcast Will be El Segundo Ontario El Segundo is gonna be early 2022. Where is the El Segundo one gonna be right next to the point? Oh Where are they gonna do that at the old driving range? Oh, they're tearing that down, okay? So they're upset There you go imagine that Golf will get fired and they can just work at the top off And I guess also there's No, that's gonna be torn down what oh wow or swans They'll find another place Like he's saying they're like vicious animals, yeah Let's keep it Louise Venture hobby or Christian There's Dylan Carlson to 75 Geese are fine too They're laying lame button Then The ducks are pretty Wasn't it a geese that got into Sally Sullenberger's plane?  It's cold. It was wintertime, right? Yeah, it was middle of January. All right, we got Louise Patino Maybe they were Canadian geese Whoa courtesy unit, do you know these kind of geese?  I was like I don't want that to ever happen to me Yeah, that that got a little dry Right you had to have that Sets up all the action And he told the geese to fly into my engine so I could be the hero Yeah, well, they because they told him to so they're going south right they're told him go that way Or something like that and they's like I'm never make he's like I'm never making that airport I'm sully, you know, I've been flying the friendly skies. I'm a man. I'm sorry. I'm a man. I'm sully Look, I've been flying flying these these skies for like decades And you're telling me that with one engine that I'm gonna make it to this other airport in a population dense area No way sully said sully is like Landing on the river would be just like We'll be just like shooting wamp rats in our t-16s back home. It's pretty crazy to think about it.  There's umberto mahiya Gold foil rookie for the diamond backs Arthur with that one. Does that new punch clock sing to us? No, it's it's over Yeah, when it yells at you Like okay, okay, you get it moving up in the world folks new punch clock Jaspies Is it pretty cool? Is it kind of scary? I think it makes a louder noise So there's some some give and take right there nice Dylan Carlson. Yeah, I think Teddy was clocking out It was just like And I was like it sounds like those It sounds like The monsters in that Tom Cruise movie where aliens come to earth. Oh The other one didn't oh It just punched it just record the time. Yeah, not calculate. Yeah, I get it. I get it Yeah, no one knew how to change the clock on it War of the world's Curtis, right? You know that you know the sound I'm talking about This movie beds wait was that a variation? Yeah card 230. That's a variation Dodgers and goes to Jaehoon Yeah, that that those those monsters pretty scary They they were like they had these big like discs and then they had like the scary things And then they had like the light that shot out and then it was just like It's like one note Terrifying the movie scares me Jens Joe, what was it? What was the first time I did the train whistle train whistle has been around for a long time The train whistle Maybe seven years ago. So pretty much tort pretty much at the beginning. I think where did it kind of came from? kind of kind of Nick's brother his name is Alex, so we would We would often call him the the a train and we Do a little whoop-whoop with that it's kind of kind of a thing that we do and it kind of crossed over into Into group race We originally did the train whistle only or I originally did the train whistle only for one of ones Right, but then that got to be too few and far between and I got to have more train whistle So we so I upped it to to out of fives And that and that helped I think there were there are some a few more train whistles after that But not enough to be like annoying, you know And it kind of stuck and I think the most part people still kind of like it It's fun gets the people going Gets me fired up. There's a nice silver foil Joey Bart right here for the Giants. That's gonna be for Richard and Oh, right history of these history of tops cards, by the way Are gonna be randomized to To the second name on list because we're giving away that rip party the rip party exclusive pack and then second name down We'll get all these history of tops cards What's more annoying the sound or the red alert sound in the interior the red alert sound that that sounds okay Is that close I don't think that's close Does it go more like that Card is gold is classic Davey Garcia rookie Jorge Soler, and we've got a Monty Harrison flipped around here. Nice one for the Marlins Gregory Was it close? All right Curtis is a Star Wars guy. He says it's decent enough I No worries John. Sorry about that. Yeah, we just we just ran out of we just ran out of time Unfortunately John you are you maybe you're lagging behind? All right, and the box topper here Juan Soto Nationals Josh Vilo. All right next stack. What's everyone's go-to Star Wars impression? That's kind of everyone that must have a Chewbacca, right? in their in their Star Wars arsenal Star Wars voice arsenal. We've got a silver foil Eddie Alvarez for the Marlins Yeah, you Curtis you've got a good Palpatine and Yoda I'm no, I Yoda I can't do For some reason But Thinking about Palpatine is pretty funny Order 66 And yeah, you have to have more gravel in the voice. I don't know if I could do that right now Now max got a good Yoda Do it. Well, what was the other line? It was an ultimate power where he's very he's zapping Mace Windu Ultimate power If I if I get if I get a good good whistle ombra sure going maybe No, no, no two ninety nine. No, and it could help me Aeronado going the Rockies Cynthia with that one pal Lewis ale rookie of the year award winner. Oh, is it unlimited power unlimited power? I can save huh panicking. What are you doing Mac McCarthy? I there there was a thing maybe Two three three three years few years ago. There was a local bar that did a Star Wars trivia night and Which which we did not win and they're there Apparently there is there's just a lot I Thought I was decent at Star Wars trivia. No, I was absolutely wrong. I was we were just blowing out of the water Not our friends at all watch Star Wars and I underestimated the the the power of Star Wars nerds we did not win they the the elusive bar tab but one of the I think there was like a side event or something like that where Where you had to do your best Jar Jar Binks impression or like read I think you you pulled like random Phrases like not not even Star Wars phrases, but like everyday phrases out of a hat or something like that And you'd have to do it in a Jar Jar voice. I did not do it. I was like I don't have a Jar Jar voice But you've done those two Star Wars trivia nights.  I'm like, what knows that and Then they got deep into the animated series, which I had watched but I didn't really think that that was in play Ryan Mountcastle going to Nathaniel Smith in the Orioles and there's Javier bias. I think it was cannon No, no books were involved though There's Hank Aaron for the Braves nice That'll that'll go to Colin Pop this baby on a denim jacket. That'd be the coolest kid on the block And then I think I remember one question where it was like It was one of those things where like You you kind of know it, but you don't like how many Is the wing of a Of a tie fighter is it an octagon or a hexagon? So it was stuff like that and I was like, I don't know. It's in kind of that shape I should have had Curtis there hexagon. Is that right? She had Curtis at that trivia night for the yeah, whatever the standard your standard tie fighter What's the name of the lizards the stormtroopers ride? those guys Remember folks. We are booked for the night. Check the schedule. That's just dropped in the chat Um Bill Hader is a big Bill haters old SNL guy. He's on Barry now. Bill Hader. I think is a big Star Wars fan nice silver Joe Adele and To 99 We got a oh, there's an autograph right there and a vintage stock Davy Garcia for the Yankees Russell with that one Nice and we've got for the Brewers Mark Matthias Rookie auto for Patrick and the brew crew the lizards in in in what movie we're not talking about Are we talking about Tontons in Empire? Or are we talking about the lizards? It's a facsimile autograph by the way Are we talking about the lizards in the prequels? When Obi-Wan was rushing around trying to fight General Grievous. Oh in the desert. Oh Yeah, what are the what are those called? Bill Hader is a good Tonton I Was a good Tonton impression, which I wish I could do facsimile autograph.  That's a nice one, too Future Buster Posey for the Giants Richard Miller with that one next box You know believe it or not. I was never really really a big Space Falls fan Didn't really do it for me Bobby Dalbet For Russell and the Red Sox their facsimile autograph Do we see any Asian people in Star Wars until the sequels? I? I don't think so I don't think though. They must have been on another planet. I guess the guys in the trade federation All right. I'm got Matt Shoemaker to 2021 No, you don't think they count the trade federation. Okay? He walks Those are just teddy bears You'll write about one thing master Negotiations were short Hello there. You're right about one thing master negotiations were short Eddie Alvarez Marlene's that'll be for Gregory Brode I'm gonna go with brode on that one Greg Broad maybe I'm not sure if it's be broad I think the lack of the a in your name in the last name makes me think it's brode So that's how I'm gonna go with although I think multi-millionaire billionaire philanthropist Eli brode Does have broad just does spell it broad but then it's broad So I think this entire life. He's like it's broad Yeah, I'm pretty excited for the Obi-Wan series too I think it's is it They're filming I think they got all the whatever Script issues that were allegedly a thing And I think they've done some tentative Filming for that You hope that Grogu and Obi-Wan are friends. Is that timeline match up? Because the Obi-Wan series supposed to be before that if this these are the main prequels It's supposed to be before the prequels now Before or the before the before the the original ones four five and six No, I mean with the with the success of Grogu though, I feel like they should just try to squeeze him into every Hello there must there's got to be a lot of hello there and great to numbers At first I thought courtesy wrote that you were looking forward to all the high ground Here's a variation. It's Aaron judge.  Yeah, the high Jedi stuff should be pretty fun though. I kind of feel like they should maybe just Maybe a little over saturated on the Star Wars really you do so much That's right. I love you like a brother. We're supposed to bring balance to the force Not destroy it Ronald Acuna relic for Colin There's a lot feel like there's a lot more history of tops cards and we we normally see in a break Christian pashay Another silver Joey bar. That's pretty cool and to 300 Brett Gardner This is Spartak to 300 For the Yankees that'll go to us Josh Bell His die cuts right here. That's each year. Oh Yeah, I guess no one's really complaining about the this series there We got two more to go here. We got all the polar bear Peter Lonzo He would live in hot Yeah, the Luke CGI was a little weird. I'm assuming everyone's seen the all of the Mandalorian spoiler alert Or maybe I'm the one that spoiled it Cobra and Hayes rookie card someone was telling me that the Pirates John Crawford Someone's telling me that could Ryan Hayes You only see his rookies in This series one as either this out of the silver pack or as a autograph So I think his rookie cards aren't gonna show up the official base rookie cards aren't gonna show up until Until series two or something like that. So that's a that's a kind of a good one to get early on He's supposed to be pretty good too Curtis did you see that you see that and I guess anybody else is into Star Wars anyone else see that There was like some mild controversy That left Star Wars fans divided everyone was just like It's like oh well Grogu eventually gets killed by Kylo Ren when he destroys the temple And I know this is already nerdy, but some of the super nerds are like well actually well actually in the Canon comic books It actually says that he wasn't the one who actually brought down the Temple to kill everybody in Luke's Academy. It was actually the work of You know whoever It was actually the work of Palpatine from afar You didn't mean to do it. I was like alright. I feel like these were like well, I mean He doesn't I mean I guess he could They could say that he escaped Chances are it didn't Well those kind of Star Wars fans Curtis Well, actually oh right, right, right. I did I did see the the Caridoon being fired my one of my friends sent me a picture of like Like a Mandalorian opening scene Like Haridun crashes in her x-wing and dies no more Caridoon. Sorry True. Yeah, he might he out and Grogu might not even be in that at the end the Academy That's that's also true This dangerous waters are treading on Curtis because I feel like I feel like we're going to get the the ire of Star Wars fans in the in the comments, which I don't even look at so I guess it'll fall on deaf ears But some's gonna be like well actually you and this Curtis fellow are wrong in the Mandalorian companion animated Graphic novel it says that Grogu actually was at the Academy And I'll be like oh boy. All right, just have trying to have a light light Star Wars discussion while breaking some series one You know, it's appropriate tops has the tops has the Star Wars license Retreating card. So go buy top Star Wars products We'll have some we'll try to find some make them available on jaspyscasebreaks.com someday Or jaspys.com So it actually works Am I ruining the whole Star Wars thing? Yeah, I Try not to get into the to the to the I guess that's that's the way So where we're at in pop culture It's on a renfro not that hunter-renfro baseball player hunter-renfro, although I don't think I've ever seen them I have actually I was gonna say I don't think I've actually ever actually seen them in the same room together But I think there was a social media post in the last year So we're a football player hunter-renfro and baseball player hunter-renfro I had a had a bro. We pictured together, which is actually kind of fun So I have seen them in the same room together. So Which eliminates the rumor that they're one of those Renfros are playing Sport yeah getting into the weeds of the fandom. I mean I I watched the movies Multiple times. I watched the show. I watched the animated show. I even Audiobook some of the books Even that was just really just kind of casual just kind of falling asleep to some of those audiobooks You know, I kind of get into it but man Some people really get into it. I don't know what a stargate is but Clearly not better. You know, there aren't there aren't major streaming platforms You know Saying hey, come watch Stargate with us Some people swear by Rex. What's the what there is another star show? Battlestar Galactic Galactic Galactica batter Battlestar Something like that. I have friends who swear by that show Some of you some people are like, I mean, that's the best sci-fi show You know on the planet stars really isn't sci-fi is it? Nor does it want to be Stargates with MacGyver, but that's the point like I I I see Dean Michael Dean Thomas Paul Thomas Paul Thomas Dean Dean Dean Anderson Cooper I see the MacGyver guy on Stargate and I'm just like I just want to watch MacGyver I want to see him take a Take a the foil of a piece of gum And with just one or two household cleaning agents, you know make some sort of explosive that could blow the The keyhole of a jail And escape from captivity I want to see that Richard Dean Anderson. Yeah, I was I was almost there Rex. That's almost there Did they ever try to make MacGyver a movie? There's chris davis 2021 I think it was a movie that turned into a critically acclaimed show. Yes That's for the o's that'll be for Nathaniel. I wonder if they ever tried to make a MacGyver movie Would they make a MacGyver movie or is that just? They made MacGruver MacGruver is actually kind of funny But I feel like they should have made a MacGyver movie. Look at that Scott Rowland One out of ten Scott Scott Rowland. Yeah Scott Rowland red Scott Rowland I don't think of him as a red Justin Humphrey with the reds There it is Scott Rowland A Hall of Fame No, right? Yes. No Is his eligibility gone? Maybe it's a little maybe his eligibility is gone What's up Matt? What's going on? They don't need to make a MacGruver series. That's just too much Just the old sketches are fine. No need to rehash MacGruver Um, I don't know who I I don't know how to keep track of the high scores Hurt is it's also Turned off does it reset every time we turn it on and off you need to come visit And you need to figure help us figure all that out We we saved the pinball machine from the remodel the reorganization here at jaspies the card shop here Hermosa Beach, California we were uh I think the stacker machine is going into storage. No stacker machine might stay I think the ultimate arcade which was basically a little computer with 100 games in it. I think is going into storage And there was some discussion about the avengers pinball machine also ending up in jaspy storage But I was like no the stacker machine you've never seen stacker So it's a grid pattern game Where there's like a block That moves back and forth and then you drop it tetra style down here And then you and then there's another block that shows up and then you have to get it Stack up the blocks all the way to the top and then there's like a You know bs prize and if you get to the super top, then you get like amazing prize That's the stacker game This is the world of the world thing And I think at our shop I don't think we've actually set it up For the public again yet But usually there's like You know, there'll be like kids the kids loved that game Like the lowest one will be like maybe like some random Like pack of baseball cards or something like that And like the top one we would actually like hang like boxes of like Like five star on the very top Or something like that We had a someone was really good at it. So one kid I think I think his name was like quintin. Yeah, it was mark and quintin But anyway, one a good customer of ours his son Will also collect I think it was his last summer Or before we everything shut down But we had a box of like 2019 bowman chrome baseball sealed box of bowman chrome baseball or something like that And there was one weekend where he won it We were so we were so we were happy for him because we were just like we didn't think anyone was gonna win that And I don't think he put in very much money either. There's archie bradley reds Going to justin no the transcendent case would not be at the top francisco londor relic Uh for patrick and the tribe Another nate pierce and in that 1986 baseball card design for curtis and the blue jays Remember folks all card ships. So I know i'm probably You know sliding past Try not to do that intentionally, but Just in the interest of time But remember all card ships. So you'll see everything. That's just facsimile autograph That's scott rollin was kind of cool. I want to buy um I want to buy star wars pinball I think I think those pinball machines are pretty are pretty expensive Did I miss the entire lakers? Wait, no, are they playing to me? Oh, they play the right. They play the grizzly small There's a new star wars machine. That's not that much There's the man of steel rick henderson. Well, I would have no place to put it in my apartment I'd have to donate it to the shop to have it live at the shop. But now we've run out of room There's trevor bower league leaders out of 50 for the reds justin with the red lights Oh God rookie brandon belac Some mount castles right there Almost there folks stay on target I don't know what's on the schedule next, but there's stuff on the schedule We are we are unfortunately booked for the night ladies and gentlemen Please check the schedule to see when your break is coming up if it's not there then It'll be most likely be with me tomorrow at one o'clock instead of four o'clock eastern We've got eloy hymen as and a sam hilliard autograph There's eloy right there for the white socks richard 329 out of 2021 And the autograph is sam hilliard Rockies That'll be for synthia and the rocks.  There's no case to be Let's do it else my trot's teammate. Joe.  Let's see what's in those exclusives It's in those exclusives. Uh, let's do these uh box loaders first Can these be autographed? There's buster posie I don't know if these these can be autographed or not. I mean there are facsimile autographs down there, but Vlad Guerrero Jr. Well, the first few boxes Revelled that I was doing I was definitely fooled by the through the years card. I was like, oh my god. We go I was like, oh no, that's that's gold label baseball That's not an autograph like I'm like eat your auto This isn't that it's not dynasty baseball a series one Then I ripped enough of this to to kind of get used to it, but But I don't know sometimes when I'm in the zone of When I'm in just in the zone of breaking Like I'm not really paying attention. You know what I mean? I'm just looking at like the middle of the card and looking for names And I just kind of see the autograph and I automatically I'm like, oh no everyone Hank Aaron For the Braves Collin that's orange to 25 Tyler Stevenson rookie Lendor cuny the patino And chris buvich for the royals and there you have it lays and gents Obviously, this is a very long break. So give us an extra Day or two or even three from when you would normally expect these And um, you know takes a little bit longer for us to sort everything out. All right Now Got to give away a rip pack Rip party pack that is arthur with the diamond backs down to josh and the nationals and everybody in between Put them into this blank list right here name on top gets it after 11 times five and six 11 times and then a second name down will get all the uh the tops history cards One two 10 and 11th and final time after 11 big thanks everybody who got into the action Second name Is gonna get the uh the tops history of those history cards And it's steve steve beat Steve becker. I don't know if I called your name out too often. Steve. What teams do you have? twins If there are too many twins here, but you do get that uh rip party exclusive pack And hopefully that'll uh That'll make up for it. All right. Thanks everyone for getting in there is another case that's on the site right now We'll we'll probably be able to knock that out tomorrow that scott rolling to ten was pretty nice So some pretty solid stuff and a and a and a huge stack of I know these are just the autographs and the relics But that was a variation That's a variation crazy wacky pants And that's a very and then it's just a ton of just regular rookie cards right here in the silver pack Uh rookies as well a lot of excellent stuff in series one And it's really all about those rookie cards as well. So those and all card ship. That's pretty good. Thanks for watching I'm joe for jaskies case breaks.com. I'll see you next time for the next break. Bye. Bye


So, hi everyone, welcome to the session, I am Rajshankar, I work as a level evangelist for Microsoft. In this session, we are going to very quickly look at some best practices for writing JavaScript, which is asynchronous JavaScript. So, that's, that's, you know, briefly the agenda. So, we'll see, you know, why, why this is important, why we should be worried about async, and especially, you know, from a JavaScript perspective. We'll review, you know, one of some of the problems doing asynchronous development today. And then we'll take a look at a couple of approaches for, you know, implementing asynchronous web applications using a couple of techniques, a couple of frameworks, libraries that are out there. So, you know, one is called as promises, another is a library called RxJs, which is a very interesting library. So, with that, let's see why is, you know, why is this, why is this something that's important, why should we worry about this, right? If you look at it today, you know, asynchronous, you know, it's kind of the order of the day today, right? You know, how many of you have heard of C++ Guru? His name is Herb Sutter. How many of you have heard of Herb Sutter? So, we have a few C++ people there. That's good. So, Herb Sutter is this, you know, the C++ expert who sits on the C++ standard body, you know, he's part of the standardized process. So, I think about three, four years back, he wrote a landmark paper called The Free Lunch is Over. Now, what he meant by that was, you know, for a very long time, if you look at processor technology, right, it would just keep getting faster and faster and faster, right? And we have heard of the Moves law and what not. As application developers, we really didn't have to, you know, perhaps not worry about performance quite as much, right? I mean, I can write bad code. It probably runs very slowly now. Six months later, it's going to run faster anyway, right? We don't have to worry about it. Just throw more hardware at it and it will get better. Now, you know, we got to a point where, you know, we started hitting physical limits where you just can't make processors any faster, right? Now we have multiple cores. Now, you know, you get machines with more and more processors, right? The counter process is increasing. So, as app developers, this means that, you know, we have to introduce some changes in the way we make applications. You know, we just don't rely on the hardware getting better and better. If you want to, you know, hardware is getting better but in a different way, right? If you want to leverage it, it means that you have to write your applications slightly different. You have to start writing applications that leverage multiple cores, multiple CPUs and so on. So, you know, so that's what I mean by no more free launch, right? You don't get better performance for free, right? Fast and fluid interfaces are really kind of, you know, critical for applications today, right? Gone are the days when people would put up with web interfaces which took forever to load, you know, which was not responsive, you hit a button, maybe it worked, maybe it not worked. You know, not happening anymore. We want, you know, web interfaces which respond to user interaction, right? Especially on, for example, mobile devices, right? If you're, you know, really operating in a straight environment, you want your app to run fast, right? To be responsive. Many of the HTML5 APIs that you see are coming out are, you know, missing APIs, right? For example, Index TV, WebSockets, right? Any of, pretty much any API georocation, any API that does my work, and that does input output with some device, the API is asynchronous, right? Why is that? Again, user experience is the key there, right? You don't want to make a call to some API, some browser subsystem, and have that call just, you know, take forever to return, and your browser just, user interfaces hangs, right? That's a poor user experience. Leveraging multiple cores, as I was saying earlier. The basic principle is, if you have ION CPU intensive code in your app, you can delegate that to spam codes or background processes, and so on. So, if you look in, the thing about asynchronous, if you don't like it, bad for you, get used to it. That's what you're going to have in the future, right? The good news is that our, you know, the libraries and the frameworks are catching up, right? So we are getting frameworks libraries, which kind of make this easier to do. Traditionally, the problem with doing asynchronous development is that it's hard to do, right? If you want to create applications which are multi-threaded, you have a significant thing to worry about, right?  So, you know, in this session, we'll be looking at a couple of those approaches, a couple of frameworks. If you look at JavaScript, per se, right, there are some issues with asynchronous development as it is today. It has this tendency to turn your control flow inside out. How many of you have planned AJAX development? So, all of you. So, how does it work, right? So, you create your XML library class. You set a true, you create a handler where you're on ready state, and then, when this thing comes back, you do something in response to it. Now, if you notice, this is very different from synchronous development, right? Where you have step one, step two, step three, your control flow is just, you know, one step after another. Here, you have a case where a few things happen, and then, you know, the continuation, right? The next step is going to happen at some point in the future. But it's not a contiguous flow. This makes it hard. So, if you, you know, managing state can get hard. Handling errors can get harder, right? So, how do you cleanly handle errors in JavaScript? Because you can do try and catch, right? But if it's an asynchronous call, that means that the handler, especially if you use anonymous, you know, functions and so forth, your callbacks will get called sometime in the future. Your try-catches will have no effect on that callback, right? So, which means if you have callbacks, you're going to have to have try-catches and error handling in every single callback. So, if you're doing something in sequence, let's say I'm making a call to a Twitter service in response, once I get the response back, I'm doing something with Facebook, and, you know, then I make a call to indexTV, and then I go to a geolocation, you know, if you're doing all of these, you know, you can imagine how you can get lost in, you know, a bunch of callbacks. So, the two frameworks that we look at today are going to kind of deal with, or kind of help you deal with some of these problems. The first one is promises. So, the best way to talk about promises is to show you how it works. So, it's going to be difficult. I'm going to keep this down and talk really loud. All right, so I have a couple of demos here that kind of want to quickly show you. What I have here is, okay, let's first look at the tweets and I hope the internet works here.  So, let's see what really happens there, right? So, you know, that's the, nothing major, so I just have a table, I use jQuery templates to, the key piece is over here, right? I'm calling a method called get on an object called tweets and I'm doing something interesting here. So, let me just show you what tweets does. So, that's just a script that I put together here. Very simple. So, just a regular object, you know, tweets has a method called get and I'm just using jQuery to, you know, make the Ajax request. So, I do that. I mean, all this is standard stuff, right? So, if I'm not successful, you know, I handle the, you know, handle the data that I get back from the computer service. Now, how does this communication actually work? So, traditionally what we'd have done is, you know, my API would have been, I would have probably written it like this, right?  So, now when I say, you know, tweets.get, I'll pass a callback function to tweets.get and inside that callback function I'll go ahead and do the processing, you know, do the UI. Now, here it's slightly different, right? Now, that's not how it's working here. So, what have I done here? Here I've used an object called as a promise, right? So, promise is basically abstraction that it's just basically abstraction around a contact, right? It basically represents a continuation. It represents some piece of code that needs to execute at some point in the future. So, what am I doing? I'm creating a promise here and I'm returning the promise object from my get method, right? And within my error and success handlers, what I do is I just call resolve or error on my promise object. So, this is the API for generating or handling, you know, callbacks. Now, when I say resolve, I'm hoping that whoever is interested in getting tweets, they will get notified of it. So, if you look at the client code, this is what it looks like, right? So, I say tweets.get and then I say .ten, right? And then I pass a callback there and I handle that. And then, you know, I have an error handle again. Now, the interesting thing here is if you... is that promises allow you to basically escape from nested callback, right? So, here let's say what I want to do is I want to get these tweets, you know, show it on the screen. Maybe I want to take it and put it on to an index db database, right? Which is again an asynchronous call. So, now what you can do is you can say tweets.get and say then and do your processing there. And then you can notice that, you know, you can use... it's like a fluid syntax. Now, I can say on top of that, I can continue that. I can say .ten again and pass, you know, another callback where I do something else. So, here perhaps I'll, you know, go ahead and use an index db API and then, you know, save it to the... save it to my index db. And then I can keep going like that, right? I can say then and, you know, do the next thing. So, basically the promise framework kind of takes care of making sure that your, you know, your callbacks are executed in the correct sequence, right? So, that takes care of nested callbacks, right? You don't have to worry about callbacks inside callbacks inside callbacks. Another thing that it allows you to do is error handling, right? So, how do you do error handling? I mean, you might think that this still doesn't solve the error handling problem, right? I still have to go and say try and all this stuff, right? And probably each callback can do that. Now, it turns out the promise framework is an elegant solution for that as well. What you can do is instead of doing... See, there are a couple of approaches. Here what I've done is in the first call I have passed an error handler to the first callback itself. So, when I say then, I pass second parameter as another function where I do error handling. But here, the issue with this approach is this handles only errors which occur in that particular asynchronous call, right? If my tweet API call fails, then I have a handler. But what if I tend to say to the indexity fails? Let's say here I do something else. And if that fails, you know, does that mean that I have to pass an error handler for every single claim? So, here I have to pass another error handler, here I have to pass another error handler, and so on and so forth, which is probably not very ideal. It turns out that, you know, the promise framework allows you to do something like this. I can say it's not an error and pass an error handler right at the end, right? And then do my error handling here. So, right. So, this is not required. So, you can see how this is very similar to to a try-catch, right? So, it's like you can imagine all these steps as being part of a try-plot, and then the final error is being part of the except the handling part. So, in this case, what happens is all of these would run. If any of those asynchronous calls fail, your error handler is going to get called directly. So, you know, it might look like magic, right? How is all this happening? But the key to understand here is that all of these steps get executed in short, right? As in, when the script engine is running, it's executing this one line. It's just one line of code, right? I just put it in multiple lines. It's just one line of code. T is not get. That gives you a promise object, and I'm saying then, and then that gives you another promise object, and then another promise object, and that. So, if you notice, what essentially I'm doing here is I'm setting up a graph, right? A call graph. Entering. Entering a call graph is getting established, and basically, you know, you can think of this as a roundabout way of setting up a tri-catch. But a tri-catch block which works with asynchronous call. Now, you might be wondering, why are you talking about promises? Promises as a concept is something that has seen wide adoption in the industry. For example, if you're using jQuery, jQuery now supports promises. In fact, you know, for example, what I could do here is I can say return. Let's not mess around with that example. So, let's say, you know, I want to do, here, I have a dollar dot Ajax call, right? Here I'm making a call to the Twitter service. In response to this, I want to do something else. So, here what I've done, I've passed a success call back, right? You don't have to do it this way. This is the old way of doing things. In jQuery, I think one point, probably one point five were up. They have added support for what are known as deferred objects, which means that instead of doing this, I can do this. I can say then, a function. I'm not exactly sure what it is. I think it gives you the XHR object, right? Maybe I'll put a debugger here. I'll have done it nine here. All right, so I'm not sure what that first error is. I'll probably investigate that later. But here you can see that, you know, this particular callback is getting caught, right? And this XHR is the XHR object. So, this is basically the exact same thing that we did earlier. In the tweets example where I created a promise object and returned that, I created my own promise framework, right? So, I'll show you the code in a bit. But here, you know, this is part of jQuery. And jQuery supports then, and you can do all of those things. You can say then, and you can dot error, and you can put the error. This is supported, I think, in Prototype as well. And pretty much, you know, this is gaining my adoption throughout the industry. Even in Windows 8, if you wanted to Windows 8 development and, you know, create desktop, Windows-led applications, pretty much every single asynchronous API, asynchronous call returns a promise object, right? So, this is, you know, kind of very common now. I mean, if you think about what that promise object actually does, you know, it shouldn't, it's not, it's not really that. So, let me just show you what I had. I had just put together a very rough, quick promise framework together. I'm not sure that it handles all the edge cases and whatnot. But it kind of shows you what it does. So, you know, a promise object basically just has a few methods here, right? It obviously has a method called then. It has resolve, and it has error. So, when you call then on it, right? You basically expect it to pass the on-resolve and on-never call back. And in response to it, the key thing here is from the then object, I'm in turn returning another promise object, right? So, this is how we are able to set up that chain of calls. And here, what I do is, I mean, the internal implementation details don't matter. I have an internal resolve and error function which gets invoked appropriately. And in response to that, I call the users function, right? So, basically what happens is, when you call resolve, so in my tweets.get API, once I got the response back from Twitter, I said promise.resolve, right? So, when I do promise.resolve, I had saved the callback that the user had supplied in the then call, right? So, that gets invoked here. The best way to figure this out is to put breakpoints in all the correct places, hit F5, and see how the control flow happens. It's not very complicated. But the idea here is, it allows your code, which is asynchronous to be much more elegant, much more the same, right? So, if you're using jQuery, remember that you have this new way of doing things. You don't have to provide a success in an error callback. You can say .then, and if you're doing more jQuery operations, you can keep chaining that as well. So, that's quickly the promise framework that I want to talk about. The next framework that I want to cover is kind of the more interesting. This is basically RxJS. RxJS is a composable events framework. So, let's see what that is. So, RxJS is a framework that kind of, you know, we saw what promises does, right? This is like promises on steroids. It stands for reactive extensions for JavaScript. This is originally written for Docker and C-SHA and that has been ported to JavaScript as a library from Microsoft. It has direct support for being on the popular frameworks out there. You know, probably the best way to do is to see, you know, kind of work through some samples and see how that actually works. It basically provides an elegant mechanism for composing asynchronous operations. It works at a different level of abstraction. Basically, the idea is there are objects which can be observed and there are objects which are interested in observing the observable object, known as observers, right? So, this is an object which does something interesting, right? And there are other objects which are interested in being notified of it when this object does that interesting thing, right? So, this is called as an observable. That's an observer. An observer subscribes for event notifications on the observable. This thing in that event happens notifies the observer, right? So, what RXJ has done is it basically takes this design pattern and abstracts observable objects on top of event sources. And event sources can be anything. It could be pseudo event sources of your own, right? You might generate some data from that service that can be extracted as an observer. You might create an observable object on top of browser events. So, when I move my mouse, you know, I want to abstract that and do something in response to that as using this framework. Now, the benefit of using this framework is there are a bunch of combinator functions which are available as part of the library which allow me to do interesting things with these event sources as we'll see. But the fundamental premise is this, there are objects which raise events and there are objects which are interested in being notified of it when the events are raised. I will demo chichi here so that I don't forget to show stuff. So, let me just walk you through that. All right. So, to get rid of all this, I shouldn't leave internet on to now. So, I have a little console that I put together. This is, if you have done a previous session, this is likely the same console but with support for RXJS. Let me just show you what I have done in the source here. I hope that's reasonable. Perhaps it's not. So, that's what I have done. So, you can just search for RXJS, David search engine, you should get it. You can go ahead and download it and the core library is basically an RX.js file which I have included in your page. And there are a few extensions that you can add on top of the base library, like support for each library, support for jQuery, support for dojo, like and whatnot. But the base library is that. So, that's all you need to do to get support for RXJS. So, this particular window that you see here is an eval console. Something that you can do with it is you can run right little piece of JavaScript here and it'll run it. So, I can do that. It'll run the script. I can print stuff to a log, I'm triggering a lot of things today. So, you can do that and the messages to up there, I can clear the log and so on and so forth. So, basically I just go through some of the things that you can do with RXJS console and we'll see what exactly RXJS brings to the table. So, I was saying earlier that it is essentially a framework which plays with two kinds of objects, observable and observers. So, let's see how you can create observable objects with RXJS. So, I can say are observable. So, RX is the global object or the namespace inside which all of the other functionalities are scoped under that. So, I can go ahead and say something like this. I can say, rx.observable.create and I can provide a callback function as a parameter. Now, what is the idea here? The function that you're passing is basically the event source. This is the function that's going to generate the data. Whatever it might be. So, right now we just get the fundamental idea, we forget about the actual data that will be generated. We'll just output some values but this particular function is responsible for generating the event source. I mean, generating the event data that is the event source. So, what you can do is this takes one parameter, right? The RX framework will pass an observer. Somebody who is interested in getting being notified of this particular event, right? What you can do is, for example, I can say observer.onNext.temp observer.onCompleted and I'll return a function here. Now, I've done three things, right? I'll explain what the last line is. But the idea is this. Whenever I have some piece of information that's available, that's ready to be sent, right? Here, let's say that information is the number 10. So, I want, over this, listening to this particular event source to receive the value 10, right? How do you make that notification? On the observer, you call onNext and pass the value, right? Very straightforward. And then you give another signal called onCompleted to indicate that your event generation is complete, right? There are no more events to be generated. And the last function is basically a way of disposing of the object which is generating the events. I'll talk about that in a minute. Now, how can you use this, right? So, I can do something like this. You can say observable.subscribe and I can basically pass an object which has all those three features. You might be wondering, you know, what's so great about this? So, I can say onNext, onError. So, we'll see what onError does and you can say onCompleted. And in these three functions, what I'll do is I'll just, here I'll say printOnNext and I'll print that value. I'll say print onError. Here there is, you know, no data. It's just a notification that it's complete, right? And then I just run it. So, on the right-hand side, you can see that onNext.par and onCompleted.par.  So, at the root, right, what is happening? So, when we look at more complicated examples, it might look like black magic. I mean, where is all this coming from, right? Ultimately, underneath, that's all that's happening. If there are two objects with a verify interface, your observer should have onNext.onCompleted. The observer will, you know, all those, all that. Now, of course, this is a very simple, simplistic example. You can, I mean, you can have multiple observers, right? So, I can do that. And then, you know, I can create another observer here and call this onNext.par or something. And then you can see that, you know, both onNext and onNext.par get called. So, all that works, right? So, if you have one observable object, you can have one or more observers. So, all that works fine. But the interesting thing is what are all the things that you can do with an observable object? Like, how you can compose operations on top of that? So, I'll get rid of the second observer here. What else? So, this thing that I have done here, I'm just returning, like, one single value, right? So, let me introduce the first combinator that you can do. This thing can be written simply like this. So, let me just... So, what it did is, I just called one method, called return, and I pass a single value. So, again, this should be very straightforward, right? It simply does what I just did, right? It basically calls the onNext on my observer, passes the value that I pass here, and onCompleted after that, right, once it completes. What else can I do? I can do something like this. Range of 1, 10. So, now something more interesting happens here, right? So, this particular function notifies the observer for a range of numbers. So, when I say 1 to 10, it calls the onNext from 1 to 10, and then calls onCompleted. So, this is a very simple data source, right? It just generates a bunch of numbers, give it a range, right? So, let's see what else we can do. So, for instance, let's say I have some data as an array, right? So, I have 1, 2, 3, 4, 5, 6. So, there's another variant here where you can save from array like that. So, now you can see that onNext. Basically, now I have created an observable object that abstracts an array as a data source. So, we're just going, like, you know, in small increments. The first we abstracted over a single hard-coded piece of value called number 10. So, we abstracted over, you know, a range. Basically, you provided some input parameters and abstracted a range of values. Now, I'm abstracting over. I'm creating an observable that basically is an abstraction on top of an array, right? And the same thing works, right? OnNext and so on and so forth. The really interesting things you can, you know, start doing when you deal with other kinds of objects. For example, DOM elements, right? So, what I have here is there's another variant here from HTML event. So, you can save from HTML event and pass two parameters to it. One is the DOM element that you are interested in. For example, I'll say document.body. And HTML event that you are interested in. For example, mouse move. So, I'll say mouse move, right? Now, basically here, this observable abstracts over that, right? So, basically what happens here is whenever the mouse move event is raised, all my observers are going to get motivated. Very simple. So, you can mentally visualize what is happening internally, right? So, from HTML event is basically taking a DOM element, doing an add event listener on that particular element. In the handler for that, they're simply calling observer.onNext, right? So, what I'll do is here, here I'll actually get the event object. So, I'll probably say client text v.client1. Now, you can see that every time I move the mouse, your event source is continuously fired. Now, the point of showing you all these examples is that the core RxJ's rainbow itself is agnostic of your event source, right? You can create your own. So, these are something that are supported out of the box in the RxJ's library. But if you have your own unique kind of event sources, you can cut that in, right? And your subscriber and all that code just works. So, okay, so this is interesting. So, you can do this. Now, some of the other cool things that you can do with this is, so let's say, so how many of you have entered the functional programming in JAS prep session? About 40%.  That's a combinator that's supported here. For instance, what I want to do is just copy that and refresh my page. So, what I want to do is, for example, I want to know, you know, the mouse event source, maybe in response to it I'm doing something complicated. Maybe I'm doing network IO in response to every mouse move. And this is not scaling very well, right? So, every time I move the mouse very, very coordinate, my observer is getting notified and my, you know, my server side, service is being invoked and my server is just really struggling. So, how can I, you know, for example, maybe the solution here is to throttle the number of, you know, the frequency at which the event source is getting raised, right? So, you can do something like this. So, I can say dot throttle, let's say it's over here. Now, I'll just run that. So, now you can see that when I move the mouse, it's like a different thing is happening here, right? Now, if you notice, the only piece of code that I added is, I just continue with the fluent area, I just said throttle code, right? Everything else just works as before. Nothing changes in my observer code. Nothing else changes in my source also, right? From HTML event, nothing changes there. That code is as it is as it was before. Basically, I have composed something on top of an event source. And it turns out that you can do this to an internet level, right? So, here what is happening is, whenever I move the mouse, it is actually doing the bouncing. I don't know why it's called throttling. So, basically when the time interval between two consecutive events of mouse move is greater than 250 milliseconds, that's when my observer is going to get modified, right? So, if I move very, very slowly, right, then for every coordinate I'm going to get, I mean, I can't move it so slowly that, you know, it's less than two 30 seconds. Maybe I can increase the duration here every one second, right? And that would have been bombed earlier, right? So, if I do it in the same page now, it will get called twice. So, I'll just run this now. I mean, it's the same thing, right? So, now basically the duration is moved. So, if I move very slowly so that it's one second, it's hard to show you what it does. But you get the idea, right? Basically, the duration, the time duration between two consecutive events is greater than the duration that is supplied. Then your callback is going to get fired. So, if I move it so fast that I get five events within 250 milliseconds, my callback is not going to get called five times. It's going to be called once at 250 milliseconds. It's complete. So, basically I'm throttling the event source by a certain duration. What else can I do? You know, maybe I don't want this, right? In this case, if I do a lot of mouse activity, right, maybe it's like a doodling application. If I do this, then if I draw really really fast, my user experience is going to be less than optimum because imagine that it's a collaborator to complete it. It's a whiteboard, you know, in a WebEx kind of app, right? So, I go and draw stuff on the whiteboard. I want other people to see it. Now, if I do this, then if I do draw a lot of things, then you know, the others are going to have to wait till you complete drawing. Basically, the time difference between two draw operations has to be greater than whatever the duration is. Maybe I don't want that. I want the event source to be created once every two degree seconds. So, that's slightly different, right? So, there's another one called sample. So, I run that. So, now here when I move the mouse, you can see that slightly different behavior is happening, right? It's not happening as frequently as it happened before when I had no collaborator applied at all. But it's not like the throttle case as well, right? Here, basically, every two to three milliseconds, one event goes. That's all, right? So, this is called the sampling. I think that's a better name, right? It samples your mouse move event once every two to three milliseconds. So, no matter how many mouse moves I get within a two to three minutes integration, only one event is going to grow for my observable. This is different from the throttle case. The difference is slightly subtle. So, if that's confusing, just experiment with it, right? It's going to be clear. It's going to be a little wild for me to get it as well. In this sampling thing? There you go. So, if I mouse and make an example in the curve, and there's a point here, I take the mouse here, but only these two points are sampled. So, I get a state here. So, what about that? What do you do? That's a good question. So, basically, the question is, in case of sampling, right? But in a general sense, when you sample, that's the thing with sampling, right? The question is what happens to all the data that was generated during that interval when the callback was not propagated, right? So, I've moved from point A to point B, and the browser has actually raised the event 20 times within a 2-2 millisecond duration. But I'm getting that notification only once. So, what happens to all the coordinates which were generated during those 20 invocations? So, with sampling, you lose it, right? So, isn't the other method much better? Trottling. No. There was this curve in the frame. Default. So, in that library that I showed in the previous case, I handled that. So, I have a debounce, I have a debounce with data, where the callback basically will accumulate all the information and supply that to you. So, you would have to roll. So, that's the thing about this library as well. So, you can roll your own sample routine. Basically, you can probably take that debounce function and port it over here, and it just works. All you have to make sure is that you basically return an observable, right? You create an observable, compose over your source observable event source, implement your logic, and return that observable. So, you just hook it to the chain. Sure. So, those are some of the things that you can do with this. So, I've just scratched the surface of RxJS here. So, if you look at the... If I can find it. So, when you download RxJS, you'll get a documentation like this. It's basically the complete API for RxJS. If you look at the methods that are available in observable, you know, I've just covered, for example, you know, range and what not, from Array, from Achievement.  That do all kinds of fancy things. You know, there is a time interval. There is a time out, time spam. There is a select mini. For example, select mini is an interesting combinator. What select mini will do is... So, if you have two event sources that are happening one after another. One is a mouse move, one is a mouse click. And you want those event callbacks to be coalesced into a single callback. Select mini allows you to do that. So, it takes two separate observable operations and it basically sequences them and makes one single callback for you to observe. In fact, or take another one. Take until. Take until is a combinator. Again, what it does is... Let's say you have two observable sequences. You want the observer to be notified from one particular sequence. Only so long as another observable sequence does not notify. So, you have two sequences. Two observable objects, object A and object B. And I have an observer. I want the observer to be notified of the events generated by observable A. Only so long as observable B does not have to trace an event. That's what take until some other observable. So, I have a little sample here that shows how you can use this. I probably won't explain the sample because I wouldn't have time. But basically this implements... Let me just show you what it does. So, I have this little bib over here. I can just click and drag it around. Now, if you look at how you would have implemented it traditionally. So, this is typically how you would have done it. So, you have the object. I handle mouse down. I handle mouse move. I handle mouse up. I do all the complicated logic to implement a drag object. Now, you can do the same thing with RXJS. And the code might look a little bit more. But essentially, you can see how the different combinators have been applied to do interesting things. So, for example, here mouse move is from HTML event observable on top of my object here. That is basically that particular drag media. I am creating a mouse move on that. I am creating a mouse up observable. And I am creating a mouse down on top. Then I am creating a composed version of that. Basically, what I do is I send mouse back to the skip of one. So, skip is a combinator which what it will do is, in a sequence of events, it will skip the first one. It will skip the first one and cache it. It will keep it with it. And then I compose on top of that another combinator called zip. So, what zip does is, you can see that zip is a call that is happening on top of the object that is written by skip. So, skip will return observable which will have the information that was skipped. So, what does that mean? So, this is mouse move. So, for the first coordinate, skip will get notified. Skip won't propagate into the next one. That is, your zip won't get the first one. Then the second mouse move happens. Now, zip is going to get notified. And skip will return the previous data as well. The mouse move that was skipped. So, in zip, basically what we do is, we provide, so the context, the object on which it is being called is the observable that was skipped. And then this is the other one. This is basically the same mouse move object as being passed here. This will have the current mouse move coordinate. It's probably, you know, getting a little confusing. What you can probably do is, you know, this is just work through it, right? So, I'll share the demo. Just put some break points and step through it and you will see how this goes. Zip will basically take two observable objects. The one that is part of the context that is written by skip. And the other one is another observable object. And then it calls your callback and supplies those two values as two parameters to that function. So, here this basically gives me the two coordinates from two consecutive mouse moves. And then I create another composed one on top of mouse down. Here I use select me to coalesce the two event sources. One is mouse down and one is mouse moves. Because I don't want the events to be raised when I'm simply moving the mouse. I want it to be raised only when I'm mouse down and then move, right? Otherwise, the dragging will keep moving when I just move, right? I want it to be dragged. So, that's what these two lines with. And then finally, my subscriber is on top of the mouse drags. So, you can see that, you know, I have a single subscriber where I, you know, do whatever needs to be done. Basically, I move the clip to the new location. But you can see this whole stack of the operations that are being built on top of each other, right? So, the key with using RXJS is getting familiar with the list of combinators that you can do interesting things with. So, you can kind of transform your data however you like. You can do very, very powerful things with RXJS. And the whole thing works, right? So, if you look at it here, you know, I have included that only, right? So, this is drag.js and this dragging is happening through RXJS. So, with that, I've kind of done with the quick introduction to RXJS. Here are some resources that you might find useful. So, there's a blog post and I thought about promises. January is the official record of this script to learn about promises for January. But RXJS, these are two great resources, especially the blog here by Matthew. So, this is like a whole series of blog posts about RXJS starting from the basics. That's really useful. That's what it's a few questions. You can take that. Or I think we have lunch. Any questions? Promises? With RXJS. So, the first example that I just did. Observable.create and pass the function. So, that's the custom. So, there I just raised 10, right? Instead of that, you can do something more interesting. For example, you might have your own web service. So, maybe there you want to call that web service, get some data back, and call your own web service. So, instead of saying observable.onmix of 10, you will make a rejects call. In the response, you will say observable.onmix of 10. So, any, any, you will say 10 is right. In promise framework, we created a sequence of calls using 10. Is there any way to distinguish the previous calls, whether it is executed successfully or not? So, if you set up a then series of calls and an error, right? If a particular then callback is being called, then that means that the previous was successful.  Even if you don't have an error case, the subsequent then series will be gone. If you have an error case, then you handle it elegantly. Otherwise, that just takes a load. So, yeah. If you want to track another state, then you have to use it. So, for example, in the previous call I want to save some information. Then the next call I want to use that information. In that, you will have a handle of this call. So, that's it then. Thank you very much, guys.