Okay, so hello everybody welcome to my talk on network retries So it's great that this room is called testing and automation because it's kind of for both So it's talk exactly useful for both of testing and automation. So a few words about me So I'm currently a software engineer at red hat and I also a member of a weird community infra That's our project and we do continuous integrations and release automation and we are responsible for infrastructure and As probably a lot of people we use python Primary and we have a lot of automation in python. I also love da-wops So I'm a strong advocate of da-wops. We have doing stuff and yeah, so if you don't know what is over It's free virtualization management platform. There is a booth in building K. You can come And about this talk so it follows really real story that I did so we probably mentioned We run a lot of automation and see I sometimes you have several thousand of job runs per day and Sometimes something fails due to a lot of reasons In our automation we use a lot of network services we download packages from shared party repositories from our repositories and We use some rest API's along the way during build and testing So a lot of network services and when you run a thousand of jobs sometimes you get failures and Usually there's sporadic. So the next run is okay So you don't really look into them if there's just one failure or because you try to look for reproducible stuff But it's still not good because some of developers are frustrated and we are frustrated because due to these random failures and I Just started this work on how we can retry it automatically. So if you can rerun ourselves and it works why not let computer do that for you and I Needed a way to somehow test it because if I just ask people about retry they say I retry that CJ just Try accept and some sleep and Some counter as that's it. Okay. Yeah, and the funny stuff if you test it on your laptop would probably work You can see that okay. It does retry. So is it enough that the questions that I have and I was looking for a ways to really test How is it effective? So it's not just works But does it really solve the problem that we have does it really effectively retry that and that's when I come to this Linux traffic control there was a talk actually one before this About that they use in the same Linux kernel traffic management to simulate poor networks and This all is should be reproducible. I it was my primary goal to make it reproducible so you can find all the code and I Used in my github page. There is also a large version of presentation with more text because otherwise It will be hard to present. So for this I cut everything possible. So let's start with some reasoning if Failures we get okay. So when you come here by plane You probably didn't meet overbooking but sometimes when you have a ticket for a plane You may come to boarding can they say, oh, sorry, we don't have any space in the plane left You say, oh, how can it be? I have a ticket, but that's Mathematical concept call it statistical multiplexing. So they essentially sell more space in a plane then there are Just in hope that some people will miss it So maybe two and so they can sell more and this is statistical thing So they try to just predict that on this plane the typical people are late But sometimes it fails and you just denied boarding due to no space and it's pretty valid. So Actually this statistical multiplexing stuff is used in networks, too For example, if you had like circuit switching, it's like a telephone, right? You're calling somebody you have a line and it's all yours But it's not the case in TCP networks You use packet switching and you see you really share the bandwidth with somebody else and it for some reason He wants all the bandwidth then you are not lucky and you may get failure is just due to this and it's it's not really a problem It's just built in it's a future and So the thing is that really packet switching and networking system are just made to fail sometimes If demand is too strong and it's not real failures You can't blame network team for that if it's not happen often. It's just future and The sink is that is just mathematically if you try something a lot of times and there is very rare chance of it failing But if you try it a lot more times, then you will see it. It's just normal So I must warn that you see the spherical call here and since we do the simulations We have to use spherical call. It's from a jock of physicists Learning the cow by assuming the cow is a sphere So we made some assumptions in this talk and here for example, I assume it importance, but it's not that important So if it's this chain and if like if you have automation you probably have a lot of dependent parts and each of them depends on the previous Job completed successfully and even inside jobs you may call one service and another and you really need all of them All of those calls be lucky and as you see here So if you really have a kind of chain of dependent events and there is a probability of which of them failing F and then You for example have 100 steps and probability F is small. So here's 001 is very small probabilities But if you try it more times and the final success of everything this and if even for example This is one your job and you have like hungry jobs Then you will see here like if you do 10,000 rounds of this job that consists of 100 parts It's very probable that it will fail at least once. So that's basically Given this overbooking you will certainly see some failures in if you have a lot of runs It's just a fact and that's what we consistently see in our systems It's not all of them, but sometimes one a few in the days they do fail and this is actually not a bug It's it's us intended. So in order to try it on my laptop I set up this test environment. It was running on this old laptop. It uses containers so basically what I did is that I created a container with Engine X is just a sttp server put a file there and was trying my Python code and Downloading it then I used this Linux kernel feature to simulate poor networks and then I was trying different solutions see how badly they fail and Was trying to make something reliable out of it and it's good that you really contest it on laptop You don't need infrastructure for that. So This is basically how I did it. I just created a JSON file just random seven kilobytes file And then just created engine X from it So then essentially our JSON file will be on this URL on the local box And then we can try our Python code and just download it so but The tricky challenge here is that sometimes you configure this network simulator and the network is that bad enough that it just basically doesn't work and You somehow need to know if the network was working only it's your code not working a network was okay so and There is a protocol called UDP if somebody knows it's just basically doesn't have any checks if it arrived or not it just throws packets continuously and In order to check that network is working. I used this UDP just net cut it basically Like cat it just throws So give random over the network and then if you see UDP packets arriving then you will see that the network is working And if your request didn't finish then it's it's kind of your code fault not the network But if UDP is not coming, I think Network is that bad that probably nothing can be done if somebody knows what to do I will be happy to listen and I also collected network traffic on this Simulated setup I use Dump cap with wire shark utility. You just dump packets and since I somehow needed to analyze it I just export it into CSV files and then once you have CSV files You can use some Graphene software use octave just because I used to it What I think is that here we basically record our TCP traffic because we are using HTTP and HTTPS TCP and we also recording our UDP traffic and then We have the CSV files and we can load it into some system. So Okay, ask a lot of people for request is nice library. It's very easy to work with and we use Python requests and our Infrastructure a lot and our automation and our tests and I started with this very basic naïve code it's just Get request using requests It doesn't have any retry so anything. It just gets this URL and here it will Throw any exceptions if it happens and we get this on from it. So it's converts from By stream to just on that's what I did. So I run it on my Simulations using this sampler pie. It's available on github But basically what it does you specify it amount of thread pools that it uses like ten sense reads And then how much time they need to repeat and then it basically Calls your function in this thread pool amount of time you specify. So this way I was simulating a lot of requests coming and then I just did it also output CSV. It's not your fancy. It's just a flag zero It was Okay, and one it was there was some error and this is the time in seconds how much request took just to understand it How effective with it? Yeah, you can check with Scott. It's not that important and then I run it and you see this CSV files I managed to generate this nice graphs so Yeah, maybe it's not real, but you don't need the numbers. So Just in gravy we have our DP traffic I scaled it down because UDP as always very effective for just throwing packets So if you don't scale it will blow up all the screen. And this is our request our TCP requests That we made so it was pretty fast This is a histogram amount of request occupying different times. So you see that it's here it's zero zero two seconds and Like 20 requests more than 20 requests. We finish it like in Zero zero two seconds. So and this is actually pie chart. We kept everything working so all hundred percent of requests were completed successfully and I believe this is how much of the network software get tested, right? So everything is working. That's very fast Now we need somehow to make real network that it's not really working good all the time and Just for you to give some heads up on how that's working. So when you use Python, this is a TCP layer model It's not that important, but all our Python libraries we use request It's actually in fact uses EuralLib3 inside and then EuralLib3 calls sockets or sockets somehow on TCP level But everything here is a dead data layer and yeah Basically, if you don't know it's the network model is just encapsulated But important that everything that's down there for us from our Python libraries We look like a some date data is coming or there is just no data coming or we get some kind of exception So really there are some mechanism here to make it somehow reliable But for us it's all the same and important stuff that I didn't really hack any libraries I just try to use what is available right now. It's important assumption for this talk and So Linux network emulator is a part of Linux kernel So in Linux kernel it sits below the IP stack. There is a concept quite Quiet and discipline. So it's what your ISP uses to Limit amount of bandwidth that you have for example and in this discipline There is a project call it Netend. It's network emulator and it's used exactly for simulating poor networks So it sits here on the IP between the network device important stuff that it's applied only to outgoing packets So if you want both ways then you need to set it up On source and on destination too, but for our talk we are not really working on IP stacks So it's fine. It has a lot of compabilities. It can simulate network delays It can just simulate network loss and can corrupt packages and can create duplicate packages And can reorder packages are not arriving in proper order and it can also can rate limit it so you can simulate like gps network just by limiting bandwidth and Network emulator does all that for our purpose is it's enough to get loss because as I say it for Python It will be a data coming know that they come in all just exception. So we free to choose it so we choose just to drop some packages and This is yeah, there's a probably hardest part of it's not that hard So the problem is that nobody real really knows how to simulate the real networks It's just they are really too complex to simulate them. So we really need some spherical cow some Models that will be good enough for us to simulate those networks it's we don't pretend that it's very real, but if useful for us enough then why not and Network emulators supports different models. So explicitly configure it So what I choose it's simple model called Gilbert a lot model. So it's just a state machine It has good state and bad state and then you specify probabilities of Transitioning from one state to another and then you specify also Success and failure of probabilities in each state and then when you configure a network emulator It will be just following this model with your probabilities. So Also, if you assume for example in good state everything is working correct and at bad state nothing is working Then basically you made a simplification and you'll need just Two numbers just how this which probability we go from good to bad and from bad to good That's what's simple enough. It's called simple Gilbert. It's a simplification of this model and it's enough for our purposes So and this is why you need a bit understand that mark of state machine because When you use Linux network emulator, you just have to specify here that you use Gilbert a lot model There is no just magical switch make me poor network because there is no poor network. They're all different And so here you specify that you use this Gilbert a lot model and then you basically specify the Probability going to bad state a probability going to good state and you just have to specify model parameters there is no way to not do it and It was actually very tricky to find some good numbers. You just play with it and one important stuff so on research papers probability are usually given in decimals and Here's actually it's in person. So I just specify decimals It was not clearly documented and then it wasn't behaving like that and that's because I had to specify person There are also show command you can see and it will give you your parameters So we specify just PNR and since we assumed that in good state. It's 100 success and it was a zero then It substituted us while it's themselves and then if you already added this q-discipline Then if you want to change it, you need to use change command So if download my slides, there are references to the documentation of everything that you see here So you can just look up, but yeah, it's just basically we specify that with 50 percent probability we go from good state to bad and 20% probability, but so just so it stays in bad state a bit longer. So I run it and It's actually was running over the night So and all the requests this Downgraph is just the part here. It's first 60 seconds. So we had 45 requests when it's okay Then there were no request at all. It's just stuck for all night. I just terminated it when I woke up and I should see UDP traffic was coming. So that's why I think the network was working The funny stuff that we just forgot the timeout. It's not by default by default There is no timeout in that request and as you see without poor network, it's locked But now we're just running over the night. It's just because we forgot this timeout And this is from documentation and say there is no explicit timeout by default. So and Again, so we can just get some timeout, but I just checked. So it's 95% tiller So almost all requests finish it in 60 seconds. So why not just take this 60 second other timeout and Here we go. So now it's this is how I should write on it before if I read the documentations I had to specify timeout here and if we do that Then at least it finishes I think finish it in a couple of minutes and now we do have failure. So here is At 26 requests fail it all other were okay. And this is the histogram. You see that must of the Request it's like 40 requests took less than 20 seconds and this is how timeout It's 60 seconds or those requests were boarded by timeout. You see it's like 20 something requests and it's 60 seconds Good cool. We see the timeout is working because that's exactly what I expect 60 Okay, so now does it at all make sense if we retry it's really doing any better for us. It's Pretty trivial, right? So here some requests. It's like 20 something requests. They were lucky and they finished so if we just retry we try luck more and We have the same like probability of being successful So then more we try then we may get just more lucky next time and that's why it just makes sense to retry and Just some note that in TCP. There is a retransmission mechanism, right? So it's retransmitted packets, but it Doesn't work when the TCP connection is not established at all because there is no yet TCP connection So like if there is DNS failure or you just can't connect then you are not using it Also, there are some HTTP specific if failure is you can handle it from code, but obviously TCP want to retry it for them So but another stuff that we need to consider is it safe. So if we just retry everything Can we mess up with something and it stands out that in case of HTTP There are requests that are safe because they just don't change anything like get we just get a page So nothing changed and there are also Important request. It's a bit harder, but yeah, you can check it here So it just changed something but only once if you call this several times it Won't change it anymore. So she a was one then we called says a several times and it's two and two so and In other cases when nothing happened. So for example, my request didn't reach the remote server and Kind of nothing happened and The libraries that we use requested uses our ellipse 3 and it has built-in support for our sttp retries. So it just Knows all this and it's available for you inside. So it's pretty much Requests in relapse 3 libraries that support retrying python. So every shenaza does is not but as you find out you can use Or ellipse 3 retry even in your code if you are not necessary you shenor ellipse 3. So here how you can retry this Request library so it's accept to our sttp adapter parameter calls max retries. So we set it 3 and And it will retry three times. So okay, so it's probably good enough, right? So let's try and 14 requests still failed if you just implemented 3 retries and It was really looked some strange for me because if you check on this Instagram you will see that so we enable 3 retries and timeout is 60 seconds. So we would expect that at least 14 requests were retried here. So they should go three times three times 60. It's 180 But we don't really see anything here on this histogram. You see it just it's just they all failed somewhere here But three attempts would get us here. So something didn't really work, right? And I enabled the protocol debugging just to check what it does This is how you can do it. It just enable python logger for all the libraries you use in your stack and I also disabled network So this traffic control you can just specify fails 100% both cases and you will have no network So it's kind of configurable network switch. It just did it. So I will get instant failure and That's what I got. So I really didn't see any retries there. It just doesn't retry it was funny and One important thing I noted it says convert it retries value 3 and it converted to some retry object So it was something going on So I checked it more and it seems that in relapse 3 there is nice concept of obstructing your retry functionality in two classes, so they have this retry class and Apparently it has more configuration than it converts to because when it converts is just set this total value But there are separate value for connect errors that happens when you connect and for either or that happens when you download and What happened is just it didn't set it So it wasn't really it retry for example connection related errors, and that's why it didn't work. So As I said, so relapse 3 it Works for sttp compliant services if somebody violates sttp standards like they change something and get requests You're not lucky. You can't use it. But if it's compliant sttp service you can use it and it will be safe. So Because there are non-compliant stuff it is a by default but for connect request just didn't get to remote servers So nothing happened for it If it's safe method and it retries safe method by default something may break But if you it's your implementation, you know it and yeah, it's also because retries on the cases when Too many requests failed like sure is not available. So the cases where the request didn't reach the remote server So this is how you can use it You create this object from relapse 3 set your retries for connect read errors And then you just specify it instead of your number and then instead of converted value We will use the object. So let's see If it works, yeah, so it's actually when I tried it it didn't work But you now see that it does the retries. So it was one retransfer it doesn't I skip just for the space and I was kidding this time because I it's really happened to me. I just forgot to enable the network, but That's the tricky part about simulation because with those model and with others It's really hard to simulate network. That is just for example down for five minutes and after five minutes is up But in real life this can happen and it's good time to speak about the back off so it's also really three support it but What is back off? It's just before trying again. We just wait for some time. It makes sense, right? It's like a sleep and for example We had we imagine we don't have network here. The white is no network here We have some network. So if you have no sleep, obviously all our requests are happened here And there is no value, right? We can have some constant like sleep for one minute each time, right? It will be good because eventually it will catch it But it's not that effective because if for example network will start working here then we will wait a long way and The best thing to use is exponential back off Just next attempt to wait is just exponentially longer and longer and longer and Or all three support that so this is from its cause. It's how you can specify exponential Bob back off It's from from the library, but for you it will be just a value. So it's good So you can specify back off factor. It's basically It will generate zero one two and then it multiplies it by your factor. That's how you can get there Longer longer delay. So, okay. So we specified here just a parameter of this retry object And then we try one more time Finding stuff that it's still didn't work. So it absolutely is the same as before It's like it was 14 requests failed and now we specify all these parameters and we still get the same And it's same as before we don't really have anything really tried three times with maximum time out That's why we need to test right so it was I was also was pretty surprised I checked the exceptions and I found that there are two kinds of exceptions one is somehow handled to just a warning It says, okay, I'm retrying and it's fire, but second is just a connection error Wow, it should retry on connection errors, but we don't how can that happen and from here it's appear They have a generator. So they essentially stream that out of relapse three They have generators and if failure happens already in this part of court. It's not handled by relapse three library So it's out of that library. That's why it fails no matter what you said here And if you are not hacking libraries, there is no way actually to have a ride it but Retries easy right try accept. So that's what we did. So we did try accept but It's important that we use actually this retry objects from or a lip three to retry it So it's really better because they cared for this all HTTP stuff You saw it's complex formulas and the potency of the stuff if you use it Then we get all of it for free and what it does is just it's inside the library So when we do request it checks it if everything okay, you have request if not they really throw max retryer or exception and Then there is a two ways one is in increment and it will it give you a new retry object So it's actually mutable so you can just use it here and then there is a sleep It's where the back of happiness is where it's sleeping and this is actually pretty much how this is library like request Or three uses this retry object. So we can do the same but use this object from retry and if you do it like this And we have one small problem because if we try happens inside the library here Then it will retry one more time if it happens here then We retry it and it appears that in maximum we now can retry max retries Multiplied max retry. So this is because some retries handed by library some are not but it's not yet in request But newer or ellipse 3 I found that it's actually output the retries object to use it along with this response so you can just take it from there and Using your loop and your try block. So then you won't have this problem But unfortunately this request is still not possible, but when they upgrade to new embedded library, it will be better and And That's actually Another feature of for ellipse 3 that you can also specify retries just in request. We don't need all those HTTP adapters It's not yet in request, but I think it probably will be possible to patch it Okay, so now if we do all these We have pretty good picture, right? It's just one request failed. So and Yeah, it's almost all requests. It's it's here. It's 100. So it's maybe 15 seconds a lot of requests finishing in 50 seconds so because we wanted waiting for the full time out, but I'm maybe I'm idealist, but I wanted all request be successful probably this is good enough, but Yeah, if you just our target and make efficient retries, then we probably want to check what happened with that one request and again, I went to my lock and This is how it failed. It's pretty rare case But I see it on our production systems. Sometimes, for example, we were getting like half of our PM file and Actually, we fail we're failing only when we try to install that our PM file because nothing before that the text is that we fail it to download it and Here a lot of people ask about in TCP. We have this retransmissions But as you see, it doesn't work really. So you might have broken file derivative and Let's see what happens here. So we have Error so we try to call land on self content inside this library and it's just none So there is no land for none and somehow we just didn't detect it that we got no data back from our GDP and I actually was flying here I checked this and It has in HTTP. You have the content language, right? You specify how much is your content, but in our lab 3 and requested this check is disabled by default Is it just not checked maybe because there are some wrong implementations a report correct size It's probably safe to disable But if we disable checking of the length we may get like this because the connection just closed it Because network was poor and we thought that we basically got all the data and Then if you're not checking links, we will fail only when we try to use this data. That's actually what happens there and There are also cases when you just don't specify links that are streams and we really have those systems They just give us RPMs, but they don't specify their links Just we when it's done then it's done and then even if we check lunch We can check it for that cases and our automation will fail because we don't know if it's correct RPM And I come up with it's a bit ugly from constant point because here we basically can Check everything needed inside our code if like we have tried to have the block then if needed We can even verify RPM itself. Was it correctly delivered or not? and This is what I did here because I didn't want it to change the libraries but For this particular case if you enable verification of length it will work and if server of course specifies the length It's not always the case But if it doesn't then we just Can try to have JSON here and if it fails it will fail this type or so it's demo only Probably you shouldn't handle type or or in your code because it may be valid program program Mistake, but if you just wrap it then it may throw some invalid JSON And then if you handle it here, it will basically retry it alone with others and if you use a retry Object then it Build general implementation, but with your verification plugged in and that's what I did for this case And after that Everything was okay. Actually, I managed to get 100 requests passing with with all this and Believe me, it was really poor network. I wouldn't want my network to be like that Because yeah, you see there are a lot of gaps. It's just fluketation, but it's magic retry they Can make you pretty successful only that poor networks and good stuff is that there are tools like built-in Linux This in all modern Linux distros has it so you can test it on your laptop So you don't need complex infrastructure for that. It's good And so if you make some conclusions, so I would say then we can really emulate networks good enough for Testing of network applications. It's just possible. It's not simulating real networks But there are enough parameters so you can achieve your result and Clearly you saw that it was very successful and very fast in the beginning on local host network So obviously testing it work application with local host network is not enough and I would also argue that even local network may not be enough sometimes if you Application works with internet. It's certainly poorer than your local network. So even if you use local network then You may still need to do something to test it better and another thing it's retry Implementation is not that easy actually because you see there is some Knowledge that you need to have and you need probably to read HTTP FC Oh, you just use the existing solution, right? So you see this for ellipse re-implementation is generally enough You can just use this retire object in your code. It's not bound to really three at all You just pass it three quests types and it out puts you if you retry or not and Another thing you see that RCTP they know for example this method you can retry this method You cannot retry and I know some people develop network protocols or network system and think about it if you have it So can you define some of your requests the way that? Your library can retry them without user even knowing if you check like Amazon SDK they actually have built-in retries inside because they know how the system working and they just give users this for free and That's what you should do for your systems if you develop this and Still provide some ability to customize it you you see how we use this Relipse three functionality to retry on completely non valid just on so we can check just on and then retry with it So it's flexibility that some of your users my my need and It's really as you see it's all possible. So I did it on this laptop. So you also can do it So If you have any questions, we will have time for this now, but All this is available on github as I said there is sample code that I was running and Some octa fails to generate the graphs and the full version of presentation with more text You can use it to set up and as I said we use docker container So it's really very easy to try on your laptop and I encourage you to do try it because I Wanted to be reproducible for you. So you can benefit from it. And there is my mail and my Twitter So feel free to ask there, too And so we now have time for questions. Ah it's actually Have some Yeah, I need to repeat so it was a questions. How fast does it change states? So actually, I don't know it's as I understand it's limited by actually your computer clock So it has some clocking inside and it's basically just each tick it checks the probabilities and then transition or not, but I Would say it's very fast even on this laptop So if you specify it's like yeah network is working or not working multiple times like Microsecond Yeah, so the question was if it works different on different Computers like with faster clocks. Yeah, I think I think that's the case And that's why there's no just values magic values that you can enable and it says it's bad network So that's why you have to somehow tune this model and try play with probabilities But yeah changing it is just one comment So for yourself, you can just try to adjust them and see what works for you because that's probably I Spend a lot of time with finding a good value as for my code Yeah, any more questions Experimentation Yeah, so this yeah, so the question was that is it focusing on Python and did they checked other stuff No, actually, I wasn't testing other libraries So I was testing the Python because that's what we use and yeah, the request library is very popular So I would expect a lot of people use it But it's can't be similar way to test it any another because your network emulator is in Linux And yeah, also probably we'll think about submitting some patches So because there are certainly some stuff that can be improved for example If you can specify it right here request in request it would be very useful for me at least Okay, any more questions Okay Oh Oh Oh


