35th lecture in the course design and engineering of computer systems. In this lecture, we are going to wrap up our discussion on performance engineering by covering the last topic which is performance scalability. So, let us get started. So, what is performance scalability? Let us understand that first. So, so far what we have seen this week is how to measure performance, how to analyze the performance that we have got and how to kind of optimize the performance of a system, you know, a system with given number of CPU cores and memory, how to optimize its performance. So, the other aspect of performance is what is called performance scalability. So, the performance of a system only tells us what performance you get for a given set of resources. This system has, you know, some capacity of say 100 requests per second. Now, you know, over 4 cores, this system has 100 requests per second. Now, performance scalability tells me that if I add 4 more cores into the system, will the total capacity become 200 requests per second? That is what I expect, right? I have given more CPU cores and you know, all the CPU was fully utilized. So, I gave it 4 more cores. Now, it is my capacity also increasing. So, can a system's capacity increase if we give it more resources? So, if it does, if a performance improves, if we give more resources, then the system is said to have good performance scalability. On the other hand, if no matter how many resources you give, the performance does not improve and the system has poor scalability. Note that a system can have very high performance itself to begin with, but the performance can scale poorly. So, these are two different things, performance measurement itself and the performance scalability, these are two different aspects. Now, once we have, you know, this system with given configuration, given hardware, we have optimized its performance using all the techniques studied in the previous lectures and we can optimize it no more, but we still need more performance, you know. This performance is not enough. It is not meeting the offered load, the expected incoming load. In such cases, what we do is the only way to improve performance is by scaling, by adding more resources and hoping that the performance improves because of these extra hardware resources. And the scaling can be done in two ways, which is one is what is called vertical scaling. You know, you have a 4 core CPU, I will add more CPU cores, I will make it 8 core CPU or I will add more memory or whatever is the bottleneck resource, you will add more of that. This is called vertical scaling or scale up. You are simply making one machine more and more powerful. The other is what is called horizontal scaling or scale out. So, if this component is the bottleneck, I will, you know, add, run the software on another machine or another VM and create a replica of this component and split my traffic amongst these replicas. If this component can only handle 100 requests per second, I am getting 200 requests per second, I will have a second copy of it to split the load, right. This is called horizontal scaling or scale out. So, both of these are tried in general in order to scale the performance of a system. Now, note that a lot of cloud management orchestration systems, this auto scaling, they do it automatically. If some component has become the bottleneck, then they will identify, you know, the CPUs at 100% utilization, then they will, you know, add an extra replica and so on.  So, this auto scaling, you know, dynamically expanding your resources when your load increases and also similarly scaling down. If you do not need so many replicas, you know, shutting some of them down. All of this is very important in a real life system because you do not know how much load is going to come at any point of time. Therefore, you have to dynamically adapt, scale your system to meet the incoming load.  When you do this, what you need is, you need a property called multi-core scalability. That is the performance of your application should increase in proportion to CPU cores. Otherwise, you know, vertical scaling is meaningless. It is not beneficial to add more CPU cores if the performance stays the same even if I give extra CPU cores, right. So, what can you do to have good multi-core scalability? This is important to know. Note that this kind of scaling is done all the time. Once again, cloud orchestration systems, they will monitor your CPU usage and, you know, give more CPU cores to your VM or, you know, take away some CPU cores. So, this dynamically scaling the number of CPU cores given to an application component is very commonly done. But just giving more CPU cores is not enough, okay. If your applications performance does not increase with increasing cores, suppose for, you know, one CPU core you are getting this much performance with 2 and so on, then your applications performance should linearly increase. This is the performance with the number of cores. They should roughly increase like this. Only then is it beneficial to add more cores. Otherwise, if it does not increase, then there is no point adding more cores. So, applications that can be parallelized easily, you know, the application logic can easily, if it is running on one core, it can easily be replicated on the other cores. Such applications have good multi-core scalability. But why do some applications not have good multi-core scalability? For some applications, no matter how many cores you add, the performance will more or less plateau out at some level, you know, they cannot use more CPU cores beyond a point. Why does this happen? There are many reasons. One is of course, cache coherence overheads. You know, each CPU core has its own private caches and it has some common caches, okay. So, we have seen this before. So, if you have multiple CPU cores, all of them accessing the same memory, then, you know, the CPU core has accessed some memory location, then the CPU core also wants it, then there is some cache coherence traffic. So, this cache coherence overheads means that you cannot just keep on adding CPU cores forever to your system. At some point, you want to run out of, you know, more CPU cores is not going to improve performance. So, cache coherence is one important reason why the performance of an application may not scale beyond a certain number of cores. The other reason is also, you know, within the application, there could be lot of serialization, you know, just because you have so many parallel cores, does not mean the application threads can run in parallel. Maybe this thread is waiting for this thread for some reason, for some locking, things like that. There could be some serialization and not enough parallelism in an application. So, these are the common reasons for poor multi-core scalability, right. So, let us understand this in a bit more detail. So, when do these cache coherence overheads occur? They occur when the same memory location is accessed from multiple CPU cores. So, this CPU core has a private cache, this CPU core has a private cache and this CPU core is accessing, say, some memory location X here and this CPU core also wants to, you know, write to the same memory location, then you need some synchronization here to either update the latest value here or invalidate this value fetch it from here. Something needs to be done, you know, you need some snooping, some directory to keep track of which core has which memory location and when one CPU core updates its copy and its private cache, all other cores which also have a copy of this data have to either update their copy or invalidate their copy. So, these invalidation messages need to go to all the other cores which also have used this same memory location in the past, right. So, these all these invalidation messages, updating messages, the snooping, directory, all of this imposes overhead, this is all extra work. Therefore, you cannot just keep on adding CPU cores to your system and expect that the performance will improve. And this is not only a problem with true sharing, this is also false sharing, ok. Two CPU cores could be accessing different memory locations that are located on the same 64 byte cache line. Recall that caching is done at the granularity of not bytes but chunks of 64 bytes each. Therefore, different cores are using different data but they are all on the same cache line. So, the same cache line has to be invalidated here and invalidated here when it is updated here, ok. So, this causes cache coherence overhead. So, then the question comes up why do CPU cores need to access the same memory location, why cannot this thread access different memory, this thread access this different memory. So, sometimes multiple threads may be accessing the same parts of a memory image, you know, they might be accessing the same global variable in of the process or you know, the same variable in the heap of the process. So, then in such cases the same memory location may be requested by different threads that are running on different CPU cores which belong to the same process. The other thing that can happen is multiple processes on kernel mode. So, the kernel code and data structures is the same, right, when any process goes into kernel mode it is accessing the same PCBs and same list of processes and everything. In such cases also the same OS code might be requested here and here in multiple different CPU cores by different processes in kernel mode. The other thing is, you know, commonly threads need things like locks and this locks are also accessed from multiple CPU cores. For example, this is the code we have seen of how to acquire a lock, you know, you have this lock variable we have seen this way back in this course and different threads when they try to acquire the lock what they do is they try to set this lock variable to true and if the previous value is also true then you have not acquired the lock you wait, right. So, this is the code to acquire a spin lock using this hardware instruction that basically updates this lock variable. Now this is locked this variable the cache line containing this variable suppose this thread has written to it then this thread also running on another core also wants the lock it is also trying to do test and set right to this lock another thread on another core is also trying to access the lock trying to acquire the lock. All of these threads are contending for the lock and what is happening this cache line that has this variable it is being updated here then again some other core will update this copy is invalidated some other core will update again this copy is invalidated. So, this cache line keeps this is called bouncing the same cache line multiple threads on different cores are writing to the same variable or trying to access the same variable then this cache line keeps bouncing across these different cores keeps getting updated here invalidated here updated here invalidated here this keeps on happening and this causes a lot of extra traffic and overhead in the system. So, locks because the lock variable is shared across different CPU cores this will happen. In general these cache coherence overhead hurt the performance of your system especially when you want to scale to a large number of CPU cores and the other problem is that sometimes threads and processes cannot execute in parallel all the time just because you have n threads and n CPU cores it may not be the case that all of these threads can always run in parallel on each CPU core it is not possible why because maybe you know this thread has entered a critical section and it has acquired a lock then all these other threads cannot run in parallel why because they are waiting for the lock or maybe you know it is a pipeline design where this thread has to do something only then this thread can do something else you know they are waiting on a condition variable whatever reason it is not possible that all the code in your program can be executed in parallel on multiple CPU cores therefore it is foolish to expect that as you add more CPU cores your performance will just keep on linearly increasing in proportion to the number of CPU cores. In fact there is a law or a simple formula and not just a complicated law but a simple formula which is called the Amdahl's law that tells you how much performance gains you can get due to parallelism you know suppose I have some application that is doing some work and some work takes a time t1 on one CPU core and if the same work I try to do it in parallel by having multiple threads on p different CPU cores it is taking a time of tp right. So ideally what do I expect I expect that this t1 by tp this is called my speed up you know if I have one core I took 100 seconds if I have 10 cores I took only 10 seconds each then I got a perfect scale up you know this should ideally be equal to p because now the same work you are doing it across multiple different cores and if it is parallelizable you will get a speed up equal to p but in real life this is not the case why because not your entire application code cannot be parallelized suppose in your application logic only some part of it can be parallelized the other part cannot be parallelized it is a critical section it has to be run by the threads one after the other. So if alpha is the fraction that can be parallelized then what do you have when you run on p cores this alpha part of your work it can be parallelized so instead of this alpha part instead of taking alpha t1 time it is taking alpha t1 by p time because you are running it in parallel on these p cores then the remaining 1 minus alpha time part what is happening you are not able to parallelize it it will still take the same amount of time as it took for a single core therefore this is your formula for tp and the speed up you know t1 by tp if you do this it will come out to not exactly p and if you do this t1 by tp and if you take for large values of p what is it it will work out to this 1 by alpha by p plus 1 minus alpha that is what your speed up will work out if you divide t1 by tp and now for large values of p what is happening this is approximately equal to 1 by 1 minus alpha right. So what is this saying if you have large parts of your core that can be parallelized your alpha is close to 1 then your speed up will be very large by adding more cores you are getting better performance but if your alpha is very small you know almost equal to 0 then your speed up is just 1 how many ever cores you add you are still not increasing your performance by a whole lot okay. So this is what Amdahl's law tells you of course it is basic common sense that if you have large parts of your core that can run in parallel hey adding more CPU cores is good you will get improved performance by increasing CPU cores but if large parts of your core can only be run serially due to you know critical sections locking and whatnot then there is no point adding a lot of CPU cores in your system. So what are the techniques we can keep in mind in order to improve multicore scalability given all this we have seen one thing is avoid sharing data cross cores as far as possible you know if possible split your application data into separate slices and give each slice to a thread and let each thread run on a CPU core on its own so that you know each thread is accessing its own data and it is not trying to access data of other threads on other cores and even split at the granularity of in fact cache lines not just memory variables. So this of course it is not possible to do this in all applications all the time there could be some common data structures at all threads need to access but where possible split data cross cores have per core or per thread data structures so that you can reduce cache coherence overheads and also use logs only when needed because you know logs cause a lot of this cache coherence traffic this lock variable is bouncing across cores and they also serialize your core execution. So do not just you know every time your thread starts do not acquire a lock and do all the work use locking judiciously and there are also actually modern lock implementations that avoid this access cache coherence traffic and all of that. There is also recent work on how do you design data structures that are correct even without logs what are called lock free data structures lock free application design. So all of these are advanced topics so read about it if this locking is in fact becoming an overhead in your application and not just at the user application level even at the level of the operating system also try to modern operating systems are evolving by keeping you know OS data structures also as per core slices where possible so that the interaction between CPU courses minimized and modern operating systems also have what is called NUMA awareness that is you know if some CPU cores are closer to some memory then you will run the process if the process is memory images here you will run the process on the CPU core if the process is memory images here you will run it on the CPU core. This also helps in multi-core scalability. So these are all the techniques to improve multi-core scalability and if you have good multi-core scalability in your application you can vertically scale up to a certain point you can add more CPU cores to improve your systems performance if your systems performance is limited by CPU. So the next thing we are going to see is horizontal scaling of course you cannot add unlimited hardware resources on a system at some point you will reach a limit. So the next thing we can do you know if your systems performance cannot improve any further then what you will do is you will add more replicas and that is called horizontal scaling. If suppose you have a component then what you will do is you will scale this bottleneck component and add multiple replicas and you will redirect traffic you know instead of all traffic going to one replica it will go to the different replicas so that the load is balanced out and so this bottleneck can handle more request can handle more load and this scale out or horizontal scaling is also once again done automatically by cloud orchestration systems like Kubernetes for example it will monitor some pod is you know becoming the bottleneck then it will spawn more instances of that pod. So now when you have multiple replicas you know of say a server or a database then how do the other components and the clients contact these multiple replicas. So one thing you can do is you can tell the other components of these multiple replicas for example if a web server if it has multiple replicas you can return all of these IP addresses in your DNS response so that the clients can you know some clients will talk to this server some clients with this server so if a client randomly picks one of the n servers load is automatically distributed. So when you scale a system you can tell everybody else hey look I had four replicas before now I am adding another extra replica that you can do or a better way is to use a load balancer that is all clients do not know that there are multiple such replicas clients will send all the traffic to just one address and this load balancer will then distribute the traffic to the multiple replicas of a component. This is the load balancer so this is a special component either software or hardware component which actually directs traffic to some replicas according to some policy and you know it will adapt as more replicas are added it will you know distribute traffic to more replicas less replicas and so on right. So these load balancers are extra components that are added to redirect load to multiple replicas now which one do you use this one or this one it depends on your application but usually the load balancer based design is preferred because every time you scale up you do not want to tell all the other components in your system you know if some database has an extra replica you do not want to tell all the application servers hey look you know my configuration has changed so it is easier to simply use load balancers. So now this load balancer design let us understand it in a little bit more detail you know how do these load balancers work. So there are roughly two types of load balancers one type of load balancer just works at the network layer of the traffic that is you know there are multiple server replicas at you know these servers are all listening at different IP addresses then what this load balancer will do is whatever traffic is coming in so all traffic comes into one server IP address you know that is returned in the DNS then this load balancer will rewrite the destination IP address on the packet it will change this destination IP address to point to the server replica right. So this load balancer is redirecting traffic you know all the traffic is coming to some virtual IP address some dummy IP address then the load balancer is changing these destination IP address putting server 1's IP address on this packet server 2's IP address on this packet in this way it is changing the IP address of packets the destination IP address and maybe even port number of packets to redirect them to different server replicas okay. So this is a network layer load balancer why because it is changing only the network headers in order to do that it is not doing any application layer processing. The other kind of load balancer is an application layer load balancer in this what happens is the clients directly talk to the load balancer and not to the server replicas for example if you have an HTTP application layer load balancer then the client when it sends an HTTP request the request is received by the load balancer you know the TCP syn message is received by the load balancer SINAC is sent the connection is established between the client and the load balancer the HTTP request is sent to the load balancer. So the load balancer does all this transport application layer processing it will see the request and then it will send the request to either this server or this server to the various replicas it will send the request it will get the response back and it will return the response back to the client right. So this load balancer is very much involved in the application layer processing in reading the application layer request okay. Here you can do more sophisticated you know maybe if it is a HTTP request for the finding the searching for products in any commerce website. So those requests I will send it to the server if it is a request to purchase items I will send it to the server right. So this load balancer can do more application level redirection of request to the different server replicas okay. So these load balancers are more complex than a simple network layer load balancer. And this application layer load balancer now that it is reading the HTTP request it can do lot more things for example if it is static content it can just directly serve it from disk it does not have to go to any of these application servers if it can cache these responses it can also terminate HTTP SSL connections that is you know SSL the secure HTTP only runs till here this guy will send the HTTP certificates SSL certificates and all that. So that because this part does not have to be secure it is within a data center. So all this SSL level functions so this application layer load balancers usually do a lot of extra application layer processing also. That is why these are called proxy servers they are called reverse proxy servers because they are at the client side if you have this proxy server it is a regular proxy at the server side if you have it is called a reverse proxy right. So application layer load balancers in addition to just redirecting traffic they also do some extra application layer processing also because they are reading the application layer request they understand what the request is so things like caching or static content directly getting it all of this can be done in a application layer load balancer. So these are the two types of load balancers that we have. So the next thing is policy you know load balancer has multiple replicas it has to redirect traffic to these replicas on what basis does it do it, what policy does it use. The most important thing to remember is traffic of one TCP connection should always go to the same replica. You cannot send one packet of a TCP connection to one replica another packet to the other replica it would not work you know the TCP level state that is maintained inside the operating system it has to be in one replica itself. So now the question comes up how do you distribute TCP or UDP connections to replicas that is the question not just distributing packets randomly but how do you assign connections to replicas. So one simple thing could be a round robin policy okay whenever a new connection comes I will send it to the first connection I will send it to this replica second connection to this replica third connection to this replica right you can use a simple round robin policy. So when and you have to do this on the first packet of a connection not on every packet the first packet of a connection you pick one of the replicas and then you store this mapping saying this connection you know from this IP this port this source IP this source port this destination IP this port this connection has been assigned to this server right this mapping you remember. So the first packet when a new connection comes up you create this mapping use based on say round robin policy and for all subsequent packets of this connection you will look up this table oh this connection I have already assigned it to this server you will send all packets of that connection to this server right. So the first packet you will assign in a round robin manner remember this mapping somewhere because for the second packet you have to send it to the same server therefore you remember the mapping and all subsequent packets of the connection you will send it to whichever server has been assigned previously. This is one way the other way is you can do something like hashing you know hash this connection tuple and you know suppose you take the source port destination port source IP destination IP you take a computer hash of this you do modulo n where n is the number of servers and you know this modulo n value works out to 1 you send it to this server if it works out to 2 you send it to this server and so on right. In this way you can use any mathematical function also to map a connection to a server. But of course the problem with this is what if your n changes suppose there were 5 replicas you are sending the hash value worked out to something modulo n worked out to something you are sending now this n value changes then existing connections once they have been assigned to a server they should always go to that server just because your n value changes you cannot say oh this connection now start going to some other server. So, for the duration of the lifetime of a connection you have to keep this mapping the same otherwise existing connections will break. So, there are various other policies possible instead of round dropping you can see which server is least loaded you know the server is doing a lot of work you might send it to some of the free replicas. In this way there are many different policies possible but the important thing is this has to be done at a connection level you cannot send one packet of a connection to one server another packet to another server because all the TCP state you know congestion control acknowledgement all of that it has to be in one machine only. Now the next question comes up what if you know a request of one user. So, suppose I am a user I am doing some online shopping and I added one item and you know my request to add an item was sent to this server replica and this replica added my item to the shopping cart. Now my next request to add another item if it goes to another server then the server may not have my shopping cart from the previous server you know my shopping cart was here. Now my next request this TCP connection goes to this server then what is happening. So, we need these servers to somehow synchronize with each other and you know take care that the user state is correctly maintained just because you have multiple replicas you cannot say you know incorrectly process user state you cannot say oh no your request this is the first time I am seeing your request the rest of your request has been processed on another replica you cannot do that. In spite of having multiple replicas we should ensure that the application layer state is maintained correctly. So, how do we do that? One common way to do that is a lot of load balancers they try to do ensure what is called stickiness of users or sessions that is if a user is doing multiple transactions over multiple TCP connections in a session for example, user is searching for products and buying products adding a bunch of products to shopping cart and buying them. In such cases all these requests of one user if they go to different replicas then we have this problem that you know half the shopping cart is here half the shopping cart is here in the server and so on. So, all of these different connections belonging to one user to one session of a user. So, the session can have a notion of the time you know if this user comes back 20 days later I can send him to another replica, but for this session for this browsing session for this purchase session all the traffic of one user we want to redirect it to the same replica all the TCP connections of that user we want to send to the same replica. So, that the user state is correctly maintained you know whatever state of the user like shopping cart is correctly maintained. If you do not do this if you send different connections of a user to different replicas then the only way for this to work is all of these replicas store the shopping cart in some database and every time a user request comes you have to fetch it from the database to see what is the latest update and then add the item to that shopping cart right. So, it involves a lot of communication with a database and if you want to avoid that you have to send all redirect all connections of a session of a user to one replica only. So, load balancers that do this they are said to have stickiness you stick all the connections of a user to the same replica. Now how do you do this stickiness? How do you identify a user session? You can identify user session using various things like users IP address or HTTP also has this notion of cookies. Cookies nothing but a special string that identifies a user. So, whenever you make a request to a web server it will send back along with the response it will send back a cookie and if you store this cookie in all subsequent requests you will your browser will send this cookie. So, now the web server can easily identify you and redirect all those requests with the same cookie to the same replica right. You remember that this user this session is assigned to one replica you can first time you can assign it anywhere around Robin or hash or something. Then all subsequent connections from that session are redirected to the same replica and this stickiness ensures that the data can be stored locally you do not have to always update data in a database always synchronize with other replicas you do not have to do that it means it makes it easy to maintain the state of the user in one replica locally right. So, the larger problem we are seeing is how to manage this application state across replicas this is not easy once you have you know multiple replicas of a component if you had just one replica of a component whatever processing the component is doing whatever state information about a user like contents of the shopping cart or all these things can be stored in one machine in you know in the memory or disk of that one machine. But once your processing is split across multiple replicas you have to be very careful because if a user's request goes to one replica one time another replica another time you have to ensure consistency right. So, how this is done this is done in many ways either you can say I will have a completely stateless design what does this mean all your you know front end and all your application servers they do not store any data at all all data is always stored in remote databases in some other machine it is stored. So, that even if you have multiple replicas even if you know one user's one connection goes to this replica another connection goes to another replica all these replicas are accessing data from a common database ok. So, one user adds an item to a shopping cart that request is handled at this server then this server will update the shopping cart in the database the next connection of the user goes to another replica this replica will also access the shopping cart from the same database. So, you have a lot of overhead you to constantly accessing the database but in this stateless design because any of these replicas do not store any information locally everything is stored in a database it is easy to do the scaling right the load balancer design is simple you can always add more replicas because everybody is anyway using the same database you do not need any user level stickiness any replica can access state of any user from the database. Can you know it is easy to add replicas it is easy to scale the system the load balancer design is simple you know you do not have to worry about stickiness and all of that you can send any connection to any replica it will all work fine. So, this is called a stateless design this is one way to design applications only caveat is that the overhead will be hide you to these remote accesses. Then the other design is what is called a stateful design but a shared nothing stateful design that is whatever is the application state you know this shopping cart database you split it amongst the multiple replicas you say this replica will have the shopping cart for these users this replica will have the shopping carts for these users. So, you split all your application database into these multiple replicas. So, that this is called the shared nothing architecture because you completely split each of these replicas has a disjoint set of the application data. So, now your load balancer whenever user request comes if it is the users database is stored at this replica it will redirect the request there if the user state is here it will redirect the request here.  So, you have split the state across all these replicas each replica stores a slice of the application layer databases and tables and everything and user state is partitioned this way and the load balancer will ensure perfect stickiness right this is called a shared nothing design and it is a stateful design why because each replica is keeping state you are no longer using a remote database and you know this replica is not stateless but it is keeping state this is of course one way to design applications. The other way is you use a stateful design but you use a fully replicated stateful design what does this mean each replica has all state of all users here also there is all state here also there is all state. So, now your load balancer design is simple any user can go to any replica why because the state is not partitioned it is not like user one is only stored here user two is only stored here all user state all shopping carts are stored here all user state is also replicated and stored here. So, it is a fully replicated stateful design right. So, the load balancer design is once again easy no user stickiness or anything any connection goes to any replica but the problem with this is you have to keep this state in sync with each other ok every time any time some state is updated here you have to tell all the replicas to update that state right all the copies of the state have to be kept consistent with each other which is a problem especially when you know some servers fail the server failed so therefore this server could not update the state at the server all of these issues come up. So, how to ensure consistency when state is replicated when there are failures all of this we will study in the next part of the course right at this point what I would like to do is just lay out these designs to you when you are designing application components you also have to keep in mind should the application components be stateless should I store all state in some other database or should I store the state locally within the component itself and this will have implications for how you scale your application if all your components are stateless it is easy to scale if your components are stateful but your state is split across different replicas then also it is easy to scale but your load balancer should ensure user level stickiness or if your state is fully replicated in all replicas then no stickiness is needed but you have to constantly keep the state in sync right. So, when you design applications for horizontal scalability you have to think about how you will manage the state within the application also across these replicas. So, that is all I have for this lecture in this lecture I have talked to you about what is performance scalability. So, whatever performance you get in one component is different from the concept of scalability which is how does the performance improve as I add more components or more CPU cores or more resources and we have seen two different types of scalability vertical scaling which is adding more resources to an existing component and horizontal scaling adding more replicas of the component right and a simple exercise for you is you know measure the performance of any application web server by increasing the number of CPU cores you know if you have done a load test with something like jmeter on an Apache web server increase the number of CPU cores and C does your performance increase do you have multicore scalability or not. So, that is all I have for this lecture this week completes our discussion on performance engineering and we are going to start on reliability engineering in the next week. So, thank you all and see you in the next lecture.


