Good afternoon. Welcome to your BC con or saying the announcement from the from the organizers if Please look to your right and if there is a or if you're on that that So on your left If there is a free space, I would do it out to be the side of you don't always move over because people will be arriving late for this session and Yeah, I see people still arriving but we're trying to keep the schedule here So please welcome Martin here who is a an open beast EU developer who's been saving the network stack So take it away Martin. Thank you very much So, thanks you for being here As Peter said, I'm a open beast the developer and bit late into the party That's an interesting fact for the talk. I'm giving right now because I'm mostly working on what I'm going to talk about It's about code that is older than I am As you can see with the name of the presentation, I'm going to buy to talk about network network What exactly I found a really funny name that comes from a joke that I would explain a bit later So timing those open VSD networks type dragons for those that don't really know me and I Spend a lot of time in open BSD kernel as a day job to the network and During the night working on USB poor PC or some different stuff there and here so What I'm going exactly to talk about what are those dragon that well I'm mentioning this slide the first or Maybe the easier way to present or to introduce you to those dragons. It's to Let's read a comment that you can find if if you're looking at through the The network code in the side the open BSD source tree in the kernel That's an interesting question that I have to to adapt my talk I want to know maybe how many person Familiar with with the internal of the BSD networking subsystem or maybe I coding Maybe can you raise your hand if you know something about that? Okay, so so I tried to adapt the language so the comment I was talking about you can find it in this in this file and As you can see when we are afraid of something We call it a dragon a dragon is is a legendary animal I don't know how many of your radius have already seen a dragon I didn't but the effect that dragon can do at least in in a kernel I quite terrific This this toll could have been named How to badly break your network stack it come out of a joke that that I say well That's really interesting stuff that I don't know how many people know about the BSD story this design Why do you want to break that way? Do you want to change that? That's a really interesting question So I tried to do a talk here in 45 minutes a lot of people already told me that if I want to explain What I did and how many times I break the network stack? It wouldn't fit in one talk So I'll try to be short here, but don't hesitate to ask questions or further details so what are the motivation that Leads me to to to look for those dragons those Creatures that that are in your 30 years old a bit more than 30 years Operating system in this code there That's the first part of the agenda, right after that since we are talking here about network And I don't know how many of you are familiar with the notion of addresses and roots Is it right the right place to talk about that? Well, you would tell me but I will introduce that and and specifically how from my point of view as an as a network Developer as a the kernel network developer We choose or at least I was told that the BSD people the guy in Berkeley decide to represent them That's really interesting to understand how they are represented because since I'm looking into this this network stack And I found a lot of dragon there. I want to understand where they are living and Why we could find some dragons? Then the change that leads me to break stuff that the change Why why would you like to break stuff? What what kind of change got break stuff? What kind of change did we do on open BSD that none of the other BSD did that? We found some specifically complex design decision on on the original BSD kernel in the network stack Where those change leads us that's the point of of now and Finally, I will conclude about this experience which represent about one and a half year of work So feel free to interrupt me if you have some question if I'm not clear As I said, there's a lot to say but I think we can manage to see all the all of the all of the slides So first point the motivation. What's bring me here? To talk about those dragons, right? Well, the first point is obviously to give a talk to the euro BSD count. That's that's what every BSD developer are working for You might like as I am to enjoy code of the 80s. I was born in the 80s After this the code I'm touching has been written and well, it's interesting and I was not particularly interested in any history Well, it's interesting But the why I enjoy this code or I don't enjoy this code It's because I would like To make it easier for other people for myself to run it in parallel I Don't know if you drink some bells here Computer used to have one central processing unit now as day job and My employer wants to sell router based on on open BSD and wants to sell Router that are fast. That's something. Well, I don't know people are interesting in fast software and one of the way to to make it faster at least that's what they told me and That's what they hire me for Is to execute it on multiple CPU. So What I'm writing here on on the sub point of making it run in parallel is that the motivation on the important motivation That leads me to to make the change network stack is to be able to make it easier to simplify the code that we want to run in parallel and I will be focusing on the forwarding past because The company that makes router are really interesting in those performance. It's quite a long talk It's quite big piece of code, but it's interesting and I'm presiding on the second part that I took an approach that I wrote on top because other developers are approaching this this question of running code on multiple CPU and It's interesting when we work in software development if we work as a team. So we share the work some people As a position of a top I could set the bottom that are addressing are interesting in the program directly from the Close to the hardware. So from the driver system allocation allocation mechanism I will look more at something which is even for people that don't really do operating system development can understand it's it's Basically the top what we call IOC gel That's what's what's the process when they enter the kernel to do some configuration change do what kind of Of data they want to write modify And of course the the code that we run when we want to send a packet from one interface to another one That's what I mean when I write IP forward path now an interesting point about this work is I mean when you when you think about a Strategy that that you have to deploy that you have to change to make it run in parallel or at least to help it Make it run in parallel is that a lot of of the tricks are also true for plug-and-play Problematics, I mean that when you plug an interface that I appear to worse on on USB too So I know what I'm talking about that when you plug an interface they remove it Somehow the current stage change that you were representing an interface You your computer in the memory is some information and then you're removing that How do you manage to maintain the integrity of your kernel? It's it's bit it's similar and I will come to a bit more detail late and the last point is I think interesting to to To explain it for people that are not really familiar with the process development on the pump on BSD community is that It's probably impossible at least even if I with the team of people I'm working to test all the change So when we have such huge cost code base and and I think that the Ted was Saying something similar in the previous talk that you can only find all the Bergman Well, at least a lot of the but when you're really running the code in production Well, when you're really you're running in the use case that surely your regression test help you Sure, you can have a test set up and you should But we want it to commit it early so that people can try it It will found back. It always broke something it's Revert it so that people can still use open BSD. Otherwise, they don't trust us anymore. It's broken system How can use a current system which is broken? Fix it. I should have apologizing between we've become I basically apologize because I break the machine of something and commit it again And repeat with the next step But that's the motivation that leads me, okay Why do I want to change something? What why changing something is? Hard and break something. That's what coming afterward. What are those dragons? So let's go to representation of addresses and roots which is basically The blocks to to represent to to imagine this abstraction that is a network No questions so far okay Well, maybe you you you're a bit familiar with that and What is an address? What do we use addresses for? This might be superfluous or trivial for some people, but I wrote on the left side of this slide two question and those two question are really interesting because everywhere in the kernel in the network park when You want or you access some some how the representation of a network address. It's to ask one of those two questions Identify peer that's who receive who should receive or who? Supposedly send the packet. That's that's a question basically to know is it for me Did you did you send that that's that cat to me? And the second question is where should I send the end the answer? Where should I send something on the right hand side? Yeah, you see a picture representing and Fixed header of the version for the IP protocol I will be concentrating on the on the on the code touching the IP protocol and and as example The version for we can talk about the version six, but I will prefer to keep that for later And an interesting point that I put in red the information that correspond to to to the question left and This this chunk of of this representation of chunk of data We cannot choose to change it. That's that's something that we have to deal with That's really interesting that as an operating system developer as an architect You can decide to represent things as you want. Why a table is this size? Why do you want to paint this color? It leads to a lot of funny backshading. That's interesting But that we cannot change it. So we have to work with that now in a position to this oh Before before the position. Oh, yeah, what's happened? and In your in your kernel, what's happening in your operating system? When you when you receive a packet What happened when you send a packet? In order to give support to my words, I draw a simple Picture that I will be illustrating with with more programming a question later on On the left hand side, you see that well you have some he put I won't go into detail how that worked, but You have a packet your machine have a packet the question you are asking is this packet for me? well Because if it's for you you want to look at it That's what I put on on the right-hand side. So you deliver the packet by delivering. I mean you Trust me the packet to whoever is supposed to receive it on your operating system which application But there are a lot of possibilities But what's interesting here is the question is it for me this question? I join it to the to the identity identity point that I previously presented on the side Now if it's not for you And for some reason you appear to want to send this packet to another computer I don't know if some of you have of your router equipment if you use a I don't know Wi-Fi access point In conferences or in your home. Well, they certainly send this packet to somebody else That's what what we call forwarding. So do you ask question? Well, I'm supposed to forward this packet There's a various question to say yes or no And if if you appear to to to be able or to want to forward this packet, then you have to say well but where Typically when you plug your computer to to a switch a router it has multiple ports How does it know which port you're going to send the packet? It is supposed to send to all we can go to history about that, but as An operating system open base. There's a mechanism to select. Well, where he's going to send it If you have only one cable basic traditional laptop It's will be easy because you will receiving always from the one from this cable and sending to this cable And that's basically what I'm writing on on the left-hand side when you I see send if you're sending a packet if you're sending information Well, you just have to pick well which port which interface I'm going to send you and send it now this question Which interface you want to use it's basically the question what where I am you supposed to which route Do you want to take or do you want to tell the packet to take? That's the second question That are inside this forwarding path now this question are present in different places in the kernel But I will I'm going to concentrate on on on this particular code pass Because that's what critical performance that's code is executed for every packet you are passing through so if that code is slow well You will have a slow forwarding machine and if you want to make it fast you have to understand how it works That's what we are going to talk about now I I show that the representation of the the IP packet had a happy error How is it represented in your kernel? I hope you're not scared with some C structure declaration with some love from Berkeley But in your in your kernel and and I come back a bit later I think this structure got introduced in 85 and something around that and it's basically Containing the information that you want to match to the packet you are going to receive Is this an address that it's configured on an interface on your system? That's the first field even if you don't understand The C semantic you can read the comment that quite explicit Is it a destination address if you have a point-to-point interface that's that's for point-to-point and Here we are it's a reuse trick if you appear to have a broadcast address configure On this interface. That's is full of dragon for example. That's something that well People want to save space at some point. So no need to add another field Now when you have some generic code that deals with addresses and that might know if this field is Representing a point a destination address or broadcast address because it is the same field So there you can have a lot of crash The rest of the the fill up Quite self-explanable that one is dressing point and then we come back to that right right after if that You have a pointer that means that you have a link that show you which interface this address is configured on when you do I've config the name of your interface that address. Maybe some of you do well That's the interface. Let's say em zero the IP that I'm that is using in our language of developer And in the address that you will put on this interface come on will really end up encoded in this field So how does that glue together to draw a picture in the memory representation of your kernel? Well, let's start simple start simple You boot your computer of course What I'm talking here. I forget to mention that previously, right? I'm obviously talking about how is it in open bsd but Most of it applied to all of the bsd system because they share the same stack, right? With some detail and we mentioned right now. So you put you put your your machine you put your machine and It's a pretty that you have a network interface in your machine at least one. Let's say we are we're in 2013 and And what this network interface is here represented by the EFP symbol, right? I Fp on top of that you have what I call a Interface list this square rectangle Mean that's the this list is a global structure name of the slide is global data structure which Elements or list Trees Pointing to objects can be reached from anywhere in your kernel. That's that's really similar That the kernel is just a simple Program, which global viable. Let's say so you have a global viable that you can use to reach Interface this one is the interface list or a list of interface. So you have an interface and it's in the list now This slide represented more or less what was in in open BSD 5 4 and before Where every time you had an interface You had what I wrote it a link layer address a physical address Assisted to this interface No matter which kind of interface no matter if this interface Really has a physical interface. It was present. It was always present It was always present so it's like one-to-one mapping with your with your Interface, right? You have an interface. You have a link layer address The the arrow that are represented there So you see the arrow that comes from the interface back to the interface to from the address back to the interface is This field do you see here the back pointer to the interface? I hope I'm not too confusing Don't hesitate to stop me if I am Now the interesting point is that you see that there is a red a rope starting from the interface are going to the address this represents a list of addresses configured on the Interface right so you put your system you have an interface you put it in the list You add a physical address and you put it on the list of the interface, right? Now Since this address this this physical this link layer address, let's say is represented like any other address in Open BSD and it's still true right now it now it's no longer true it's in some months, but In 5-4 it was true it while also ending up in a red-black true, which is also square Well rectangle which means it's another global data structure That's something you can access from anywhere any kind of network code can use it to reach your address So what we see here is that if you start using any kind of code in your kernel You can find the representation of your address by two different by using two different structure either you say well let's look at the interface I have on the list and which address they have on Every interface or well look at the tree. What address did we put in that? That's representation of an interface without address, right? No question Okay, let's put an address on this interface That happened. It's a bit scary And I don't have a picture when I work with that It's almost Well, there's a lot of stuff missing But then I will scare everybody Okay, so now we are adding an IP address, right you did your I've config command So what I'm calling I file on on the bottom of slide is the representation that just I've just shown before That will contain the address you just configure on your interface This I far as you see there is a red Red a row pointing to it that means that this is also in the list of addresses of your interface that it's part of the interface you did I've config em0 blah blah then this Blah blah is on em0 list Since it's an address it's also appearing in the tree all the address we're putting we put them there Since in an IP address well, we we find another structure. That's because it's easier for us to work with that So we have another global structure that we can reach from anywhere that points to this address and now And since you want to use this address in a real world You want to say well I? Would like to reach The euro bsdcon website So you say well where should I send this packet so that it reads a euro bsdcon server hosting the website Well certainly you should use the address that's configured because if you have only one address It's probably the good one but the mechanism that that that decide that make the decision of Destination one of the two question I was presenting before is done through the routing table So the routing table Contains root entry that I wrote there as RT entry Those entries say well It's just a pass. It's just a route go there But what's interesting in our point? that those root entry Appointing also to the address because that's the address you want to use in the end Now it appears that the routing table is also rectangle So if you followed and not to sleep after lunch you get that it's also a global structure That's what I'm going to talk about Why is that interesting? Because when you look at this picture, I don't know how familiar familiar you are with multiprocessor developments concurrence history but the first Problem that you have is that well if I have so many structure way of the data of my address and the first of all I have to make sure that they are Coherent because if one doesn't get the Change that I just did on that my address What will happen to my network? Well, you will find dragons on you on your pruning system something will break and That's that was already a point we are not executing Accessing this kind of of resources in parallel But even for configuring these resources configuring these these global data structures. It's complicated. I won't mention names drivers But we can talk about it with beers Now apart from currency as soon as you're going to say Well, I want to add a new address and at the same time ask the question Where which which route should I use to send these packets? You might end up modifying or accessing one of those four global structure at the same time and Potentially a crashing your kernel I Won't go into the detail of why? but the point is You have to Protect somehow those global states when you're working in in multiple and in parallel and programs So the question is well, okay Start looking at that without pictures. It's an incomplete pictures. Claudia said and he's right now If we look just at that and we say well, I have to Make that Code accessing to that work in parallel well, I Wish me good luck Because I'm already scared just as looking the picture So the question was well if I have to Make that code written in the 80s running parallel Would it be better first to start to simplify it? Because you see you have four different way to reach to your address. Do you really need four different ways? Well, the answer is no otherwise, I wouldn't be given a talk here and that's what I'm going to explain but most importantly Before starting to say well, which one of them we can use? Let's say where they're used. So you have four rectangle for global structure. You remember this picture Well, the first question we were asking is is it for me the packets? Identifying with the receiver of the packet. Well, to do that, we use three of the structure This is mainly known in the function for the version for the IP protocol in IP input Once again, that's represent how open busy five four What's what was in open open busy five four? I will come to what's now, right? This is I didn't really check but I encourage people from the other BSD to go look and I don't know how true it is, but I assume it is mostly the same Now if you're supposed to forward the packet you're going to access one global structure and When you're sending a packet at least three of them now you have a star here because in the case of your forwarding You're also sending obviously, but you won't Access the routing table twice. It's one or the other So I put it here because you might just want to send a packet Right in this case you will use the routing table in The select interface block that we see here that is was printed by the IP output function Excuse me. Yeah. Well, we could include it But it's it's due to the question to make it clear for the code, right? So we have the picture of how scary it is of at least one small piece how scary it is now We mostly know in this particular Functional piece of code which is executed when you forward the packet where they access that mean that they also access an indifferent code pass But I only have 45 minutes now the question is What can we do what has been done how that change and Sadly, well what break in there? mean time So first question is we have four of these global structure. How can we reduce the number to how many of them? Which one should we pick? Now it's quite easy to say because the work has been mostly Completely done so I wrote down some rules That might be useful for other people. I don't know About the global list the first point I explained when I was trying the representation of A kernel that just boot without configured address If that the link layer address no matter what kind of interface you have no matter if it's a real interface not No matter if it has a link layer address not has a memory chunk Which is used by the kernel to Represent something that should be the link layer address So if you always have it Why would you look for it? Because you know it will be present What would you have to search to release? Where is it? It's there don't worry So just remove the look the least look up that look for it First rule that's quite easy to do And quite interesting There's an interesting Point that that about the design of of sarcato dl that are if you're using also User line used to do user land and networking Programming or works with demons. It's an interesting API and to take an example of Something that you should not do I Won't go into detail, but that's quite interesting over a beer the second rule is Well, I've shown on the picture that you have this red arrows, right? so if if you already know which I Fp by Fp. I mean interface right you remember the Where you port where you're going to plug your cable into? If the packet is coming through or you're supposed to send it to right? If you already know that why would you lose to to look in all the possible interface in your system? To find an address that you know that is on this Configured on this ip on this interface well second rule just uses local list as I as I named them There's something that might be I don't know obvious for some people But when you work with code that is older than you are Sometime with carry commit messages you end up looking at function that you have really no idea Why they're doing a loop and sometimes we can just kill them So you have to go back in time look in the CSRG archives So why is that here? Why did they wrote that in the first time? Oh, but it's not needed. Well remove that I When I see this kind of chunk. Whoa, I'm really really late When I will be late When I see this kind of shank I say well, thankfully I I Didn't go deeply into protecting those shank because you can simply remove that and Finally, and I will explain why a bit later and If you don't have to use one is just use the interface list if it has to be one Well, just reduce to one So here you have some example of what have been changed some function. You can go look at it Coming to the interface list I'll be a bit trot about that, but what's interesting in the history of of Destructor that represent all the interface that you have on your system When it was what it what I looked when I look at the story of the of the BSD and Code I saw that in 81 Every interface has only one address so you have a perfect match between Looking at your interface you already got your address like I was saying for the for the link your address and actually those function that I Used to iterate over this list We're not named I found but if like interface What's really interesting is that when you look at this code None of this code wants an address They wants to know The interface which other or they want to know if an interface as an address so we are you we have a lot of use less code because This API got written for something totally differently that is useful now when in 85 The structure that I presented before that representing an address got introduced Well, the loop that used to be just iterating over one list of Interface matching addresses That's got Change into a loop iterating over the interface and a loop for each interface iterating over addresses Which in some system right now when you have a lot of interface a lot of addresses is really slow Looking on this list. That's why in 2010 a tree red black triggers introduced to make this look up faster I know an interesting point is the other structure. I was talking about the Per protocol address That's the name of the IPv4 version also got introduced in 85 basically I couldn't find the reason why It's really easier to write code when you know that all the IP address are there instead of all the addresses this list is used in the version cal for the protocol and And this one too that goes to place By there by the red black tree as I presented before the slide When you decide to forward the packet to know is it my address? One interesting point is that when the IPv6 got integrated and came people explain the choice They did in 99 they say we will go we will use the routing table for that to know if the address That's the destination of the packet is our system or not They use basically a hack to do that, but that's Where we are now in open BSD the solution or the evolution of The network hack is to use the routing table for all those operations regarding searching an address Routing table are not really used for that or When not designed for that, but we can use that so what I did is it? Consolidate what I call the loop back hack from that came implemented that to say well if this address is Configured on your system that it's somehow related to your loop back address. I hope loop back address the low zero or something the Consolidation came with an indication with flag. Okay, this route represent a local address So it got a local flag For IPv4 we need also the information of the broadcast Addresses that are associated to your unicast addresses. So we also have this information like we had root to subnet Now with this change we can go to only one global structure. So No problem of career coherency between the structure only one focus that we have to protect Then we have to think about how to use it and correctly use it to be run on multiple CPU and The test that we run in order to choose this solution and that were also confirmed by the paper talking about the red black tree or the paper and That that was written for from the kind came guy that is not slower faster than the actual tree that we are using for looking addresses Since I don't have time I will skip this slide. That was a good example of why you need to change the structure and I will give directly to some related change because I'm here focusing on on the forwarding pass and the global structure but thinking about how to make a subsystem or an entire kernel and I would say mp safe or easier to run on multiple CPU Can lead you to rethink completely the design of of those subsystem of those programs so as I said before Removing the loops of the for the link layer address My mint that we can simply remove the link layer address from any list That's information that I don't have to put in the routing table. I already mentioned that there were many dragon in there so I won't expand the Option that was described in in in in TCP IP volume 2 I guess of so don't roots that you can set on Socket which is defined as used to bypass the routing table is Just ignored on open VZ right now because we don't want to bypass a routing table anymore. We just want to use the routing table We can reimplement it differently, but it's easier to get rid of the Old code and if somebody really needs that just come talk to me and we see what we can do. I doubt it now Now for a reason regarding Dangling pointers and when you try it's really related to what what a tell you talk this morning, right? You try to access the memory of something that got removed or replaced and That is really easy to trigger if you start having multiple processor because one might remove something and the other wants to access at the same time So there is some trick That's that's basically some computer science Solution and one of them was to to to use a big table where every index of interface every every Chunk in this table hold the pointer to an interface, so we don't need to use the pointer directly We just give an index give a token and get back a pointer if the pointer get cleared That means that the object is gone. If not, that means it's here that is Interesting because we already have a lot of pointers everywhere because when this subsystem was written Things were not so plug-and-play. There were only one CPU it was much more easier to maintain currency and Finally, we rip I replace some function that we're using a global buffer To use a buffer pass on the stack That's the last point of this slide Now where we are after all this change. Well It's basically the conclusion of the work, right and we are almost in time That's how it looks like now I don't know if you remember the previous previous scary Representation right we were here and we are here, right? You don't need to understand what's on the slide or what links but It's simpler. It looks simpler now where this is used so you see that you have two rectangle right routing table and The interface list well in the chunk of code that I was Analyzing before well, we are using that And the storming that you are using here or the there So we move from Trigable structure here and basically three here to just one in the world cut pass I'm almost not lying Some bits are not yet integrated in open BSD right and this is what I have in my development Environments now you can look at the code if you're interested in to on the on the mailing list We use to share and to code review that you can even review it if you're not a developer. That's really interesting You can run it can test it There's still there the second point means that is still linked between the interface and the routing entry that that I it's not removed yet, but That's that's a part of the of the removal of the cams hack I was lying when I was saying there's only one look up. I'm sorry With the div that I sent we are actually in the forwarding case doing one look up here and another one here But that's just some culture of link to have only one instead of two Hopefully that will be integrated in five seven Well Depends how many dragon this will find so I hope you will test it concluding We are late, but let's go for conclusion So refactoring 30 years old code is hard But well pretty good story that you know which person is to blame So you could you will be able or maybe some of you on future developer will blame me later for being done Think that are not adapted to shoot to software. Hopefully PSD will still be used now Since and number of people working on this refactoring is me and myself It's quite difficult to get feedback from people. So I find dragons every of those change that are presented break at least one setup It's not a feature. It's not interesting. It's not cool Nobody wants to look at it and when they look at it, they know that will break something. So that's quite hard That's why understanding what you're changing is important and I hope that What I presented here a slide that that can be a complement to To the design of the of the networking stack on the base G kernel is interesting because you have How basically it was in the 80s and how it's evolving or how it is right now Sadly, there's still a lot of work to do and the picture that you've seen are really simple Compared to what's missing. So we'll find a lot of track Oh, I'm too fast. That's what that is. So if you have any question, I'll try to answer them And year ago, I read a paper about the multi path open BSD support and throughout preferences In the end of the paper People say it's very good But it's very dangerous. There are many dragons. I would like to know if it is has changed Something has changed, but there's still a lot of dragons If you want to have more detail about that, I Recommend you to talk with Claudio that is trying to Tamp those dragons, too. I'm not the expert on that subject I'm just here to put more pressure on the subsystem to make it break Actually the the citation on the on the slide is coming from this area of the code So that might answer your question Yes, and if for the questions Do you have any test results after you make these changes? I mean how fast is it now and what actually how long it took to make these changes and You know what what pending changes you do you have you said it will be released in one year from today about Hopefully, okay, it's tricky three questions time the first one was what can you performance testers and the performance testers have I hear to make sure that it's not slower No, not at least because I'm not interesting right now into gaining performances I'm interesting into refactoring the con in Simplificating the code so that we it makes easier to gain performances not do twice at the same time that will be horrible But most of the function that I change Well, most of them some of them. I was talking about Use less lookups. So in particular cases, for example with the car driver You you have performance improvement because you you do less lookups, but that's really Insignificant that's one two persons. It's not the aim of the work, right? You say what I was saying about when it will be integrated, right? and This little slide about where it is right now is a slide that Way how it will be when the defi sent Beginning of the week will be integrated. Hopefully in the in the next weeks or months, right? and That's that's answer your question Any other question? Don't be shy Gone. Let's thank our speaker then. Thank you