Good morning everybody, we're at Senex in Deer River, Minnesota Just grabbed myself a coffee, washed my face, got ready for the day We got to hit the road. We have this load behind us that we picked up yesterday afternoon We got to deliver it into Brainerd as soon as we can And then see what the plan is from there. There is no plan right now to tell you so You'll find out when I find out Let's get going It's Celsius, so probably like 36 Fahrenheit, something like that Through my dirty window Off this freight it was really quick, they helped me roll up my tarp So I was in and out in half an hour, tarps rolled up Oh, down the road, our next load is in Duluth, Minnesota, right at the Wisconsin border Duluth has got some freight from me, I'm gonna have to pick it up first thing in the morning I think I'm gonna try to get there today yet, but I'm pretty sure they go home at 2.30 And I'm gonna get there at 3.30 So I'm gonna make some phone calls And we're gonna get on the road, most likely get loaded tomorrow morning and then head back to Winnipeg Oh, and we feel light as a feather again That's nice So I believe we're picking up some manufactured steel It's gonna be a heavy load, easy to tie down though Most likely going back to Winnipeg I have to check the paperwork yet, I just looked at the address of where I'm picking up But I picked up there many times before, that's why I didn't even look It's going back to Winnipeg, or it's going out west and I bring it back to our yard and someone takes it from there Well, we'll see what happens, if it's not, that's fine too But if I go back to Winnipeg I can get these extra tarps and all of this equipment in here Off my truck and out of my cab here We've got to go up through this road now in town, usually I would take the 28 which goes around town For the 25, whatever, 28th street but it's highway 25, I don't know Usually there's a perimeter that goes around Brainerd right, but they have it closed off right now I guess they're doing repairs on it or improving it or something, so Through town we go Looks like it would be a nice town to live in And that sound when the fuel hits the bottom of the tanks Full of juice, 142 US gallons 537 liters Costs about 604 US dollars Or 840 Canadian dollars Price for us today was $4.29 US per gallon Or $1.56 Canadian per liter 100 meters, turn left on Washington Street, NM 210 Average 6 miles per gallon Or about 38 liters per 100 kilometer Not too bad, it's sitting right in the average zone You expect that to dip in the winter time very often because For one, your truck runs a little longer, you've got to stay warm I don't have to run mine overnight Continue on this road for 22 kilometers Go straight to go up to Canora here, this is Crosby, Minnesota We were here yesterday Today we're going to turn right to go east Straight up the driveway, got a neighbor here, got a neighbor there If any of them leave in the middle of the night It'll be very easy for someone else to come in and back in right beside me So I don't got to worry about getting hit or getting my truck damaged I was actually going to go down the street to another truck stop Just down the road, they only had three spots there and there was one available It was a little bit closer to where I need to be tomorrow morning But it was a blindside back and it was very tight Chances are that, you know, I'd be the last one parked there But if one of those other guys left and someone else came in And maybe he's a new driver, maybe he's a tired guy Maybe he's a guy who has no idea what he's doing Maybe he's an honest mistake, maybe he shouldn't be driving a truck I don't know, but it would have been back into me High chance that I get backed into there Too high of a chance for me anyways If there's any chance, and I have a better place to park Because I was here before and I saw this spot was available It's like, let's see if I can get a little bit closer for tomorrow morning It's like five minutes closer, negligible, it doesn't make a difference So I went there, I was like, no, not risking it Came back here, I got this spot The reason I didn't want to park here is because the guy on the other side of this guy There's a guy over there with a Kenworth T680 Something must be wrong with his turbo I can't hear it now because this truck is blocking the sound right now Because he backed in here, but before he wasn't there And one spot over, there's a Kenworth T680 And he was idling it, it wasn't a regen But it was on high idle and his turbo was just like just piercing I can hear it with all of my windows closed I'm like, how am I going to sleep with that? I'm going to have to put my earplugs in Just piercing, wheeze, non-stop And I know that that's probably the kind of guy who's going to idle his truck Through the entire night, even though the temperature is perfect To sleep with your truck parked and off Like perfect temperature But he's going to idle it through the whole night anyway So I didn't want to have that sound So that's why I went down the road to check out that other truck stop And I was like, yeah, there's one spot left And then I took a closer look at it Ah, no, no, old blue, I'm not going to risk it Don't worry, don't worry You know, everybody's like, well you have insurance, right? Well, yeah, but not on my time and my lost time Sure, yeah, I got cameras all over the place I'll catch the guy, we'll chase after him and sue him for all my repairs I could try to go after him for some lost time too But that takes time That takes money for the lawyers too if I want to sue them for my lost time And insurance, it takes time In the meantime, what am I going to do? I'm going to have to go and beg for a truck to drive And who knows how long we'd be waiting for parts, it could be months And then old blue is down and I'm driving a different truck Making much less money because now I got to rent a truck, right? And it's all because I wanted to be five minutes closer to the shipper Nope, nope, oh, hey, that guy's leaving, nice Oh, you see, we made the right choice Bye-bye, Mr. Whistle Turbo Take your whistling turbo somewhere else Okay, well, just as I was talking, you see, it's going to be a good day And someone else is coming to park in his spot already, it's another T680 You probably won't have that turbo issue because that's not a common thing I've heard it before, sometimes the turbo just catches the exhaust just right And it starts whistling on you and you got to adjust your idle Just a little bit to get the turbo to spool down a little bit more And stop screaming at everybody around you Some guys don't know that, some guys don't care Some guys don't notice it, I notice it But I'm very picky about where I park, like excessively picky Like to the point where I probably got a problem But I'm not going to go talk to anybody about it because I'm okay with it I always say when I get to a truck stop at the end of my day where I'm going to park for the night I'm like a dog, I'll go and circle the parking lot at least twice Maybe three times before I find a place to park and sleep I want the best spot and I want the spot with the least amount of risk Sometimes you have to accept a spot that has some risk or a lot of risk In those tight parking lots, those tight truck stops, sometimes there's no other choice But if there is a choice, I'm going to find it and I'm going to take it So I circle the lot, unless if there's like a ton of trucks like moving around looking for spots The first empty one I find, mine, you get it, you get it But that is what it is, right? I just want to make sure that my truck doesn't get damaged because I need it I need it, I need it to work And I take special care of it to make sure it works and that it'll last a long time yet It's an old girl already, it's an old truck And believe me, I'm going to be driving it for as long as I'm able to I'd say till the wheels fall off, but I'm going to maintain it and make sure that the wheels never do fall off, don't worry That's the thing, you have to maintain it and you have to be careful Careful about where you park, careful about who you let fix it and repair it I've got a great shop Now where I go to, I take my truck to PBX and Blumenort They have been stellar, they've been amazing for me That's where I get my work done on my truck, I trust them They've been working on this truck for much longer than I've owned the truck The owner before me took his truck there and I believe the owner before that did as well So if I'm not wrong, I'm willing to be corrected But from what I understand, this truck has been serviced at the same shop since it rolled off the lot, brand new So all of the records of this truck, the guys there, they know this truck They know me now, they knew the owner before me, when this truck rolls into the shop, they know the truck So that's important to me too, they're the only ones I want to touch my truck I don't let anyone else touch my truck unless it's like an emergency or something But be very careful who you let fix it, who you let touch it, where you park it and how you drive it If you take care of it like that and you're careful, it'll last a long time, this thing is a 2008 It's got over 3 million kilometers on it already, it's got like 1.8 million miles I might double that yet, we'll see, we'll see The engine has 800,000 kilometers on it or 500,000 miles I'll get another couple of years out of it before I gotta rebuild it again Maybe several years, who knows, like I said, it all depends on how you take care of it and how you drive it, how you treat it You know for that though, it's time for me to go to bed here I'm actually gonna go inside the building and grab a shower I heard there's $8, that's according to reviews on the apps that I've researched So I'll grab my shower stuff here and I need to give myself a haircut yet too This is like wild and out of control, people are gonna start thinking I'm in like a heavy metal rock band Well as head bangers, you know, turning into an 80's hair band guy here Look how long this is, it's time to take care of myself a little bit, right? It's been a busy couple of weeks, take care everybody, please drive safe on the roads out there When you're behind the wheel, keep your head up, keep your eyes on the road, keep your stick on the ice Please drive safe, we all want to get home to our family


