Hello, and welcome to Day 5 of advent of code. We're streaming a bit later today I mean it's the Sunday But it might actually be a hard one today, so maybe we'll Be here all night Anyway, I wanted to have More of an option for like people from the US to join But I think I'll move it even later in the following days, you know like Eight thirty or nine like an hour later or an hour and a half later And then you know, it's just easier for this to be like the last thing you do instead of Yeah, then I couldn't go climbing and play four ball and all that stuff All right so Let's start with a day five. Well now it says Zero X F F F This is a bit loose. No, let me see Fasten it. Okay, let's see what a day five has in store so I set on the tweet like the announcement that Today is supposed to be hard, right? You know, I don't I don't look at it, but I You know, I pay attention to Twitter. I try to find And I follow some people who do the task and Someone was like saying today was super hard to do functionally, right? So we'll see how it works out, but we're at least we're not doing a double feature, right soon. Yeah All right Let's get started Okay Hydro thermal feature you can come across a field of hydrothermal wents On the ocean floor these vents constantly produce large opaque clouds So it would be best to avoid them if possible Okay, they tend to form in lines a The submarine helpfully produces a list of nearby land lines went for you to review For example, sir 9 5 9 8 to 0 8 Each line of a skin is a line seven in the form of x y 1 1 2 x 2 We're actually according to one and the line 7 x 2 at y 2 are The coordinates of the other end These line segments include the points at both ends In other words in line would recover spot 1 1. Yeah, okay 9 7 7 9 8 7 Okay, so so we have for now consider only double horizontal vertical lines Okay reduce the following diagram In this diagram the top left corner 0 0 bottom right corner is 9 9 each position is shown as a number of lines So which cover that point Or dot if no line covers that point the top left pair of ones for example comes from 2 2 2 2 1 yeah, okay, the very bottom row is formed by the overlapping line 0 9 to 5 9 and 0 9 to 2 9 To avoid the most dangerous areas and to determine the number of points where at least two lines overlap In the above example, this is anyone dying here with a two or larger a total of five points Consider only horizontal and vertical lines. How many points do at least two lines overlap? Okay, so this is a Hey to me Nice to see you back Hi little lanny All the regulars are here That means we can get started. I'm also wearing this amazing t-shirt Which I got from little lanny all right Right, so now we are figuring out like overlaps right line overlaps um But let's first produce the lines, right? We need to do some parsing All that jazz Okay, here we got the terminal new file example Let's make it bigger Bigger batter stronger. You see the ligatures Wow Makes it look much better, huh? All right, uh day Day five dot hs now Module main where and we're gonna run this now, um So parse lines. Let's just import text dot parser combinator read p And we're gonna parse the line and this is gonna be a read p of A tuple of tuples right up it's Int int comma int int now uh parse line Let me do uh, so we have a Read p int Is equal to read s to p Add int right Let's say i'm defined here So this one and this is a read p int is going to be read p in Okay, and this one doesn't work because I think it needs type applications uh Wait our plugin worked, right? Worked right in the beginning language type applications Now let's gsdi this D five dot hs to read s to p is oh, yeah read couldn't match reads Prec five Move on reload this Is read It's preck right preck Mm-hmm Okay, I'm just gonna ignore the add int here And now it's just a main i main equals print put stir ln Hello slash Yeah, I upload um I upload these to youtube after the fact because you know, it's nice I think it's nice for people to have like an example of Haskell code just not not finished but like being written right because it's one of the problems we We deal with and In trying to Emulate programmers, right wait like automatic program repair um One of the problems is that we don't really have examples of incomplete code We always get like complete code committed to git, but we don't know How was it made right So, yeah, okay, that doesn't matter so do Okay, so x1 is gonna be read p read pint and then we're gonna say read s to p Or maybe but what is the type of read? I tried that right I tried that right And that that returns A function, but we have read s. Oh, okay, that's uh I didn't know what read s I would just be using reads preck Makes sense Thanks to me Okay, we went to a comma And then we do one one Pint and then we parse the string space Like this I think right Yes, and then x2 is repint y2 Pint return x1 y1 x2 x2 y2 Right it needs to be big big reloaded and now let's do Um So now we do read p to s right Okay, now let's uh do a nice trick So data line is equal to And then we just we save the lines, right? And then we say, uh Well, let's have it like this And then we say return line And then the two things And then this one returns line Okay, and then instance read line where Reads preck. So this is why I always do it to me Because we have to do rep to s parse line Okay, and then we say instant Stance show line where show line x1 y1 x2 y2 Is equal to Uh x1 comma Show x2 show Oh, yeah, this is a b y1, right? So I really I'd really like, you know, like string interpolation In Haskell, but uh, we don't have that As far as I know There is like a printf thing, but uh, uh, it's like it's got a weird type class. So I don't like it Okay What if I do now read add line Set x type applications read add line 0 comma 0 to 5 comma 4 or 4 comma 5 nice So then we can do a read input file path to a list of line Uh, I of course and we do the classic read input equals map read add line God lines over read file. We've done this a couple of times, right? You do it like this, right? I always screw this up somehow. So it uses fmap. All right, because we don't Provide the string, right? Okay, read input example Oh read file example I think we need to save this Okay, now we get a bunch of lines. It's a bit hard to tell Oh, I forgot to do a comma here. Okay. Now we have um our lines Okay, now we we want to check and We want to filter out those that we can check is vertical or horizontal Take the line or turn to pull Is vertical or horizontal Okay, so we have the line and then we have one y1 x2 y2 We have to wrap all this big thing And I think we even had Yeah x1 equals y2 or y1 equals y2 x1 x1 equals y No, yeah y1 Equals y2 So let's uh, actually just do it here, right? So do lines ellens is a read input example and then We're gonna filter filter is Vertical or is For this and then we print lns Okay, now we have fewer lines Uh, and now we have to find which of those lines Intersect So let's actually have this one as a maybe Either Int comma int or int comma int, right? So So in this case Uh, let's just look at like this. So if if they are like x1 is equal to x2 we say Just left Uh, then x1 is equal to x2 Oh, okay We have to actually do either line line here Because we want to just get the ones that are horizontal and I think they're the ones that are vertical because If we have a Euclidean geometry This is important Uh, horizontal lines cannot intersect other horizontal lines, right? unless It is the same line But we don't okay. Sorry. These are not actually lines they are, uh Sorry, I learned math in Icelandic like so we have a liner like lines and then we have a streak Which is a sty I think it's like a sty dot is Orla sub sub Starfight so, uh Yeah, we have Manhattan geometry wait, let me let me see So Icelandic Streak, uh, yeah, so a line segment, right because Uh Lines are technically infinite, right? But uh streak are like finite lines And that the trick is that like you can have two finite lines that Like that don't intersect right because they are Because they're like on a different interval anyway Uh, let's see Let's go back. Let's actually go back and check what the task is. So, uh So if I'm not lying, okay, so we're at least two lines or yeah, okay, so we're just gonna find overlaps Okay, so left. So this is gonna be So we're just gonna say just left L Okay, if it is the case that Y1 equals Y2 Now we have Just right L Otherwise, we have nothing Filter map maybe Vertical so let's just call it Bertie or Let's just call it v or h right v for h V or h. Yeah, and let me say here is v or h, right? Is the v or Or h. Let me actually open this folder again because like a Like it's not giving me the code completions here, right? Let's uh open folder Day five Close it turn it off and on again. See what happens Because I want the completions, right? They make this so much nicer. All right. See now we have stuff v or h and Import data map. No wait, this is Not map maybe from data map. This is from that maybe maybe Okay, and this this is so perfidious DTI day five Uh, let's see main. Okay, so we have a right And so where the y coordinate is the same Which means it's a verb It's a horizontal line, right? Yes, so rights are horizontal lines left are a Yes, okay Let's see Lns, okay, so I think Import data dot either. I think there's like a lefts function It takes a list of either. Yeah So let's just say lat Horace equals right right lns and a Rarity is left lns Right, this should be right. So the lefts let me print the Horace and we print the Verdi Okay, so we have a two horizontal lines and two vertical lines. Okay, a Let's actually print a so what I usually do is I do map and print and I just say Putster ln Horace Like this. Sorry Okay, let's see. Yeah, so we have a Uh We have two vertical lines We have two horizontal lines Yeah, which much is this? Two vertical lines and three horizontal lines. Yeah, and you see here that it's overlapping themselves Okay, so Uh, so this is gonna be a bit of a trick, right? So we now we're gonna count So like we only need to check whether they intersect right, but uh, I am guessing from my Year not years year of experience Or okay, I guess I did I've done a couple of years now We're probably gonna count later, right? So what I'm gonna do is like for each line I am going to count Uh, okay now for the second one, we're probably gonna have to check the others Okay, um So let's see. Um So a Horace intersects. So there's a couple of cases, right? At two cases actually, uh H Intersects v That takes a line and Line and returns a pool And then we have uh, okay, let's just say Intersects right line line pool Okay, so, uh Because I think I think also in a late later part. We're gonna have to do it for lines that are not just horizontal and vertical Okay, let's see Hmm Like there are there's like a some there's some nice, uh There are some nice mathematical equations for this Let's just look them up, right? Line line intersection Euclidean Yuclid gravity. Wow Given two points on each line Yeah, but we have a Yeah, this is the thing, right? So line intersection for if they're just two lines It's easier than for segments So I think I think what we can do is the following, right? Let's let's uh These strikes and intersects in multiple planes Yeah, yeah, yeah, I mean that's for the horizontal ones, right? I'm gonna switch songs. This song is Not that good. Okay Uh, let's see But uh, yeah, so the trick is that A horizontal line and a vertical line can only intersect in one point, right horizontal lines can intersect in multiple points, right? Okay, so, um So let's just do a bunch of case analysis here like okay Uh line L at line x1 y1 x2 y2 Uh l1 x1 right l1 y1 l2 x y2 y2 l1 l2 This is gonna be so messy Yeah, okay So we take in the two lines And then we say where uh, okay, so let's say here Is v line pool Is v Okay, but we already figured out which ones are which but yeah, so we need to Okay, let's just we just compare all the lines, right? It's okay Uh, now let's actually so h intersects h I'm taking a line to line And return a bull, okay, so horizontal intersects horizontal So h intersects h so they're horizontal if they're They The y coordinate is the same Right, okay, so Line l1 x1 l1 x1 and so Uh, so l1 y is gonna be the same l1 x2 Because so the the y's are the same Right, that's the point. That's why they are horizontal l2 y and this is l2 x1 l2 x2 Okay, so case so if If we're looking at two horizontal lines So if l1 So let's this is actually an int Where this is a number of points of intersection So l1 y is not equal to l2 y Then a There are They don't intersect, right? If l1 y is equal to l2 y and these are so there's two horizontal lines So otherwise Then we have to count a How many points they intersect on Which is going to be a So how do we Okay, so where where do they then enter intersect? Yeah, I can see how this Took some people a long time and it's not like It's not complex like we know what we're doing. It's just like we have to get the cases right Which can take a long time, right? Okay, so uh, so then we have Then we need to sort the points, right? so, okay, so If l1 x1 less than equal to Uh-huh, right. So we also don't know Whether the two line points are sorted, right? Uh, let's see because we don't know if we're getting like the left end of the line or the right end of the line Oh, okay Otherwise, okay, we do here where? so we have small l1 is equal to Right, so this is going to be sl1 bl1 so the small l1 and the big l1 is equal to sort l1 x1 l1 x2 and sort is in data.list, right? sl2 bl2 I think we're probably making it more complex than necessary here because like what insane person would not Kind of feed us the data that way, but we don't know like it doesn't Doesn't say anywhere that the lines are Like there's no conditions on the lines here, right? So we have to do this So bl2 is going to be sort Let's have it like the same right l2 s l1 b sort l2 s l2 b No l1 x1 l2 x2 Now we know that we have like the smaller to the bigger and then the smaller to the bigger And then we check if if l2 s is less than or equal to l1 b so if If they are like this Then like the number of points where they intersect is l1 b minus l2 s Plus one right at the intersection one point l2 b Is less than or equal to l1 s If they're sort of like this then It's a l1 s minus l2 b Plus one Otherwise It's zero right otherwise. They don't intersect in any points so we have We have like so the two or the two horizontal lines that that Intersect each other And they all intersect themselves I mean, this is like also we could probably do this with like set membership and stuff, but we don't want to do it Okay Now how do I generate the pair of all pairs kind of okay? Now gen pairs takes a list of a's And returns us for this the a comma a gen pairs Equal x's equals a Gen pairs prime A exists and then nothing And nothing nothing so we're gonna do like here where gen pairs prime So we have like empty and then we have Prev and then we have a rest So far equals so far We don't really need now let's Recurs on the last argument. I think that's What you usually do so we have so far Okay, and we have the previ here. Let's do it so far and then prev Now a gen pairs prime of so far And then prev and then we have we have some left We sip x comma Prev plus plus axis. So that's the new one gen pairs prime And we Sip the oh no. Yeah, we sip we sorry the map x Over a axis plus plus prev And like the order is gonna be massively screwed up, but it's fine So we have gen and then the new prev is gonna be x prev x's let's reload our gen pairs one two three Oh, it's three and two and three and one Right and we don't have like one one So we have like four and three four and two and four and one again. It's not actually doing the thing Oh, yeah, because I'm not adding the so far here So we have the one and two with one and three and the one and four we have the two and three two and four And two and one Right And it's also generating the other pairs right Okay, so we don't what we do is that we just don't add the prevs Because we don't yeah, we don't add the prevs Uh, we don't care about the prevs So with a one and two one and three one and four two and three And two and four and then three and four and like the the four and three are already there and the Four and two are already two and four. I like that Okay, uh h intersects h. Okay, so now we're gonna say, um Um, so curry h intersects h. What is the type of that curry h intersects h? Hey, yo good magic vector type Maybe with line. Okay. Yeah, so it's uncurry, right? Okay, uh, so we're just gonna say So we're gonna say gen pairs. Uh let's see we're gonna say, uh With the horizons on the right start map. Maybe v or h over read input example So horror is These are the horizontal lines, right that we saw from me. Okay, we're gonna say Gen pairs. So we have the pairs. Oh pairs of horizontal lines Now we're going to apply uncurry Uh We're gonna say map uncurry h in Intersects h over gen pairs Horace And I'll just go see the numbers Do do do do 0 6 0 0 9 0 So it's saying that 0 9 to 5 9 and then 0 9 to 2 9 Intersect Which is exactly this one. So this is a Yeah, 0 9 to 5 9 And this is a 0 9 to 2 9 and they are intersecting here, but we'd say like this Intersecting at three points No six points where it should be intersecting at Oh three points, right? Now, let's see for that one, right? So now we have a that the y is the same. Okay now, uh Let's see. Let's see trace show in And trace show in Let's just see what's going on Okay, um, that's not really telling as much Oh He should be l wait so l 1 x 1 l 2 x 1 l 1 x 2 Well, this is this should be l 2 right? I think that was I'm still saying that 0 6 0 9. Okay, and Let's actually then just do it for the one line This one this is like line of interest So these are the ones that are Getting me. We would just want to trace that right? D Now R no need to reload the horrors. I want you to need to get that. All right, and then we say h Uh uncurry h inch Intersects h And we apply that to the line of interest Are we getting a 0 and 2? And we get 0 and 5 Uh, and then it's saying if l 2 s is smaller than l 2 b Is l 1 b then Uh, all right Yeah, and would that that's fine. Okay, let's uh consider this again. So l 1 s l 1 b that's like the We the correct beginning and ends of the lines right no matter if I Like stated it in the different order And now we want to check and how many points they intersect So there's four cases, right? They they both if they start at the same time Yeah, if I say they both start at the same point, right? Then we just take that too. Okay, so let's just list all those cases, right? Okay, if l 1 s equals l 2 s So let's do a guard here Now we can actually just do this right away, right? Okay, so now this is this easy case now. Okay, so if l 1 s is equal to l 2 s then we get a l 2 b minus l 1 b right Like here because they are equal they should be three points now, um If that's not the case um if if it's the other case, right if um If it's a if they if they intersect at this point, right? Then we do Oh, no, but this is not true, right? All right, let me check Because it's actually Yeah, it's three points right. Yeah So this is actually not true, right? This is then this is if they if they are the same then this is the min of This is the min of l 1 s no l 1 b l 2 b, right? So if they start at the same point, we find the minimum of the two numbers and then we a l 1 s minus Right, so we find the minimum and then we Uh, I don't know. So the minimum of the bigger one minus the starting point And Plus one Right, okay. So it's the same Right, so we find like the the minimum of the two points, right? So here in this case is the two And then a you know, then they intersect in like the length of the line, right? um Okay, so l l That would be like I think it would be and yeah, we should be we should do something more general but We are going to go for it. So I'll let's say if l 1 b and l 2 b are the same Then it's actually So they are the same here. Then we find the bigger of the smaller, right max a l 1 s l 1 s l 2 s And then it's the l 1 b like this and the point minus the maximum of those two Plus one so here you can say it will be like two minus zero um plus one Okay, so that's the case Okay, uh, so then now we get into other cases if uh l 1 s Is smaller than l 1 b l 2 b, right? If l 1 s is smaller than l 2 s Ah, see now we're getting stuck in the cases, right? I think it would help if we drew it up or something Let me see.  So it's gonna like right Okay, that's this case You want this case? This is probably easier if we like sort the lines somehow So it would be easier if we kind of knew which one was the leftmost one And we just sort them Let's actually sort the lines. Okay, so that so that we have some Something on on the line. Okay, we know that let's sort it right. Let's say Sort line It's going to be a line to line. Okay sort it We probably don't need this step or we're gonna say norm normal line. Okay, let's line to Line okay norm line line. Okay x 1 y 1 x 2 y 2, okay we're gonna say l x so if If x x 1 is less than or equal to x 2 It's equal to l Okay, if not then we flip the two points p 1 p 2 otherwise it's Line p 2 p 2 people so now we've Now we'll normalize the line so that the left or most points are always uh, the ones we care about. Oh, this is uh Non-trivial right so many checks Read input now. Let's add norm line there Okay, so now you have the norm line and then we know that the leftmost That this one is going to be smaller than this one Let's just let's call it actually We call it norm and let's not do it here. Let's just We do it for the relevant cases. Okay Ah, let me actually look at the input. I'm just gonna see how Okay, okay, so we get a lot very big lines, right So it's definitely worth it We can't just like generate all the points, right? We have to actually yeah Yeah, it's a very annoying because we want to Okay, so h intersects hx h intersects h Uh l 1 l 2 is equal to h intersect h prime And now we're gonna have this Like this, but we're gonna say equal to Where we're gonna we're just gonna normalize the x Here right h intersects h prime norm x l 1 and norm x l 2 so now we know that they are like this okay, um If they're not the same then we Okay, now we check case l 1 x 1 is equal to 2 x 1 then it's uh So if the left or most points, so now we don't need these sorts, right?  I could do that, right? So then we have this case right though 1 is entirely contained in the other line, so okay, let's Let's write this up, right? So this is gonna be you know Uh like this, right? 1 2 This one is a 1 2 Now we want to encode We want to encode a 1 2 2 1 And we want to encode a Okay, if you understand what I mean, right? So for this case if a l 1 x 1 is less than um l 2 x 1 And l 2 x 2 But what if it's like this, right? If it's okay l 1 x 1 is less than l 2 x 1 It's easier like if you just have to say true or false, right?  Yes so this is Uh, this is another no this is not oh we just copy pasted it, right? So now we want to this case, right?  All right, that that's that case Okay, there are also a couple of more cases actually Um, let's actually do it this way right This is equal to Well here we have the this case right to okay, and then we have If um L 1 x 2 is less than l 2 x 2 Um, then we have the case uh two No, we have the case one and two Then you can probably do like less than or equal. No, so we already covered the cases are equal then Else if So they're not they're not going to be equal, right? So else we have this case that Okay, so we have this case. Okay, so if we have that case Then the number of points of intersection is going to be um l 1 x 2 l 1 x 1 minus a l 2 x 1 Plus one right so then it's this one minus this one plus one Otherwise we have that It's just the length Otherwise, it's l 2 x 1 minus l 2 x 2 l 2 x 2 minus l 2 x 1 Plus one. I hope none of these are like negative All right, so I think we have this right like this case and then we have this case Otherwise, we have the other case if and Okay, so now we have the other two cases which is going to be the same, right? And it's going to be the same right or You figure out which of these cases we're in But now it's going to be different. Okay, so if if if we're contained then it's a l 1 x 2 minus l 1 x 1 Otherwise, it's a l 2 Otherwise, it's a hey janet in Welcome to A very painful thing we're going through now um l 1 x 1 plus 1 See let's see what is Yeah, it's it's it's a bit much, no So now we get 0 3 0 0 1 0 We're getting a 3 right Which is good. Um But are we getting We're getting this 3 right But so there's another um There's another one here. Uh, so what are these lines? Uh, let me see Horace infairs horace Okay, um So it's the 1 1 2 no 0 1 2 4 Jen pairs horace 4 So it's 9 4 to 3 4 um, and then 3 4 to 1 4 And exactly they intersect in one point So it's 1 9 4 to 3 4 and then 3 4 to 1 4 okay, so At least in the um At least in let's keep this pregnant at least for the example we we get the horizontal intersections d d d d d d d Okay, we get the horizontal intersections now the vertical ones And they're gonna be I think the same right except we have the One of the norm y and then we're gonna like and then we're gonna check if If l 1 then we check l 1 x And then l 1 1 1 l 1 and we don't care about this one in this case and we do I mean, it's the same except we transpose the lines Let's just do that. Okay t T line line to line So if I have a t line, okay, we have a line x 1 y 1 Goes to x 1 x 2 y 2 and we want to transpose it It's the same as saying line And y 1 x 1 y 2 x 2 Right, so we just kind of Flip that coordinate, right? I think that should be fine.  Are there any horizontal lines vertical lines at overlap? No, right? And inverted here is the Left, okay, so we get the h intersects h we count the number of Overlaps there Uh, I don't think this will work, right? Because now we will have We we will probably we have to um Because we will have like points that are like this they're they're intersecting at all of them are like More than two lines are intersecting At a One point, right So, yeah, like, you know, like there's two vertical lines that are intersecting and they also go over Our horizontal line at the same time it's going to be like three there, but we won't get too many intersection points So I am not I don't think this is a good way to do it okay, and Let's let's change it around Let's let's let's just look at the map and then let's check for like if a point is on a line or not. Um, okay, we're gonna Screw this too much stuff Are we we still need the view range? Okay, uh, let's define data point Is equal to int comma int In the line Is a two points point point now, uh read parse line is a parse point read p point parse point is going to be do x one x is a read p and manjar comma and then y is read p and A point Return point Uh x comma y now this becomes a P1 becomes a parse point And then a string and then p2 becomes parse point And these are going to be two points p1 p2 Okay, uh Oh, yeah line p1 exactly Okay, now let's see if our lines still work Oh main imports itself. Wow What happened here? Let's just call this point show a p1 at let's say a instead create point crack and equals read p to s parse point instance show point where show point x comma y is equal to Show x plus comma Show y And then this becomes show p1 plus plus ish plus show p2 and this line is also wrong p1 p2 Yeah, let's see the p1 at This is gonna be point x1 again now. I think things should load and we still get our Vertical lines, right? Yes, and we probably still get our horizontal line. Let's delete all this Let's put it into hold just in case we Like needed later. Oh, so Okay, we don't need the generators anymore Okay, so then we just say Online Let's just define on takes a Line and a point now it takes a Point and a line returns a bull This will like overwrite a function, but we don't get point x comma y and then x2 comma y2 equals Okay, there's nothing to clean up here. So we so the point is on a line if Um, just a line is horizontal. It's like, you know, it's between the axis of the line is vertical if it's a It's like a nice Point is on a line How to find out of a point is online with an equation A 7x plus 2 right This is the thing like these are not actual lines, right? um so first Like x1 has to be less than or equal to x and x less than or equal to x2 Okay and Okay, and then we have y1 has been So this is like the check for the Whether it's contained by this the line segment, right? Now to find the line we do where So h the Like the growth rate of the line is y2 minus y1 right divided by x Uh formula for line formula for line I mean, I remember this Uh, you uh Loop formula. Yes, we're looking at slow. This is not distance Okay, a The equation of a line passing two visual points may be written as If x0 is not equal to x1 This equation may be rewritten as Yeah, okay, we always get two points on the line, right? Um No, I probably right Okay. Yeah, this is the formula for a vertical line, right? Otherwise, it's infinite Damage Um, okay, so then we check So If it is the case that We have it's in the point. Okay So let's just do it like that, right? If it is the case that x1 equals x2 um Then we only have to check that x1 equals x and uh equal to y And y is less than equal to y2 If y1 Is equal to y2 Then this is equal to uh y Is equal to y and x1 is less than equal to y x less than equal to x is less than equal to x2 now um We're only considering the vertical and the horizontal lines now So let's just so we'll probably have to extend this with like the actual formula later but We will just keep it at this For now, um Matt, maybe we are h a Right, so this is actually gonna be like this. Uh Yeah, this is it's just a lot of work this today, right? We didn't add it for an hour and a half and we haven't even done part of one Uh, okay. So now we know if the points are on a line Okay, and now we we map maybe vertical or h So let's actually like we don't care about whether they're horizontal or vertical Um, okay Go now let's uh, let's actually here. We're not gonna be right. Yeah, we're just gonna do maybe line We're not gonna check it with the vertical or If we're going to just otherwise nothing That may be vrh and then we have lns Okay, then we go uh a space Is equal to um It's a list of lines and returns The like the space of points that we have like the largest point space Okay, uh, this is equal to so then we We're just finding like the Biggest x and then the biggest y So do uh two points we do The line to point list of point points is equal to Of a line v1 p2. It's equal to p p1 comma p2 to and then okay, and now we have a max x of Of a list of points So let's just do two x chord to and x chord so these are so here we're actually paying the price for Having it as a yeah, but it's okay x chord is equal to point x comma anything is equal to x y chord of point y x comma Anything comma y Equal to y We say this okay, uh, so the space the space of list of lines is space of Lines is equal to so we map 2 point Concat map Concat map 2 points over lines a where points all points equal to This okay, so whether we say a maximum x chord This is gonna be that point Maximum x chord all points Maximum y chord all points maximum map map Okay, now let's say here then We you're not gonna we're gonna let's just say a print space lns main Yeah, and this makes sense. So the first one it's a 9 9 oh this is gonna be so bad Okay, let's say So gen points Let's see Haskell all combinations of a Of two lists It's like a nice a I like this one a Okay, let's just use it so all P's in points in space It's gonna take a point and it's gonna give us a list of points All points in space is equal to uh, we we get a point X and Y and we actually get a a comma b where a comes from 0 to x b comes from 0 to y Okay, now we have all points in space. This is extremely Bad right, but it's gonna be fine. So Okay, so now we check so first we go We check which points are on on any line All right, and then we check num lines on point We get a list of line and get a list of point and we get an end Num lines on L and s is equal and then p is equal to the length Of filter On p Okay, so then we can get like for each point find on how many points They are on Okay, so then we say Let sp equals space of islanders So a ps equals all points in space sp So print a ps right Main okay, we print. Oh my god. This is not All right, so because we paint points like that Okay, then we say a print map num lines on to the nest a ps then we get like how many lines are on and Then we say filter Larger than two Larger than equal to two And we say length and we get three But aren't we supposed to be getting five Determine a number of points where at least two lines We're doing like the very dumb way, right? But we're getting that there's only three points Okay, let's check horrors. No, we don't have that anymore a Okay lns, let's do it just like this lns map maybe or h Read input example Okay, and then we say sp equals space of an s We get 99 we get all a ps equals all points in space and api Sp and then a ps is this map m print a ps So 99 okay, so nine zero. Yeah. Yeah. Yeah So this is zero to nine one nine these are all the points Okay, then where you are So it's our on function. That's a bit somehow wrong. I think Let's see lns we have one line two three so one two three four five lines two three four six lines we're supposed to be getting right a long one today uh I'm going to grab Yeah, I'm gonna be I'll be wrapping give me give you two minutes Sorry about that. Sorry about that But when you gotta go you gotta go. Okay Let me say, um, all points in space. Let's just try and print this out, right? And what's the space here? The space is gonna be sp at point x comma y map m print l So we have a zero to nine five to nine zero nine five to nine and we have a Zero nine two to nine right so we have these two Okay, then we have nine to four three to four, which is this one No, yeah, that's This one And then we have two to two two one Which is this one? Okay, this is one two three four five six How many lines out there? Six lines. Okay one two three four Five six, okay, so we have all the lines so it's our on that's a bit wrong. Okay, so if we have a horizontal line Yeah, so if you have a vertical line, so this is a vertical line, right? And it is the right x axis And the y one is less than equal to y Two, right? These are correct, right? Let's uh Num lines on so let's not do this So let's say let's print map Um, okay, so it's gonna be p And then we're gonna say Usho p comma num lines on p So zero zero is on zero line zero one is on zero line zero two Okay, and Let's just map over the points, right? Okay, so Let let's just yeah, let's just do the literal print function. Okay, so p f And we're gonna do like this. I think it's like we can do four m Now so now it'll be good nice to be able to just be able to like say you know print x y and then So we just want to print this map. Well, let's just see here nine zero Nine all righty we are we're generating them in the opposite order We want to show that see the last line last, right? Okay, so this is a zero zero zero zero zero So one one one two two two Okay, so those lines are correct one one one two two two And then we should get a bunch of zeros which we yet Onto up until I think this is zero one two three four. Yeah until it says four here A zero zero so nine four is zero Wait, oh nine four is zero. What is nine five? Nine five zero. Okay, so the zero's row is and seven zero is one Yeah, seven turns one and then eight zero and I sure okay. That's the first row zero zero two one is uh so Wait, so one one one is zero Two one zero three one is one four one four one is one Print map. Okay. We have the list of line and we Do io nothing. Okay print map Linus Okay, this is going to be print line zero Okay, this is going to be map and print line over zero to Where sp equals space of Linus point x comma y So we are going to print line and it's going to use the zero to y Okay, and this is going to be yeah, let's call it pl. Okay now pl Nothing is equal to Booster New line Okay, pl nothing is just return pl y y's So, uh, this is going to be map m print point map and and then zero to x right um Where print point? a Print point y zero x the print point y a nothing is equal to put stir x n a print point y comma x is equal to a put stir show num lines on x axis put stir show num lines on Linus a y comma x x comma Y right a num lines on Point put string and then print Point a y axis pl takes in a list of ints and returns i o nothing and print point Takes in an int and a list of ints and returns i o nothing px py this is a py And this is a px and this is just y actually like this it should be a But now it's complaining Can't magic passage type. Okay, so the x here is going to be in y here is going to be in it Okay, uh, so we get the Lines Okay, uh, that didn't work because we didn't print the end of the lines Okay, so we have a there's something wrong with our on and hello equals num lines on otherness a Point x comma y out is equal to If and hello equals zero then dot Else Show hello on this one and it's gonna be Put string out Okay, so there's something wrong with some of our lines here Um, it's because they're not in the right order Okay Yes So why won't larger and equal to yeah, okay, so we're gonna change this actually Okay, it's x1 equals equals x2 and x1 equals equals x is Uh y less than equal to min y1 y2 and y lard. No less than equal to max And so let's do Min y1 y2 less than equal to y y and Okay, this is the This is why we failed y y and then x x x non exhaustive patterns in function on Otherwise It's false So now we should be able to get No, I don't have to print some map There's a Print map Okay, so now let's not print the map. Let's do have when we print filter larger equal to two Over a map map num lines on LNS And it should be eps Why you why does it do this? Five exactly Okay, now we are getting the right for task one And we're doing it in a very dumb way, but Let's just hope it works for the input. Okay Only 500 lines now main. Okay, let's change it to be Input and let's gt o3 Day five hs time day five This might take a while. Okay eight seconds, but We got a number Let's see Okay, that's the right answer So we're done with number one But oof we didn't do it in a smart way, right? Let's see part two is as horrible I've had to Consider all the words get full because you also need to go diagonal lines because the limits of the mod lines in the list Will only ever be horizontal vertical diagonal line at exactly 45 degrees in other words an entry like a One covers point Considering all lines for the number is one line You still have the number number of points where at least two lines overlap Okay So now we just need to extend our on Formula to cover diagonal lines Let's change it back to it Oh, no It's just to task one Okay, a num lines on Let's change this then to from map maybe vrh to just All the lines this is gonna be task two and we Don't change this much actually What's your company right now? All right, okay, so num lines on Num, let's try and just do num lines on diag Num lines on base num lines on filter on p Okay, so now we have a diag So p what so that's a It's equal to so it's either on a p1 l1 l2 p1 lp so this is just p and l all right, okay case on p l You need to go through it Okay, if it's not on a horizontal line Then we can check that Okay x1 equals equal x2 Then that's false, right? So if we if it's not on a horizontal line Or it's uh, it's not uh, yeah, so it's not our horizontal line okay, so Now we're checking if the point is on a diagonal Okay, now do we check that that was this is what we were messing up before it Okay, I mean it has to be within the box right so, uh so case So min x1 x2 less than equal to x and min a max x1 x2 and x less than equal to max x1 x2 And we have min y1 y2 less than equal to y and max white One y2 Less than okay, so then it's within the bounce of the box Right, and then we just have to check That it's on the line And then that then we can use the formula, right? Okay, so this is this is equal to if Okay, and we know that y is y x is not equal to x2 right so we check that here Then we can use this Point on a line thing, right? So we just need to check that Right, okay, so then Line will be defined by these points, right? uh So then we can check that This is equal to x minus x1 So we check that is equal to y is equal to x minus x1 times uh y2 minus y1 divided by x2 minus x1 Plus y1 and this can be Let's check this for the example. I think we have the corp formula collector Okay, we get um Right then it's because we didn't write num lines on dyag non exhaust the pattern in function dyag on dyag Yeah, okay Okay, we get 12 I think this will work It might be very slow, but it's gonna work Let's uh Let's uh, let's do it This might take quite a long time, but not like extremely long, right? It's kind of take like 15 16 seconds and we're doing it in such a dumb way, right? We're like We're not right. We're just generating all the points and then checking Quality right 18 seconds For an answer 17 741. Let's check if it's correct All right, we did it Took us two hours though And we're like we're not doing it in an optimal way, right? But I think like, you know, we accept everything as a solution if it's If it takes less than You know, yeah, if it's less than a minute, right, you know, if it if we can just run it and see what happens Then that's fine. Um How could we oh, thanks so buck chains So buck j So boss I don't know how to pronounce it But yeah, okay, so what essentially we did right nice. We We really hacked this Uh, so we could probably do it in a better way, right?  How long does it take with just oh Like if we don't don't do any optimizations, how long does it take? Yeah, because I think like the optimizations are important at least for us Because we have all these points and line things And I think like this will be you know This will be just removed Away Like so these will just be the inch comma inch, right? It won't it won't actually have this in direction Uh all the time Which is nice. Um Yeah, so I'm wondering like if we can Do it Like if we can find those points which are on any lines, right? And then kind of just count for the rest. Yeah, this is uh this can take a while so like I have the Uh benefit here that I am So this is running in the cloud.  It's like a four core Yeah, just a basic cloud machine, but uh, it's better than Everything freezing up on the stream um And it's nice, right? Because I can just access it from this computer or from laptop and Yeah, okay, this takes a while Okay, two minutes though with no optimizations or like So I think the default flag Is like oh two That's uh, but uh, yeah, and that's like I think that's the trick with high school. Is that you know It really the optimizations can really they can really do a lot like they'd really kick in This is like without any optimizations and then a Run it again with optimizations and it's like 20 seconds Which is uh, what? six times faster And like you can see that like, you know Compiling and running it with the optimizations takes a lot shorter times than just Yeah, so like the optimizations the time taken to optimize is clearly worth it This all points in space probably speed it up a bit but Let's do this right Wait now at least are like minute optimizations So if it's a vertical or horizontal line, we do that Otherwise we can use the formula Actually, we can just always use the formula. Let's go and mix Yeah, I mean we we could like just compute so we I mean we're computing the numbers twice here, but I don't think that's the I don't think that's I don't think that's important So what would be a nice way to do this? I mean so we could like just focus on the lines All right and just find like intersections of at least two lines And I think we could do that right so we could We could take the program And we could like find the intersections of the lines And use that to generate the set of points that we check Right because now we are checking very A lot like a thousand times a thousand point a million points, right? I mean and we do it in 20 seconds. So I don't think we like need it but Yeah, I'm just thinking how we can sort of like a way we can easily speed this up You see do we use these two points? Yeah, we use it for the space Too much of a brainlet What does that mean? And how would that mean that you Don't understand Haskell Okay, so here's what I'm thinking we take all the lines and we generate the set of points on the lines right So for each line we generate all the points on that line and then we check And then we can like make a set of points and then we check Yeah, I don't know. I think I think we like our way of just it's very fast, right? And like yeah, we have like Like a degenerate case, right? You have like lines covering the entire space Then Generating all the points on every line would be a lot more I mean, I say I think we would need to like generate the pairs of lines And then you know we use all these Do two lines into our sect formulas Which we could do very fast, right? And I just filter out the points that are on more Yeah All right, I think but I think we've been going on long enough today Yeah, so what I'm saying is It's definitely a way to do this without generating all the points, right? But it would be very tricky to get all the line intersection equations correct And I am not sure that we would Learn anything. I did that then I use a map point int to count how often each coordinate is occupied by a line What what do you mean by that Timmy? How do they regenerate it all the line intersection equations My question to Timmy is like how long did it take like Was it a lot faster? Um, or is this like a reasonable time? Oh, yeah, yeah I mean, yeah that like like I said that works But uh, if you have like a degenerate case where Yeah, okay, but that's in Haskell to 50 milliseconds That my worry is that yeah, it works in in a kind of probably the usual case, but if you have a Like a degenerate case like where all the lines kind of cover the space Then Then this will be a lot more points to check. I'm wondering if we can maybe just filter out the ones that uh So let's see any To all points in space, okay, and then What I want to check now is we let's say on any Is equal to uh filter Let's let's let's let's do that, right? uh Let's see on Any on any okay, so we don't put the length here we do On any empty set is equal to false Let's take the point in first Maybe we can like drastically reduce the amount of checks we do like this if if we're lucky On any any p Empty is equal to false On any a p l lns Is equal to um if on dyag pl Then True, okay, let's just check do like this on dyag p l is equal to true Otherwise is equal to on any p Lns Okay, so these are so we're gonna filter out the points that are on any line. Okay, but let's actually Do we want to give it we want to feed it that way? point Okay, otherwise on any lns p Okay, uh now we don't we say instead of saying all points in space We filter those out, right? So we say Points on any is equal to filter on any Lns a aps Then we say Points on any Then we kind of check that we only check those points that are on any line On the the dream is that like if it's Okay, yeah, it doesn't doesn't really help. I guess because we're iterating over the points Yeah, how can we make this? I would print the map, but like it's it's at least a thousand characters. So it's not gonna It's not gonna help a lot. I think Yes, it's about 250 milliseconds. Yeah, I guess that's because there's a lot fewer Lines then there are points of points Yeah, exactly. Um But like we can see in the input right that I mean there's gonna be a million Points, um, but So let's See if we print the space, right? So I think there's like a yeah, so let's just see what this is. Yeah, so it's like a million points, right? Yeah, and they only have 500 lines So like we could optimize this for the input that we get, right? But uh, it really depends on so I this yeah really depends on if it's Okay, um Let's let's check one thing, right? Yeah, let's see. Um L and s okay, so we say H or v is equal to a partition is just v or or each, um Otherness this needs to be imported in this Partition part it T on data dot list. Oh my god. Where is it? Oh, right at the top partition takes in Okay, so The horizontal or vertical ones Hey, oh lover. Yeah, I think I agree with the lay lay left here is that there is And so let's print space print length h or v And I think there's a lot of horizontal and vertical lines Oh really Well partition should give us right h or v Diak Okay, so there are 349 Um, so the print space print length h or v and print length diag And there are a So a lot there are a lot more horizontal. I think they may probably like a An even amount. Okay. Um, let's do let's do it. Give this back into either line line x1 equals just So these are the horse vertical ones left l Y is equal to this right now Now I need to map maybe and I need to map Either id id And then we can say length so we say Horace is equal to left h or v And Where this is equal to right h or v. No, there was a this was a left H or v and these were the right, right So h or v here is on here Maybe either Yes, okay, so where you do partitions or let's um Okay, we just partition them first and then we say H and v lines is equal to map Maybe uh v or h lns And then this is h and v lines and this is h and v lines Length, uh, vertices length Horace, sorry. So, yeah, okay. So we have verticals, horizontals and Diagonal lines, okay, so And then we that doesn't take a long time right to figure out which ones are which Okay, um Um, okay, so what are we checking now? So let's Now we generate the points on each of these. So Horace H points To the line and it's going to give me a list of points. So horizontal points is going to be It's going to be a line And the Y coordinate is the same.  So if a y 1 is equal to y 2 This is the horizontal case Then we find a Where mix a So small x is equal to min x 1 x 2 B x is equal to max x 1 x 2 S y is equal to min y 1 y 2 And by is equal to max y 1 y 2 So if it's this is the one then we are going to generate map and we're going to map point dot Maybe we're going to take the x coordinate and we're going to give you x comma y And we're going to map this function over the list S x 2 b x hot tuple sections. Okay Which is that tuple sections? But it doesn't actually yeah, okay, we can Write this as this other points. All right, and then this is going to be point Okay, so we have the Ver horizontal. This is the horizontal case Case x 1 equals x 2 is equal to map And so this is going to be x 1 is equal to x 2 You want to say x 1 comma Over s y 2 b y Okay, otherwise and Yeah, this is going to be a Okay, so otherwise we have a diagonal case What is the set of numbers for the diagonal case? So we just like add one Right to like both coordinates until they Hit right Because there yeah, so it says that they're all exactly 45 degrees right so we can use that fact Oh, let's go back today for it. They're all exactly so that they're all going to be like x and so like the So put like yeah, so in which which direction are we going right? And then it's either going to be like plus one minus one Okay, so let's figure that out right a Okay, so and So if so we're going to define the change here So this is going to be diagonal points of Line I just write that like that or do we No, okay, otherwise. Okay, so let's figure out the change. So the c x c y is equal to So the change in x c x is going to be if x 1 is less than Or equal to is less than x 2 Then Then we're going to be we're increasing the x 1 then 1 else minus 1 okay See y equals if y 1 less than y 2 then we're going to be growing it then 1 else minus 1 Okay, then the points on the diagonal are going to be So then dyac points is going to be dyac points So let's actually let's sort them We normalize on the x Okay, so we're just going to make sure that they make sure that it's increasing x and We had that before right? That's why we didn't erase it. Let's say here formalize on the x Yeah, and I think we can just actually do this right away, right? Yeah, we should do this because yeah, okay Need input we normalize on the x. We just need to pick one to normalize I realize this now uh norm x Right, okay. Now we have them normalized on the x so x 1 is going to be less than x 2 um, okay, so x 1 is going to be less than x 2 So then cy is equal to um If y 1 is less than y 2 then 1 else Minus 1 Okay, so now we have the x dyac is equal to x 1 2 x 2 right And the y dyac uh The x dyac is going to be x 1 2 x 2 and the y dyac is going to be y 1 let's see You can't do that right? I can't do 5 2 2 right 3 No, yeah, exactly But then I can do 3 2 5 and reverse it right so if so If y 1 is less than y 2 then y 1 y 2 else reverse y 2 2 y 1 So this is going to be the y dyac and the points are just going to be Is otherwise equals sip x dyag We're gonna map point Over a sip x dyag y dyag Sip with curry point Will this work? I wonder So this will generate a lot of points Now then we change This aps here and we're not actually gonna we're just gonna we don't care about what they are Anymore we are going to say a aps So okay, we don't so we're actually gonna So we generate all the points. Okay, and then we just count the points of the We yeah We just can't we just check. Yeah, we check if there are any duplicates, right? So we can derive word on the points, right? Deriving or EQ or Okay Norm x is not in scope Not put it in Okay, now we don't have the aps anymore, but we don't actually care. We're gonna We take the lns. Okay, and then we so then we say let aps equals sort Dollar concat map L points Lns This will be a list of points and we do group, right? Import data on the list, which will group them Let me do group. Okay, then and then we do Um Ling filter larger than equal to two dot Ling so how many of the groups longer than okay concat map in the second Let gps because that's the groups gps is a list of just the points Okay And then filter Length just we're gonna do Yes, let's check this for example, this is That we're actually getting Nothing sensible here. We get 12 It happens really fast Now let's see. Wow Three now we're back to two mid-time All right We got it on to 360 milliseconds on this machine So right so there's essentially two ways to do it um We either generate all the points and Just check for We generate all possible points and then we check on how many lines those points are or we um Or we do something like this, right? So I think this still works. This was a dollar all points in space dollar space lns so 350 ms 20 seconds so this way it takes a 350 milliseconds 233 let's just say that It looks good otherwise The other version takes 20 seconds approximately So yeah, but This really depends on the amount of the The amount of lines Okay, it takes 13 seconds now, but yeah, okay Okay, but it as we discussed, right if you have a really dense If the lines are really dense, right if they happen if they kind of cover the space Then like the other one will be worse Um, but because they don't cover the space we have a lot fewer points um So let's even say here points on lines equals this and then we say a Points on lines and let's print dollar Length points on lines Right, so then we have a hundred and eighty three thousand four hundred thirty two Otherwise we have Like a nine hundred and eighty thousand points generated and then we have to check So every line Whether it's on the line But here we just have to Resort the points and then we check how many are equal, right? Or how many have how many yeah And like we can we can find out the By the length of the groups so we can actually just say map length And then filter larger and equal to two here Um, and I think that will uh, I know now we're doing both but I think it's also important to note that like This old version like we can actually print the map. Yeah, okay. I guess we can print the map with anyone as well But it's uh, it's not as trivial kind of all right Uh, we did it three hours. We did two ways the slow way And the good way Thanks to to me For inspiring us to do our best All right, uh, that's enough for today a I'll be back tomorrow Say Same time so 1900 hours in Sweden that's 1800 in utc And then uh, you will have to calculate yourself when it is I think it's like 10 o'clock in california something like that Um, but yeah, and we'll see how we do it How we do the next one.  I really need to do it later today whatever so You know, if you come here and I'm not here Check the twitter. I'll probably be an explanation All right, uh, hope to see you tomorrow. I don't like yeah, and if you follow me on twitch Um, you'll get a notification when I go now live. So then you don't need to check anything you can just wait for the notification and tune in uh, and lastly, um Um, these videos are also on youtube So like uh, yeah, but they come out 24 hours after the stream because uh, which has like a Like you can't stream it anywhere else and or or host it anywhere else for 24 hours. So yeah But uh, you can check out the playlist there and I think day three and four I have to like edit it slightly and then it'll be available there And so probably yeah in the morning and then this one will be available Even sooner. I think it should be available. Yeah in 24 hours. All right Thanks again for tuning in and uh, see you all tomorrow Right. Bye