The NBA has gone full Oprah. You get a 50 piece. You get a 50 piece. Eddie might even get a 50 piece if we wait long enough. Run it back, it starts now. Run it up, then run it back, yeah.  That's right, this is Run It Back. It is a beautiful Wednesday morning here in New York City. Joined as always, Bum of Us Friends, Stadium Insider, Sean Charania, Chandler P joining us from Mexico and Eddie from across the river. How y'all doing today? It's like it's our Friday. Staying blessed. It is, it is, this is Wednesday's our Friday. We love Wednesdays here at Run It Back. All right, it feels like deja vu all over again because here we go, points were scored so, so many points. Giannis, career high 55 and went over the Wizards. He also grabbed 10 boards, had seven assists in the process. I don't know what he needs to prove, if anything, but did he prove anything more to you last night, Chandler? I mean, I'm with you, he doesn't really have to prove much more.  And Giannis is, he's about as guaranteed as a solid, you know, stat stuffing player you can get. There's nobody really like him. There's no one that size with that physicality.  But it's hard to go and say that Giannis isn't as important to his team as any of these other guys that were putting ahead of him in this MVP race. But, you know, he's quiet, he goes about his business.  And so these are more nights like this, I think we'll continue to talk more and more about him.  He's humble, he's quiet, and he is just unbelievable for the league and for the Bugs. I think nights like last night is where we might view him and take him for granted at times. I mean, 55 points. And what he's doing this year, averaging almost 33 points a game, taking almost 22 shots per game. Those are by far his career highs. He's had to take on a lot this season, especially without Chris Middleton for the most of the year. Drew Hoddy has been in and out of lineups at different points as well. So when you think about all these other star players that Giannis looks around in season, Nikola Joke, Luca Dante, Joellen Bede, the Brooklyn guys, there's a lot of love going around the league. And I think what we've seen Giannis having three straight 40 plus point games is, you know, I think he wants to show people that I'm here too. And I think there is some level of disrespect that we do give at times. But I think overall the performances that we've seen over the last week, I mean, it's just unreal between Giannis, LeBron, KD, Kairi, Joekig, Luca, Donovan. So I think this is Giannis' stamp and really making his mark. I think Sam's is right. I think Sam's is right. There is some disrespect, but there's also a little bit true to the slander that they call it, you know. He does kind of just run and done. You watched the game last night. He is just kind of running into guys and swiping through them and just being overly physical and other teams can't handle that. And it's not the most aesthetically pleasing game. He's not Kobe out there.  But the point is he's just productive as any players we've ever seen in this league, quite literally. And you cannot hate on production at the end of the day. A lot of people compare him to Shaq. I think there's like some early LeBron to him too, where LeBron wasn't relying on the jumper either. He was doing a lot of this. He was barreling through people and getting to the rim. Some of these calls are insane. This carry right here was a little insane. But look, when you initiate and you force all this contact and you force teams to have to match that, you're gonna get the benefit of the doubt because you're the one initiating all that. So it's like, at this point I'm over it. Like, I get the honest thing. I get why people don't like it. I get why people do. And at the end of the day, you have to tip your hat to this production. I'm actually shocked he's never scored 55 points before. But I give him credit because he was really going for it at the end of that game. The game was pretty much decided and he was shooting and running to the rim every time he got the ball after that. I thought he was gonna stay and he gets 60 because the Wizards had nothing for him at all. I mean, how could he not go for it right here? This has been a week in which all the cool kids are just scoring a bazillion points and he's right there at the brink. I figured like, why not? I won't put my name in that conversation for the week. But he did have a quote, which speaks to my heart. Here we go. This is straight from Yanis' mouth. I wanna get in a position that my game is boring. I just do what I do and people don't talk about it because it becomes boring. I do it every single night, but I don't get bored. The greats, the best players never get bored. There's one name that should come to mind when I read those types of words about an NBA player and it should be Tim Duncan. And if it wasn't, shame on you. But what he just described is quite literally the greatness that is and was Tim Duncan in the day, Chandler. So if you had to say it, could you call Yanis a modern-day Duncan or at least a wannabe modern-day Duncan?  He's not getting TMZ and he just goes about his business and he wins and he dominates the game. I think Yolkitch is more like Duncan, just how he played the game so beautifully I've never seen Tim Duncan do a win though, like Yanis did last night. And so Yanis isn't boring.  He does and he's funny and he's silly. But he's high octane and he's explosive and he's fun to watch just from a physical standpoint. Besides the brawn, there's never been like another wing that literally dominates the game like a shack did like Yanis. So I can see it just how he handled. He doesn't train with other guys in the off-season. Like he's very, he kind of goes back to Greece and you don't see him. And like I said, you don't see him in the news. I think Yolkitch is more like Tim Duncan, just the way they play the game and kind of boring and you look up at the Statue Street and he has 30, 15 and 10 and they're all going to go down as some of the greatest players of all time. But I wouldn't call Yanis boring quite yet. He just can't shoot. Yeah, Timmy would have never went on a marketing campaign like this. So it sounds like some Tim Duncan stuff, but he would have never sat on the podium and be like, hey guys, I'm working hard. Look, Timmy would have just worked in one title in the hand of his business. So like, I love Yanis. I love the kind of aloofness and the personality he brings and he's up there reading dad jokes and he's got the belt with his wife and all this stuff. And it's cool. But it's also like crazy artificial and much like LeBron or even Steph, he has this personality he wants us to have and he keeps telling us how great he is and he keeps telling us how he's not friends with anybody, but we've seen him at parties. We've seen him working out. We've seen it like it's cool, bro. We appreciate your game. Like we all took your side against James Harden. We all said, yo, James is tripping. It's great. You don't have to come out there every day and do this to us, just play. We enjoyed the windmill. We enjoyed the 55 points. You don't have to tell us, oh, I'm boring. You are kind of boring. You don't make jumpers. Like you don't really dribble that well. Like there is some stuff that we don't like and whereas we watch other players like Kyrie or Steph and they're way more aesthetically pleasing with their games, that's fine. Like you have a title, you keep winning awards. You might win a title this year. Just keep winning, bro. You'll be a legend. You're a legend now. It's great. You don't have to keep telling us. Did you just wrestle Wilson, Yanis? I feel like you just wrestled Wilson, Yanis. So we just haven't felt like it. I would never go that far with it. Yanis is way more cool than Russell Wilson. Let's not do that. That's slander. That's absolute slander. I know, it's become like an insult.  No, that's fair. But there is something to be said about the boring thing because when you think a Bucks final, it just doesn't get the heart pumping. But this week has been, it's been insane and the seal's been broken. So don't think we're going back to a more normal time. But the points scored this week have been absolutely insane. Of course, we had his 55. We had the Donovan Mitchell 71. Luca's had 50 a few times. More 40-point performances and a person can count. I don't even know, do you question the scoring surge? Do you like the scoring surge? Do you love the idea that there is no going back from this now, Chandler? Nothing, it's great. I think teams hate it because that means the defense is not what it should be or it should be at. When you watch an NBA game now is you're watching for the offense and teams that have good defense. It's usually teams that have very good records and are contending for a championship. But these guys now, they're so talented and they score in so many different ways. And that's why when you look at Giannis, he's not making threes. He's not scoring from outside the paint a lot of times. Like he went 15 to 16 last night from the free throw line. That's probably the most impressive stat that he did last night because with all his struggles and taking his time. But I think for ratings, the scoring is awesome. Like we're all talking about it. Social media is blowing up.  Like I think my career high was 34, 36 or something. And dudes are like, damn, you're averaging that now. Like it is just through the roof. And I love it for the game and I love it for the fans. But yeah, at some point, teams are going to have to start locking up and clamping down and playing some defense. So this is my theory. When you look at these games, games go on and Luca Donchich has this game, Don Mitchell has this game. You don't think Giannis and these other players are watching their peers? Like I think it's becoming a competition. Guys want to one up each other. We saw the other night Giannis shot 39 shots in Chicago. He had 40 some points. Like he was trying to go one up Luca Donchich in that game. I think he was clearly shooting for it. He came up a little bit short. But I think it is good for the game. It's good for competition that guys are seeing how other players are performing. They're seeing their peers. They're seeing their rivals and they want to one up each other. And I think they want to have their moment as well. And I think that's only good for the game. That's only good for competition. It's only good for the league. Yeah, I think this is a result of the style of basketball that has become uniform now. And they call it Helio Century. Can you look at the list of those names? I think only Jeremy Gran probably wouldn't qualify. But even then he has the ball a lot. But we're doing a lot of standing around and letting one guy dribble and create his own shots and work the pick and roll and figure out what works best for him. I think it's fun. I think it's amazing for the fans. It's amazing TV. Again, yesterday or the other day walking out the arena and going to go 71 on my screen. It didn't make no sense. So I think it's fun. And I just think it's a result of the way the league has went. It also kind of makes me appreciate Steph Curry a little more because he's somebody that does make it happen off the ball and could drop 60 on you. And just a little bit of different from the way the other guys are making it happen. But it's fun. How could you not enjoy a guy dropping 55 points and just going after it at the end of the game? Kind of like Donovan Mitchell did. Kind of like Luka Dončić does every night. And this is what we tune into the game for. I'll tell you why. Because like with anything else as fans and humans we're going to be bored with this in a second and then we're going to turn on it and then be like, wow, what happened to defense? It's coming. I know it's coming. There was another game last night, by the way. If I didn't know any better, I would have thought I was drunk when I was reading this last night as I'm watching the ticker. But thunder with a franchise high, 150 points. That's without SGA, crushing the Celtics by 33. They had seven players in double figures, five that had over 20 points apiece. I don't know what this does to my parlay, by the way. We'll talk about that later. But Chandler, what does this mean for OKC? Also, aren't they supposed to be losing? I mean, yeah, this is weird. Like you said, I was drunk. So that's why I thought it was true. It shows the potential. It shows the talent. It shows that these guys have set up their future very, very well. And they have a lot of pieces to grow with.  This is without Jeff Holmgren, who hasn't played this year, who's not playing, who's 20. Josh Giddy is an absolute hooper.  You know, Jalen Williams, big, strong guard. He's 21. Isaiah Joe, he's 23. You know, it is nuts how young and how these guys play the right way. And look, they're not going to win a lot of games. They're still way behind. But when you start growing with these guys and if you keep this court together, they got something going.  That guy's 23 years old and he's the ultimate blue guy. When you get these young, scoring, facilitating guys around him. So I love what they're doing. A game like this is shocking to me for Boston because they have a really good defense and they're giving up, you know, 150 points to this AAU team. It was very, very shocking. But I love what they're doing. I love the youth and they have a lot of assets going forward. You throw a couple of bets in there and you throw in the number one pick. This guy's future is very, very bright. Yeah, the Thunder team, where if you watch them, they're really well coached. They don't always have ability. They make some young mistakes, but they're really well coached. And they compete every night. They're 11 and nine at home. You would think their record is way worse than it is at 16 and 21.  But they're out there competing every night. And like Chandler said, they've built up their future really well. They have another great pick coming up this year. And who knows where they go from here? And as they continue their tank and they really get into it later this season, they mess around and get two to three. They get one of the Thompson twins. They get scooped. They have a lot of opportunities to really take off. And, you know, even with that great rookie class next year, they might have the rookie of the year already in Chet Holmstrom as they wait for him to he'll look. So they're set up well for the future, much like Orlando. And the league is in good hands, man. The league is a really good hands going forward. I feel like the thing that really strikes at home is there's just not there aren't teams used to be there a handful or more of teams that are just those are wins for a certain amount of teams, right? Like you just go in and you know that that's going to be a W. And it just doesn't feel like that this season more than ever. But Jalen Brown in the loss had 29 points, as you could imagine after the game, not very happy. Here he is.  That's what happened. You come out, you take it for granted. That's what happens.  We pick and choose when we want to play. We wasn't connected. Didn't have each other's back out there. You know, no help side defense. We didn't guard our yard. And those young boys over there came out and they made us look bad. They embarrassed us.  I just love when he talks. I listen to Shams as far as changes for the Boston Celtics. I guess over the last month, what have you seen? I mean, this is a team largest loss in the Jalen Brown, Jason Tatum era. So that's not a good look, 33 point loss, but they're five and seven in the last 12 games, they're nine and eight in the last 17. So I am I think I think you have to look at it. You have to look at Jalen Brown's comments and be a little worried kind of where this is going. But I think a game like last night is a good example. And I think the last month probably is a good example in terms of the Ema Udoka effect. And that was always the leadership that he brought. The way that they were able to battle through adversity in those moments, they clearly missed that to an extent. And I think you can see that in the game last night. You can see that over the last several weeks is the Ema Udoka factor, how we impacted their defense, their leadership on and off the floor. Jalen Brown just spoke there about having each other's backs. Ema Udoka was the guy that filled those gaps. So we'll see Joe Missoula's there. He's going to be there the rest of the season. How does he continue to get his imprint there as a leader around this roster? Yeah, I think Sam's a spot on. A lot of this is going to fall on Joe Missoula. This is a team that just went to the finals. One of your best players is up there basically saying, you guys don't give effort every night. That falls on the coach. And this is a team that we know is championship ready. They made some improvements on the fringes as well by how Malcolm Brogdon and now they've got Robert Williams back. They should be a better team than they were last year. Their defense should not have fallen off in the way it has. Their offense regressed to the mean in December and now it's in January. And they got to turn this around. Sam's mentioned it a week or so ago that, yes, they started out rough last year and then they turned it around. You don't want to make a habit of that. You don't want to make a habit of hitting a switch when the rest of the league is going. The East is strong this year. And if they keep it up like this, they won't be the favorites out there for too much longer. This is a terrible loss for them on the road. And I'm happy Jaylen said it because he has to know it. They know it in that locker room. There's no reason to lose to this team. They're healthy. They have all their guys. They went out there and lost to a team without their best player in embarrassing fashion and the worst loss that they've had in this era of that team. And they only scored 150, but they could have scored way more. I think they had 130 at the end of the third quarter. So that's embarrassing for a team that hung their hat on defense last year and apparently can't do it again this year. Yeah, and there's got to be accountability here and it's got to be on the defensive side. You have the best duo in the NBA. They're going to score points, but you also have the roster and the talent to be a very good defensive team that we've seen from them before. But we saw lapses like this a couple of weeks ago where they lost to the magic twice in a row and I don't know if it's a, you know, kind of letting your guard down or a maturity thing, but like we just hit on the NBA is too talented. The guys are too deep right now. The teams are too deep. And like we said, there's no real easy game. You look at the Rockets, the Magic, the Thunder. They can beat anybody. And the Thunder showed us last night that there's no more cakewalks. There's no easy games. And Boston's got to look themselves in the mirror after this and grow from this, get better and really lock in defensively because they have the duo. They have brogged it as a great point guard, but they have the pieces to be a very, very, very good defensive team and they're just not showing it right now. Before we move on to the night cap last night, Eddie, I want to ask you very quickly. When you see Boston lose like this, knowing they're right around the corner for your Brooklyn Nets, are you excited or worried? Because I feel like this could be a catalyst. It's so embarrassing that they might go on a tear. I just want to ask. When I smoked with Jason and Tatum before the last Nets in something's game, he was like, yeah, we lost yesterday.  So yeah, I get a little worried. I mean, they're going to show up when they come to Brooklyn for sure. So, you know, whatever they're lacking right now, they'll be locked in that night. Yeah, that's just much more exciting. All right, the night cap. It was a wild, wild finish. Take a look. Here comes Fox has to switch market and guardian. Shot game clock down to four. Fox penetration. Fox layup. Yes. Deer with 0.4 on the clock. No timeouts for the Jazz. Marketing at the buzzer. And then it was called off after a review, Chandler. How bummed are you if you're marketing today? Come on. I mean, I had to watch this a couple of times to make sure they were right on the review. This looked like he got it off, but they played well enough to win this game. But this is frustrating just because this hot start that they got off to is colder and colder. And they're currently in the 10 seed and they're one game out of the play. And so this is a devastating loss. But also, if you look at the Deer and Fox ISO there at the end of the game, first of all, he's left handed and the double team is coming from the other side and Lori market and lets him go away from the double coming from the free throw line to a strong hand. That can't happen with the game on the line, especially with help coming. You've got to force them to the double team.  Unfortunately, I didn't count. But yeah, I'm pretty bummed today just because this is when that got away from us on our home court. Yeah, I'm old enough to remember and from I'm old enough to remember and from Sacramento. So I remember the old like Chris Weber, Carl Malone playoff series. They played it back to back years. And once upon a time was a rivalry for what story franchise. But yeah, you got to be bummed after that. You could kind of see it live that it was ladies are still a great shot. But I'm with Chandler. You got to look to the defense. They targeted Lori marketing on that play. They ran a switch and got him and he shaded him left the whole time for whatever reason. And you know, shout out to the jazz coach sending over the double because he knew it was coming. But Darren Fox made it look easy. He's been clutch all season. He's really been clutch his whole career but even more so this season. And that's a big win for the Kings. They had a real risk going on a slide, handled business there. And man, they're looking like a playoff team. It's jumbled as the standings are out there in the West. They're looking like a playoff team. They got their tandem back with DeMontes playing with the brace as Shams reported. And he looks like a monster. It's so weird to see two teams win a trade. But that trade for Tyrese Aliburton, you can kind of get them out of the air in Fox's way. The air in Fox probably gonna be all star this year and you get DeMontes Sabonis who's been your second best player and been your anchor in many ways on offense. The Kings look good. They're squeaking these out. And these are the wins that matter.  And they're lighting a beam and they're getting excited out there in Sacramento.  Like the way he's playing right now and the way he's scoring in the fourth quarter, like to me it was masterful what he was doing last night. That mid-range shot, it looks like it was a couple of years ago where he was a fringe all-star. Last year you could tell he took a little bit of a step back. He's put in the work in the off-season, 22 points in the fourth quarter. He's been a guy that I think is like you said, an all-star type of player this year. There's no question. He was the best player on the floor last time. This Kings team, as long as they remain in the playoff range they might even get two all-stars with Sabonis in the way he's playing. But definitely at least one when it looks like it might be DeFox. Look, the Kings playoff drought, and you're right Eddie, I'm old enough shockingly as well to remember the good old days when it was nuts to go to Sacramento, but their drought is the longest playoff drought. It's 16 years. They have not been in the playoffs in 16 years. The next closest team is Charlotte, and that's only six. Chandler, it is time to do some predictions. Bold takes if you will. Are you going to guarantee right now today Kings playoff appearance this season? Yeah, I'll guarantee that. Is the play in counts as making the playoffs? I mean, yeah, I think it counts. Yeah. No, playing doesn't make the playoffs. Oh my God. You gotta make the playoffs. Okay, fine. We'll go with Sean. Yeah, I'll still guarantee it. You know why? Because they do have two really, really good players. They have a great rookie. They have an awesome coach who's kind of changed that culture around with them. And as jumbled up on the seedings are, they still have a good cushion to drop out. And they're like one or two games out of getting home court in the Western Conference. So I love their team. I love Kevin Herder. He's been an absolute, you know, sniper for them. Harrison Barnes, he's been doing it for years. He's so solid. Davion Mitchell, they have a little bit of everything. They have multiple ways to hurt you. Like I said, they're well coached and they have two absolute stars that are going to carry the load. And they're young. So they're going to be around for a while. They're going to keep getting better and better. So yeah, I will, and I'm pretty good at my predictions and my picks. Obviously. Yeah, guys, speaking your convictions. Now I actually feel bad for Sacramento. We just jinxed the heck out of all of them. By the way, I don't know what their beam budget is Eddie, but if they do make the playoffs, do we add another beam or do we stay with the single beam? I think they got to up the beam budget. I don't know how you change that at that point. Would you add another color or whatever? But if and whenever they do make the playoffs, there's going to be a celebration out there. So long as you're out in the four major professional sports in America, thanks to the Mariners making it the playoffs this year. So yeah, it's a little embarrassing. I mean, they've been a bad franchise for the better part of two decades at now at this point. And you need these wins out there. They fought really hard to get that arena to keep that team and have done almost nothing since then. The air box is kind of their crown jewel. Like sounds mentioned, they drafted him number five overall. He there was rumors he wanted out a few years ago. Sounds are no better than me. I don't know. Even when he signed with Clutch earlier this year, people were like, yo, is he going to ask out? That's the clutch move. And he's making it a home out there. And if he takes them to the playoffs in Sacramento, they will put your number in the Raptors for something like this. He's going to be hero. He's going to be hero. Eddie G out in the streets partying soon. So yeah, let's get another beam out there for the playoffs. I think this is a good idea. Eddie, are you going to move back to Sacramento if they become the hot team? He's going to low sack. It's OK. It's OK. We all go home. I'm going to visit. I'm going to visit next week. And that's more than enough for me. I'll be right back, guys. That's your time limit. I totally get it. The window is small. My least favorite thing in the whole NBA, that's our next topic. It's the damn two minute report. What is it and why? But the one from Monday saying now that they did miss the Jared Allen travel, were 12.1 seconds to go. And then, of course, the big story was the Donovan Mitchell 71 points. But now they are saying, of course, he did commit the lane violation in that play that was ultimately what sent it into overtime in the first place. And then that's how he got the 71 points. The Bulls knew this, but then they have to sit through the added insult to injury of the actual report confirming it. I guess first on the 71 points, Chandler, do you think that these now missed calls take anything away from what Mitchell did that night?  This guy was unbelievable. He put on one of the greatest performances of all time. And he had a historic night. That, you know, sure, take away two points from him for the lane violation, which we never do. But no, he was still unbelievable. That building was rocking. My whole thing with this is the NBA and the, first of all, I like the two minute warnings. It exposes the reps. And I feel like they should be held accountable and they're missed calls. And they should be fine just as the players are. And they're not perfect. And that's OK. Listen, they're going to miss calls.  Because no matter when you blow that whistle, half of the court is pissed at you. So it's never going to be perfect. But review it. If there's a play where it's this magnitude and this coming down to the wire of the game, they review everything else. They review a block or charge. Why not just sit there and stop the game, review this, and make sure you get the call accurate. These are two huge blown calls. And if I'm Chicago, I'm pissed. Yeah. Yeah, the Bulls have had a few of these, though. Like, they've gotten holds on a few. I think there's been at least three or four this season. We're at the end of the game. The two minute report comes out. And they could have won the game if not for a missed or blown call. But I think that night, a couple of nights ago, that was obvious that was apparent. I said yesterday, I was looking on Twitter. You could see screenshots of people pointing at Diamond Mitchell coming across the line. As the ball is not even close to the rim, it's still halfway through. So listen, it's a lane violation, no question. And I think if the refs could review it, they probably should have. If you're able to challenge it, I don't even know if at the time the Bulls had a challenge. But that's a tough way to lose. It's unfortunate. I don't take anything away from Diamond Mitchell's game, though. I mean, he can't control the refs. The performance he put on, he's not to make those crazy shots. So that's on him, for sure. Yo, Shoms, what is the threshold for a do-over? I remember there was a heat hogs do-over. I want to say like, 0-8, 0-9. That's how I'd be feeling if I was the Bulls. It was like, we got to run these final eight seconds back. I need this win in the win column. The two minute report, it's frustrating because yo, there is a hint of accountability there for the refs. But there also isn't. Nothing changes. We know these calls are bad in real time. The refs don't answer for them in any way. They still get assignments. It's like it's just twisting the knife for the losing fans and the losing team. So I mean, I guess it's cool to know, but if they're not going to redo the final three seconds and just let the Bulls inbound and win the game, then who cares? As far as the first question, yo, the refs called it the way they called it live. He still scored 71. I saw the buckets. They still count. So it is what it is.   But if they missed the playoffs by one game and they have to look back on this, they should look back on letting him score 71 more than letting him get that free throw. And I hate when coaches and guys say, oh, one player in the game doesn't impact the game. Because I understand the theory behind that where we could have done other things leading up to that to not be in this position. But no, we are in this position. And now outside people like the referees are blowing the call that directly impact the outcome of the game. So I understand that these guys could have done something different and not been in that predicament in the first place. But a call like this, let alone two calls to lose on the road. Like, no, that's not fair.  Like, I'm pissed from Chicago. I hate the two minute report because you already know you were wronged.  Like, to me, it's worse.  And I hope they figure out a better way to do it because it would just piss me off even more than I already was. And that's my rant for today. Okay, that's all I got. We're gonna take a quick break right now. We're gonna get the latest on Kelly Ubrey, Junior and Zion. Man, do we wanna know more about Zion? Shaum's with all of that when Run It Back returns. Run it over, run it back, yeah, yeah.  Welcome back to Run It Back. This is the part of the show where we get the Shaum scoop and I hate it because the first, I mean, it's not a great start to the scoop today, Shaum. You got some news on Kelly Ubrey? Kelly Ubrey will be undergoing surgery on his left hand. He has a torn ligament and he's gonna be out four to six weeks. The hope is that he's gonna be back at some point after the All-Star break in mid-February. He's been the most consistent hornet all season, career high, 20 points per game. He is on an expiring deal and that made him a valuable player across the league. The guy that other teams were looking into to potentially trade for, but this is a hornet's team that's near the bottom of the East. They're one game out for the worst record in the Eastern Conference and I think a lot of teams are gonna be looking into them and seeing over the next couple of weeks, which direction do they go? Do they start selling off expiring players like Mason Plumlee, Ubrey, Terry Rozier? So this is definitely a team to monitor a tough blow for this hornet's roster. Yeah, that was a tough four to six weeks is a bit of time. This next one is the one that I think we were getting too excited. We were loving watching the Pelicans, Zion especially, but all right, talk to us about him. Three weeks, this pretty much takes you right up until February and at that point, just knowing the way the Pelicans have operated, how cautious they've been with Zion Williamson last season, this year. We'll see exactly when he's gonna be back just cause he's gonna be reevaluated at the end of the month. Doesn't mean he's gonna be back, but I think there is hope that this is not something that's more serious. Obviously the worst case in the hamstring is that you ruptured fully, it wasn't that, but with Zion Williamson, he's the prize possession of this Pelicans organization. They're gonna be very careful with them and I expect them to take a very cautious approach to this. That one bummed me out, Shoms.  All right, Wednesday's our Friday, which means we're saying goodbye to you until Monday, my friend. Enjoy the rest of the week, enjoy your weekend, stay safe. I know we're gonna stick with Pelicans here, Chandler and Eddie, because it's panic button. That's obviously bad news about the Zion injury. Of course, Brandon Ingram, we haven't seen in forever. It literally seems like the entire season been out since November 25th. And there's no timetable, which is the bizarre thing on that. After tonight, they have five of six on the road and they're gonna face some good teams. Nets, Mavs, Celtics, those are just a few in that stretch, Chandler. Panic button time on this New Orleans team. Yeah, I'm hitting the panic button just because this team is this deep. They are young and they have a lot of talent, but they're only gonna go as far as Zion and BI go. And if they're out, who knows? And like we always talk about the Western Conference, there's, you know, there's six solid teams that are right there. And I can definitely see the Pelicans kind of sliding right out of there. And they do have vet guys like CJ and Balanchunas, Larry Nance mixed in with those young guys that kind of carry the load. But this is a whole different dynamic. This is a whole different team. And we always talk about the health of Zion and how it's physically possible. And one of the smartest guys I know in the medical field told me when he was in college, there's no way that this dude can sustain that. It's physically impossible and something's gonna give. And I hated that because he's so good and he's so talented and he's so fun to watch that the NBA is better with Zion playing. And this is just one of those things where again, a hamstring is nothing to dilly-dally with. And when you have that size and that explosiveness, it can tear or get worse or just kind of, you know, re-agitate it at any given minute. So I'm panicking just because our team and our future are these two guys and they're gonna miss a lot of time. Yeah, if there's a smaller concern button, I'm probably hitting that, maybe not panic just yet. I think this team can tread water for a few weeks. Hopefully they get BI back. I know the toe is tough to rehab from and you just need that for everything you do on the court. But I'm with Chandler on Zion. It's really tough to watch this because with that body type and the way he plays and his explosive as he is, look legs aren't meant to do what he does with his body. He's not meant to jump as high as he does and land from that high as often as he does. And his entire game is exposing his strength. So he needs that. He needs to be 100%. I only say concern because if they get these guys back in time for the playoffs, that's really what their aim is here. And if they can maintain some seating, they'd want to have home court going against the West and the juggernauts they have out there. But if they can get in, they're gonna be a tough out for everybody. And so you wanna think big picture in long term. It's gonna be big for CJ McCullum in the next weeks, months, whatever it is until these guys are full to carry that offense and to really keep them going. But like you said, tough schedule coming up and we're gonna find out about the role players on that team over the next few weeks. I think, you know what this means, right? It's time for my MVP Jose Alvarado to really step up and show the world what he's made of. And I'm very excited about that for him. It is time. Moving on to the Hawks. I don't know what the preseason expectations necessarily were for this Atlanta team. And we've talked at length about what is going on seemingly internally between Nate McMillan, Trey Young, some days they look like they know what they're doing out there, some days they don't. But Eddie, I'll start with you. Are you hitting the panic button on the Hawks? Yeah, when the coach is debating if he should retire mid-season, we're hitting the panic button. When the star player is saying, yo, I'm not playing the day coach, I don't care. I'm hitting the panic button. When both of those things are happening and you're losing games, yeah, there's a ton of panic about, I mean, there are only one game up in the playing. So they could quickly fall out of that. It's the pools and the Raptors behind them. And those are two teams that want to win games. They want to go to the playoffs. Yes, you definitely need to panic. They sprung big for the Chante Murray this summer and it gave up a ton of draft capital. They've been trying to shop John Collins for years it feels like to fix whatever they have going on over there. They just don't look like they like each other. That loss of the Warriors was terrible in a hundred different ways, but they're just not. When we talk about the Nets having fun and they're on a 12 game win streak, you look at the Hawks on the other end of the spectrum and those guys look like they're actually going to a day job and they hate it. So yeah, I'm probably hitting the panic button a few weeks ago, it's even worse now that this lost seven of their last 10. Yeah, yeah, I agree. And besides all the drama with, you know, you never really see a coach contemplating, resigning in the middle of the season and the star player sitting out and always having issues and second best players been on the trading block for three years now with John Collins. But the teams behind them, the Wizards, the Bulls and the Raptors, they all want to win and they're all just as or better than the Atlanta Hawks. And the Hawks have had two kind of fluke game winners by AJ Griffin. So they haven't played well. They made the big move for D'Aunty and Murray and it just hasn't panned out. Trey's kind of taken a step back this year. And so I'm hitting the panic button just because they're not a contender. They're not going to compete for a championship this year. And they might go on a skid here, not even make the play in. So they're on a slippery slope here and I'm definitely hitting the panic button. Yeah, it seems like the panic button might have been hit a bit ago. This next one is weird to me. DeAndre Aitin, all right? Not really shutting it down. It's the last two games, averaging eight points, two and a half rebounds. And as many blocks as Eddie, which is great for Eddie, except for that it's zero in two straight losses. But here's the thing about it. That's not even what we want to focus because there's like this video of him before, I believe a Nick's game. And he's practicing these underhanded half court shots, like things that you would just do when you're messing around. And he does that a lot, actually. So are you hitting the panic button, Chandler, on DeAndre Aitin? What is he doing? Yeah, this is confusing. I don't know if he's just like kind of an immature kid or what he's doing, but there's a lot of issues surrounding this guy. And I don't personally know him, but everything I've heard is if there's one issue on the Phoenix Sun, it's DeAndre Aitin. And I don't know if that's the most fair thing to say because we don't know everything, but the moral of the story is he can play it. And he is arguably their second best player with Devin and him. And he's a cornerstone to their future. But all of these other stuff, all these other antics, the beef with the coach, the beef with bridges, it's not good. It's not healthy. And the Suns, I feel like they've been fighting all these distractions all year long. And this goes way back to the off season with DeAndre Aitin and he was number one pick. He should be dominating. He should be an all star at this point. And he's not. And the Phoenix Suns kind of missed their window and they're sliding and they're unhealthy. So everything's just exposed right now because they're losing. And it's kind of falling on DeAndre Aitin as that guy because a lot of the drama negative news is kind of centered around him. So I'm not panicking in a weird way because he is so talented and so good in a critical piece but just enough with the outside noise and the distractions and the antics. Like just play basketball. Yeah, I'm not panicking either but that's just because he's very tradable. I think it's January 15th. He's eligible to be traded after signing that contract or a signature for agency this summer. And he actually has to agree to it. He has to, you know, it has to come be into his terms. But that's fine. You want it out. You wanted him out. You re-signed him for whatever reason. Workout trade. You clearly don't want him there. It has got to be frustrating for that team. They drafted him number one overall. Two picks ahead of Luca Donchis. So as much as we ragged, it's the Kings for picking Marvin Bagley over Luca. The Suns pick DeAndre Aitin. And it wasn't that controversial pick at the time but man, you know, five years later it's looking a little crazy. So yeah, only no panic because you clearly want him out. You have a route to get him out. It's time to get him out. And yeah, it's tough watching him out there. And they miss Devin Booker. And ever since Chris Paul's come back, they've been on a bit of a slide. We were talking about this team a month ago like a title contender. And things happened fast in this league. That's it. The thing about perspective, when they came into San Antonio, they were on that tear and DeAndre Aitin was doing those same pre-game practice shots and the rest of the team was dancing and they had all the, and it was fun looking. But then it's all about reading the room and having a little perspective. And that's interesting that Chris Paul came back and they went on a slide, Eddie. We should talk about that more next time. Next up, the consensus number two overall, just threw a dunk down that might make you go, Victor who, when run it back returns. So this is Scoot Henderson who is by all accounts going to be the number two pick after Victor Vinyama, easy for me to say. That's a grown man dunk right there guys.  And I'm sure he's kind of loving the Victor stuff because it puts him a little bit, I don't know, less pressure. Am I wrong in thinking that? Does he have a case to be number one, Chandler? No chance and this kid kept playing and he is a Hooper and he's gonna really, really help a team. And I think as much as Victor is number one, Scoot is number two. And I think it's land sizes. I think Victor can tear his ACL tonight and he'll still get drafted number one. This kid's a freak. He's a unicorn. We've never seen a prospect like this good. But on the flip side, Scoot Henderson can play. He can score the basketball. He's got a great build. He's athletic. He plays smart. He can play point. And that dunk last night was extremely impressive. But it's just, no, this Victor is too big. He's too long. He's too skilled. I do love the fact that they're both playing against pros and grownups and they're not in the college ranks or high school. They're competing at a very high level and they are dominating at a high level. So whoever gets the one or two pick, I'm honestly kind of stoked. It might turn out to be the number three pick. Ends up happier than the number one pick because this kid could end up being that good. And you never know with a big guy like Victor with his body and his health. So I think this kid's in a great situation where there's not a lot of pressure. Everyone's talking about Victor and this kid could easily come in and be better than Victor early on in his career. Yeah, I think we might see that. We might see him win rookie of the year. We might see him be the better player for a few years as Victor kind of assimilates to this style of play and the physicality and on and on and on. I think if you're picking Scoot first, if you're even thinking about it, you're basically banking on the potential over the help. And it kind of reminds me of Kevin Durant versus Greg Odin in that season where, yeah, if you didn't want Odin, it was because of the health. And we saw how that played out. It's played out that way a few times in draft history and you just never know.  I think Scoot is gonna be great. I think it's an archetype that we already have in this league and that makes sense. But the potential of seven, six, wing, who can dribble, who can do all this stuff? It's just too much to overlook. I just cannot see Greg Popovich probably deciding to not take all of that and see what that does for the next 10 years. But Scoot is that good. He won't be 19 until next month. He's that great. And whoever gets him at two, they won't be disappointed either. And you can do a lot of things with a dynamic point guard who can play make the way he can. And it was that athletic. But I just cannot see a team going against the grain here. You gotta see what you get with Victor Limbiava. I mean, look, I think the Scoot's in the best case scenario because the pressure is so much less. But then you get to have the added motivation of always being referred to as the number two. To me, whoever gets Scoot, I'm with you guys. Like they might actually win that. And it's crazy to say now. But I also believe in this pressure situation being a little bit too much for kids. Yeah, it's almost easier to get the decision taken out of your hands, right? You're at two and he falls to you and you go, cool. I remember with the Celtics, they wanted Jason Tatum, they were gonna take him one overall. They ended up trading back with Philly. And they said then, we wanted to take him one. We were just a little worried. Mark Alphonse was the clear consensus, number one overall pick. We saw how that went. Sometimes you just gotta pick the guy you think is better and go with that. But man, you'd be hard-pressed to take anybody over Victor. If you don't have to, if you pass on Victor number one, that's how you get fired. If he turns out to be anything what they expect him to be. So if you get the normal pick, you have to, but there's no pressure on the number two pick because this kid's just falling right in your lap. Yeah. It's a good spot to be in. Taking a quick break when we come back, we won our parlay, kind of. I'm gonna try to explain that in my best possibility when we run it back, returns. Run it back, yeah. Run it over, run it back, yeah. Oh yeah, we're back baby, the parlay. This is last night. You're still winning guys. You guys got yours both right. My dude, SGA, I had under 29 and a half points, didn't play technically zero, yep, won that. But the parlay, it just dropped in value a little bit, but a W to W and that just means that we're on a hot streak once again. So let's just go into the weekend feeling really good about ourselves and our self-esteem. Eddie, what do you have for us for the first leg today? Hold on, Michelle. Let me tell you, five of those kids had over 20 last night. You don't think SGA would have had 70 last night I don't, I don't. And as far as I'm concerned, I'm still hot, still hot. Zero is less than 29. I think we won. We got to complain to somebody. We did, by all betting rules, we won. I'm going with Stephen Adams, under 14 and a half rebounds. This is an astronomical number. I actually went to go pick the over because I thought it was gonna be like 10 and they're playing the hornets and the hornets just don't care about basketball. But 14.5, that's insane, I have to go under. Okay, he sounds good, all right. All right, Chandler, he sounds sure. Yeah, I like the Pacers plus seven and a half. I mean, that is a lot of points. Philly has been so up and down. And I like the way the Pacers play. I got to take the points here and go Pacers plus seven and a half. Ooh, I have big feelings about that one, Chandler. I'm not gonna lie, my vision came out. I'm just going like straight money line today. Now that I've mastered what that means, we're the kings. So there it is, we're back up. 20 bucks, we'll win you $134. Frankie Coffee Cakes, that's our own Chandler from Bronx Tale, thank you so much. And that's gonna do it for us on this beautiful and wonderful Wednesday. So guys, enjoy the rest of the week and the weekend. I'm assuming, I don't wanna know what Chandler's plans are but they're better than ours Eddie and we know that to be true. That's gonna do it for us. We'll be back bright and early Monday morning. We're on Monday, Tuesday, Wednesday, 10 Eastern in the morning. Don't forget, run it back.