But what are what are your tips for a millennial homebuyer's because it's tough to get that down payment going and you were saying You know a lot of young people have their parents help them Let me tell you two out of three young people under 40 who buy their first home have the help from their parents Don't be feeling ashamed that oh, I can't seem to get the down payment now You need to go to your parents and it takes swallowing of the ego But at least knowing that most purchases in any expensive area happen with the help of the parents At least makes you go at least save your dignity a great proposal for your parents is to ask for the down payment But make them a 50% partner in the appreciation. It's a home over time assuming it appreciates But at least that's a business proposition I'll give you half the profit mom and dad if you give me the down payment now so I can get in the game The problem with real estate is you need to make your first acquisition If it makes you a player at the real estate table when I bought my first studio in hindsight I realized that was my most important purchase that I killed myself to make because then I bought the one bedroom the two Bedroom and then I then I bought the beach house and you need to be able to catch that Appreciation on the way up and you can't do it without the help of your parents unless you you've just discovered some great technology Play and you've gotten rich by the time you're 30 not a lot of people Yeah, if you don't have if your parents aren't in a position to help you I mean there's not they can cosign for a loan you see a lot of kids don't have the credit you could You can you got a tap on mom and dad or rich old aunt or rich old uncle somewhere But it's very hard to get in the game when you're trying to save on your own Especially if you're in a town like New York City or LA or anywhere where income levels are high You can you can assume that it's harder to save


