Wel, gwaith ymlaen i ni, sy'n gweithio i chi'n gweithio i Drupalcon yn y dyfodol. My name is Eric. I am a freelance web developer. I live in Brighton on the south coast of England. I've been involved with Drupal for probably about seven or eight years and I've been using it to build both traditional HTML websites but also to manage content for native mobile apps. I've spent a bit of time over the last few months researching this issue of offline and how native apps handle it, how the web handles it and see if we can learn anything from those two sides. I want to start by looking back to 2007 for a moment. I found a website from 2007 from way back for Drupalcon in Barcelona. Was anyone there at that time? I show you this because this kind of website we would have used from an office or from home on a fixed internet connection and you were either online or you were not, you were offline. But also in 2007 the first iPhone was released and since we've used smartphones we started to carry around the internet with us. You can have Wikipedia in your pocket. So we use the internet now in all sorts of different places. We use it outside and we use it in conditions that are very different to what we used to. So we use it in an inherently hostile environment. We don't have the luxury of a fixed cable that we know is going to work. So when people started writing apps for phones this kind of scenario was a given right from the start. People were aware of this that there may not be a signal, there may not be able to get online and we designed apps to cope with this and we can learn a lot from the way that's been done in about being resilient to network failures. There's an expectation with an app on my phone that when I press one of these icons it will work even if I'm out and about. But sadly we can't really say the same about the web in reality this is kind of what we expect. I see a lot of apps that have been built that feel like they've been built purely to show the content that's on a website but to cope with it offline. This conference in fact has an app that people are using. There's nothing wrong with it, it's a very nice app but I can't help but feel that when we do this we make duplication of effort. We're writing a web front end and we're possibly writing an iOS and Android front end as well. Also downloading an app can be quite onerous. If you've got a slow connection and you need to download a 20, 30 megabyte app or if you're roaming it will be a lot easier if we could just use the website. I'm going to look into this a little bit more detail this is all the same hardware. It's also using the same network with all its frailties and we're also downloading the same information. The only thing that's really different is the software. Browsers are now starting to follow the lead taken by native apps in providing some functionality to handle this. We'll look at that today. I think that going forward a lot of apps that are in this kind of... that are here to provide offline they might start to become obsolete. I want to show you a little demo site. This one is for a conference, for a Drupal camp or something like that. We've got a home page, a schedule and a few other pages. It's very basic. It's the most basic site you could have. No login, no forms, just a brochure site. There's a good candidate for seeing if we can improve it. The question I want to ask is can we take this site and make it so that when someone visits it we can say they can go back to it later even if they don't have a mobile signal. Can we provide something that a delegate could rely on and how far away are we from being able to do that? This is the horizon's track. I'll say now that this stuff is quite new, quite raw. There's limited browser support. I'll come back to that in a moment. It's very interesting to see where things are going. This service worker is a big key part of the puzzle. This is a relatively new JavaScript API that we have. It is essentially a client-side proxy, and it gives us a programmable layer between the document and the network. You can think of this as a little mini web server running on your phone. As for what it can do, it will intercept the network requests. Like a man in the middle type thing, it will handle everything that you request from the network and everything that you get back. It also gives us a programmable cache and a couple of other things that are quite new, push notifications and background sync where you can send and receive content even though your browser is closed. Those last two are a bit newer, a bit less finished. I want to focus on the first two for now, the network and the caching. If we fast-forward to today and look at the state of things at the moment, the browser support, so as things stand, Chrome, Firefox and Opera all support the stuff that we are going to show. This has been in development in Microsoft Edge and it is not yet ready in Safari. That actually includes a whole of iOS. The other browsers on iOS are actually using WebKit and mobile Safari under the hood. This website is ServiceWorker Ready. That is a good indicator of the state of play. There are a number of different components to this and it lists them all and tells you exactly what is and isn't supported. But don't let this stop you. Don't think, oh, I can't possibly use this if it doesn't work in Safari. We can add the ServiceWorker to the website without. We can add it as progressive enhancement. It won't diminish the experience for anyone whose browser doesn't support it. They'll just get exactly what they had before. So what do we need to get started? First of all, we need to be running HTTPS. Secondly, we need to start adding a little script to our code. In our HTML file, we're going to register a ServiceWorker. I'll put this in a condition which says if the browser supports it, then we'll start it. If not, just ignore it. We pass it the name of another script which we will use to tell the ServiceWorker what to do. We'll come on to that in a moment. This scope parameter is quite interesting. What that means is that any subsequent visits we make to pages within that scope will now be handled through the ServiceWorker. And also those pages will use the worker for all of their requests. So images, fonts, things used from CDNs, Ajax, Google Analytics. Everything will go through that worker. For now, we'll just leave the other script that configures the ServiceWorker empty. So by adding what we've seen, we have a worker up and running now. It doesn't really do anything, but it is there. We can look at this demo site and we can go into the browser's dev tools and see it running. We can see all our ServiceWorkers here, and then we can go in and inspect it in the same way that we might inspect the document. So the ServiceWorker runs independently from the document window, so they don't know about each other. And it will stay there, even if we close the browser. The ServiceWorker can go to sleep and then it will wake up when you come back to the page. In order to customise it, we need to start thinking about the events. ServiceWorkers are event-driven, and we can write JavaScript to run when the different events occur. There's quite a few events, but I'm going to focus on two today that are most interesting for what we want to do. The first one is an install event. The very first time the ServiceWorker is run, this code runs. Typically in here we'll download things that we need. We always want available. CSS, fonts, JavaScript, that sort of thing. The second one happens whenever a page makes a request. This is the fetch event, and this one is where we do most of the work for handling offline. We can put pretty much whatever we want in here. We will get given a request, and we need to pass back a response to this event. That's probably the most minimal example. That will just return a fixed string. Typically in here we put some logic to say if it's a particular URL, go and do one thing, if it's a different URL, do something else. It shows you the structure of what we're dealing with. To make that more useful, I need to show you a couple of other things that we want to use. First thing I want to talk about is promises. Much of what we do here is asynchronous. Things that can take a long time to complete. A lot of APIs will use these things called promises. They could be widely used in the functional programming world, but they can be a little bit hard to get your head around the first. What we're trying to do is ask a question that will take some time to answer. We need to get back something in the meantime. We need to get back this promise that the question will be answered. The promise will either resolve if it's successful, and if it does that then the then block, the then function will be run. If it doesn't resolve it will reject and then we'll get this error handler working. Secondly, I want to talk about the, we get a new fetch API. Just to look quite familiar if you've used jQuery to do Ajax's requests. We're giving a request and asking the browser to fetch it, and then we're doing one of two things if it comes back successfully or it doesn't. So we get a promise of the answer to the fetch request. I also want to mention a cache API. It looks a bit like this. This is quite different to the inbuilt browser cache. It sort of sits on top of it and allows you to access the inbuilt browser cache programmatically. We can do things in here that we can't do with extra things that we can do, like putting, getting stale content out. We can sort of guarantee that if we put something in here it will be there later on. This idea of getting back stale content is something that comes in handy later on. In the browser dev tools we can go in and inspect the cache and we can see what's in there. That's the demo site I showed you earlier. We can see that it has put all these files in there. So let's have a look at the site when it's offline. I'm going to load it online first, the very first time. Now it will be downloading various pages and putting them in the cache. Now I'm going to put the phone into flight mode. Now when we go and view the page it's there. That's because we fetched. We put those pages in the cache first and then we got them out of the cache later on. If I close down the browser and start again and come back the pages are still there. I'll go over a few techniques that I used to make that work. Starting with a network-only strategy. This is kind of the status quo. This is what happens if we don't do anything different. This is what a browser would normally do. It would say, okay, I've asked for a resource. Go and fetch it. If the fetch from the network fails then we can't do anything. We just return an error. It might succeed if on nine it might not. We can improve that a little bit by falling back to the cache. What we do is in this fetch we add a catch block that will run a function if the fetch fails. That looks a little bit like that. We're going to look in the cache now. If we couldn't get it from the network we'll go to the cache. If we couldn't get it from the network or the cache then we'll have an error. One more thing we need to do in there is get things into the cache in the first place. What I've done now is to add a function that says if the network succeeds go and we're going to return the response but before then put a copy of the response into the cache so that we can get to it later on. Now we have these two functions. That's quite a nice improvement. It works quite well for offline. It works in this scenario when we're offline but maybe we need to rethink a little bit about that because it's not always this clear cut as it turns out. We've covered this scenario now. We talked about a situation where we are definitely offline. There is no question about it but we haven't really looked at some other scenarios. What about this when the connection comes and goes? Well this scenario when it's a very weak signal or this scenario when we have some Wi-Fi that may or may not work. That one didn't. It turns out that browsing the web on a mobile device is often something like this. Let's look familiar. That did work but it took a long time to get there. You could say it worked. You could say it doesn't. Even if it hadn't worked it would have taken an equally long time to get to this. We can't really do much about this because it's sort of by design. If we think about how the internet works we have TCP IPs. It's a reliable protocol but it's built on top of this unreliable network. We've got all these physical connections none of which we can control and any stage in there something can go wrong. When you view a web page the browser starts talking in HTTP and the operating system will use the computer's hardware to send packets to a router. The router will send them on to another router probably several others in between. Packets then get reassembled by a server which passes it back to a web server process running on that machine. We've done all that to get the packets to ask the request then the whole lot has got to come all the way back and only when the response comes back do we get an answer. If something goes wrong and the packets are going out into space we don't know where they're going but they're not coming back. All the browser can do in this situation is sit there and wait and it will hope that they come back but it doesn't know and it has to give an answer. The only way it can do that is by waiting a while and if it hasn't heard anything by giving up that's the browser time out that you get. We can learn a couple of things from that. Firstly, it takes time to determine this online-offline state. Perhaps more importantly our users of our website may not wait for that time out they might decide before. In that video is quite a long wait and I could easily have just closed down the tab and thought no it's not happening. So maybe we need to rethink our strategy a little bit. That website from 2007 that I showed earlier was a fixed width. Nowadays we don't assume that we don't write websites as fixed width. We don't assume that there is enough space for a multi-column layout. So we changed the way we do design so that we design for mobile first then we add layouts if we can. So what if we did the same thing about network connectivity? What if we assumed that we were offline first and then treated the presence of a network as an enhancement? If you think that sounds a little bit crazy then think about the layout a few years ago. If you said to somebody then actually layout is an enhancement it's not an intrinsic part of the site, it's an enhancement.  So we talked about caching pages and if there is no cache to start with why don't we show them to the user while we wait? Here's an example from the native Twitter app. Now when I file it up I see tweets straight away. I know the tweets that were there last time we used the app and after a few seconds I get this little bubble that pops up saying there's new tweets. So what happened there was that I saw the content then the new content was fetched and then I saw the notification so I could start reading those tweets I could start interacting with them before the data arrived. What I wasn't doing was seeing a blank screen with a spinner saying please wait while the tweets are being loaded. And if the network had failed I would just not have seen that bubble and maybe I'd seen a message that said sorry you can't fetch new tweets. That can't be helped you're not always going to be able to... We can't do magic we can't get something if there is no signal. So that's really the whole idea behind going offline first. We want to give the user something straight away even if it's old. Worry about whether it's changed later and we'll see whether it's changed and then tell the user. That is usually better, not always there are certain cases where you really don't want to give out stay or content. Maybe live sports scores would be an example. But very often someone would rather see something that's a little bit older, a bit out of date and know that it is than just see nothing. And if we really want to get a good user experience we can try to... try to decouple, try to separate out the user's interaction on their phone when the user presses something from these slow network requests that take a long time. So that when somebody presses a link they get something straight away. And in order to do that we need to start by loading some things in advance. So let's look at that that install event and see if we can add some code to handle that. And it's quite simple that all I need to do in here is really use that fetch API and that cache API and get some URLs and put them in the cache. And that means that you know, once I visit the website those resources are downloaded now they'll always be available going forward. The fetch handle is a little bit more interesting. So last time we added a fallback for when the network failed. We need to turn that on its head a bit. We need to go to the cache first and then fall back to the network. So it looks a little bit like this. We try the cache that will give us back a response or it may not give us back a response. If it does we just give the user that. If it doesn't we go and fetch it from the network and we then put it a copy of it into the cache as we did before. So now add one more little thing in here. If we did find something in the cache then what I want to do is fetch another copy of it. So there's no point leaving it in there because then we'll get stuck we'll always show whatever page the user first downloaded. So I want to fetch it again and then when that fetch comes back I want to replace what was in the cache with my new updated content. But what's interesting here is this purple line that's highlighted we're not waiting for that to finish. Although straight on to the second line which is return the cache response that gives us our kind of instant response. The fetch is asynchronous at some point after the user has seen the page. Now this works great for things like CSS, things like images. It doesn't matter too much if I got previous version. The next time I hit the page I'll get an updated version. There's no real cost to doing this in terms of neural requests. I was going to make that network fetch anyway. I want to handle HTML content a little bit differently. There's a slight risk that it will show the user the user will open up their phone and see a page that was a bit old. I kind of want to have some way of telling them that. In that fetch handler we get two responses. We get the first one from the cache and the second one that comes down later on. When that second fetch comes back remember the user is already looking at a page. If it is old you need to tell them somehow so we need to be able to compare the pages. If they're different I want to tell the user that hey this page has changed. If they're the same we just won't do anything. This is nice. We've kind of got away with it as it were. We've given the user the page and told them this is it and then thankfully the page didn't change. But if it had changed I need to send the message. The best way to do that is using this post message. Service workers can't communicate with the DOM. They sort of exist in it's a bit like having a separate thread. It's not completely like having a different thread. But you can't access the browser the page. I need to do this with this asynchronous messaging. This is just a message from my worker saying there's some updated content and I'll tell it what URL has been changed. And then on my document side I'll listen for messages coming from the service worker and then put up something in the DOM accordingly. And the way that I had to get this to work was by putting in a proxy in between that could use and could put in a header called eTag. The eTag is a hash of the actual content. So if any content changes you'll get a different hash value. And that's quite a nice way you can look at the headers from the two responses and say are they the same, are they different. So if I now look at my if I now go back to the demo site again what I want to do is carry on browsing through this site and I'll go down and find one page. Now the browser is making a second request and when that request comes back it's changed and I send the message and now I can handle it like this and give the user the option to reload the page. Most of the time that won't happen but it's quite a nice way of dealing with it when it does. And they our user won't be any the wiser if it didn't happen. They'll just think oh I got my content straight away. So I'll wrap up by talking about service workers in the context of something that people are calling progressive web apps. I mentioned the progressive enhancement these things are kind of built on top of the web as it already is. We're not replacing anything here we're just saying you have this extra functionality available. We've talked a lot about the offline capability but also I can make a progressive web app installable. I can create a file this is just a text file a jason file called a manifest which will contain a few things like the name of the site the icon and various other things like the colour of the tool bar at the top. Just by putting this in certain browsers namely Chrome on Android will give you the option to put this on your home screen. But lastly I've said these are these are still linkable. The building blocks of the web are URLs and links and we've left that alone. Each one of those pages had a nice a nice URL that I could share or post on social media. I didn't have to go and download an app and then start again navigating within the app to get to where I was going to go. If the browser didn't support service workers it would just see the same page as I had before. There's been a bit of work on this done in Drupal. There's a module that is quite interesting. It attempts to automate building the service worker script. It's very early. It's quite experimental. I used it for the early part of the demo and then I had to do a bit of extra stuff for the later one for the updates. But it's definitely something that I would say is worth keeping an eye on. I'll leave you with a few resources that I'd recommend that you take a look at. The first one is this talk, the notes from this talk and that has all of the others. If the first one is lists everything you want. There's quite a few other videos from the especially from the Google IO conference. They did a whole series of sessions on this that's very useful. I actually had to listen to quite a few talks about service workers before the penny dropped, so to speak. It does often take a few a few goes, as it were, to understand this stuff. Thanks for listening. Just a couple of things if I could ask you to evaluate the session and give some feedback, that would be very helpful. Also there are contribution sprints on Friday. I'll happily answer questions if you could use that microphone so that the questions can be recorded as well. That would be great. Thank you. With the service worker, can you have an event which triggers that reload process even after it's been reloaded once? So can you have content as it's being updated, kind of pop up that notification? Oh so if the service worker is sort of like if it was polling the page to when you update your content let your users who are on that page know that it's been updated without letting the page. You might be able to. I think there is something coming to do sort of serve a push. That's probably a little bit further away. So I don't know anything. You could, yeah, you could that was the point was I think you can start with a network first and I think you've maybe put you can have a race where you say I want the network to go for a certain amount of time and then if it doesn't come back within that time use the cache and do something like that. Did you do anything about the cache headers that you get from the server? I didn't get that you are taking that into account. You can get cache expressions header on Apache or different servers. You can get yeah in the get request. When you do the get request you get a cache expression header you can program that to have different kind of expression headers so depending on the kind of data you could decide if you do something first go to the cache because this expires in two years or go to whatever it's online and then fall to the cache. Yeah so the the thing with the cache headers is so the service worker kind of operates in the same way as a browser would if it requests a page and if you serve a page with a long expiration time it will go into the browser cache if you fetch that from the service worker it will get it out of the cache even if you say network because it has it in there for a certain amount of time it knows it doesn't need to guess it again so you still need to implement sort of cache headers in the same way that you would and say this content is valid for so long Yeah it can get a bit confusing I think probably the easiest way is to think that if you're serving up some content and you say this is valid for one hour there could be any number of intermediate proxies between the server and the client and each one of them could hold on to the data for that time and that's what the server said that they don't come back within this time If I think if you think of it like that then the last step of whether the service worker then asks the network for it it doesn't necessarily need to know where it comes from it just knows that I'm potentially making a request I think that's right Okay I'll repeat it Yes But you need to test the service worker too Yes I think you can in Browse of DevTools I think you can disable them Okay Okay thank you Thank you


