Rocket Samurai: Hello?
Orthogonal Iguana: Hello.
Rocket Samurai: Yeah, can you hear me?
Orthogonal Iguana: Yes. There are no interruptions.
Rocket Samurai: I have some issue with the internet call today.
Orthogonal Iguana: Okay, give me a second to disconnect my earbuds. 123, can you hear me?
Rocket Samurai: Yes.
Orthogonal Iguana: Oh great.
Rocket Samurai: So yeah, can you like, tell me about yourself so that I can adjust my interview?
Orthogonal Iguana: Oh, tell me about myself, just like in an interview. It's still something weird in that connection. Oh, I know it's...Hello, hello. Yeah.
Rocket Samurai: Yeah, I was asking how many years of experience, so that would help me to adjust my interview.
Orthogonal Iguana: I didn't get you. Just cuts over the internet connection. Let me just repeat once again, sorry.
Rocket Samurai: Yeah, I was like asking how many years of experience do you have?
Orthogonal Iguana: How many years? I have four years of experience.
Rocket Samurai: Okay. Yeah, so we can start off with a somewhat medium problem and then if there is time, we can jump into a hard problem. Does that sound good?
Orthogonal Iguana: It sounds good.
Rocket Samurai: Okay, you can select your language. I just picked Java to check, but you can pick a language of your choice.
Orthogonal Iguana: They might have C#.
Rocket Samurai: Okay. Good
Orthogonal Iguana: This is quite duplicated. Let me just clean this up. Okay, let's go.
Rocket Samurai: Okay, so let's say we are given... Have you heard of a problem called rod cutting problem?
Orthogonal Iguana: Rod cutting problem? I might be, but not from the top of my head.
Rocket Samurai: Okay, so let's say... Yeah, I'll detail out the problem here and if you have heard it and you know it for sure, then we can skip it. Go ahead, just let me know.
Orthogonal Iguana: Okay.
Rocket Samurai: So if we are given a lot of length, let's say five, and we are given... So these are the lines. And these are the different possible cuts we can use on that rod. Right, so we can have either a cut of length 1,2,3,4,4, yeah. And then prices of each cut, right? So that'll be like $1, $2, $3, $2, $3... Yeah. So, these are the different cuts of the rod. And these are the different prices. And we want to find like what is the best way to cut the rod so that we can sell it for the maximum price. Like basically like what kind of cut configuration can we cut the rod into, so that we can sell it. One example is one plus one plus one and so on one. It will give us one multiplied by one plus one multiplied by $5 which is $5. Right? So if we cut only in a cut of one, we can cut it 5 times with length one, and the total price will be $5. Similarly, we decided to do like two plus two plus one. Yeah, so the price is $7. Okay, so similarly, the different possible configuration, the maximum price as a result of this.
Orthogonal Iguana: I haven't heard about such problem, but it sounds quite similar to the coin change task and we can jump on to this. For example, it's definitely the problem for the dynamic programming. We can just start from bottom to top, find out the best, keep the maximum price of the current length and the combination of cuts. Do you think we can have a try for this task? Or is this the right direction for that problem?
Rocket Samurai: Yeah, sounds like a good direction. Are you thinking bottom to top?
Orthogonal Iguana: Oh great. So I'm just trying to start implementing this. So we have the rod length, is just as an input and then you need prices as well. So that's our input.
Rocket Samurai: Do you really need the cuts array or the length array? Because prices array will always tell you the total length right? Because prices will always be for one to n - 1.
Orthogonal Iguana: I see that the price will be for n - 1, the maximum of the count is just n - 1, yes?
Rocket Samurai: Yes. And even the cuts, you don't need cuts as well, because cuts is also n - 1.
Orthogonal Iguana: In theory, it might be not so linear. I mean, the incremental by one, the cuts might be in the real world. This is such assumptions of course, it's just an arithmetic progression, is 12345 and the prices accordingly, yes. So it means our rod will be prices length plus one. Yep. And we have the length is called prices. Okay. And I'm programming just to memorize our previous results here. So we can put the length of here and the number of coins will be in the second dimension.
Rocket Samurai: Yeah, I think there was some issue. Yeah. But now I can hear you fine.
Orthogonal Iguana: So the prices here could we just initialize this one as well? So we, we need the... maybe it might be done in one iteration, but I'd like to do this baseline separately. It means we can go through the length. So I believe we do better to have this here the length just incremented by this one, and here by rod is the most straightforward and more logical. And here we just start from zero, it means we have only first price, I mean by one. We will get them...
Rocket Samurai: So by rod, what do you mean? By rod, do you mean the cuts?
Orthogonal Iguana: Just the length of... just here it is, our initial rod of length.
Rocket Samurai: Initial rod length. On line 18. The variable rod, as well as... and length is the total length. Okay.
Orthogonal Iguana: The length of the prices.
Rocket Samurai: Okay, okay, so you have length of the prices and then you incremented by one, which is length of the rod.
Orthogonal Iguana: Yeah, let me just rename it. It's just the main problem is naming and invalidation cache. It's like a phrase. So and the baseline, I have only one. I mean I'm cutting by one and it means I need to price is zero, multiplied by length of rod, it's really my baseline. I'm just cut by one, I just some of the ones, it means this one is multiplied by the length of the rod and it will be my... so I need the here.
Rocket Samurai: Okay.
Orthogonal Iguana: This is my baseline, and then I have a two for loops. About time complexity. The time complexity will be if we have this n, it's called the length of n. And the number of prices, n minus one, it means quadratic time complexity. Because we're iterating two for each loops. So, yeah, and about the space complexity, also a quadratic space complexity because we're storing the previous results in our DP array.
Rocket Samurai: Okay.
Orthogonal Iguana: Is it possible to do is better? Let's just implement our first and think quite right implementation and then we'll maybe just figure out how we can improve it.
Rocket Samurai: Yeah, let's do an implementation. And then if we can see if we can optimize it even further. Yeah.
Orthogonal Iguana: So here is the most important part. We are just basically going to the length of the cuts in the current level of cuts, for example we just so we hear... we add one more cuts to this current length and we need to sum up it to the maximum of this when we have this previous level less by the i. Let me just check it quick if we have this because we zero base so because we have i one, but we need to go back by two I believe. So for example, if we have on the rod length five here, and i will be example one, it means our rod cuts is of length two. So I think we've done our bottom up algorithm and we can return the length of prices minus one and length of rod. Like we just add plus one here it means we can use the length of rod minus one and it will be our maximum value from rod. So, let's just check it more carefully, our approach.
Rocket Samurai: Okay.
Orthogonal Iguana: So let's say we have the price is like from your example, yes. So, length of prices will be four. Length of rod will be five. So the DP then will be here will be an array of arrays. So, here is the length of this array id four. And here we start our initial list, we put the first row here, we place i by index and multiplied by the price and here we'll use the price one. And it makes sense, just the same as we get here. If we have only one cuts, I mean we can only cut by one, we can get by maximum the $5. So then we have our...
Rocket Samurai: Can you see the bug on line number 28?
Orthogonal Iguana: 28... the length of rod plus equal here. We need to place because we have a lot of rod plus one here and we need to reach five here.
Rocket Samurai: Okay.
Orthogonal Iguana: So the free which obviously we are in this range of this segment, it means we need to pick out the maximum between the three and the one plus three, means it's four. And we just finished up here. And does it makes sense?
Rocket Samurai: How did you get seven? So you look at five, like maximum of five.
Orthogonal Iguana: Four plus three.
Rocket Samurai: Four plus the current price. Okay, good.
Orthogonal Iguana: I'll get to seven.
Rocket Samurai: So one quick question, like how would you get seven right? Because I'm looking at the problem, which, so just like eyeballing it, right? The maximum I could make looks like it is five, right, because I can... No, I can sell like two plus two plus one, which is seven. Okay, got it. So I can get maximum of seven by setting two plus two plus one. Yeah. Okay.
Orthogonal Iguana: Hey, just so you wrote it here in the beginning of the task here on the line 51 and 52.
Rocket Samurai: I was just a little confused. Okay, awesome. Can you quickly run it?
Orthogonal Iguana: Oh, yeah, sure.
Rocket Samurai: I will just quickly ask like, because we don't have... Do we have enough time for another question... I think we might have. Okay, so let's say like if we want to optimize this right?
Orthogonal Iguana: Yeah.
Rocket Samurai: In which dimension can you optimize it? Like in terms of time complexity, space complexity.
Orthogonal Iguana: I believe in space complexity, maybe it's, we do not really need the second dimension. Maybe it would have been just enough use a one dimensional array and just compare the previous one. I think we just fill it by and just iterate the same array because we are just comparing the previous numbers. And yeah, it might work for example, because we are doing pretty much the same, we just can fill this array and just iterate and just compare the current value and the price minus the previous one and just update the value here immediately. And we just reduce space complexity by one dimension. I think that will work. For the time complexity, maybe some hash, I'm not sure right now, figure out about a little more. Maybe we can somehow estimate our maximum and if we reach that just stop the our DP and somehow that's one of the options. Maybe we can do some math and figure out what is the maximum... our rough estimation. Another way to optimize a DP, so that may be the maximum here and what else what should be done? Maybe not. So yeah we can have two iterations maybe... I'm not sure right now, maybe maybe we can jump... yeah here jump from the from the i for example because we know we will get here if statement just the same value. We just can start from the i from here because we are doing pretty much a lot of stuff, for examples for a large number. That's definitely better in terms of time complexity, overall I mean the worst type of expertise will be this will be better first, but I mean in terms of the connotations will be the same, but in real life operations, of course will be less.
Rocket Samurai: And if you were to write this like recursively, how would you do that? Like some pseudocode?
Orthogonal Iguana: Recursively?
Rocket Samurai: Yeah, I think we'd have if we have our rod cut problem from something... Actually let's write that code if you want to because we have 15 minutes, so I'm not sure if I can... Or if you're confident about recursive, we can do a different problem if you want.
Orthogonal Iguana: I think yeah, I'd like to hear this hard problem just, it's for this problem, I knew the solution, at least some solutions. So but I had a struggle with the hard problems, at least in the LeetCode.
Rocket Samurai: So, this is called like egg dropping problem, have you heard of this?
Orthogonal Iguana: I'm not sure by naming, but could you explain?
Rocket Samurai: So, we are given like an egg, and we have X number of floors, and we want to find like, let me and so that they don't get errors and maybe if you have... So, if you have n eggs, x floors, we want to find like the minimum number of attempts that is required to break an egg to detect which flow the egg would break from in the worst case, right. Okay, so let's say if I have five floors, one egg, in the worst case, what would you do? Right? You would just try it out from each floor. Are you following?
Orthogonal Iguana: Yes.
Rocket Samurai: And if you have five floors and two eggs, you can get a, you can do this problem a little more aggressively by starting out let's, let's say like maybe like at floor number four, floor number three or two, and then drop the egg from there and if the egg breaks, you know, then the problem reduces to one egg and the remaining floors, remaining bottom floors. If it breaks from, let's say for number three, right, so you're left with one egg and remaining two floors, because three minus one, right? You can from three. And if the end doesn't break, right, you're left with two eggs. And four plus three plus one like, again, two floors because floor four and floor five, right? So you're left with these two floors. And here you're left with one or two floors. So this one...
Orthogonal Iguana: What does it mean to break the floor, so if you didn't get this like. What am I doing? Sorry. We have a five floor one egg, we just dropping the egg on the floor?
Rocket Samurai: Yeah, we just go to floor one. So we have five floors. And we are just given one egg. So we can go to fifth floor and try the egg, right? Because if it breaks, we don't have...
Orthogonal Iguana: Yeah.
Rocket Samurai: So we basically do a brute force search starting from bottom up. But in the second scenario, we can be a little more aggressive. And try out like, we can start from the floor two. And we drop the egg and if it breaks, then we know the answer like we don't need to go to upper floors. We just need to try out from bottom floors. And if it doesn't break, then we know that going on bottom floors, it doesn't help anymore and we go to the upper floors, right? So floor four and five.
Orthogonal Iguana: Yeah, good. Okay, I see.
Rocket Samurai: And we will need to find out like the minimum number of attempts right? So, if we tried it from floor one, what is the times we tried it. From floor two, what is the number of attempts and then minimum of all those right?
Orthogonal Iguana: Okay. We need to minimum for the worst case. So, yes the maximum just the opposite side is just the number of eggs, or we have only one egg and five attempts. So, we have only one egg and oh I mean one attempt for... I mean on each attempt we have only one egg, yes, and do we drop from the first floor but I mean it is my times for the five floors and one egg.
Rocket Samurai: Yeah, so, you have one egg right, so you will try it from first floor. If it breaks, you get the answer that it is the first floor is the floor where it breaks on like the lowest floor from which the egg breaks from. But if it doesn't break, you want to try second floor. If it doesn't break, you want to try third, and so on, right? Because that is the worst case, right? If it doesn't break.
Orthogonal Iguana: Okay, yeah, yeah. I see. Oh, yeah, at each attempt we have one egg or two eggs and we are just dropping from where we can. And how many attempts is the worst case we need? I see. I see. I see. Let me just to think about it a bit more. So if we... could we do the dynamic programming here so because it's just obviously we have this floors and eggs as well. And, for example, if we... so for the second option, we have five floors and two eggs, it means how many times we need in the worst case, we have for one egg here. And if it's not, it means just by one attempt, we can do this... Oh no, we still need to figure out...
Rocket Samurai: Yeah, so we have to do the testing right, from each floor anyways, it's just that the problem becomes an overlapping problem, right? Because if the egg breaks, you reduce the number of floors. If the egg doesn't break, you still reduce the number of floors with the same amount of eggs and egg breaks, your eggs reduce and the floor reduce, and egg don't break, you have the same eggs, but reduced floors.
Orthogonal Iguana: Yeah, yeah. So yeah, it's sounds like the dynamic programming problem as well. As you mentioned you have on each attempt, we need to go through them. So, yeah here in this one, just to if we have a five floors and two eggs, as you mentioned we starting from the two, we always start from the number of eggs, from the second floor... is it our approach to make it...
Rocket Samurai: That depends, right? Like because there are like overlapping subproblems here. Even if you start with one, with the first floor with two eggs and depending on the answer the other like the subproblem answers would also change, right? So you cannot like do a binary search sort of here, right? Starting from the half the number of floors, because we want to try out all the floors. We don't know where it will break from. So, yeah. So maybe if you do binary search, it will might optimize on the number of cycles you spent to find the minimum number of attempts, but the minimum number of attempts would still be the same.
Orthogonal Iguana: Yeah., we can just divide and conquer our problem. And here, when we drop from the middle, it means from the first floor we just reduce our problem. No, it's just overlapping problem. Okay, that's certainly I have not heard about this problem and think about it more. So yeah, we can binary binary search just because the proper floor, so should we do it iteratively? Oh no, we need number of attempts. So just let me finish the second example. How many of eggs we need? Two attempts, or no three attempts in the worst case, isn't it? The answer should be...
Rocket Samurai: Five floors, two eggs. Yeah, we'll have to do that. I don't know off the top of my and but you'll have to try out on the possibilities.
Orthogonal Iguana: So after the first attempt, or maybe two attempts, after the first attempt you find for example, you drop the first egg, it means you narrow to... or narrow to one or two, and you have one egg remaining. And you drop into this egg. For example, in the worst case you drop from the second floor, or is for the first floor? It's better because we still need to find out and eliminate the one from here. For example movie, it might be... I don't know... if it's not broken from the second floor...
Rocket Samurai: Then you need to try on the first floor, as well.
Orthogonal Iguana: But in the worst case, we need two attempts because we know worst case, you still need to know...
Rocket Samurai: No, but you're doing three items, right? So from floor three, you tried dropping to the first egg and if it broke, you went to below floors with one egg and then you have to try all below floors with that one egg.
Orthogonal Iguana: So, just once again, an attempt is just on each attempt here we have a two eggs or attempted just the drop the egg, as soon as we drop the egg...?
Rocket Samurai: Yeah, so attempt is irrelevant of the output, as soon as you drop it that is an attempt right?
Orthogonal Iguana: But what does it mean the number of eggs? It's not relevant then.
Rocket Samurai: That is relevant right? So if the egg breaks, you lose an egg.
Orthogonal Iguana: Yeah, but it's still attempt. If it's not broken.
Rocket Samurai: You get to use the egg again for further attempts, right?
Orthogonal Iguana: Is not counting for attempt if it's not broken. Okay I see. Then, each broken egg is equal to attempt. Actually, so in the worst case, then it's just a free because if we try to on the third floor, it breaks. We try to on the second floor, for example it breaks. And we try to on the first floor, it breaks.
Rocket Samurai: So you can, so if you're in the middle floor, right? Let's say the third floor. And you drop an egg, it breaks, right? You cannot try the second floor directly because if you try the second floor and you lose another egg, you don't have any more eggs. So, you will have to try from first floor again. See if it breaks. If it doesn't, then you try the second and if it breaks from the first, you have answer that it breaks, that is the lowest floor from which it breaks.
Orthogonal Iguana: Oh yeah. Yeah. It means two attempts.
Rocket Samurai: So it is still three attempts, right? If it breaks, then we are left with one egg and bottom are like first two floors. Now, to figure out where it breaks from, it reduces to the first problem, right? Like where we have two floors and one egg. So the maximum number of attempts will be two here for that problem, and then two plus one is three. Right, because we spent one attempt here, on line number 54 for the first problem, and then we spent like two eggs here. So two plus three, one is equal to three. So basically like if you... this is also like similar to like bottom of building where you try to find out like, one egg, X number of floors, two eggs, X number of floors, three eggs, X number of floors and so on. Right? And then with one egg, you start with one floor, with one egg, you start with two floor and with one egg you start with three floors. And you sort of like build it bottom up left to right. Yeah. But here it's like the aggregation of the... like to find out the value at a particular state. It's a little more complex. Yeah.
Orthogonal Iguana: Because you need to use... Keep in mind this binary and binary search approach.
Rocket Samurai: I mean like the binary search actually is not needed. Binary search is only like aggressive strategy to find out the answer sooner. And that may not help either because of the way this problem is structured. Yeah.
Orthogonal Iguana: So if we have for example in terms of our DP, we have five floors. For example, okay we have one egg and we increment the floors, yes, just be the one, four... wait, it's just here, just will do the same the five here is just the number of the demonstrations we should determine in the worst case. So then we have a second floor, we add the order to that second egg.
Rocket Samurai: Yeah.
Orthogonal Iguana: It means for the one floor it will be still the one. For the two floors, it means to also two. Yeah, because might be, we might start from the second one. It breaks, we need to try the first one, it breaks.
Rocket Samurai: Yeah, if the floors and the eggs are the same then at least... at least the number of attempts as the floors, right?
Orthogonal Iguana: And the third one, if we have three floors...
Rocket Samurai: Three floors and two eggs. Yeah.
Orthogonal Iguana: What's going on there? We have the three floors, it means we can start from the second one. Oh, it means still two attempts? Yeah?
Rocket Samurai: Yea. So you have three floors and you have two eggs. Yeah.
Orthogonal Iguana: And it's still two. Okay...
Rocket Samurai: So basically...
Orthogonal Iguana: Yeah, yeah. I see, because we have the two, we can follow the number we're doing on each egg, we are dividing our number of floors by two, isn't it? It means... I mean, we need to confirm to go here to get the two from here, because in that case and we have two floors, and then go from here, because we use one egg, and we go drop our problem to one egg, one floor. So it means...
Rocket Samurai: So you're saying if you drop your eggs from which floors? So you have to... you also have to take into account like you can drop your eggs from first floor, from second, from third and depending on that your subproblems will change and based on those answers, you'll find the minimum number of attempts, right? So of all the possible floors you can throw from, like one, two, or three. And if you throw it from one, you'll get a certain answer. And so one. If you throw it from second, you'll get a certain answer.Answer two. And if you throw it from third, you get a certain answer right? Then of all these answers, which is the minimum one? So you pick a min of all of these, right?
Orthogonal Iguana: I see.
Rocket Samurai: Yeah. This one is a harder problem. I don't think, like yeah. This is usually not asked. It was only asked to me like one interview. I have not heard this used often.
Orthogonal Iguana: But it's still the DP problem, right? Is my strong area of DP. I think around the time, thank you very much.
Rocket Samurai: Do you want any feedback? You did pretty well.
Orthogonal Iguana: Yeah, that would be great.
Rocket Samurai: Yeah. Okay. So do you want me to give the feedback right now? Or you want me to leave it?
Orthogonal Iguana: If we have the time, it would be great to have it right now.
Rocket Samurai: Yeah, so for me, like, I think like you did very well, like with the problem, and then you also explain the time complexity and space complexity, without me having to ask for it. Right. So that is a good thing. And then you also walked me through an example as soon as you finished the problem, or as you were typing the problem. You figured out all the bugs on it. One slight suggestion would be to like, eyeball your solution before running it, right? To figure out, like if there are any obvious compilation errors, right? You don't want to try like, X number of times before you get it working. So I would say just like eyeball it, make sure no obvious mistakes, and then run it. So that you minimize the number of attempts it takes to execute the problem. Sometimes some interviews are like sort of like watching you like how many times you take and so on. Yeah, so you might want to do that. Other than that, everything was very good. Yeah. You explained space complexity, time complexity. And I don't know like, did you discuss multiple approaches? I don't think so. Yeah, so if you can like think of multiple approaches, you might as well throw that in and discuss the trade offs right? I think like if you discuss the trade off initially and ask the interviewer like, which approach do you want me to go with? That will be also a good thing to do. Yeah. And that's everything, very good. And for system design, how are you preparing that?
Orthogonal Iguana: Oh, I'm doing the course so the Grokking the System Design interview on the educated, and I'm also watching videos on the YouTube. Yeah, I have this link to the... I'm registered in this whiteboard platform and try to draw something similar from the educative IO courses, about the system design. But yeah, and just score it's for the first time is I see is quite complicated, might be, and I know there are a lot of the topics to cover and just do that. But yeah, I hope I will finish all this explain the examples from the course. Maybe it would be helpful for me, just to memorize all this approach. Of course I have experience about the design the systems, but not for such huge like the Facebook or Twitter and so on.
Rocket Samurai: I think like the more important thing would be to like, understand all the building blocks, right, like consistent hashing, load balancers, CAP theorem, like all of these things, just to keep them in mind and like you can apply them to all sorts of various solutions like WebSockets. They all discuss all of those. So just remember, like you have all these tools and you can use them. And this is another great book, which I put on line number six. So that book basically is about like distributed systems. I would say like if you are done with all of like preparation for system design and you think you want more then this might be helpful as well.
Orthogonal Iguana: Yeah, I also applied to the course about microservice architecture. And I have an experience, I'm from the dotnet world and experience in the Azure more, but I've also tried to fresh up because there are a lot of similarities between Azure and AWS. I think it's just to mention them in the system design interview as well, all these components because it really helped to build and use the service. Software as a Service is much easier and just reference them during the interview. I think, is it helpful? I mean, is the good approach to for example, mentioned s3 or something like elastic search, load balancing, just in particular, during the interview?
Rocket Samurai: Yeah, I think like it is helpful like to like know, maybe like, you don't have to know like a particular technology as long as you know, like the underlying principles, right? So you can come up with a generic answer like a load balancer, you don't have to, like pick one specific one. But if you have experience with that, that is obviously helpful. But you don't need to, right? So, you can at least learn from like any system and then apply the underlying principles to any generic system design interview.
Orthogonal Iguana: You know, I have one concern about this in this educative.io, they are usually from the beginning of the brainstorm or the system design, they try to estimate the some metrics about the system, or throughput or the latency or the db side for example. We try to estimate how many users and then multiply the number, the size of the image, and just figure out, is it really important, for example, to say we need 50 terabytes of database to a year? I know, a really great article written down about the design system, but it's hard to maybe have, just okay, I can multiply by thousands and maybe bytes. But it'll be enough.
Rocket Samurai: It is hard to reason about the design, like the design you're using, will that satisfy the constraint which you came up with? Right?
Orthogonal Iguana: I mean, I can come up with some numbers, but I'm not sure I might relate them to the... Again, I know the differences in the 50 terabytes and maybe five gigabytes, but in terms of system design, I'm not sure how... I can see the need to just distribute them this data and horizontally scale. Maybe based on that numbers, we need to decide, do we really need the scaling or not when something like that?
Rocket Samurai: Based on those numbers basically, like, from what I know, like you would figure out like, what kind of server, how many servers? Do you need concurrency? Do you need looking? Can you do it in serial mode? Do you need to do parallelism with threads? All of that, right? Like how many storage devices do you need, all of that. So you can just like... I would say, like, just do that for the sake of doing it. And if the interviewer asked, how are you going to actually implement it in your design, you can talk about, like, how many servers you'll need and how much RAM will you need and all of that.
Orthogonal Iguana: Yeah. And it's probably gonna go, I'm not sure how many rounds they do. I need to set the thousands of requests per second, how many of them do I really need?
Rocket Samurai: Oh yeah, like one of the things which is also really helpful is like to have like some baseline numbers for like, how much is the usual network delay and how much... what is the usual time it takes for inter-process communication and all of that, right? Like some baseline numbers, those are also useful sometimes. So there is like you can find those charts on the internet where they give you like, these standard numbers, which is good.
Orthogonal Iguana: Thank you.
Rocket Samurai: Yeah, thank you. Have a good day, all the best.
Orthogonal Iguana: You too, have a good night, it's late for you.
Rocket Samurai: Thank you. Bye.