Hi, I'm Susan Zhou from VMware by Berkham. I'm so honored to be here and share how can the two hot tech teams, Kubernetes and AI, achieve together in the next decade. Over the past decade, Kubernetes has revolutioned the way we deploy and manage applications, establishing as an essential cornerstone of modern infrastructure. AI, after years of sentimentation, has also entered a period of rise and explosion in recent years, quickly re-shipping various fields. Looking ahead to the next decade, the synergy between Kubernetes and AI is inevitable. Considering how the synergy can ignite sparks of technological innovations and bring mutual success, is a subject to a report for exploration. As an elastic and scramble platform for modern application, Kubernetes undeniable needs to take on the mission of supporting and accelerating AI development and deployment. How can Kubernetes benefit AI? Optimize resource utilization to minimize the time and expense involved in training complex model. Automate the governance to ensure AI system complex with regulatory and ethical standards. Or transfer the federator learning to train model on decentralized devices for data progress. Standardize AI resources with OCI for efficient management of transfer replication, sharing, and loading of models and data sites. Introduce a streaming-led model interface for efficient management and the loading of a versioning model, libraries and frameworks, reducing model size and spin-up deployment. Introduce AI-specific workload type to simplify configurations and align with the needs of data sets, sets, and model experts. What can AI bring to Kubernetes to make Kubernetes better and more successful? AI has accumulated a vast amount of the industry knowledge and has the powerful ability to learn and involve quickly. AI can make the Kubernetes platform smarter, more elastic, and more reliable. Assisted the star interactive interface by directly addressing operation requirements that users are afraid of from the complex associated with scraping and YAML configuration failures. Intended scaling AI-driven algorithms enhance scaling, occurrence, and efficiency, optimizing resource use, predictive, and automated operation. AI predicts the system trends and adjusts resources at the configuration in real-time to meet changes requirements. Enhance the security. AI acts as a security expert, automatically identifying and mitigating potential threats and vulnerabilities. Self-healing, ASF diagnosis and repairs the issues detected in the environment automatically to minimize downtime and manual interaction. AI controller introduces a specialized AI controller framework to facilitate smart work flows through advanced decision-making algorithms. The new decade chapter has already begun. The possibility with Kubernetes are limitless. We, here we, we, and the younger generation believe that Kubernetes will continue to thrive in the next decade. Hi, everyone. I'm ID. And I'm nine years old. I've heard lots of cool stuff about something called Kubernetes from my dad. I don't know much about it yet, but I think it must be a very interesting and awesome thing. When I grow up, I hope I can work with Kubernetes and help make it even better. Thanks, my son, ID. Looking forward to gathering again in 10 years to share new stories of Kubernetes. Welcome to the HarperBoss for AMO to support. Welcome to the VMware TedoBoss for Kubernetes for AI. Further discussion, thoughts, and the Open Source Project contact me through the email. Thank you very much.