So there you go, going from hand-drawn, beautiful art, if I do say so myself, to working website. Hello everybody, welcome back to another AI video. In this one, I wanna talk to you about the GPT-4 live stream today. And in particular, one part that really stuck out to me, and that was the part that you saw at the beginning there, which if I understand this correctly, and I probably don't, so please correct me in the comments, but it appears that you can turn a picture into a working website using GPT-4. Now, I'm not sure if that's what I saw, or if I saw something totally different, or if there are a bunch of intermediary steps that I maybe didn't see, but from what I can tell, it looks like I need to add drawing as another skill set. I need to become a good drawer. I draw like a four-year-old. So again, I don't know what the heck I just saw there, but please guide me in a direction. I'm gonna put the whole video of this part in there. It's like a minute and a half long or something like that, that'll come at the end of this. But I mean, for me, my feedback is it looks a little bit gimmicky, and I don't see this as an actual use case, but I could see a case where maybe someone created a landing page for a startup or a new business, and you drew it out and then take a picture and then put it into GPT-4 and off you go. I don't know, but please leave your thoughts on this. Let me know what you think about this. Is this, did I see what I think I just saw here, or what, I read the Twitter posts, and I read all sorts of comments on Twitter and stuff, and everybody's all over the map on this from, this is the most amazing thing they've ever seen to, this is utter garbage. We've been able to do this for four years, et cetera. Anyways, watch the video. Let me know what you think, thanks for watching. So I'm gonna show you one more example of what you can do with this model. So I have here a nice hand-drawn mock-up of a joke website. Definitely worthy of being put up on my refrigerator. So I'm just going to take out my phone, literally take a photo of this mock-up, and I'm going to send it to our Discord. And here we go, technology is now solved, and now we wait. So the thing that's amazing in my mind is that what's going on here is we're talking to a neural network, and this neural network was trained to predict what comes next. Played this game of sort of being shown a partial document and then predicted what comes next across an unimaginably large amount of content. And from there, it learns all of these skills that you can apply in all of these very flexible ways. And so we can actually take now this output. So literally we just said to output the HTML from that picture, and here we go. Actual working JavaScript, filled in the jokes. For comparison, this was the original of our mock-up. So there you go, going from hand-drawn, beautiful art, if I do say so myself, to working website.