Life is about the journey. We're called to be nomads and God's spirit is continually tugging on each of our hearts, beckoning us to take the next step forward into the unknown in full faith that God is with us, for us, and guiding us. None of us know where exactly all of this is heading and that's okay because the one who is sustaining it all loves us deeply and it's in that knowing of that reality that we are free to press forward onto new horizons, expectantly awaiting the next stop that God has for us. It's not about our destination.


Daring bandits continue kidnappings and havoc across Zampara, Niger, Kaduna, Katsina, Sokoto and Kevi states. The Nigerian state is so far unable to put a halt to their actions or find out why from a security expert. The Irigwe people of Platteau state accuse fuller needs of setting more than 250 homes on fire and destroying their farmlands. Both sides will be speaking to us this morning. And suspended head of police intelligence response team Abakari gets replacement in Tungi, Jisoo. Welcome to the breakfast on Platteau TV Africa. Good morning. Good to have you here. I am Annette Felix. And I am Usaugi Obon. Good morning. Thanks for joining us. We hope that we have a very interesting run this very beautiful Tuesday morning. Indeed. And we have been talking about the issue of the case of Hoshbopi for a long time. And we saw how, you know, US court documents showed links to the former commissioner of police were talking about the person of Abakari. The conversations, you know, continue to stir people's emotions and conversations. And we heard from Frank Uba when he put out our press statement yesterday that there's a replacement for him. And it's a person of Tungi, Jisoo. He went on to say, you know, this is someone who has been, you know, the former commander of the rapid response, scored IRS and Lagos. He was the deputy commissioner of, you know, states, of police. He was the department's, department of operations, Fawcett Courses in Abuja. He had previously served in state CID, river state as deputy head of the unit. He went on and on and on to list all his credentials. But when you take a look at that of Abakari, it's not really different. You know, these people take courses even abroad. You know, they have a first degree. They go on to bag a master's degree. So it's on paper. They seem fantastic, like fantastic candidates. But the question really has been about character and integrity. Those things you won't find on paper. You know, we heard yesterday one of the lawyers of the press, Mr. Tunde Kolawoli, making allegations and claims about how some, you know, people in the high ranks of the police force were corrupt. But I had to quickly stop him there to say, we don't have evidence of that. But when people tell you the experiences in the police force, you really wonder, do they really have the authorization to do that? And if it's been going on for how long, it makes you wonder, it seems that they do. You know, so right now, Tsengidisu has replaced Abakari.  But it's left to be seen just how that will end. Oh, well, so my thoughts with regards to this. I, you know, I saw this yesterday and I'm sure it wasn't the only one. There's a lot of people who see this as great news, and that is mostly because Tsengidisu has shown in the time that he was in charge of the RRS here, because to be an exemplary officer, he's one person that was a people's favorite all over, well, Twitter before he was suspended. He, of course, in carrying on his duties was always very, very, he was always very, very professional. He was always wanting to interact with the people who always want to always give feedback on any of their operations, you know, whenever the RRS was called in to respond to anything.  And he has shown, you know, and I'm not sure if there's any records of, you know, corruption or anything wrong, you know, concerning Tsengidisu's career, and he was missed. You know, eventually when he stepped down as the head of the RRS and moved somewhere else, I'm not sure where, but he was missed, you know, and so, you know, I saw a lot of people say yesterday that, you know, this is the first time that they felt great with a move made by the Nigerian police, a move made by, you know, the Inspector General of Police or, you know, Police Service Commission. And so it's great news from my perspective, and I'm sure for a lot of other people, because of Tsengidisu himself. Any other name that we may have seen there, yeah, we probably would have had the same thoughts, you know, that you just shared now that, okay, well, you know, have a lot of records, they've gone for a lot of courses, but still the same rotten system. Tsengidisu is an example of when people say, well, not all policemen are bad, you know, there's some bad eggs in the system, but there's some really good cops. He has lived that life and the time that he has been in service with the IRS has shown that, you know, there truly are some really, really great Nigerian policemen with no actual dent in his record that I'm aware of, except, you know, maybe if we start digging a lot further we might see, but I really, really doubt. And that is because of the way that he presented himself and the way that he ran the RRS. It's not been the same thing since he left, you know, and you can tell, you can almost tell that it's not been the same, you know, the emotions around the rapid response code have not been the same thing since Tsengidisu left. So I think it's a really, really good move for the image of the intelligence response team or what they're called. It's a really good move for, you know, the Nigerian police putting somebody, you know, like Tsengidisu there. And we hope that, you know, there is, you know, some sincerity with the way that the IRT works. I hope that he also is able to carry some of the, you know, attitude and the professionalism that he used to run the rapid response code into the IRT. You know, one of the fears that people would always have, two last things I would say, one of the fears people will always have is the way that they say, oh, you know, no matter how great you are as a person, when you move into a corrupt system, the system either, you know, corrupts you or makes it difficult for you to work. So I'm hoping that his personality and his character and professionalism as an officer will be able to transform the IRT and, you know, be able to, you know, make them more professional. Let us have less of these stories that we hear concerning the IRT and, you know, kick out the bad eggs.  No, that's not where this should end. There should be proper investigation, like I believe that they've started, the panel that has been set up, they've found guilty here. Forget the FBI owns of here for, you know, the crimes that he has been accused of against the Vincent Chibuzoff fellow and every other crime that were supposedly allegations, the 41 million that he allegedly took from that businessman, the woman in Enigu who says that her husband was killed was, you know, calling him to be a number about a kidnapper and, you know, they have been in control of their property and many other cases like that from the same things that he should, you know, pay the, you know, the price here in Nigeria, then we can now talk about, you know, they can, how can happen hand by hand, side by side. The FBI case also against him, because the FBI case is not, you know, that's not gossip, it's not, you know, whispers. These things, I believe, have really happened. Not at all, over a 150 page document, you know, which facts, evidence, a phone call, records, everything. And also, we saw proof of about 20,000 U.S. dollars that, you know, Hosh Poppy paid into the account of Abakiri. So it shouldn't end now, nobody should go to sleep because we, well, he has been suspended. No, that's not where it ends. Okay, so we're still, you know, talking about cybercrime this morning and if you remember the name of Ismai Mustafa, also known as Mafa, he was very popular because he was arrested by the EFCC for money laundering, alleged, you know, many other crimes. He was on the Instagram Live of Daddy Freeze, a popular radio presenter in Lagos and on that Saturday, Instagram Live, they were both talking about the whole situation and Mafa said, when Hosh Poppy was arrested, you know, he was opening up to Freeze telling him that he began to receive calls and even from EFCC, officials of the EFCC according to him, called him and told him to delete his social media pages and keep a low profile so that he doesn't also get into the spotlight and, you know, all the investigations, you know, open up, you know, but when he said that, you know, people became agitated to say, this is almost what we're seeing in the case of Hosh Poppy where someone who is a self-confessed fraudster now seem to have friends in high places especially in law enforcement, who now seem to have their back because if he said that people from the EFCC called him to warn him, Instagram is obviously they're looking out for him but we saw a statement from the EFCC yesterday saying that's not true but the EFCC was prosecuting that case and they would never put out a statement asking Mafa to keep a low profile to avoid being in the heat but we know that obviously if this ever happened, it was never an official statement made to him, this might be an official or two who probably said that, we don't have the fact that's what the likelihood is so EFCC has put out a statement I don't see how much of a calm that has given to the Nigerian people on this matter and for me good thing that the EFCC has responded it could really like you've said really just be him running his mouth it's possible that nothing like that ever happened there's also the possibility that they actually did happen because of the peculiarities of being in Nigeria and the kind of things that you hear and you are not shocked there's those possibilities it makes you question what really the case against him was back then that the EFCC was investigating it makes you wonder if it was the FBI that had carried out the investigation if he would have walked free but of course that's not accusing him of anything the EFCC has carried out the investigations they said he doesn't have a crime to answer for at that time but like they've said they are still investigating how that goes but my concern with all of this is how we how Nigerians give people who really should be nobodies make them celebrities and make them popular for absolutely no reason because he is not there's no actual value that he gives to the Nigerian society or the Nigerian populace same thing with Frizz why are we having these conversations and not also forgetting that Frizz himself is going to buy with Hoshkuapi making videos with his spouse or his wife or his girlfriend and eating and laughing at Nigerians in the same Dubai and saying that Nigerians should instead of them be begging Hoshkuapi to employ their fathers as drivers that's the same Frizz now that we are talking about that is interviewing Monfa so these things for me I feel like Nigerians give certain people some level of popularity that they don't deserve in any way so good luck to Monfa good luck to also the EFCC if there's an actual case then I hope that it comes to light if there's no case then these persons really don't deserve so much of Nigerian's conversations and they are not in any way the people that should represent the moral compass that Nigeria should be moving with or should be working with a lot of young Nigerians who want to see people like some of the people we were talking about this morning the ESEB rumors in the Olympics a lot of Nigerians who want to see people who are doing very well in sports in education technology and in medicine and in engineering and what not and those are the people that we should be looking at not people who we aren't sure exactly where their wealth comes from and turn them to celebrities all over overnight I really don't enjoy those people anyway so let's talk quickly sports yesterday I was saying that I would not be disappointed if Nigeria doesn't win anything at the Olympics ESEB rumor is one person who has eventually won a gold medal in the long jump event 6.9 meters I believe that she jumped and also we're expecting something from actually there's a confirmation about gold or silver for blessing or boy I hope I pronounce that name right well congratulations to the both of them it is finally you know some medal for Nigeria in Tokyo these two women have done Nigeria really really proud so we of course would absolutely celebrate them I like that it's also coming from women absolutely so we will celebrate them this morning and you know say that I hope that she actually gets the gold because she still has a chance of changing that silver to gold she's I think she's confirmed to win a silver but if in her next fight she gets victory then she will be winning the gold so and her name once again blessing Oburu do do also with the ESEB rumor I think we say have signed Oburu still competing he qualified for the next race and so he also is a favorite to maybe win any of the medals bronze silver or gold so congratulations to the both of them and we can't wait to receive them home you know shouldn't also take away the criticism for our smalls ministry for how the Nigerian Olympics team fared yeah I'm really proud of ESEB rumor really you see now what our headline reads Nigeria wins the medal in Tokyo when you know the victory comes it comes to the body the group but if she's lost out it to be ESEB rumor loses out on but it's just a reality people love to buy into success you know it's good for ESEB rumor like I mentioned she's had a history of wins 2019 Doha she won bronze as well now one bronze at the Tokyo Olympics good one and we love to see it absolutely and of course she's following full steps of Charmadronois who also won in the long jump event many many years ago so let's hope that any promises made to how before field in due time well so let's also hope that it's we're not winning medals because of promises so I feel like we should develop our sports industry to a place where people like for example Simon Biles is not winning because Joe Biden is going to promise a house you know so they get endorsements they get sponsorship from brands they get some of all of that I think it's almost we've been listening all her experience and effort to say that she's winning because of promises like why why not I mean that's her career that's her life yeah but it's not so this is what I'm saying our athletes shouldn't be going to the Olympics as I'm working as hard as they can because well you know the government will make promises so what I'm saying is you can't say that that's their motive that's that's where I'm going well you just said let's hope that promises made to how will not be you know not that that's the reason why she's competing that's not the reason she's competing no doubt but at the same time that shouldn't even be part of the conversation that promises will be made to her I'm saying that we should I hope that we develop our sports industry to a place where there's brands who actually want to associate with you want to make you the ambassadors when you win yes you will win and you you know take on that victory it will be a part of your life forever but let it be that there is more there's there's Adidas there's if there's any low Nigerian brands that want to associate with you and make you a brand ambassador make a lot of money from those type of endorsements and you are 100% sure that you will when you win a medal at the Olympics relying on government promises has always never been the right way to go for nine years I doubt that they are relying on government promises anyway let's take a break here and we'll turn to join our guest to analyze today's papers