The principle of revealed preference under the chapter of consumer behavior, as we have already studied in the previous module, the revealed preference of the consumer, but this revealed preference should have certain postulates or the assumption to study. So, any economic theory which is understanding the behavior of the consumer and its choices and its likes and dislikes should be discussed just by observing, i.e. by looking at the pattern of its purchase and consumption. So, we will say that whatever decision is being made in the market, while looking at it, that will be the revealed preference. Here, if we say that this theory is very much relevant and important with the perspective of the producers or the marketing companies, whose purchases and consumption actually observe decisions and decide their production, packaging, pricing and different units. So, this theory is very much important for them. Now, if we look at the principles and assumptions of this theory, then the basic thing we will have to see is that actually it is related to a person, either he, she, any younger, any older, whatever, who is going to the market and buying the shares, then they decide between two bundles. Although, he may have one, two, three, ten bundles, but in that particular time frame, in that one moment, what is its decision, it is after two bundles. And if we say about these two combinations, the bundle which he is purchasing, it may be a little expensive compared to the other bundles, but if he is purchasing it, then for this, what is his choice, we will say that will be revealed preference or the choice which he has expressed. Now, if we go into his assumptions, then it is simple, there should be two bundles. And during this time frame, when we look at those two, for a long time, or some time, or one day, or an hour, it should be expensive, it should not be a change. In one bundle, the shares and in the other bundles, both are expensive.  So, the two factors which we will say the most are the prices of goods, of all the goods that are available in the both combinations. And the income of the consumer. The third thing which we see is that his preference should also be constant. The choice of the consumer means that his previous purchase, which he bought yesterday, which he bought two days ago, or four days ago, his preferences should be the same. The third thing, with his preference being consistent, his taste should also be the same. And for an analysis of consumption, whenever the consumer is making a decision, we assume that he makes a rational decision. And the rest of the analysis of the shares, the bundles that he is purchasing in the market, he makes an estimate of his value, he studies the different attributes of his. And all of these assumptions are of a large size. If we look at the basis of these assumptions, the theory of wheeled preference, which is his strength, the strongest point is that this economics, the environment, which gives an important thing, that we can decide about any consumption, or about the bundles of production, or about the preferences of individuals, without knowing the details of them, without asking them further, or without surveying them, he only purchases them. But the biggest weakness that comes to us in this, is that we assume that we have done all the information information, which is not possible many times. And the second thing for us is that consumers, the tastes and preferences, are being changed very quickly in the digital world today. So it is possible that the preference, which was two days before the consumer, when it came today, might be due to certain marketing strategies, or might be due to certain other information, which he has achieved in these two days, his preferences have changed. Or it is possible that his own related means, which he did not know before, or of any disease, which he wanted to share, these are the related events, which can affect his taste and preferences. Now, if we look at this graph, what we are showing now, it is slightly different from the previous one, and the title is telling us that, previously it was revealed preference, but now we are saying that it is the indirect revealed preference. Here if we look at it, it means that, there is a translation, which was shown by the consumer, between two bundles. But in this diagram, if we look at it, we are talking about three bundles, means that is one combination, that is second combination, and in the same way, there is a third combination, which is also present in it. Now, if we are looking at it, we will see that, available budget line and combination is present, which we are looking at on this line, that while this budget line was present, he gave preference for this bundle, whenever the bundle Y was also its approach, its affordability and its range. So, this bundle X1, X2, we are saying that is directly revealed to the bundle Y1 and Y2. Now, if we look at it here, while looking at the budget line or another situation, we see that the bundle Y1 and Y2, is its preference on Z1, Z2 bundle and this preference the consumer may have expressed at some other time. Now, if he has shown his this preference then we can say here that at this time the combination of the consumer is not of X and Z, it is of X and Y, but keeping in view the previous information or the consumption pattern or the preference, we can say that now, the situation of the consumer in which he has shown his preference and when we said that his bundle Y1 and Y2 is his already preferred bundle Z1 and Z2. Now, from here indirectly we can assume that bundle X1, X2 is directly revealed but indirectly revealed, it is preferred revealed on that bundle which he has not bought and may be available to him. Now, if we look at this theory then it is basically consumption and preference of some properties of the theory. Now, if we look at this then we have decided that the consumption expenditure on bundle X is equal to income and expenditure on Y is also equal to income or less or at least equal to that. So, if we look like this then it fulfills the theorem of our budget constraint. Now, this means that X is preferred on Y and if we look at that form then our bundle here is preferred on Y and if we look at it then the theory of transitivity says that if A is preferred to B or B is preferred to C then A will be indirectly or directly preferred to C condition so keeping in view this theory of transitivity or the principle of transitivity we say that bundle X1 is indirectly revealed to the bundle C. Now, if we look at these three conditions then this is not directly but indirectly revealed or it will be preferred to Zahid. Thank you.