Today's topic is projections of line. Learning outcomes. At the end of this session student will be able to draw the projections of line with different end conditions. So, this is the simple problem I am going to take. A line measuring 70 mm has its end 15 mm in front of VP and 20 mm above HP and the other end B 60 mm in front of VP and 50 mm above HP. Draw the projections of line and find out the inclination of the line. So, now, so I have to write down the given data. So, line measuring 70 mm AB line is given 70 mm and two different ends are given. So, by taking that ends conditions are distance I have to draw the draw the line. So, first what I have to do I have to take a reference line I have to take a reference line. So, this is the reference line and this is the x y line and it is given 70 mm has its one end 15 mm in front of VP. It means I have to take 15 mm in front of VP and another end is given 50 mm. So, 60 mm in front of VP I have to take 60 mm from this and another end A is given that is 15 20 mm above HP and 50 mm above HP. Then what I have to do I have to take 20 mm above HP here and 50 mm from here I have to take 50 mm this side. Then what I have to do I have to take the I have to draw the projections of these lines sorry locus of this line this is the locus of point A and this is the locus of another point B and similarly locus of point A and locus of point B. Then so I have to write down this what is the next step is a line measuring 70 mm then what I have to do I have to take the 70 mm from this this point. So, this is the 70 mm and similarly from this point I have to measure the 70 mm then I have to mention the points this is the AF and this is the BF dash this is the AH and this is the BH dash line. Then next I have to write down the locus of this locus of BF dash this is the locus of BH dash this is the locus of AH and this is the locus of AF. Then what I have to do next I have to project these lines so I have to project the line up to locus of AH and this from BF dash I have to project the line up to AH. So, I have I am getting two points here this is the point 1 and point 2 and I will going to mention the name this is the BF B1F and this is the B1H point. So, next what I have to do I have to rotate this line A as AF as a center and B1 dash is a distance then I have to rotate this line and intersect with the locus of B1 BF dash and AH as a center and B1H is the distance and I have to rotate this line and up to BBH dash locus point. Then I am getting these two points. So, this point is called as BF and this point is called as BH. Then I have to draw the front view and top view. So, from this I have to draw the front view. So, this is the front view I am getting and this is the top view I am getting. Now, so the next step is we have to calculate the angles apparent angle as well as true length inclination. So, this is the true length inclination and this is the apparent angle we have to calculate. So, theta we have to calculate alpha we have to calculate phi we have to calculate and beta we have to calculate. So, first I will going to show you the how to calculate the beta and phi then we have to calculate the alpha and beta. So, what I have to do I have to take this and I will going to measure the phi theta theta I am getting here is 26. So, I am getting the theta is equal to 26 degree and I have to calculate the phi u. So, I am getting here phi is equal to 39 degree. So, pause the video and calculate the apparent angle alpha and beta I hope you have calculated the calculated the alpha and beta. So, I will going to show you how to calculate the beta now beta and alpha. So, I have to do what I have to do I have to take this and I will going to measure the angle I am getting here 40 is the alpha 40 degree is the alpha and similarly I have to calculate the beta. So, here I am getting 45 is the beta degree is the beta. So, this is and now I have to show you the how the lines is flow this is the direction of flow of lines. So, this is how we are going to calculate the simple problems by taking the two different conditions and true length is given. So, thank you.