What's up YouTube? This is another video write-up for the challenge assembly 2 in the reverse engineering category of Pico CTF 2018 So the challenge problem here is what does ASM 2 with these arguments return? Submit the flag is a hexadecimal value etc. We've kind of seen this thing before so we're given some source code Let's go ahead and copy it download it and I'll just W get it into the current directory here Looks like we have it there. I'm gonna open up in sublime text I'll zoom in a little bit so you can see this and I'm gonna change the syntax highlighting to assembly So what I'm gonna do is actually create a new script that will kind of recreate this in Python So let's do like recreation.py or something or whatever we particularly want I use the file header plugin for sublime text to get that boilerplate stuff at the very top there But okay, what we do is Analyzing the assembly let's say this is Function prologue, I'll keep Zooming out. Hopefully you can still see Function prologue and then we set EAX to the second argument zero X C, right? Because EBP plus four on the stack is just going to be our return address I believe ABP plus zero X 8 will be the first argument zero X plus X C is the second argument again incrementing by four because that's the size of the data type there Let's just include this as a comment So we know that EAX will equal a second argument zero X 21 So let's say Python can do that as well and let's do the next line where we're setting EBP minus zero X 4 So a local variable set to EAX, which we know to be Zero X 21 still and let's just say that can be EAX and the Python code will do the same for The next argument so EAX can equal Just the first argument and we give it zero X 8 and just using not not not using this because that's the same value here But using it because it's the first argument that we're passing this function EBP with a base pointer plus zero X 8 so Once we set EAX will do the exact same thing just as we did previously with a new local variable we can say EBP minus zero 8 will be equal to equal zero X 8 in this case and We'll do that just as we did earlier in Python Set it equal to EAX before we do that. We have to set EAX to equal in this So that's just creating these local variables for us in our stack or from the stack in the very start of the function And then we jump to part B. So go to Part B. So part B what it's doing is it's testing has a compare statement here or compare instruction and Less than or equal to so let's do if EBP Plus zero X 8 so our argument here. We actually don't have a variable for that yet. So let's go ahead and create one Because underscores are going to be minus in this case. Let's do minus here and minus So now we can have EBP minus or plus sorry for arguments That can go ahead and equal first argument that we give it second argument that we give it 21 and in fact we could have just be setting these here rather than Using the hard-coded values Okay, so now let's test if EBP Plus zero X 8 is less than or equal to this value If it is we are jumping to part a otherwise We are setting EAX to equal EBP Minus zero X 4 and then we will just print out you X to see what we as we actually need here Because that's the end of the function, right? There's our function epilogue down at the very bottom Okay, so part a we need to actually look at now what it's doing is it's setting EBP minus zero X 4 so that local variable and it's adding one to it.  I think because it's testing. Okay, whether it's Factor this however many times blah blah blah, but since our Python code should be able to handle it Just fine. Let's go ahead and run it after we set EBP plus zero X 8 Plus equals zero X a 9. So when I run this we get 8 Okay Let's see what we look like here is EBP correctly being set here Looks like If we try and debug this here. No, it's not. So something is wrong in our code. We are Let's check out what EBP minus zero X 4 is 33 and that should be 0x21 so that works just fine for us Now we do the same thing with Minus zero X 8 for local variable and that's 8 just as we would expect So now we're taking if EBP plus zero X 8, which we know is 8 is less than or equal to This thing so let's print in the loop. Okay, that only happens once so that must be why of course It has to go back to part B once part a is done. We just didn't have that procedural loop in there So we can do a while one here Actually, just to loop it because we know that that's good. Just going to return back to that other part B test So once we print EAX or once we actually have that else be returned true Let's print EAX and then return. So now we'll break actually because we're not inside of a function So we'll stop looping. So we have 120 as our final answer. Okay, let's see what that is in hex On this zero X 7 8 perfect sounds like a plausible answer. Let's go ahead and submit it and we got it, right? Okay, cool. So all that we really did there was Recreated this assembly code in Python. So it's something we can easily kind of understand and manage We step through it just with our comments on the side and we just try to recreate something that we can run very easily Maybe we could do this with Nazem if you just wanted to compile it and run it if you are that much of an assembly guy Sweet more power to you But I just figured okay, I'll step through it and try to understand a little bit The while one thing or the loop is interesting remember because we immediately jump to part B And then if it's less than or equal to a Which for the first couple iterations, we know it is it'll move up here And then after it runs through each of these commands It continues back into part B because it's assembly a spaghetti code, right? So you're just dial back into it Okay So before I go I want to give a quick shout out to the people that support me on patreon Thank you guys so much. I cannot say this enough $1 a month on patreon will give you a special shout out just like this at the end of every video Just kind of get your name up in lights here or just kind of added this list And maybe it's a warm fuzzy feeling inside that you're just helping help another bro out So thank you $5 a month on patreon will give you early access to all of my videos before I release them on YouTube I'll put them in a shared Google Drive folder And you'll be able to access them before they get uploaded on a scheduled kind of gradual release cycle on YouTube I need to get better at actually releasing and preparing some content in advance So take it with a grain of salt, but I'm always grateful for your support. So if you're willing to do that Thank you so much. If you did like this video, please do a like comment and subscribe Join our discord server link in the description is a cool committee full of ctf players programmers and hackers You can hang it with me and a lot of other super smart people much smarter than me and hey I love you guys. I hope to see in the next video. Thanks. Hope to see you on patreon later