And President Mohammed Ibrahim has written to the Senate seeking its confirmation of Major General Farouk Yahya as Chief of Army Staff. His request was contained in a letter to the President of the Senate, Ahmed Lawan, and read during a plenary. Major General Yahya's nomination is coming after the death of former Chief of Army Staff Lieutenant General Ibrahim Atahiro. The new COAS was until his appointment, the theater commander, Operation Hadin Kai, the military counter-insurgency operation in the northeast.


Treating Parkinson's disease with velvet beans. I have several videos on foods that may trigger Parkinson's disease, but how can diet be used in treatment? This video and the next look at beans for treating this disease. Two centuries have passed since James Parkinson's essay on the Shaking Palsy described a disease characterized by tremor and problems with movement. Today, treatment options include surgically implanting electrodes into the brain there has to be a better way. Who knows since the 1950s that Parkinson's disease is manifested by a dopamine deficiency in the brain? Well then, why not eat a dopamine diet? A variety of fruits and vegetables contain the same dopamine made by our brain. Unfortunately, dopamine can't cross the blood-brain barrier and hence is ineffective as therapy. However, the dopamine precursor, known as L-dopa or levodopa, can get from the blood up into the brain, where it can then be converted to dopamine within the brain by an enzyme called decarboxylase. We don't want the levodopa to be converted to dopamine outside the brain, because then it can't get in, so we give people a decarboxylase inhibitor, which itself can't get into the brain, so that keeps levodopa from prematurely turning into dopamine before it gets into the brain where we need it. So, eating dopamine-rich foods doesn't help, but what if we ate levodopa-rich foods? More than 1500 years before Dr. Parkinson came on the scene, an Indian physician seemed to have nailed it and even suggested a treatment. Velvet beans, the plant with the highest amount of L-dopa. So, might there be a way to forestall the epidemic of Parkinson's disease through plant-based remedies after all? Levodopa is the gold standard therapy for Parkinson's patients, but most Parkinson's patients in low-income areas cannot afford long-term daily levodopa therapy. In rural Africa, for example, it's estimated that only 15% of patients are treated with levodopa, because the daily cost of levodopa treatment is about a dollar a day, which may be half of what people make in a day. Same with other regions in the global South. L-dopa is mostly unavailable or unaffordable, so patients frequently use powdered velvet beans as a replacement or supplement to the drug, but does it work? You never know until you put it to the test. Velvet beans in Parkinson's disease are randomized, double-blind clinical study, and a dose of 30 grams, which is about three tablespoons, led to a reliable and sustained anti-Parkinsonian effect in all patients working significantly quicker than the drug, working significantly longer than the drug, and working significantly better than the drug in another double-blind, randomized head-to-head crossover study. The levodopa in velvet beans appears to be two to three times more potent as compared to the same dose of pill-formed levodopa, suspected to be because there may be some intrinsic decarboxylase inhibitor compound in the plant as well. Okay, but those were single-dose studies. What about the chronic use of velvet beans for Parkinson's? 14 patients with advanced Parkinson's received roasted velvet bean powder, or the standard drug, switching back and forth for months. Looking at changes in quality of life, activities of daily living, movement, and non-movement symptoms, and time with good mobility without troublesome involuntary writhing movements. And the velvet beans seem to work as well as the drug in all measures of efficacy, including quality of life. Here's a video of someone with Parkinson's solely treated with velvet bean powder for 14 years before and after treatment. Looking about both hands out for me, and tap your fingers on the right, just the right, try to go big, and the left, and turn. Despite the efficacy, the chances of this cheap herbal remedy ever being licensed seems unlikely, and for good reason. First of all, the stuff evidently tastes nasty, and we don't really have good data going on more than a few months. While velvet beans may potentially be part of the answer to Parkinson's disease management in low-income countries and high-income countries, one may be tempted to prefer them to drugs just because it's a more natural therapy, but researchers discourage patients or physicians to consider its use when the drugs are available. So leave it open. Pill form should remain the first-line treatment for Parkinson's. However, velvet bean powder may be better tolerated in certain patients. Psychologically, some patients just have a thing against taking pills, and so if they refuse, then certainly the beans can step in. But otherwise, velvet bean supplements suffer from the same issues common to all supplements, specifically lack of sufficient regulation and quality control. There's all sorts of brands out there, but there's no head-to-head comparisons as to which is best, and the quality of the products likely vary, but you don't know until you put it to the test. Six brands of velvet bean product were ordered through the internet, and most of them, four out of six, showed a large discrepancy between the claim on their label and the actual Eldopa content. And only two even came close. Their remaining products contained considerably less, less than 10% in two cases. Too bad there isn't a food source of Eldopa that you could just eat instead of taking in a supplement. Well, wait a second. Eldopa was originally discovered more than a century ago in fava beans. Might eating fava beans help with Parkinson's? I'll explore just that question next.