President Bola Tinnubu joined the Muslim faithful at the State House Mosque for the Ramadan Tafsir that is the explanation of the Holy Quran on Tuesday appealing to Nigerians to pray for peace and stability in the country. Declaring open the annual Tafsir, President Tinnubu advised the Muslim faithful to demonstrate kindness to one another and their neighbors while also supporting the less privileged in the society. President Tinnubu told the Ulama that God has given them the wisdom, knowledge and the heart to teach others emphasizing the importance of teaching forgiveness, patience and endurance to the faithful as well as sharing their blessing with others. To discipline ourselves, to help others and be kind to ourselves, may Allah that give us this opportunity to strengthen our resolve, help us change our country, extend our love to our neighbors. We face challenge of kidnapping, banditry and everything. May He show mercy on all of us. He show mercy on our dead and accept our good deeds. Almighty Allah give us the strength and good life to see the month of Ramadan through and to continue in good faith to worship Him.


Yeah, we on boss talk TV shot at the e-heater reason you see wow Check it man is in the building man. I'm checking. I'm checking everything to come through man look like Man, let's talk about it man. My girl Nick is she shot back man She she definitely tapped back into the Nikki. I know man, you know, she didn't put the bond in the pimp in it So I'm good, you know, I like I told you I'm a Nikki fan This was crazy though. I didn't see the Distract earlier. I'm like man is that and then it came out man came out through the night overnight overnight So when you look at when you look at these these these these girls a dope man So I'm telling you right now man both of them. I like to see the little old back and forth I'm that type of guy to yeah to look cat fight, you know, I love it, bro So yeah, she she she she clapped back and she had a lot to say man And I'm telling you right now.  We've seen that coming earlier on man With what she was tweeting and how she was responding to the Actual his song which song is the best though? Which song is the best out of these two? We got to figure that out man because hey, you know, they did these are two of the top tiers for me These my girls both of them.  So this was good for me I like hearing it. I like seeing it. I like I like the way she come back and the way she got into it She was boom boom boom, you know, she was getting to it. So I loved it, bro Hey, is it is it better than his? I don't know look like his had a little more, you know time put into it This was pushed out pretty quick.  It's you know, Megan Which which one is the best his or this one? I'm trying to figure that out You know his a big foot Man Megan is a Megan is a beast man. She's young. She's full of fire, you know She she walking through there like she got a 30. She is the new new So, you know, you guys are watching these girls go in man These girls are these girls is going back and forth. Is it too much family thrown in this though? Let's talk about that for a minute. Is there too much?  I can't lie Nikki was crucial man. So Let me know man, what y'all think man, I I listen to both of them. They both came out quickly You got a chance to digest which one you gonna rock with I rock with both of them to be honest with you. Like I said, I'm a Nikki fan. So I'm old, you know, I'm looking at how she rolled. I know how she She got a lot of ways she can come at you She also points that out in this song. She say that my girl Megan is a one-flow whole. Oh, it was like what like like Man, but the one thing you can't do in battle is let somebody trick you out of how you flow and all that You got to come with it the way you come with it Do y'all agree with that all the people that watch boss talk 101 do y'all agree with that like I'm trying to figure out Is this something she should just stay focused on what she do and really really bring it the way she bring it Or should she slip over into that? You know trying to figure out what the hell, you know Nicki Minaj is talking about when it come to her flow Is it one flow is it the way Megan wrap is it one flow is that is that all we get when we hear her? You know Megan the stallion is killing the killing the game right now.  I'm happy about that You know, I'm in Texas man. Let's keep it clean. The South is a whole dimension down here We we you know, we got we got people at the gate saying hey, you got to do it this way. You got to do it that way I love Nikki though. No cap me and Nikki is Yeah, we I'm Nikki Nicki Minaj back But Megan Megan you got to come on with it. She a beast man. I don't know like I said, there's been a few Times that I've seen you know, is it the Cardi B and Nikki connection that got I mean the Cardi B and Megan connection that got Nikki feeling away What getting the comments tell me what started this whole thing what caused Megan and her not to see eye-to-eye is this good sparring. Is there something that they playing together? I don't know cuz it's this internet man. Everybody playing internet games Just to get a reaction a lot of times So I don't know y'all got to let me know what's going on man. This last part right here though Was she just talking?  Nikki got a history Go into Just deep like she's doing this one. Is it something, you know, the world we Nikki is about to launch a project, you know We never know when Nikki, but I know she's well put together. She's an artist as well established She's she's not she don't have to do this, but she did it because of the felt disrespect I guess from Megan, you know Megan Megan chopped it up and did what she do That like she had to speak on a few things and here you go. Which one you like do you like the? Do you like the one Bigfoot or do you like the hiss which one you riding with they both came out quick We got a battle. We got a short battle. We got these two battling man.   I Know for a fact Megan how she feel about her mother So I know this is something where she you know She gonna have to she gonna have to be strong and deal with this this blatant disrespect It's coming when you get the more you grow the more people gonna come for you anyway That's a part of all the stuff that going on the internet. So you got to be ready for that like They coming like this whole situation I you know, I could have told you it was gonna come anytime somebody start stepping up and being you know Something different of what they've you know been able to accomplish man. I remember Megan when she first started out and You know, she been going through her whole be it when it come down to her career It ain't been no peace. She she definitely built for this whole internet game that they play So she came she's been conditioned for this from being shot From going through different, you know situations with different men from saying she was sleeping with this guy And that guy she been through the ringer when it come down to being drug and the name being something Where it stayed in the public eye her and cause back-and-forth issue, you know It's always something man. It's always something to where she stays in the midst of some controversy And that's my girl though Hey, then she alluded to a nose job. I mean, is that true is some of this cap Is this another cap Williams where some of it's real and some of it's fake What what's going on with this? Is it is it?  I? Don't know, you know, like I said, I just it's a trip to me I like I said love both of these girls get in the comments Let me know what you think is this something that's a real situation or is it something this cap? You know far as the things that Nikki said and was Megan did Megan go too far did Nikki go too far? Let me know what you think man Boss talk 101 gonna be you know, I'm gonna cover this one You know it take me a minute to really just say if I'm gonna cover something this one I think I'm gonna stay on top of a man. Thank you guys for liking subscribing the channel make sure you guys share my Content and be aware that I'm gonna come I'm bringing I'm taking it there This is it 2024 you gonna get to see a lot of me You're gonna get to be in the cave with your boy. It's going down. I'm enjoying it I like talking about different things man. We got a lot to talk about this year man Let's get to it man. Who won this thing is it hits or is it big foot? Let's go. Let me know man getting these comments right now Boss talk 101 what a boss is talk man. It's a wrap You