So we did this thing. So here's the thing. We've been doing this event for two years now, right? When we first got started, actually, let me put this in historical context. So when we first got started, we knew KubeCon was going to be a big event. It was going to be like a thousand people. And Kubernetes or OpenShift was you know kind of gaining traction and we said we really we'd love a forum to talk about OpenShift because I know we're going to talk a Lot about Kubernetes and Diane had this idea and she said I have kind of a crazy idea I want to rent a room the day before and I'm going to charge people money And I'd like them to show up and we were like you're crazy Diane, but that's fine You have lots of crazy ideas. We'll let you do that and We so we charged folks like a hundred bucks or 60 bucks or I don't know what it was but it was something and you had to come the day before the event and We got a hundred people to show up, right? So I think the room was not much wider than this thing and it was real dark as you can see in the picture and The focus was really on It was a little bit of focus on customers You know we're not so much customers But like communities of people that were using it that happened to be customers But then we also had to have a reason to get people to show up And so we had to bring a bunch of really smart Kubernetes people, right? So In this picture for those of you that that don't know all of them starting from the left. That's That's Brandon Phillips. He was one of the co-founders and CTOs of CoroS. We liked his talk so much We acquired his company The gentleman next to him is Brandon Burns. He was one of the sort of three people that's He works for Microsoft now at the time he worked for you just like literally the day before had gone from Google to Microsoft was one of the original like three people that with Joe beta and Craig Mclucky that sort of started Kubernetes at Google The gentleman next to them who I'm sure we'll see this week is Kelsey Hightower Always gives demos sort of Kubernetes the hard way people should know him And then the guy on the right is Clayton Coleman and we all know he talks too much so Anyways, the reason I highlight this is We did this event and the focus of that event was we're going to talk about this super hard Complicated technology and Kubernetes was sort of front and center of that event, right? And it's pretty interesting that two years in we get the folks from Ticketmaster and they go I Don't want to care about Kubernetes, right? I don't want that to be the forefront of my my thought process Which is kind of cool because at the time we were like The forefront of your thought process needs to be Kubernetes like that should be what you're thinking like pods are interesting and all that sort of stuff now Of all the folks that are on there. We talked about Brandon. We acquired his company Brendan They run Kubernetes over at at Microsoft, but they decided that they enjoyed open shifts so much They want to do a managed service with us. So lots of closeness with him Clayton still works for Red Hat. So that's cool. And we couldn't get we could never get Kelsey to come work for us. We tried right, but we got this This was Kelsey's quote of the day You're gonna build your own platform if you're lucky you'll end up with something like open shift Probably doesn't love that we keep this quote laying around all the time But it's kind of a fun quote to have Because the market sort of proved out that you want to build this maybe easier to do with open shift now I point all this stuff out because we're back in Seattle and Fundamentally if you listen to today today was very little about open about Kubernetes, right? We started the day with Clayton and Derek and Mike going you should care less about Kubernetes We're gonna try and make it so you don't care that much about Kubernetes And what we want to highlight is all the stuff that comes to the forefront, right? What are customers doing with this? What are the use cases that people have with this? Mike Barrett who was up here as well who's kind of our lead product manager He has this thing he tells us all the time. He goes look folks. I know you're I know you're talking to companies I know you're building interesting technology. You made a PowerPoint slide. Just think it's cool The people that are putting their trust in open shift aren't betting on a technology They're betting on their company or they're betting their future on this stuff, right? So Do a good job, right? Build good code do a good job helping them listen really well And I think that's what we tried to make today about we tried to make it about bringing the stuff That's not kubernetes forward, right? How do we make it more interesting? You know I use this analogy all the time I think I looked at my delta thing. I did about 110 flights this year, which I'm not proud of but I did The airline I fly on uses open shift the credit card that I used to book all those flights uses open shift the hotel that I use Pretty much most of the time uses open shift the ride company that I use doesn't use open shift But they contributed back this really interesting technology the kubernetes community which eventually becomes into part of open shift This stuff becomes part of your day-to-day life, which is very cool Because it means you guys want to come help us with that we want to help you with that but more importantly Each one of you are helping each other right like two years ago Nobody in the customer section said like hey, let's talk about multi-tenancy. They were just like hey, we made something work Right this week. We literally had people go. We're interested in this if you would like to work with us on that come find me Right that wasn't them telling red hat that that was telling you if you're interested in multi-tenancy or security or Insurance use cases or whatever go work together on that stuff. That's how fast the stuff evolved, which is very cool Now I use this I use this slide a little bit I I I tend to be sort of the storyteller in the group So I started plotting out like where are our customers and what do they do and and this is interesting enough and it's You know, we're lucky enough to have customers all around the world But more importantly like Diane said we've had nine of these events and as you can see those those red Open shift logos aren't all over the world. So I'll have to offer you this if you enjoyed the event I hope you did. I hope you got something out of it And you would like one of these somewhere else Please let Diane know because these things are becoming more than just us telling you about our roadmap They're becoming about us getting communities of people together and in some cases. These are big broad horizontal things in other cases Like in Germany We have a bunch of the auto manufacturers and their supply chains and so forth who want to do these because they want to Go solve automotive specific issues, right? We have these in parts of the world where You know, it could be in Detroit and automotive. It could be in New York and financial It could be in Austin and talking about barbecue. It could be about whatever But we want to do these events more and more So if you're interested in things like this where you can talk about Communities of interest you can talk about the technology. Let us know we'd love to have them in other parts of the world Now We've been very lucky over the nine things that we've done in that While the Red Hatter's talk, we'd really love to get users to come up and talk as well And I highlight a few of these these are some of the companies that have spoken just at Open Openship Commons over the last nine sessions and I'll say this because We bug every single one of the people that come every one of our customers that come because we go We would love to hear your story and a lot of the people here would love to hear your story Now how many of you heard how everybody's story ended? We're hiring right every story. We're hiring So I'll leave this with you With this thing if you are a company that competes with anybody that's on this list or anybody who spoke today And you go hmm I'm not sure if our legal department's gonna let us do that I'll say this Everybody who's up here or that has spoken at Red Hat Summit or whatever They usually come and talk to us a year into their their process our year into their scab knees and things They've learned and done well or a year and a half or two years If you're seeing your competition up here, and you're like, well, I don't know if my legal department They're two years ahead of you in the I'm hiring department, right? They're a year ahead of you in the I'm hiring and if they're a year ahead of you in the I'm hiring or in the two Years ahead of you they may also be a year to two years ahead of you in the we have Technology that will take your customers So I don't say that in any sort of derogative way This is a great place to come tell your story and get people that may be interested in working for your type of company To come do it and you'll notice it's in every sort of industry in every part of the world Okay Real quick. Um, can I have a sip of your thing of whatever you have or Yeah, that's fine fine This my little this my little pitch I Think what you're gonna see this week is We've been we've been doing cube cons now for about three years Three or four years. We've lucky. We've been very lucky to be involved with kubernetes since almost the end of 2014 2015 And I think we're really doing what you're gonna see this week and what you're gonna see over the next couple of years It's really kubernetes is moving into sort of the third generation of of its of its evolution, right? The first generation was Google said we have some code. We all went well. You're really smart I'm sure that's cool. Sometimes you guys don't follow through on projects and there's really no governance, but it's cool Let's try and open source this thing and that was cool. That was fun. We were very lucky to be involved with that We tried to help bring that to the enterprise, right? The second generation of that was okay cool We did a few hello worlds and we made a few things work. Let's try and get more applications on here, right? We've made stateful sets and we made You know IOT work and we're starting to see serverless and others up The third generation of this which is what was just really beginning and I think you saw some of this all day today Is really going to be how do we make this so the thing drives itself? How do we make this so that the metric that you measure yourself with is not how good are we at kubernetes? But the kubernetes is good enough that it runs itself You know how to scale it the applications scale themselves and you can go to the business and say How fast do you want that? How quickly do you want to get from sort of idea? to iteration idea to execution and all that's going to be enabled by It being fully automated the operator stuff that we talked about it being able to run wherever you want to so you can take advantage of a Google ML Service that's out there and an azure service that's out there an AWS service an alibaba service or something you run internally But all that is really going to be what you'll see the next couple of days But also the next couple of years as well Now the other part of this That I think you'll see and as we've gone through this evolution the last couple years There was lots of approaches to get there Our approach our belief in the whole kind of open-shift communities approaches you're going to have a lot of challenges Your business is going to want to put a lot of different applications on top of this Building this all on top of kubernetes as opposed to Silo x for this set of applications silo y for a different set of applications is really going to be key as well Right, we've seen the community evolve around almost every single use case every single development pattern every single scaling thing Runs well on kubernetes, and that's what we've ultimately been trying to do is get multiple challenges whether it's about enabling developers It's about you know modernizing and integrating applications whether it's about end-to-end automation whether it's about a path from sort of Legacy to to modernization all that's going to run on kubernetes everything from bare metal to virtual multiple clouds Serverless all those types of things So I'm not going to talk too too much more. I'm like I said, I'm sort of a road bump. I hope you've been thinking about questions I'm going to leave you with two slides All right The first one is if you saw any of this stuff and you're sort of new to this and you want to play around that you're a You're somebody who likes to get your fingers dirty You want to go play with this go out to learn dot open shift comm right go out to try dot open shift comm as well It'll play with the force of a learn that opens your comm great set of learnings for basically Directed guidance training right so you want to give certification you want to play with new stuff Totally free totally browser based you don't have to have any toys to to mess with this If you enjoy learning through your ears, I do a podcast once a week. It's called pod CTL It's about mostly about kubernetes. We weave in some open shift stuff as well. It's kind of what's going on in the community and the last thing I'll leave you with and this really depends if you're more of a bird learner or you're more of a I guess a game of thrones kind of learner, but these are all basically free books that you can get right some of our developer focused Some of our operations focused Some of them are these are all written either by folks out of our our group or our folks in the field who do this all Day long so if you're a reader kind of learner, these are great resources as well Did I go too fast? We'll make all these slides available as well