One of the things that I think a lot of people have assumed, and I think there was a lot of data to support, that over the last few decades, we had made or humanity had made significant progress against malaria. Malaria is the number one killer, human killer, I think of all time. I mean, there was a period where malaria was basically malaria deaths a year were close to a million. A million people dying every year, every year of malaria. And during the 2000s, that came down to around almost 500,000, maybe 600,000. So still a pretty high number, 600,000 people dying every single year because of malaria, because of mosquitoes. And of course, one way to kill mosquitoes, one very effective way to kill mosquitoes used to be DDT, DDT just crushed them. But DDT has basically been banned globally because of its environmental, supposed environmental issues. Remember DDT was at the heart of Silent Spring, Rachel Carson's book on the dangers of DDT and generally advocacy for environmental policies, which basically came to shape the environmental movement and basically came to shape environmental regulation after that. But nobody ever does the weighing of, OK, so yeah, DDT is pretty toxic and a lot of mosquitoes and other species might die. But we save, I don't know, half a million people a year from death, children primarily, versus, OK, we don't use DDT and those half a million die or a million die. And we have a more pristine environment. No, I mean, that calculation is never done because who cares about human life? It's a pristine environment that matters. But what's scary is that while we've had about two decades of systematic declines in malaria deaths, two decades of systematic declines and appearances of things like denu, fever, yellow fever, and other kind of mosquito-borne diseases, we are now seeing a real spike in mosquito-borne diseases and in malaria deaths back up to 627,000 over the last couple of years. So the last couple of years, well, I think this data goes back to 2021. So for 2019 to 2021, it may just spike in malaria. But also, we're seeing malaria in places like Florida and Texas and Maryland, places where we haven't encountered malaria in a long, long time. Denu, fever in Florida and France. We're seeing mosquito-borne diseases more prevalent. Of course, we had that horrible Zika outbreak a few years ago in Brazil and then across Latin America and even some fears about Zika in the United States. All of these are mosquito-borne diseases. We see a new, not new, but invasive species of mosquitoes entering into areas where they weren't there before and just a general increase in the prevalence of mosquitoes. And a lot of this, so a lot of this, they say, is caused by the fact that mosquitoes have become immune to many of the anti-mosquito pesticides that are being used. So they've evolved and they have strategies to evade these things. One of the big problems around that is that the World Health Organization and the CDC and other regulatory agencies are really, really, really, really, really slow to approve new pesticides, new methods to mitigate mosquitoes. Now, think about this. 627,000 people died of this in 2021. Over half a million people have been dying of this forever. Probably around a million people have been dying of this for a long, long time. If you go back long enough, I mean, hundreds of thousands of human beings, you'd think that this would be, like, number one, on the agenda of the CDC and the World Health Organization to approve, of course, why do we need these organizations? But given that they exist, to approve these treatments, to approve these pesticides or whatever else they need to do in order to get rid of these, and yet, they're slow. They're slow to do it, which is, I mean, criminal, criminal. Millions of people are dying, millions. And nobody seems to care. I think it's primarily because it's in Africa and nobody cares, right? I mean, if this was really widespread in America and Europe, there would be more action. But it's in Africa, so nobody cares. One solution to this would be to wipe out mosquitoes, or at least wipe out mosquitoes of breeds that we know carry diseases. We know how to do this. We absolutely know how to do this. During the Zika outbreak, there was a discussion in Florida to genetically modify the mosquitoes so they would all basically die. They couldn't reproduce. We have the capacity to modify the genes of mosquitoes to kill them all. Now, many of the mosquitoes, for example, in Florida are invasive species. Why not get rid of them?  Ooh, Frankenstein, you can't play God. Don't mess with nature. And on and on and on and on. But no, this is exactly what we should be doing. We should be engaged in a campaign to use genetic engineering to save the lives of hundreds of thousands of people a year, millions and millions of people over decades. And let's get rid of these mosquitoes.  They're just nasty little creatures, and they don't serve much of a purpose. Yeah, well, screw up the food chain. Who cares? Again, a lot of these invasive species, and nobody's going to miss them. Nobody's going to miss them. Nature will adjust to the disappearance of mosquitoes. Fine.