Um, so we're, we're chatting right now.  Um, it's, it's interesting. So after teaching and health and wellness for so long and finding kind of a secret, well, not kind of a secret weapon to help people live a better life. It's always weird to me, like where people are at. Like why would they try it? Why would they not try it? I'm always curious of why people haven't started yet, especially when you see the stories that have come in. What's up, Mr. Derek, a small man. Um, and so I'm always curious of why people would not. Uh, we're doing a new series, uh, Coach Rob DeBoer and I are of like kind of debunking the myth because we're big into the fitness industry and they, and they just, some people, it takes a while for people to become open minded to new concepts, I guess, even though it's not that new. So with that said, that, hey, Jen, remind me tomorrow, I'll be doing a special live on a coaching live tomorrow. So I got to put that out, but can you text me on that please? So really quick, you know, if you're watching this and you've used key tones before, what are some benefits you've gotten? So basically this is, I'm going to explain this in the simplest manner is that there is an end result of optimizing health. Um, let me rephrase that. If I can teach you how you're good, you're going to feel. If I can give you the end result, how do I teach you the beginning? What's up, brother? Um, if I can give you the end result, it's easier for me to teach you the beginning.  What's up, Lori Daner? When they go on a journey, their, their, their anticipation of feeling better is, is part of the reason why they feel better. Right? Although if they don't get results fast enough, that anticipation goes away and then they don't feel so good that they're really real feelings starts to come out. And when you drink ketones and why I recommend ketones, I used to teach kids like diet, low carb dieting, a lot of different diet strategies, fitness strategies is that most people can't make it far enough into the program to feel really good. And then the ones that do make it into the program don't maintain it. They, they end up falling away and falling and messing up. And then they go back to their old lifestyle. That's why when you hear those people say, well, if I stop what happens, well, if you go back to your old lifestyle, you're going to go back to the way you were. That's, that's how they, like your old lifestyle wasn't very good. So why drink ketones are so, so important because it gives you the end result of feeling better, meaning that you have heightened energy, heightened mental clarity, focus. Literally it was invented for the elite of the world, maybe seals, NASA astronauts. This is where all started from, right? So if you feel great, well, what will happen is you're more likely to participate in all the other things that you should be doing, right? There isn't anything out there yet doesn't exist. I doubt it ever will exist. I hope it does, but I doubt it will where you can legitimately just eat and do whatever you want, take a pill and magically be the healthiest person in the world. It doesn't exist yet or ever. This is the closest thing you ever found.  You're going to eat better. You're going to, you're going to move more. You're going to, unless you're my cousin, you're going to sleep better, although she's been sleeping better. Currently drinking every. I didn't know that you rolled your card, Lori. So people that aren't drinking ketones yet, I'm always curious. Why are you not drinking ketones? Like, why would you not get started? Now, part of it might just be that you don't even know about them. You just hear them for the first time. Some of you might think it's expensive. Some of you might think you don't like the taste. Some of you might, what are some other reasons? I don't know what else, I don't know what else there could be.  It's just, I don't know. The other person is cost. The other person is flavor and taste. Maybe I don't know what to do if I was to do them. Really quick. Can somebody on Facebook send me a comment? Destinations. Oh, there it is. Why not Rebecca? Oh, there we go. I got a comment on Facebook. I had to make sure my stream guy was working. So, education event, literally the one of the leading metabolic specialists of non-toxic therapies and treatments and researcher out of University of Florida spoke Monday. The leading naturopathic doctor spoke on Monday. We had the former chairman of NASA speak on Monday. We had one of the leading performance coaches in the entire planet speak on yesterday, last night. One of the top formulators leading researchers on human optimization and ketone research and metabolic and anti-aging, literally coach Tony Robbins spoke last night. And I'm like, if it's good enough for NASA scientists, I think it's good enough for you, right? Like, wait a second here. So, if you don't know what it is, take time to learn, reach out to us. Yeah, reach out to us. Yeah. Hey, man. Jesse, I did too much caffeine. No way there's too much caffeine. Actually, I can talk about that too. Caffeine-free or caffeine, half and half. The research on caffeine in the brain is pretty significant. So, I like my caffeine, although I can sometimes overdo it. But the, the, if you don't know what it is, take time and learn. You deserve that. You owe it to yourself to learn what it is. Really quick, if you're using ketones right now, put down one or two of your big benefits. And, but here's the thing. And that's okay not to know. It's okay to take time to learn. And it can be hard nowadays. It's funny how nowadays it's harder to learn something because you don't know who to trust, right? I used to be able to Google me at Google Well. Who do you trust, right?  I'm working on it. I'm working on being a better marketer, but I'm not a good marketer, meaning that I don't use good like hooks to get people to come and watch me and then sell them on something. I struggle with that, right? That's not my nature. I'm a natural coach, but I have a huge background. If you look at, you know, the individuals I've trained with or worked with, it's like, wow, like a pretty reputable guy from a knowledge base. But you wouldn't know that. How do you know that, right? The person may, you might go to a page and it looks perfect because the guy or gal is really good at making it look like it's professional and clean and like, I must trust that page because your brain's telling you to trust it, but it might not be the right information. So I always tell people like, go do your work. If you do a homework and you research this enough, you will never stop drinking ketones ever. So that's one, and that just takes time. Education is, it's hard out there because there's so much noise. Seven years ago, we were the only company in the world. It was a little easier. Now that, now that people are like spinning keto, the word keto didn't exist until we launched it, right? It maybe did, but nobody talked about it. The second thing is cost. Let's bring up cost. Some people say it's expensive, right? And so when it comes to cost, it's tough too because when you know what it is, you know what it is. When you understand the significance of what this does for you, it's not too expensive. I legitimately went out the other night, my wife and I went out and it was $13 for an alcoholic beverage. Right? Now I enjoy a couple of drinks. I'm going to tell you right now. I'm not, I'm not against it, but literally I don't even balk an eye at spending that on a date. That's my wife, right? Just our meal, not one of our meals combined. Now I probably combined this a little bit more than our meals combined is, is enough product for me for an entire month. Now I know not everybody goes on date nights like myself, but the reality is it's not that much for less than $10 a day. You can completely transform your life. That's one crappy meal out a day. Change your life forever. It's just perspective, right? It's a perspective that you're looking at it. And when it tells me when people think it's expensive, there's a few things and don't take offense to this or do your priorities in the wrong spot. Well, the first thing is you don't know what it is, right? You don't know the significance, right? Because my same, my sister that says it's expensive smokes a cigarette, right?  Like the priorities in the different spot, what they think is important is different than maybe what is important, right? And that's all of us do that, by the way. It could be designer purses. It could be food. It could be sex. It could be Amazon. You got, there's an addiction to something out there that you can alleviate, right? So it's a choice at this point that you could choose another path, right? But if you don't have enough knowledge or awareness of it, you might not choose that path. That's understandable. I get it. That's why education is so important. That's why we lead the events we lead. But when it comes down to, like, think about our diet or food. People say it's expensive to be healthy. Well, no, it's expensive to be sick. I'm going to tell you right now. I've been sick. It's very expensive to be sick. I've spent hundreds of thousands of dollars. That's multiple on when I was sick. It's expensive to be sick. It's expensive to have surgery. And even if you have the greatest insurance in the world, which I actually do, the cost of time, energy, efforts, the not working, it adds up. It just adds up. If you have the best insurance in the world, being sick adds up. And that's the fact of not feeling good. I mean, I'm just talking about the financial side of being sick is not good, right? That's expensive. So once again, it comes down to education or who do you trust and who do you follow? And then the last one I would say, and cost is crazy. I mean, there's programs out there right now. I mean, I have to get on calls of people that have their stomach stapled, that they do these synthetic foods and injections on a regular basis to try to lose weight or get healthy.  It's legitimately not good for them. I'm like, you're willing to spend the money on that and not take something that's going to actually change your life forever. That's making no sense. Tartar chips and pop cost a mint right now. I don't know what tartar chips are. Maybe that's tater, tater, tater chips, tater chips. Ah, downtime. I was a trainer for many years. I charged anywhere from $125 to $175 in an hour. I charge for my coaching. You get, I give it free if you're drinking our product and you're working with our community. You might not always get a one-on-one, but it's perception, right? People would pay that. I had a wait list for six months. People would pay that to come see me and then people walk at spending six bucks a day, right? People would see me two, three times a week, y'all, at that rate. I'm not trying to brag. I'm just trying to give it a perspective, but they value their health so much and their life so much they're willing to invest in themselves, right? So that's the craziest thing. So why are you not drinking ketones yet? Is it because you're not educated on them yet? Is because you think they're expensive? Well, we just debunked all that. The education on ketones is the biggest breakthrough that we may see in our lifetime, but it's for surely the biggest breakthrough in nutrition, health, wellness, supplementation. Bar none. It is huge breakthrough, right? Globally, it's getting back to the foundation of how we... I mean, it's big. This is a big deal, right? Cost, we address that. Now, taste. Let's get to taste. I don't know where to begin. We started with the company. We had one flavor. It was Orange Dream. One flavor. It was anybody around for that flavor. You can still get it. You can get it in our keto pro. And I don't like orange. I mean, if it's not orange juice and a mojito, that's the only time I have really orange juice. I put orange juice and a mojito and an orange juice and a margarita. Otherwise, I don't really like orange. What are your thoughts on vitamins? I have a lot of thoughts on vitamins. I'll answer that in a second. And the... I had drank it for 18 months. Why? Because it's the biggest breakthrough in supplemental history.  I mean, would you do it? Yes! If you really want to feel better. So when it comes to taste, the first thing I'm going to tell you is stop it.  We live in a world now where tastes are sometimes questionable, like, or meaning that we get to try so many different things and we can be so picky, but we need to be stopped being so damn picky and start being grateful that we can get the chance to have it. I did the ketogenic diet for 15 freaking years without ketones. I don't care what it tastes like. The rocket feel, I'll drink it. You know, I actually got to try some of the original, original, original, original, original keto of trials, like stuff that was long time ago. I talked to him 10, 15 years ago and it tastes little like jet fuel. It's disgusting. I would have drank that if I had to. Like, if you know, you know, right? But here's the coolest thing. We have the best flavors in the world. If you don't like the taste, there's just something wrong with you. I'm just going to tell you right now. And my wife and I drink different flavors, by the way. I'm drinking right now. I'm drinking Ruby Rush. I love it, my favorite, one of my favorites. I got a couple favorites. So, if you don't mind in the bottom and now we're low, tell me what your favorite flavor is. I let me know, let me know, let me know. I want to hear it right now.  There isn't a way around it. There isn't, you don't do this on your own. Coach Rob DeWoe and I are going to talk about that. I've been using salt only for one week and now I have such a food snob. I've been using salt only for a week. That's, I don't understand. A food snob.  I don't know how else to say that. Like stop, like get out of your own way. Just shut up and drink them. And this is, I'm going to be very firm here. Like I love people try trials. You can buy a trial from me, buy a trial from whoever invites you to come and join us. Buy a trial, that's fine. Try ketones for a month, that's fine. The hardest thing I make for us to overcome is if you don't get adapted, it takes up to 60 days. Unfortunately, you, a lot of you are sick. You're not well. Why do you need a lot of help? Take 60 days for your system to get fully saturated and for it to make the metabolic shifts that are probably going to make the biggest difference. So give it a full spectrum. Because everybody, if they, if you quit, you're coming back next year, the year after, the year after, year after. So don't quit. I just tell you don't quit. Everybody, I get a lot of people that call me back. Hey, you know, I felt the way again. And yeah, I felt best when I ever drank ketones. I'm like, good, just don't stop. Because the alternative is you feel like you. Because you, you're not going to do everything you need to do. Okay. So I have about five minutes left. I will answer a couple of questions. What do I think about? Oh, before I do that, let's say this. If you're following me and you want to try this stuff, if you haven't tried, try it.  If you're following somebody that has you follow me, if somebody tagged you or had you follow me, get back to them and say, listen, I'm going to really commit to 60 days. Come, Gribber, our good, better, best bundle. And let's go change your frickin' life once and for all. Just commit. Everybody's life circumstances be different. When I was sick as a dog in my 20s, it was five years for me to put myself back together. Five years. Now, you're going to learn from a lot of us and wisdom. It shouldn't take that long. But five years. I had no other choice, y'all. I wanted to walk. I wanted to have kids.  I wanted to be a normal human.  Like, it's worth it. I promise you it always is worth it. But I got to ask this question. What do I think about vitamins? That's a great question. Depends which dust can you out. Dustin, you asked on which day. So scientifically, if I have a principles of anti, like anti-history or primitive aging and primitive health and primitive health would tell me that. I'm going to back up for a second. I think there's three main things that are important for life from a nutraceutical perspective. Let's say, because the sun, obviously, you need the sun. The sun is extremely important. You need oxygen and those things. So I would say they kind of rank. And I don't have a priority of these ranking, but these are the three most important key tones. Glucose is important to me. You don't have to actually consume those key tones are important. I believe that amino acids are important to protein. And I believe that minerals are important as for all the other vitamins. There's an essential fatty acids. Those are important. But because you if you eat animal protein or enough protein and right sources, you kind of cover that for the most part, you can overwhelm one side of the other. But for the most part, you cover that. So but those things are the most important. So that's kind of the foundation of it. So if you're not fulfilling that, if you're not fulfilling the needs of that supplementing is going to be important. Okay. So supplementing key tones because most people can't produce enough key tones on their own through diet and lifestyle alone. So supplementing ketones, supplementing amino acids. If you don't need enough protein or digest very well and supplementing minerals. If you're not getting the proper water sources or minerals from all your food or anything else. When it comes to vitamins, there's essentials of vitamins. Most of the vitamins you're going to get are from all these other things. But do I take a multivitamin? I do. I don't take a heavy one. I don't take a crazy one because I think over time in history, we're not no longer primitive animals. So I use multivitamins as kind of an insurance policy to cover some of the bases of what we might be missing. But it doesn't mean you have to. There's plenty of cultures that basically survive in almost little of the non-vitamin C. But they've been doing it for a long time. They don't, they live in the same area. They never evolve much past where they are for 7, 8, 9, 10,000 years. So it's hard to put them in the same category as a busy mom in Chicago. Like it's just not the same. So I think that in universally a vitamin isn't a bad idea. I don't think people have to overdo them necessarily. But I think it kind of comes down to vitamins is a supplement to what you're missing in your, in your diet universally. So it's not a one-size-fits-all. One more vitamin that I think can be very important for people is vitamin D because once again, we don't live outside. So I like vitamin D. I do take a bolus dose of that twice a week in the winter. And in the summer, I take more of a maintenance dose. But anyway, so that's what I think about vitamins, but it is not a short answer. And I think there's, there's situations, but I think what's more important than vitamins is mindset, who you follow, who you hang out with. Mindset, I think are more important. And you can add in some physical activity. I think it's more significant with nutrition. So I, but that's kind of my viewpoints on supplementation and vitamins in general. And I know it's not a simple answer, but I hope that helps, but I would tell you the first I put in my life in my mouth every single morning is my ketones. Why? Because I want to elevate my energy, my focus, my brain, my mood. I want to feel the best I can feel. And if you understand science, you understand energy, you will eventually get there. If you don't, you're kind of thinking, is this real? I'm not kind of skeptic or, you know what, you're going to walk at maybe pricing of anything, right?  Well, if I finally sort of have the money, then yes, I am.  Well, it's not huge, but it's big.  Once you drive the Tesla and once you experience for a couple months, you're not going to drive it. You're going to drive it. It's just better than the other cars. Kind of depends what you're looking for. But once you know, you know, I guess that's my point. So, and I'm not even a car guy, to be honest. I'm not a super big car guy. And I'm like, I love my car. I like both our cars. We have two awesome cars. But my whole point to that is ketones are the same way. Once you fly in an airplane and you get comfortable flying, you don't want to drive very much. Like I don't mind taking a road trip, but it's not super efficient.  You're the last one to get there.  I'm just, I hope that analogy goes over well. Maybe a cell phone's a better analogy. I know Chad's on here and he likes to see the truck or he likes to drive. I'm like, that's great. But Chad is not going to get to as many states as I am flying. That makes any sense. So, appreciate you all. Thanks for plugging in. And I need to go. I need to go pick up my daughter. We're at Dance, where we dance right now, ballet. And it's a small room. And so I come back in my car because it's like 40 parents in a room this big. And it just kind of smells actually, actually lane has been raining a lot. So I got to get my daughter from dance in the room behind me and my other daughter. Want to say hi, Sophia? She does not want to say hi. She's playing a game in the Tesla right now. And the Tesla has games, right? I mean, that's so cool. She's playing chess. My daughter is playing chess on my car, against my car as I speak. I can get to them just take a little longer. Yes, Chad, you can make it driving. But people can do the ketogenic diet to change their life. It's just going to take, you know, five or 10 years to get there or they can fly. So with that said and done, have an awesome, awesome night. If somebody can text Kate Higdon for me, tell her Dustin will be coming in just a minute. Cheers, y'all.