Bismillahir Rahmanir Raheem and Aslanikum everyone. Welcome back to corporate governance. We are elaborating upon corruption and we are on the third part which is basically going to look at the different institutions such as OECD and the World Bank. OECD everyone knows stands for the Organization for Economic Cooperation and Development basically a comedy of about 30 developed countries which are striving for a better world. And what we see is that corruption tends to threaten good governance, sustainable economic development, democratic process and fair business practices. OECD's multi-disciplinary approach addresses corruption in business, in taxation, in development aid and in governance in member countries. So, we basically see that OECD has multiple hats and is trying to combat corruption through a very systemic and very scientific approach. And through a participatory approach is encapsulating most countries around the world and is sharing whatever knowledge and whatever skill set it has related to anti-corruption and accountability. OECD has set and it promotes international anti-corruption principles to combat the supply side of bribery, preventing bribery through export credits and denying tax to the property of drive. So, again we see that it is a very scientific approach and again they are very specialized in basically curbing corruption in those areas where usually underdeveloped countries national governments cannot make an impact in that particular area. But OECD has definitely many oculates and based upon them they are trying to curb corruption at a multiple level. Promoting responsible business conduct, preventing corruption in the public sector and improving governance through development systems. So, again it tends to interface more with the public sector, but is also overlooking the private sector and the social sector. On the other hand, when we talk about the World Bank then corruption leads governments to intervene where they need not. It undermines governments ability to enact and implement policies where intervention is clearly needed. The areas of intervention basically of the World Bank include environmental regulation, health and safety regulation, social safety nets and macroeconomic stabilization. So, what we see is that in a country like Pakistan the World Bank has a major stake because they are providing loans, they are providing soft loans. But in return of those loans then we see that all of these areas have to be calibrated according to the research and according to the demands of the World Bank because they are giving soft loans to Pakistan and therefore they want to ensure that those soft loans can be returned and those soft loans are not also not wasted in corruption. So, they cover usually these different areas. The causes of corruption are always contextual and rooted in a country's policies and culture, dysfunctional government budgets, inadequate supplies and equipment, delays and release of budget funds, loss of organization purpose and use of public office privately. So, all of these things are very unfortunate and are a part of corruption and World Bank tends to oversee how all of this can be curbed especially corruption in the public sector. The opportunity for corruption is a function of the size of the rents under public officials control and the discretion that official has in allocating those particular funds. So, what we see is that a lot of corruption emanates from the public sector and in that what we see is the amount of allocated funds with the official and then the fund which has spent and usually what we see is that we have a 2-tier corrupt system whereby first on allocation there would be some corrupt practice involved and then later on during its disbursement we also see that corruption is taking place. The accountability that official faces for his or her decisions where corruption is systemic the formal rules remain in place but they are superseded by informal rules which again tend to unfortunately promote institutional corruption. There is a great need to curb all of this institutional corruption from the highest levels in Pakistan down to the lowest level otherwise we would not be able to progress and develop in the right particular way. Economic research by World Bank decrees that corruption may not distort the short-term efficiency of an economy if it merely entails a transfer of economic grants from a private party to a government official. So, usually it does not have a huge impact if it is merely intending transfer of economic grants but otherwise there are huge impacts and there is a great need to curb this particular curse of corruption and bring about transparency and accountability as a way of life. Bribes can theoretically increase economic efficiency if they allow firms to avoid overly restrictive regulations or confiscated tax rates and weak public institutions also can lead to a slow growth and reduce private investment which is something which is extremely adverse and has a very negative impact on the economy also on individuals also on institutions and also on community at the large but overall we see that the World Bank and the organization for economic operation development are working in tandem and are also working with the other international financial institutions like Asian Development like GIZ, like DFID and many others to ensure that the world can become more transparent, more accountable, less corrupt and there can be more equity within the economy for everyone at large so that the globe can prosper on a more equitable level. Thank you so much.