All right, well, we finally have come to what needs to be the last episode on the L5, at least for a while. Today's episode is all about the adjustments you can make through the service menu, at least the majority of the ones that you should be worried about for things like a little bit of color change, as well as mostly your geometry. And before we do that, because I have a feeling that if I just went straight into the calibration section, that it would get pretty boring and a lot of people may turn off the video just after two or three minutes of me talking about the menus. So instead of starting with that, we're going to start with all the testing I did as far as changing resolutions, trying different inputs, and going all the way from 240p to 480i to 720p to 1080i on the 20L5. And then to see what it looks like, what happens, how quick it changes between resolutions. If there's anything you need to know about it to make it properly do that, you'll find that out today. So again, first off, we're going to go through and show all the cool testing. And then I will timestamp the video or, as I say, put a nice section of timestamps in the description of the video, where I'll have the different points where you can jump in if you want to come back and later watch the calibration section. Or again, if you want to know just about the adjustments and everything there is to know, you can watch the entire video and stick around to the end for my final thoughts on it. Let's go ahead now and start the testing off with some analog video. All right, we're ready to start testing now. And one of the first things I'd like to test is all the inputs and outputs on the 20L5. And so we've got the inputs, we've got the Superditz Edo input into RGB right now. So first we're going to run through the 240p gamut of testing through. And just to make sure a signal passes through each input and then something comes out of the output side, the outputs are all run into the 14L5 here. So right off the bat we know that RGB is working. And what we can do is if you look behind me, you can see just the massive amount of wiring that we've got set up here. I do have a multi-out that will allow me to quickly change from what you see now as RGB into another input. So let's go ahead and put that in since we know RGB is working. And then I can come around here and we can change the input. Let's press line A. So line A is working and line A is working there. Now line A is using S video. And so that appears to be working fine. And then next we'll move to the composite input which is line B just right under that. Signal for B now. There we go. Line B. So that's composite input. Now you can use the 240p test suite, which we'll show you right now. We can use the 240p test suite to quickly jump between resolutions, which actually is quite helpful. So this is harder to see. What it does is it goes from 240p and you hit that button and it's 480i right now. It doesn't stay in 480i when you back out of it, but it does show you how 480i would be rendered through composite. Well now we can test the other inputs and other resolutions. So I've got my PlayStation 2 hooked up through Component and it's daisy-chained over to the 14L52. But just so you know, the menu right here is 480i. So we know 480i is working. I've got Gran Turismo 4 in here to test real quick because this game should give us ability to go up to like 1080i if I can remember correctly. Okay yeah, so this will go first off. We know 480p will work, but we can switch over that pretty easily. Staying 4 by 3. There it goes. 480p. And so we know that works. I'm going to go back. Now we're back at 480i. If we go down here to 1080i, that, yep, 1080, 60i. Now our tubes have shrunk down in resolution so they shouldn't even be nearly as sharp. Alright here we go. See we're dropping down into 1080i. Component, 1080i. We've got our lines across the top of our screen so that like I said is going to be there. Same thing, you might notice something at the bottom. And sometimes you might have an insert put in here that blocks that out and just clips on the front. There's little slots on it. It just sits in there. But it will work for 1080i. I mean I don't think it looks that great in 1080i. Wow, so I mean it looks blurry. I don't really know why anybody would want to use it for this. But it can do it. I think you're going to be better off if you're going to try to use one of these high definition resolutions going to 720p, which we could show off on an Xbox game. I'm not really sure if there are any PlayStation games that go 720p. Okay we're going to go back now into our screen settings. And this time we're going to go back to 4x3. We're going to remain in progressive mode this time on 480p. Take advantage of the whole screen here. Obviously this is pretty much perfect for this monitor. 480p, 480i and 240p. It's nice to be able to take advantage of this 480p mode though. This color is slow. Before we put the PlayStation 2 up I'd like to show you one thing. That is that a gun con will work on this monitor. Or any light gun really. You see me? Light guns do work on the 20.05 and pretty much any CRT. It's not flat and high definition only style. Our last resolution we want to look at is just Component 720p. This is Freedom Fighters on the original Xbox. And this will do 720p natively right out of the box that switches right to it. You're getting the same thing though with the shortened screen. What I will tell you is that the progressive image coming from the Xbox compared to say the PlayStation 2. It's just the Xbox's image quality is far superior through Component. But it works. Doesn't look great because you're again condensing your screen size. But that's all the resolutions. Let's take a look at some of the features and controls on the PVM L5 series. Now first thing I want to show is the brightness controls for your LED buttons. Now the first thing you could try to do is if you press control and these appear to be fine where you can actually see the different buttons. But if you cannot see them or they appear really dim, what you could do is locate the up and down button right here. And then we're going to press control and have no buttons on the screen. And if we start to press, for example, up, see how it brightens up? That's how you control the brightness. But if you could tone it down, if it's too bright, you could do it like that. But that's how you get that brightness to tune up is just make the control off and then you press up or down and that controls the brightness of your buttons. We are using RGB for this test. That means we have RGB slash component selected here. We have external sync in use on this side on the left. There are some other things over here that we will not be using, but the most important thing other than your inputs down here would be something like your degauss button and your reset button. And then most of the other things we're going to deal with are going to be on the right-hand side. Now on the right-hand side, we have volume up and down, contrast up and down, phase, chroma, and brightness up and down. So that's our five up and down meters.  Once we've pressed menu and we have our status screen pulled up, it will tell us what format we are in RGB, what our screen resolution is. Now this and every other PVM will not say 240p, it will say 480i. Color temperature is D65, so if you want to change that to a different color temperature, you can change that in this main menu. And then we've got some other things here we're not as concerned about. If I had pressed down, the first thing on this menu is the color temperature adjustment. So if we went in here and we hit enter, we would take us to this menu, hit enter again, and it will let you cycle through either the D93, the D65, or the user setting, which you can copy from the D65 and the D95 and then you can use these adjust, gain, and bias to tweak that color if you want to have it be slightly different than what the built-in color palettes are.  Go down again, this is where we would select our inputs. At the top we've got RGB or component, so pressing enter and pressing enter on here, which will light up our RGB, we change that, that's how we change to component or RGB. It must be on this briefcase and then over here on this selector. The rest of this stuff is not a concern. If you need to change obviously your language, you could do so here. The rest of the settings we want to get into are in the sub menu or the service menu. To access that, we need to have this menu pulled up and then we should be able to hit our Degas and Enter button at the same time, one on each side, and as we do that, it brings us to the sub menu or the service menu. We're going to be concerned mostly with our geometry and our horizontal and vertical geometry for the most part. Everything else is in good condition on this, but we'll walk through that in a minute, but this is how you get into this portion. For example, most of these on this side are shortened for what the menu is. This right here is the deflection. That's going to be where you're going to find your geometry settings. So if you go down to deflection and you go to focus, there is some things on here that if you need to change any of these, I highly suggest you consult the service manual. That is not an adjustment you should need to make most of the time. You can make a manual focus internally on the flyback if needed. This is the screen we are looking for. It will say horizontal size, horizontal center, and horizontal position, and markers, and the black section for each side. That's one that we are very interested in, and if we go down, we'll have the same kind of settings for our verticals. And then finally, the geometry setting. This is where you're going to adjust your linearity, your pin cushion, and then your screen lean, your tilts, anything that is a screen bow, stuff like that. Or any kind of curves along the sides can be adjusted by this menu. I would highly suggest again that you review the manual. It gives you a picture of what each one of these exact adjustments does and how you might want to make the adjustment on it, or what exactly to look for on your screen, and if you have a certain problem, which one of these controls will adjust and maybe help you adjust that. I will have a link to the full manual below, and that is going to do it for most of the important stuff that we need. The rest of the things in this menu are important, but they're not really things that you need to concern yourself with for 99% of the people out there. These are factory settings, and if you want to know more about them, definitely refer to the manual. But the main thing in this menu you're going to want to be concentrating on is this deflection menu. Now once you've got your settings changed in here, you can press menu, and then you're back out to just the main menu, and then you should be able to press Degas Enter again and it will go away. And if you press menu, there it is. You're out of it. You're back in the regular menu. We're going to make some adjustments here on this tube using some of the grids here from the 240p test patterns suite. It is adjustment time, and this is the second page on MD Fourier's 240p test suite. The best calibration test suite that you can find for a CRT, especially since it's free and it's for video games. This has a lot of built-in test patterns. Most of these are going to either show us things about our color and our screen geometry, and also things like sharpness, and we'll look at some of the other different types of menus here that you can use to judge your screen quality and make adjustments. This kind of square or rectangular grid pattern is really good for telling us where we are as far as screen centeredness. So for example, on here we have a gap at the bottom, so this needs to come down just a little bit, and then we need to expand it. We're also looking at a gap here and even a small gap here, so we need to move our entire screen to the right a bit, and then expand it out, and we'll try to get that cleaned up, and we'll make sure that if we can, and there's any kind of wonkiness along the edges, that we'll try to make adjustments if it's possible. There is one thing that I need to warn everyone. The CRTs, even these high-end ones like this, they were never guaranteed to give you 100% screen perfection. This is analog video still, and it never can get much better than probably 96 or 97% for like a perfect look. You're always going to find some little imperfection on it somewhere. Usually it's at a corner or at an edge. Just keep that in mind and try to do the best that you can, but here's another grid we'll be using, and we're going to start by adjusting this. And we're going to do, as we explained earlier, pull up the main menu, press the gauss and enter into our submenu, go down to deflection, hit enter, we'll start horizontally, and we need to move some to the right. We're on 85, so to right this, we will hit enter, and it saves it now in here. If you didn't want to write it, you could just press menu and back back out, and it'll jump back to whatever is written in it right now. The next thing we want to do is try to expand it. Let's try some size adjustment. You can use both the horizontal position and the horizontal center to tweak that exact center point you want to set. And right now, my goal is to push all these red lines up to the edge, and then after that we'll expand a bit further, but I first want to get everything to the edge. We've done that with every corner, well three of the four corners. This corner is here, I can see it. Now we're going to move to vertical adjustment, increase the size, bring it down some, that looks way better. But that's how you run through the vertical and horizontal sizing. And then after that, you'll want to get in and check out your other settings such as the geometry. And that's where you could do a linearity adjustment with the top two, or these are all right here are screen tilting and pin cushion controls. That's what this one down here, this one are all those six settings. That's a quick look at the setting numbers we have in here right now. And then if I go back, I'll show you the others so you can get an idea of where we're starting from. And then once I make my adjustments, I'll come back and show you these numbers again at the end and we'll see how the screen looks. Let's run through the final calibration settings here. We've got our scroll pattern going right now, so you can tell it looks very nice. I want to pull up the other test pattern starting with our grid pattern here. You'll notice I did go about one or two scan lines over the over scan line, which was the red border on this screen. So I try to push that red border again about one to two scan lines on each end out so that you don't see it when you play the game. You want to have a slight over scan. And then if I go to that screen, it's just got a larger vertical orientation. So it's going to show you more of a vertical over scan. That's not a very common resolution. The other thing to look at is our linearity screen and then our grid on top of our linearity. But our circles are very round and nicely centered and our convergence looks wonderful. The last thing I wanted to show you were the settings on our deflection. If I go and start with our horizontal settings, these are the horizontal settings for all of the settings on this monitor. And again, this is to refer to if you need assistance and a guide to maybe somewhere to start with on yours. You could probably use these numbers and tweak them some to get maybe a better image on your monitor if you want to try it. Here's our vertical settings. And then finally, I'll show you the geometry settings. So some of those did need to be adjusted. And again, at the end of the day, we've got probably about 95% to 96% if I had to give it my score, which is really high. All right, we've got just one more thing to cover on the 2005 and really all the L5s and even L2s. And that's the option slot in the back where you do have the ability to add one of these great Sony BKM input option cards.  This is the full set of them. We've got a couple that do SDI and digital SDI. And then this is the BKM129X, which is the most popular because it's the analog video card that gives you both component and RGB input. And then there's also a composite as video input. And then there's even been some reproduction cards as open source by my friend Scumlos. He has designed some really nice options if you want to make your own card. And then there's, of course, this big boy, which is the HDSDI module, which has a fan in it and it's very noisy. And this is the reason the slot looks to be big enough to fit two cards in it. The rest of these cards are just one card thickness, half as thick as this, but this one's two card thick. And it's the reason that it's wider so it can slide in there and attach to the board through this pin. So there's not a spot to put two. It looks like you could fit two in there. But if you look in there, there's only one side that has a port and it was made double wide for this board, which is again the BKM142HD. So if you do need an extra input, there are options for this monitor. And that's how that works. Sometimes they'll have these nice slot covers. The way you install one of these cards is very simple. Just take the BKM127W, for example. The card has a path to slide on and you just push it in, give it a click and then tighten the top and bottom screws that are attached to the plate. And just hand tighten them. Don't make them overly tightened because then you might need to get them out and change to a new card. And now let's turn the screen on and see how that looks. It should pull up our information on our card right away after installing it. Now you don't want to install that card with your PVM powered on. You want to wait until it's nice and powered off. We'll give it a second to turn on here. That's coming up. We'll go to control menu. We should be able to go down here to our options and it should tell us what is in that option. Okay, here's our option. I had to change cards. Apparently this one, maybe it's not reading correctly. It is just B stock, so I've never actually tested it. This one does say 129X. It's been installed with the power off. So if I go down here and I go in my main menu to this, it'll tell me what that is. The serial number and everything. And then if I go to option A, it should give me the ability to set that. RGB components selection on there too. So that's pretty much how you set that up. Pretty simple. You don't have to do anything to the software. It just will read it automatically if your card works. Well that certainly was fun, wasn't it? We have just finished completely refurbing this Sony PVM-20L5. Now you could get in and replace capacitors, but the warning that I have is that this one can be very picky. So unless you really have an issue or you're a really experienced technician, then you shouldn't probably worry about the capacitor component change. I like to just go in and clean up this PVM primarily, maybe five to ten years from now. Once they start to get some serious age on them, then we can revisit the idea of just recapping one that is working fine if you're concerned at that point. But right now, since these are still in the early to mid 2000 range, they should have plenty of life still on some of these capacitors if there's not a whole lot of usage on them. Because the parts that Sony specifically used in this are going to be way better and higher quality, more likely than the ones you or I are going to be able to find second hand on the market, especially this year in 2021. Alright guys, let me know what you think with a comment below. I certainly did have a lot of fun working on this one, but I'm ready to move on to a new project and we will see what that is coming soon. But for today, thanks again for watching. I'll see you guys next time with some more retro content.