Would you like a faster way to analyze numbers or make numbers easier to digest in charts? Then watch this video to learn how to use something in Excel 2016 called the Quick Analysis Tool. Here's a table of numbers showing the sales results of an imaginary stationary company. Let's use these numbers to show you how the Quick Analysis Tool works. Each row is an order and includes the order date, the name of the sales rep, the item sold, the number of units sold, the cost of a single unit, and the total cost of the order. To use the Quick Analysis Tool, first you select the data you want to analyze. This time select the numbers under unit, unit cost, and total. These are columns F, G, and H. Look to the bottom right of the selection where the Quick Analysis button appears. Click on the Quick Analysis button and explore the many options. The formatting option opens automatically. Now hover your mouse over data bars and notice that bars appear in your sales number. Each bar reflects the size of each number relative to the other numbers shown. Now hover over the color option. The colors pink, red, or green compares each number to the other. The icon set shows whether the value of the number has increased or decreased. The greater and top 10% options show where each number fits relative to other numbers. If you decide to use one of these options, all you have to do is click on it. Let's skip to the total option. We'll return to the chart option shortly. If you ever wanted mathematical calculations instantly done for you with a single click of the mouse, this option is for you. Hover your mouse over the sum across the bottom option and see your answers appear instantly at the bottom of your data. Repeat the process by hovering over average count, percent total, and running totals and see the answers appear instantly across the bottom of your data. Hover your mouse over sum on the right and the answers appear instantly on the right end of each row. Now click the right arrow for more options where you can get answers instantly on the right for average count percent total and running totals. Remember, just click the option you like if you decide to use it. Now let's take a look at the remaining quick analysis options beginning with charts. This time select the entire table of sales numbers. Now click on the charts option. Hover your mouse over each style of chart and think about which style you like best. The clustered vertical bar chart and the clustered horizontal bar chart are both used to compare values across categories. The stacked vertical chart and the stacked horizontal chart are also both used to compare parts of a whole. Click on the style you want to use. Now let's look at the table option. Here you have a table option and several pivot table options. You can watch our video tutorial number seven if you want to know how to make a pivot table from scratch step by step. The quick analysis tool gives you a faster way to make pivot tables to analyze and make presentations on sales data. Click on the table you want to use. Next is the sparkline option. Sparklines are many charts placed in a single cell each representing a row of data in your selection. Sparkline charts show either a line chart, column chart or a chart showing when and lost. Remember to click on the option you want to use. Now you can start using the quick analysis tool in XL 2016 to analyze your numbers and to make them come to life visually in your charts. If you still have questions about the tool click on our coaching link and we will gladly help you. We really want to hear from you so please send us your comments and if you like this video share it with your friends. Also please subscribe to our channel and receive our upcoming videos. Thanks for watching.