How do you start thinking about building an app or a website? The first step to building a great progressive web app is to think about your audience. Let's break that down a bit. Who is my target audience? How might that change? Do they have the same requirements? And how can I work that out? You can think about different types of users and prioritize that based on data. And there is no single answer for this. You'll need to adapt. You need to think about platforms, what browsers, operating systems, and hardware do my users have? And what should I support? How can I find out? Think about connectivity. What types of connectivity are available to my users? And what about offline? Is that something I need to support? If you want to compete with native mobile apps, you need to think about that. And what about data costs? The price your users pay per megabyte of data? For many users, data cost is the major constraint for usage. And I know this is true for me when I'm on a roaming data plan, when I'm traveling in a country away from home. In fact, you'll find that some people don't want to use the web at all because they know that some websites can eat up all their data. And of course, to build a great web app, you need to understand where and how your users will consume your content. Where are they? What are they doing? What's their state of mind? This really affects everything from content to interactions to layout and graphic design. You need to think about what you're building. You need to think about performance. What is performance for your users? And what does that mean for them? What is acceptable performance given your target audience or different audiences? And what about usage contexts, connectivity and data cost constraints? How can I quantify that? You need to build a performance budget. Thinking about content. What content do my users want when they visit my site or app? And how can I define that? Text, images, media, comments, about pages, you know, contact information, terms and conditions, all that stuff. And functionality. What are the core functions of my site or app? And what are the nice to have? And how can I prioritize these? Content, navigation, commenting and feedback mechanisms, flaky connectivity handling, offline and so on. Okay, so now I want you to do some work. I want you to find answers for each of these points. Who is the audience? What platforms are they on? What data costs can they handle? And remember, we're thinking about your users and what you are building.