Everybody for us and Sean here ripping a couple of boxes of 22 23 Merlin hobby Merlin chrome hobby for Rick Sorry, Rick straight out of the camera here Thanks again, buddy. Love her. Let's go Merlin. Let's get it.  I can't press down on it too hard now open packs so bus line refractor And auto is gonna be Jota the auto for the first boxes Jota I'll see big parallel on this one SSP, come on Refractor real Hattie.  I can't lift anything now. I thought I ever do any arm day or anything They they're nothing this one and Baston Reagan rose gold shimmer Gabriel Jay's you set of 299 I don't know the French array holes Joe dirty sir Fractor a Muhammad kudos retro fractor retro logo factor scov Olson Andreas scov Olson Garnaccio under 21 And refractor of Neymar. All right, we need a need a better second box here for your Rick. I'm confident. I'm confident I do have Phoenix thumb right now because the packs wouldn't like tear like prism. So I have like pressed down and pinching like Make it come apart Anthony Yeah, it's not good dudes. Thanks Varela refractor aqua Speckle the 199 Gavi. I don't think they have announced why Unless somebody's heard something Refractor, Nico Gonzalez, Nicholas Gonzalez Come on. Come on. Oh mojo. That'll be an auto Diop and McConaughey's 67 of 99 Fractor Gerard Bowen Green mojo of rookie Rooney Bargy. That's a pretty nice one actually 61 of 99 We go to 99 green mojo Bargy Suley under 21 refractor rookie of Eileen jr. Javi on the Aida's alchemy a pink mojo now to 275 Moses Simon refractor Rikki of Garnaccio Retro logo factor there Gabriel Jay Zeus refractor Rikki of Kassado There we go a better second box not the best overall, but some nice stuff to The barges money to hang on to and keep an eye on appreciated circle get those out to you