Everybody forced here ripping 21 22 crown Royale basketball team all 10 box number 13 random team style Excuse me. You can always find those results at latinsportscards.com. Thanks for joining everybody. Good luck. Here we go crown team all I think the last time I ripped some of this was the national Release when we had the promo going on Exclusive red and get gold number Let's see Why is been there we've got a red pistons Cade Cunningham. They start Yeah, I forgot these have like the impeccable design and a Lakers test of time Carmelo Anthony red I don't know. It's just what that has the only impeccable cards Like Don rush choice. Yeah All right There's a red for the spurs Deontay Murray Got snow globe, you honest like every Thursday game And certain teams you just take the under Paris defense is decent offense is not good Want this kind of Anderson rookie for the dogs And snow globe gold Trey young I'm missing it. Oh, there it is one of ten nice Trey snow globe gold That's really nice. We'll make that one Ice Trey snow globe gold. That's pretty cool. Oh We saw gold. Let's see more crown cards are cool light crown Red Busevich for the bulls. Yeah, it is delicious And snow globe red Jalen green nice Jalen green Rockets rookie these are tricky And then crown hobby get the silhouettes you get the booms Definitely a good product Raptors red Pascal Siakam warriors red rookie Moses moody on the rookie royalty Like crown and sprite man Red rookie magic Jalen Suggs and What's that? Pivotal players Zion red for the pelicans and man, if he's healthy, they're gonna be ridiculous late They're gonna be really underrated Column Ingram Zion. They saw balance units there as well Got some pretty good young players the rookies from last year Alvarado River Jones Got a red Thunder Shagillus Alexander and Red rookie royalty Nix Quentin Grimes Mowgli base you've got a red rookie pelicans Trey Murphy the third and Tested time red he Kyle Ari, but I didn't realize was is 36. I thought he was younger than that You realize he'd been around a long Barnes rain I would probably put Values, I think Kate would be up then I think green Barnes then Mowgli maybe Giddy Warte all of that changes here and there. Yeah, I'm curious how it changes Mellow red for the Lakers and pivotal players Lakers LeBron James I Shame what a shame it's gone Something I don't know exactly what happens. I just don't know how to fix it ready for the Rockets Christian wood and red Cory Kispert rookie royalty wizards on the back. All right, and that'll do for the break. Thanks again everybody got more basketball coming up