Welcome to Barbell Logic Rewind. So let's just start off by, if you have any questions or comments, email us at barbelllogicpodcastedgmail.com. Follow us on Instagram and on Twitter and all of those things. And let's just go poke the bear, man. Yeah, let's do the RPE episode. What do you say? All right. Let's do it. So RPE, the rate of perceived exertion. Correct. It's really just a subjective perception of how hard the rep was. Right. Or how hard the set was. I think Tusharer got this from somebody else, but he was the guy that really sort of made it. He codified it and popularized it for sure and made an art of it. So the RPE scale is a scale of 1 to 10. And we really just use probably RPE 6 through 10 when programming training. So if you think about RPE, like how hard was it? You're things like number one and two and three.  And so when you get to RPE 6, you start to talk about that sort of RPE 6 is probably sort of heavier warm-ups. RPE 6 is like five plus six plus reps in the tank. Right. So if you did five, but you could have done, swear to God, you could have done 10. It might be a six. Right. Yeah. And RPE 7 is going to be things like three to four reps left in the tank. RPE 8 is going to be like two to three reps in the tank. Right. RPE 9 is like one rep left in the tank. And RPE 10 is zero reps left in the tank. So it was like an all out bone on bone grinder and you got it.  Or you failed. And you would usually say RPE 10 fail. Right. It's a way to sort of try to subjectively quantify how hard the set was or how hard the workout was for the purposes of trying to understand the total amount of stress of a workout on a client. Yeah. So if you're going to keep a training log and you should, you need to keep a paper training log because we're all good people. And you go back and look at that training log and you say, gosh, I did three sets of five at 315 18 months ago. And I just did three sets of five today at 315.  Sure. Well, if you write something down about the RPE, it might give you an idea that you've gotten stronger, even though you just move the same weight, you might be able to figure something out from that. Yeah. So it is just one piece of one stat or one metric that we use in the grand scheme of things. And there are lots of different ways to use it and we want to talk through those things today because there's been a lot of confusion about how we use it versus the way other people use it, whereas the way it should be done or never done and which is fine. And so let's sort of go down the line. So I have never in my life used RPE with an in-person client. Well, no, wait a minute. I'm going to wager that you didn't do it in an explicit way. I know what you're saying. Of course, I didn't do it in an explicit way because what is the RPE guide for when I'm coaching somebody in person? Your eyeball, my eyeball, all that stuff. Now, let's talk about bar speed for a second because bar speed matters. As a matter of fact, bar speed is probably the number one indicator for how hard it was as a coach. So I'm watching it now, but we can't compare your bar speed to my bar speed. No, no, right? No. And it's kind of interesting because like we're both really slow deadlifters, but I'm a really fast bench presser. Too fast. Tear the bone off. Tear the pec off the body. Yeah, just a few times, yeah. And so for a client that I have coached in person for months and months and months, certainly I don't use RPE at all during the first two or three months of novice linear progression. The only thing that matters is that the weight goes up. I don't care if 205 for three sets of five on Monday looks a little easier or looks a little harder than 210 for three sets of five on Wednesday. They still got to do it. It doesn't matter how hard it was. It doesn't matter. Guess what we're doing on Friday. More. 215. More. That's what we're doing. So in person, I'm watching bar speed and I'm weighing that bar speed against what I've already seen this person do for thousands of reps, certainly hundreds of reps. Charity has a client who is, I think she's 63 years old, she's a slight lady. She's probably five foot two and weighs 125 pounds and she's squatting her body weight for five fives. Okay. Solid. Yeah. You bet.  Like she's not going to make it. Sure. Like 85 pounds is slow too. Right. Like they're all slow. Anything north of about 95 pounds takes her 10 seconds to stand up. Yeah. So Sean was with us and he was like, get over there and spot, you know, for Louise and he wanted to take every one of them, right? Cause you're like, she's not going to make it. Yeah. And somebody like her, everything. Last turn last one rep is our P 10. Yeah. She can't tell the difference. Yeah. So probably doesn't work very well for a lady like that. And that's fine. But in person, if I'm coaching somebody in person, I've got a real good idea of how hard it is and the total stress on the body and I also have more real time feedback for in person coaching about things like, Oh, I was up late last night. I got in a fight with my wife. I was drunk. I'm hungover, like whatever. And so if you have to make some adjustments on the fly, you have to understand like how the stress of the workout overlays against the stress of life. You know that in person much easier. Certainly we are sort of using RPE from a cognitive standpoint without actually communicating that to our client. We're making judgment because we were standing there, right? Now the question is what do you do when you're not standing there? Yeah. What are you doing? You're not standing there. I think if you're not standing there, first of all, programming probably has to be more conservative. Yeah. You can't take risks with programming if you're not there. If I have a young man that's coming to train with me in person, we can finish up a session on Monday. I can take his book and write down what the Wednesday and Friday sessions are if he's an intermediate and we can be aggressive. And since I'm there to help him, you know, I'm his brain during that time. Yeah. He's just has to move the weights. That's right. And I'm doing all the thinking for him. And so I can make a call if it's too darned heavy or on the fly. Set number two if you have to after set number one or after the last warmup or whatever. That's right. He can finish that last warmup. And I go, he must have been drinking last night or he had the flu or whatever and we can figure something out. But if you're not there, first of all, your coach needs to not be taking any sorts of those risks. He needs to set you up for success. Now, you know, we want to put enough stress on the person. So we don't want to softball them. Yeah. But I don't prescribe RP in those cases. I will tell people who I trust who I know that can push themselves and are honest with themselves. You know, if you can't do it that day, you can't do it that day.  You can take 5% off. Yeah. The flip side of that is, especially for a little bit older people. Hey, if you're feeling good, you better put 5% on. That's correct. Because they're actually may be more important. All right. It may not be there. And I'm kind of learning that lesson for myself more and more. The other day you had me programmed for a triple of a deadlift and the math works out that it would have been just south of my PR. I called an odd one, pulled a PR instead of doing the triple. It was about the same amount of stress. You did a 5. Arguably. A 5 rep PR. No, I actually pulled the 1 rep, you know. Yeah. So I think the week before you pulled a 5 rep PR, you did the same thing. You prescribed a triple and I pulled 3 and I got 2 more. I'm like, I readily have 2 more. So I did. So I don't even prescribe RPE in those cases. I give them an actual percentage. Now, there's a chart out there. You can go Google and you can look up this RPE chart. And they pretty carefully lay out RPE versus percentages of the and reps. Right. 88% for 4 reps is this RPE. That's right. 4 reps would probably be like an RPE 9 somewhere there. People that are using RPE it's really percentage based program. Yeah. So let's walk through what that looks like for us. And again, man, there's more than one way to skin a cat. We're going to tell you how I do it at the end of novice LP. As we're nearing the end, not like on the last workout, but as in the last month of what I perceived the last month to be, I will start having my client tell me what they think the last set RPE was. Right. So we start to use it from the client's descriptor. The client describes how hard now, why do you do that? I do that because they don't know how hard hard is yet. That's what I do. I want to tell them. I want to tell them they're wrong. That's right. They will tell me that was an RPE 10. I say, no, that's an RPE 7. Yeah, you get maybe a 7 and a half.  Three more reps. We are probably could eat out three more. Which kid? Wait a minute. How to go. Then it's not an RPE 10. Right. So again, we've had this sort of clarification episodes where we had to talk about learning how to grind. That's not because we want our clients to grind on every single set of every single rep or every single day or all the time, but you have to know how to grind when it matters. Yeah, especially views. RPE especially views. RPE. It's never been a 10. How do you know what a 10 is? I know coaches that have used RPE almost exclusively prescriptively.  Yeah, they do the wrong RPE. So you're going to work up to a single at RPE 8 and then you're going to do backups at RPE 8 or RPE 7 and a half or whatever. Doesn't matter. And then they do it and it's not the right RPE. They look at it and they look at both the single in the backups and go, well, that's you didn't do it the right weight. So this is important if you coach because we are watching every single heavy set that our clients do, then we can start this sort of process as a communication piece to our programming. So that in the beginning after the first two or three months of novice LP, we'll start to have the client report back to us what they think the RPE was. And what we're doing is we're trying to, it's the word I'm looking for, we're trying to get on the same page there. We're trying to. Yeah, we're calibrating. We're calibrating. That's the word. Thank you. We're trying to calibrate what RPE actually is. And then we are calibrated a bit and it takes a little while. It often takes a couple months to calibrate. It's very important when you've got a guy that's training by himself and he doesn't have a buddy cheering him on. That's right. You've got one more. That's right. You know, you can do it one more, hit this right. Yeah. And then we will start to use RPE in a descriptive manner along with weights and sets and reps. So we'll often say, well, you're going to do this weight. Right. You're going to and we'll often use it for it anymore. I don't do it at all. I don't do that. Yeah, I do. I like it.  And so sometimes I'll do that and I'll say the exact weight and sometimes I use a percentage of one rep max depending on how far down the line of early intermediate versus late intermediate they are. So an example of what you do because I've seen it, you might say four sets of four at 315 pounds that should be an RPE 8. So if you get out there and it's a 10. Then we got an issue. Then we got an issue. And at that point then as a coach and you look and the guy says it's a 10 and you've been working with him a while and you know you can pull 5% off the bar. You can pull 3% off the bar. You can pull 15 pounds off the bar, whatever. But as his coach, if you trust his RPE ratings. Correct. Because he says it's a 10 and you look at the video and you go that is a 10. Then you know that you need to have a crucial conversation. That's exactly how the diet has the food. Has the why, what's going on. Right. Yeah. Right. So where does the stress have to back off? Does it have to back off in the programming? Or does it have to back off in the life? Right. Okay. You need to clear your job. That's right. You sleep 10 hours a day. That's right. 8 hours a night, 2 hours now.  Yeah, that's perfect. Right. So. No, and so I will almost always start that with the lesser important lifts. So I'll start those RPE stuff with the accessories and supplementals before I move them to the main lift. That's the only place I use them now. You want to hear a secret? Yeah, let's hear why. Why? Because I don't care what weight they move.  No, I don't even care what weight they move. The first week they barbell row. I really just don't care that much about weight they move. So if I say, Hey, this is your first week of barbell rows ever. Yeah, for guys who are like three sets of eight RPE eight. Oh, so you do that? Yes. But because what way do you going to pick? Right? No, I know. Sure. I'll take a shot in the dark for me. Yeah. I mean, no, actually, actually it's not. If I'm going to do eights across in the barbell row, I'm going to pick for his first session. I'm going to pick 65% of his bench, something like that. Yeah. But I often won't even do that. Yeah. And I'll just say RPE eight and the reason for that is is it doesn't matter that much. I'm going to LP that row anyway. Yeah, we're going to make it a little heavier each week. We're going to make it heavier and we're going to get a lot of times, especially the first time they ever do an accessory movement just to sign the secret. So that's a prescriptive RPE, but it's for accessories. Right. So it doesn't matter that much. We're going to do an accessory episode soon, by the way. And we'll talk about how we do that. But yeah, so I'll do that. And then I might eventually overlay that onto the main lifts. Right. And then eventually I'll get to the point where maybe we do hit the single. So, you know, there's a I got to figure. I'll say this. Let me bail you out. No, hold on. No, I know what I'm trying to say. I just want to say it in a correct way. Right. So when I learned block training, how to do block training, I learned it from Jeremy Frey. Jeremy Frey at the time was the probably the best powerlifter in the world. Certainly was in the discussion of best powerlifting world. It was the top sort of sponsored athlete at Elite FTS. And he was a training partner of ours at Strong. We didn't get along that well. So don't think we weren't close friends. Jeremy Frey, one of the best workout partners I've ever had, just didn't get along great. Right. It's fine. Guy taught me a lot about block training. He learned block training from the Russian guys. He knew ishuran. He had read all the stuff from Bondar Chuck, all these guys that came out with block training. And in that first month or first couple of cycles, the first couple of blocks of block training is accumulation. It's high volume. It's five sets of five, six sets of five, seven sets of five, things like that. And then you go in the transmutation phase and the starts peeling off volume and add an intensity. And for a while, you're kind of high both. Yeah. Really brutal. And what we saw was those Soviets never used a heavy single ahead of time. And what we found is as we got eight weeks into the program, we hadn't actually had anything heavy on our backs on our hands. And so we started to play around with, well, let's do a heavy single based on feel first. Right. OK. And then do our down sets based on prescription. You're going to do a single at eight, a single at RPA and then do our back offsets at what was ever prescribed. The back offsets are at seventy seven percent for five sets of five. This is week three of transmutation or whatever or week two or even we do it in accumulation. OK. And it usually wouldn't be an RPA eight single. It would be an RPE seven. It would be RPA six and a half. It would be something that would be a little bit heavier. Have we done a block episode? No, but we've got it coming. OK. So block quickly. You have an accumulation phase where you accumulate work capacity. You know, you might come out of LP. We never going to block right at LP. But for example, if you did, you're good at doing three sets of five, right?  Well, you can't just go to six sets of five, right? So you work into that. You work into that. So we accumulate that work capacity in the accumulation phase. Yeah. And then you transmute the ability to do all of that work into the ability to exert force. And you start moving that work capacity into the ability to do heavy singles. And then you have a realization phase where all of those strength gains are hopefully realized on PRs across. Exactly right. Explain it better than I could. That trend. Yeah. Transmutation phase is sometimes called the intensification phase. So those are interchangeable words and the realization is also often called peaking. Right. So it's the peaking phase. So yes, it's a waste of time, bro. Right. Whatever. So we would use that as the singles as the first time we have to do prescribed RPE with the sort of RPE eight. Makes sense. RPE seven. The idea was just to like, you know what, like we try to make it all scientific.   Right. Right. Well, you're an accumulation phase. Can you double 700 today? No, you can't double. You might not be able to double 600 pounds a day. You're going to pull a single at 615.   Right. So the idea was like, pull a single a little bit heavier to moderately heavier than your work sets and then back off into your work sets. No. Did you expect a training effect from that? I'm going to say no. No. The idea was I just wanted to have practice with heavy weights in my hands. Right. Or on my back or whatever. When folks get very, very heavy, you know, let's say they're working in the 80% range. Yeah. 78% range. Yeah. 22% difference between it and your PR. It could be hundreds of pounds. Hundreds of pounds, especially because you're talking about advanced training programs at this point. Right. You're not talking about that's shocking. It is shocking. And then you also can get all this weight in your hands or on your back because you get into that late transportation and early realization or peaking sort of phase or anytime you start to peak and you start to actually get heavy and you're like, oh my God, this feels so heavy. Otherworldly. Yeah. I just wanted to not feel super heavy and make that transition into heavy and a little smoother. And so that's how we started to use that RPE. Now, once I've had a client for a long time, then I might start to transition over to a little more prescriptive RPE at some points in training, but not a long time would be three years. Brett McKay starting to do it. I've literally just starting to do it. I've had him for three years. I think I's never missed a workout and he hates it like poison. He hates it. He deadlifts 600 pounds. He squats 500 pounds. He benches 300 pounds. He presses over 200 pounds. He's a pretty advanced guy. He obviously is super busy. Family guy run a successful business. I've had him for three years and he's just starting to do it. And he freaking hates it. Right. And so as a matter of fact, everybody hates it. So that's why actually even for my programs that we have the original templates we start to work off of. And so we'll take it like look, let's just be honest.  I was at Nationals last year. I'm pretty, you know, like, okay, well, I probably can't put them on novice. I might put them on LP for four weeks and just clean up their form. And but for the most part, like they're not going to be on that very much. How individualized of their advanced program are they going to have the first time? I don't know anything about anything about them. So they're getting the template. Now, after that first run or if I've had them since they were novices, the vast majority of our clients, then you take the template and you start to change the template based on the person. And this is where you change things like, okay, if I have a high performing athlete, that athlete cannot train as high of a percentage or they're wondering at max as someone who is you, female, old, whatever.  That's just true. Very old and female training. Sorry, it might be right. So might be age discrimination or sexism or whatever you want to call it, but it's just true. And so I've noticed that for my percentage based programs which I'm not crazy about percentage based programs anyway, it's just hard to organize training in any other method than that's a personal way to do it. Well, you could just pick the weights. You can just pick the weights every week, right? Yeah, but how do you do that? Well, from minimum effective dose sort of. So if we're doing a minimum effective dose of complexity and you start somebody on LP and then you slowly walk them towards a Texas method or a heavy light medium, but you never go from LP to that. Yeah, that's sort of a secret, right? Like you might run somebody on back to back blocks and you LP within the block. Of course, you do it all the time. That's what everybody does, right? Like almost every pull any advanced program, like each little micro cycle looks like that. That's part of the deal. And so we get to a point where with percentage based programs I have a template, but I might take that template and if an advanced lifter guy is doing 84% for five sets of five or for six sets of four, six sets of three, the female might do 87% might be 3% higher because they can and they need you to get the same training. Yeah, right? Now that's another place where RP can come in. So if you say, well, it's supposed to be RP-8 or supposed to be RP-7 and the female comes in and she's like, wasn't that hard? Like, well, wasn't that heavy enough? Then time to push the weight up. Matter of fact, just had a coach, a lady I coached, some of you guys have seen her on the YouTube channel. She's did daily undulating periodization with us and that is typically a very heavy RPE based program. I didn't use any RPs for her other than descriptive RPs. So almost everything was, I think everything. So in some of our accessories might have been prescriptive. This way it ought to be a nine. Correct. And then she would do it and it wouldn't be a nine. It would be a seven or seven and a half or an eight. And so she knew she's feeling good. She's a coach. She knows what she's doing.  This wasn't heavy enough, right? Dude, she just took her squat from 230 to 260. So she had 30 pound PR on her squat, right? Her bench press went from 112 to 130. I mean, it's massive, right? Her deadlift is going from like, now her deadlift, she's notoriously been, she struggled with her deadlift and training and then she's one of those people that does really well at a meet.   No, wait a minute. So I hear what you're saying but also you would have caught that with your coaching eye too. Of course, but I can't coach her in person. Well, but even if you can't on the videos, you can review a video and you can be like, you know, I expected that 225, three sets of three deadlifts to be slower than that. So what do you gain by the way? What do you gain? Well, you gain one week, right? You gain a week. Well, maybe. Right, but you understand what I'm saying. Yes. So we can either do it wrong this week and fix it for next week. Right. Or we can get it a little closer to right this week and tweak a little tighter next week. If the lifter is brutally honest with themselves and has the moral courage to do it. But even if they aren't, then we didn't lose anything from prescribing it wrong. Right. So if I said this is the weight and it was too light or too heavy, then it's already a waste of the week. So this brings up something I wanted to talk about here. Most trainees that are using RPE in fact are not, I think. I contend that they are not. Sure. So they go into week two of their new RPE based training and they pull X at an eight. Yep. For sets and reps, whatever number. Next week, they're supposed to do X for sets and reps at eight point five. Yep. They look back at their training laws. Sure. And they go up and wait. And they go up and wait. And they don't actually wait to perceive and rate the exertion. Of course. They're actually then doing something objective based on what they did before. Sure. And they're actually not doing RPE. Okay. So what actually changes for us is and I'll do this a lot of times in my written description of what they're trying to do. So if I give them an RPE number like a percentage and sets and reps and at RPE this, I say you have to do the right percentage on set one. Right. And then you can start to make the call and I'd like you to do the right percentage on all the sets or on the first couple sets. I don't want you to make the call unless you are way like if you're off two and a half RPE like it's supposed to be a seven and a half and it's a 10. Like, okay. Now we got to make a call early. But for the most part, I haven't do the actual thing and they don't start making the changes until the third or fourth work set. So here's how I deal with that. If you're not sure, text me the video right then. Sure. Yeah. I'm busier than you are. You just don't care about people. Oh, stop. I care deeply about people. Yeah. And I have too many clients in Thailand. I don't want to be texted in the middle of the night. But no, yeah, I don't. Yeah. No, all those are great. Right. So those are all the point here is this. RPE is not evil. When we program based only on RPE, we're lazy and we're handing people a template to follow. Like we can just print the piece of paper. And look, if you're paying somebody $50 on Instagram for a program, what are you going to do? Sure. Like that's probably what it's worth. They don't know where you're starting, what it's going to be. And they're not seeing your lifts, everything will work out. So for us, it's probably the only way you can do it. That's right. That's probably fine, actually. But for us, RPE is just another metric. It's a subjective metric, which is put clearly a step below objective. That's in the name. It's perception. That's right. Actual weight on the bar matters more. Actual tonnage matters more. Actual volume matters more. Like all those things matter more. Certainly consistency and form even matter more. And then we start to look at the perception of how hard it was for stress, so that we can sort of make sure we monitor the stress recovery adaptation process. And we're trying to tweak it as tight as we can. By the way, none of that matters if you're not consistent. If your form sucks, like all that stuff is worthless. RPE doesn't matter at all because you've missed the meat and potatoes, right? These are like the sides you add. And so the RPE can be used both as a descriptor from the client to the coach, as a descriptor from the coach to the client, or as a prescriptor from the coach to the client. And for us, we use the prescription based RPE the least. And when we use it, we start it with accessory movements, move to supplemental and eventually to the main, but it's way, way, way, way down the list usually. I don't think there are many people that can actually use it as a prescription reliably. Let's talk about that. Okay. So even for me, I kind of know what I'm doing. Sure. Not completely, but I kind of know what I'm doing in terms of my own lifting. I often have a very difficult time judging what an RPE is, particularly when it's heavy. So you can imagine most of the people that listen to this podcast should be novices or early intermediates at best. And so you can imagine if you walk out and if you're a guy and you've done 315 for three sets of five, and that's your LP ended up there. And yeah, there you go. So if you unwrapped 405 as a squat and walked it out, it's so heavy. You're going to have a really hard time distinguishing the fact that it's heavy and the pressure on the sole of your feet and what you feel on your back from how hard it actually was to stand up underneath it. Sure. Now, I know that somebody that ends LP at 315 for three sets of five can't squat at 405. But for the purposes of my example, the point is it's very, very hard for novices to distinguish just the stress of it being heavy. Sure. From how hard it actually is to complete the next rep. That's why we don't use it for novices. Right. That's why we use that time to calibrate, not that time to prescribe. Right. That's why it's so important and that the people that are actually going to use this first off are such a small percentage of people that will ever even get there in their training. Very, very small. Right. What percentage of people actually get to advanced training? 3%. Sure. I don't know. I mean, but whatever percent is sure. The point is this, the more that we can support compliance so that people are compliant and their form is good, the more people we're going to bring into advanced program. And one of the reasons we've had to talk about this a lot and train our coaches up as much as we can for our coaches who were very rarely coaching late intermediate and advanced lifters are now much more frequently coaching later intermediate and advanced lifters. Right. Because we have way more people who have stayed long enough to become that, right? So now, so we were doing online coaching as Reynolds Strong back in early 2015. And then in late 2000, I'm going to screw this up. We have a lot more advanced lifters now that we used to. And so we have more that we've got to learn how to do this with. And so sure, 3% to 5%. I was talking to my father-in-law Todd and Sean. I was saying that I think what you're doing and I'm doing probably many people that have done it. Like how many people have had a hundred men from 45 to age 60 that have been late intermediates? That's pretty new. There have been pockets of late intermediate men in that age group, but they lifted when they were young. You know, there was somebody that has been lifted since they were 21 or 18 years old. And, you know, what we're doing where we have guys that have been lifting for four years and who are 49 years old. Nobody's really done that much before. Not with a big enough sample size to actually start to really like derive things from. So we're going to learn some new stuff as we go. So you've got the thing that you kind of try to look at what you think should work based on what the paper says. And you can look at what actually works and those right, you know, and so we don't know until we sort of test the thing. So yeah, that's the way we use RPE again. And that's, you know, just so people know the only hard fast rules we have with RPE is that we don't use prescriptive RPE at all for any novice or early intermediate. Right. And at that point, we start to leave it to the discretion of the coach and the lifter. And so we will often use descriptive RPE at the end of novice to calibrate and an early intermediate. And then at some point start to use some descriptive RPE that switches from descriptive RPE from the client to the coach to calibrate. And then we'll start to use it from the coach back to the client to describe this is how it should feel.  Yeah, people that can actually use it for prescriptive RPE. I think one of the ground rules for those people is they have executed a great number of max effort repetitions with 85% or better form. Yeah, I would agree. If you haven't done a great number of those and what number is that? I'm not sure that you just don't know what a 10 is a reliable way. Well, that's another reason that heavy good grinding sets are important. Heavy singles are important because those are things you really sort of learn about yourself. It's just not the same thing. Put your body through the paces. Even a really heavy set, five sets of five, it's just not the same thing as a heavy single. Those are two different things. They're both hard. They're both real hard, but they're different. And so this is why you see bodybuilders that can do so many reps or just hard grinding brutal reps. They don't know how to perform a one rep max. Then you see powerlifters who are great at performing one rep max that just don't know how to do anything five plus. Right. These are different skills that we must acquire over our training career to become better lifters. And just like we've said, we drive intensity up for a long time and then we can't drive intensity up forever. We've got to start driving in volume up. Like at some point that the stress just has to constantly go up. The stress has to go up and we've got to figure out how to do that. And we can do that with both volume and intensity and frequency and then also by manipulating RPE to make sure that the stress in individual sessions is higher or lower based on what's appropriate for the SRA cycle. Yeah. For people to have very, very full lives, you're walking the razor's edge, you know, when you're trying to get that work in. And it can be something that can help us walk that edge a little closer. Yeah. I hope that's measured and reasonable approach to using that. Agreed. Go check us out. Go follow us on Instagram at Reynolds Strong on Instagram. Let's at Scott Silver Strength on Instagram. You can follow at online great books on Instagram and send us an email. It gives a five story view and subscribe on YouTube. We'll make it worth your while. Thanks.