All right, so thank you everyone for joining. It's that kind of session again, you know, the closing session. So, EuroPython 2020, the 19th EuroPython conference is almost over. And for some, this is probably sad for others. It's actually a good thing, because it was quite intense, tiring, stressful, and you know, it was long hours. But it's not over yet, so there's still something coming, which is called sprints, the hackathons on Saturday and Sunday. And I already posted some instructions or some, you know, explanations of how we think we're going to run them. If you want to run a sprint, please go to this page that I have posted here and register your sprint there. Right now we have these sprints already set up, but we can add additional ones tomorrow morning. So, we would have to add them. And then, yeah, we can then take it away from there. So, I would like to have all the sprint teams do a short presentation, basically like what you normally do at a regular sprint, where you present all the different teams and then people move off into different rooms to then actually work. So, it would be nice if you could prepare something for two minutes or so. Very short, and then we can do that tomorrow. Right, so some statistics. We had between 900 and 1,000 attendees from over 70 countries. We cannot really give you an exact number, because the closest we can give you to the number of attendees is the number of unique email addresses, and that's somewhere in between those two numbers. But, you know, some attendees, they have not really assigned their tickets to the right people, and so it's not really clear how many we actually had. We have sold over 1,000 tickets sold or registered for the sprints. They were free, right, so they were not really sold. 648 conference and sprint tickets, 350 sprints. Only tickets, which is a lot more than what we had expected. We were expecting 250 conference and sprint tickets and only maybe 200 sprint only tickets. So, that was a lot better. Also, a number of sponsors were a lot better. We had more sponsor income than we had expected. And we actually do have quite a number of people registered on the Discord server, so Friday, 653, which is, I think, quite amazing. The bot that we used, Chuck's Bot, really did an amazing job there to make that happen and so that we didn't have to manually onboard them. Of course, we would like to thank all the sponsors that we had, especially Microsoft and Bloomberg, but also all the others, of course. They basically made this possible to, you know, took away a lot of the financial risk for us. So, who's making all this happen? Well, we're actually just a very small team. We're a bit bigger, actually, than at the in-person event, but then, for the in-person event, we usually have people on site who help and we don't have those in this case. So, you know, the total number of volunteers that we have for running the conference, actually putting everything together at the conference is a lot lower. And we put together a collage of some of the photos that you see here, but of course, these are not all the volunteers, but you know, you can see a couple of people here. Hey, Mark, we can't see anything. And I can hear myself twice because it's coming through your audio. Okay, sorry about that. Let me see. You can't see anything? Nope, we can hear everything. We can see nothing. Okay, now we're good on the audio and we're good on the slides now. You mean you couldn't see all the slides I just presented? Yes. Well, no, we didn't see any of those. We just saw this one. You mean I forgot to... Okay, anyway. Hey, we've been going the whole conference with few technical difficulties. Yeah, well, you know, I mean, it has to start sometime, right? Okay, so this, basically, I told you everything in audio, so you didn't really miss anything. So, yeah, what you see here, these are the people who made everything happen, not all of them, you know, a subset. And this is the complete list of people who helped to produce EuroPython 2020. It's just 25 people, not really much, for a 1,010 conference. And what we want to do now is we want to, of course, give them, you know, the usual kind of applause that we do. Normally at the in-person conference, everyone comes up on the stage now and we have a big round of hand clapping, probably tiring for the attendees, but I think it's a good thing. So, let's try this here in the webinar. The way that we have to do this for the webinar is that we basically have to highlight every single volunteer and then make them, you know, present them here in the Zoom window. And then we will run a round of applause. So, let me stop the screen sharing again, like this, and then we can go ahead. So, this is essentially up to you, Jason and Martin, how you want to run this. I know. Do you want to say anything about each one, Marc? It might make it go smoother. Okay, so this is Ammo. You can always read the name, I think, down in the window, in the Zoom window, but I don't know whether it's shown on YouTube as well. So, Martin, please start the applause. We just keep the applause running. Maybe you can, you know, take down the volume a bit. Yay! This is Stefan. This is Bruno, sitting in the IFF. I'm actually not from the state. This is Andrew. This is Camilla. This is Lais. This is Chuck. This is Sylvia. This is Sam. This is Martin. This is Nicolas. This is Rekli. And who is this? It's you. Thank you, Marc. Are we done yet? Yeah, do we have time? Well, I can't highlight myself, Marc. I don't have the tools. You're right. So, let's give you an applause as well. So, can you show your webcam? Very well. Jason. In the Q&A there are some questions, actually. So, I don't know whether we have time to go for that. Can we go back to the start slide? Yes, of course I can go back. Let me just search. This time I'm actually going to share my screen. Let me do that. So, let's go back to the starts. This is, sorry. This is the starts page. Some people really want to know about the code for conduct cases, whether we have any. There is a slide for this. I'm going to come to that. I just want to say, before we move on, I just want to say thank you very much to the entire team. This has been a really amazing experience.  Right, so let's move on. So, of course, we're going to have a conference next year, right? So, next year is going to be EuroPython 2021. And we need some help. And the way that you can sign up for helping, hopefully we're going to make this an in-person conference. So, it's going to be, you know, we can actually have beers together. We can have an organizer dinner. We can do lots of things in Dublin. It's by, you know, writing to board at europeython.eu and telling us where you want to help. There's definitely enough to do. So, we really appreciate that. This is the slide for the code of conduct issues. So, we have zero reported conduct issues for inappropriate behavior. We have zero reported communication issues. Can we get applause for that? I mean, seriously. That is fantastic. Martin. So, thank you very much to the attendees. You did an excellent job as well. I think this is very good. There's some nice background there. It feels like at the conference. That was rather... Are there finger sandwiches now? Can I have something to eat from the conference? Or do I have something to buy my own? Okay, so let's move on to Europe Python Society. As you may know, it's the organization behind this.  All the profit that we make from these conferences goes towards the European Python community. We support conferences and projects. You can apply for grants. You go to the grants page that we have and then we are going to help you running your conference. Probably, if you want to do something online, come to us and ask us. We have lots of experience now. We want to share that experience, because it would be useless if we just throw it all away. We want to share this knowledge. But also, if you need financial support, we can help you with that as well. You can become a member of that European Python Society simply by going to the website, signing up. And then we have to vote you in, which we usually do. This is the current European Python Society Board. At regular conferences, in-person conferences, we have the General Assembly at the European Python Conference. But this year, it was just too much work, so we just dropped it. We are going to have it afterwards. You see here Anders, Reiko, Sylvia, Stefan, Martin and myself. Those are the current Society Board members. We also had Angel and Jakub on the board, but they stepped down after we switched to the online event. We are going to have the General Assembly in a few weeks. I know, sometime in August, maybe end of August or something. We have to see. Like I said, you can sign up. If you sign up and you vote it in, then you can vote at that General Assembly. The General Assembly itself, well, it's rather boring. I mean, there's nothing we can do about it, because the agenda of the General Assembly is actually hard-coded into our bylaws. So it's difficult to make a fun event. We loved having you. Normally, we would say have a good trip home. In this case, I think we should say stay safe and healthy. See you again next year for your present 2021. You can already mark the dates. I didn't put them here on the slide. The dates are July 26th to August 1st. Most definitely, it's going to happen in Dublin because we have a contractual obligation now to do it there in that week. So we're going to do everything that we can. Please spread the word about the conference, whether you liked it or not. And if you liked it, then perhaps also bring your friends. If you come to Dublin, Ireland is a fantastic place to do vacation. You know, the time of year is fantastic to come to Ireland to travel around a bit so you can stay longer. And it's definitely going to be enjoyable. Right, so now it's party time. Actually, I'm going to answer a few questions maybe before we do this. So let me just go through the questions. I have seen a setup.py. That means we can package and distribute. Oh, those are some old questions. There's a glitch with this room, but I've got the latest questions here. So one person said, was this online conference satisfying for the team? Are there any disasters? The only disaster was that the first keynote where basically it's a bit embarrassing that the first talk is a no-show. But I think we managed quite well by having it today at the dinner time. So that was fine. And we kind of glossed it over a bit. So I think that was good. That was pretty much the only disaster, let's call it. We just had a couple of the usual little fires that we're pretty good about putting those out with our coats. You always have these small little issues that maybe like screen sharing doesn't work like what I just had or what Mark Smith had in the session. Or audio issues sometimes. We had relatively few internet issues, which is good. We had a few issues with YouTube. The stream sometimes not working. But that was more connectivity between Zoom and YouTube because we are not really in that loop. So we just sometimes had to restart it. James said we had lightning talks also had less issues. Yeah, lightning talks went really well. But we have a good technology now. Anders bought this device for doing the lightning talks at the in-person conference. So it's much easier now. Johnny wants to know if the Discord server is going to be archived because we had loads of good discussions. It's definitely going to stay online for, you know, the next couple of months. What we're going to do with it, whether we can archive it, maybe put it somewhere. I don't know how that works. You can probably tell us better, Jason. So what we want to do probably is... Everybody like nobody can message anymore except maybe only the administrators or something like that. And it could just stay there for people to come back to check stuff. If we can make it read only and we can be relatively sure that it will stay up, otherwise maybe we should find some way to archive it in some sense, like archive.org or something. Right, another board could grab all the messages. Yeah, something like that. Because there's a lot of content on the Discord server now, lots of references and things, which we do want to save. We still have to do some discussion on how we're going to do that, so it's not really clear yet. But we intend to keep everything that we can up online. Right, so this is the best time in Ireland, says Namrata, beautiful and sunny. Join us next year here. Yeah, definitely. We're going to try to do that. And then James is suggesting a Python script to scrape Discord. It might actually work. You know, at least read all the content using the API. Oh, true. The Discord API is quite... The Discord API is quite capable and it's easy to use. So if you want to play with bots, I think Discord is a perfect way to get into bots. It's really nice. So let's come back to the slide. Is it still showing? Yeah. Yeah, it's been showing this whole time. That's all right. So now it's party time. We have a party hall channel. It's called in Discord. We should probably all mingle there. And then at 20 or 30, that's eight minutes in the past, we are going to start the work parallel in the Microsoft track. And then after that, we're going to do karaoke talks in the Microsoft track as well. I just tried one of these karaoke talks for the D-Wave talk. That was a lot of fun. Because the speaker was 15 minutes too late. So I enjoyed that. So yeah, thank you again. Bye-bye. See you tomorrow. Thank you very much.