All right, let's go ahead and get started. Yeah. So everyone, thanks for coming. My name is Ezra Gilda's game, and this session is Understanding XH Prof, pinpointing why your site is slow and how to fix it. So how many people have heard of XH Prof already? That makes sense, because you're in this room. And it's in big letters on both sides of the room, too. But how many people have used XH Prof before? And how many people feel like they used it, but they weren't really sure what they were looking at, but it seemed like there was definitely a lot of numbers. Yeah, a few hands. You're correct, there are a lot of numbers. So hopefully with the session we'll help you understand XH Prof even better. And how many people have never used it before, but really are excited to use it? Yes. Very exciting. Great. So what problem are we trying to solve? The problem we're trying to solve is slow websites or web applications. So of course, when your site takes a long time to load, unhappy users are gonna leave. Also, if your server can't sustain a lot of concurrent people using your application, then it's going to crash. Seems like we're right next to the kitchen in this room. So if you're hearing some of that clanking, I apologize. Yeah, so every second counts. This is a pretty well-documented phenomenon on the web, but user abandonment tends to increase as time for your page load increases. So you wanna make sure that page load time is low. So what does XH Prof tell us about? It tells us about page execution time. So that means time spent by the server generating the page that's sent to the web browser or for serving to a mobile app, then it's the API endpoint. XH Prof can also measure membrane and CPU usage. It does not measure the amount of clanking happening directly behind the podium. All right, so there are a few things that XH Prof doesn't measure that are also relevant to performance that we should just identify and understand that we're not gonna discuss. So one is time to first bite. That's when the user makes a request and then they're waiting for the server to start responding and sending data. That certainly is a big factor of an user's perception of page execution time or page load time, but it's not necessarily something we see from XH Prof. We don't see page render time, so that's the time that the browser spends, actually rendering the page based on HTML and CSS and other assets that are sent back. So you could ship those assets out super fast, but if the page isn't assembled in an efficient way, it can still take a long time to generate in the client browser. If you wanna look at render time, there are some great tools for that. Chrome Dev tools and Y Slow are both really good tools. And so there's a lot of factors, including those that I just mentioned, that are part of the user's overall perception of performance, which can sometimes be different than the way that the site or the server is actually performing. And of course, the user's perception of performance is really important. Wow. I don't know if that's getting captured on the recording, but there's quite a cacophony of sound happening in this room. So designing optimistically, this is something that I'm not gonna talk about in detail in this presentation, but I highly recommend that everybody go out and check this presentation out by Mike Kreiger of Instagram. And it's a few different, really simple concepts on how they design to make the application appear to perform more quickly, even though technically it's not necessarily sending data any more quickly than another app. All right, so our goal with XH Prophet to reduce page execution time, improve the user experience, and also improve the concurrency and efficient that the server can serve with the given set of server resources. We also wanna avoid speculation. So this is a big problem when it comes to performance issues on a site. I know that I certainly, when I've heard folks talk about looking at a site, oftentimes you'll hear just what ends up being speculation. And this kind of makes sense, right? Like when we think about why there might be a problem, we tend to think about past things that we've seen. And sometimes the past things that we've seen will be related to what we're dealing with now, but not that's not always the case. So you'll hear a lot of maybe it's this, maybe it's that. And the issue with speculation is that then you can spend a bunch of time on an investigation that is fruitless. It doesn't turn up results that are useful. You might also even spend time working on remediations that you think are going to improve performance and then you find out actually that those remediations were not effective. You'll also hear really vague problem descriptions and this is kind of my number one pet peeve. Things like views is slow. XHPROF really lets us dig in and get much more granular about what we're seeing. We wanna avoid those kinds of misconceptions. So like views are bad, I'm going. And panels are bad, right? Be smart, I'm going, is kind of the message here. So tools like views and panels empower you to do inefficient things. They're very powerful tools. If you wanna put 60 inefficient listings in a single page, views and panels are great tools to do that. But it's not a negative aspect of views and panels that that's possible. It's just side effect of having a powerful tool. On the flip side, views and panels both provide a range of really powerful configurable caching that can actually help you improve performance on your site and make it easier to do that than many other tools. So the views query and render cache, panels paying caches, and there's some add-on modules like panels hash cache. All of those are really useful tools that can really help you improve the performance of your site if you know how to use them wisely. So an example, kind of a problem statement that ideally we'll be able to produce after working with XH Prof is something that's more specific, right? So whereas maybe before we said that some part of the site was slow or some feature is slow, we really wanna get to the level of detail like this statement here, right? Entity loads are slow because when we load entities we load field X, which also loads Y data, which spends Z time in the database. And on top of that, XH A loads a thousand entities of type X. So now we have a really specific root cause and a little later in this presentation we'll actually look at a few specific examples of issues that were identified with XH Prof and the remediations to those issues. All right, so just to recap, we're gonna use XH Prof to pinpoint the root cause of performance problems and develop a surgical remediation plan. So we can go in and fix the exact problem that we're facing. All right, so how many, so we did a show of hands before, but it sounds like many people have seen this UI before. This is like, this is about half of the XH Prof UI. This is the left side, which is the best side. I mean, there's just really useful information on that side. I'm not sure why that was so funny. I think I'm really finding the easily distracted by sound. Anyway, so here are the things that we're gonna see here that are important to see. The number of function calls. For example, in this example, you can see the function PDO statement execute was called 366 times within a request. The wall time, which is basically the, we'll talk about wall time actually in a second, but we have this idea of inclusive and exclusive, which we'll define. We've got memory usage and CPU time. So for inclusive and exclusive, this is a really important idea. And I think that for me, once I understood this idea and how to see this in the UI, that was like a turning point in my understanding of XH Prof. So exclusive time tells us about the time spent in this function only, and inclusive time tells you about the time spent in a current function and all the child functions that are called after that function. So CPU time and wall time, super simple. CPU time, anybody wanna guess? Time spent by the CPU, shocking. Wall time is time spent by the CPU plus time spent with disk IO. So if CPU time and wall time don't match and there's a discrepancy there, there's a good chance that you're waiting for the disk. You're waiting to write a file or read a file somewhere. So what are the kinds of things that we're going to find with XH Prof? And many of these are not specific to Drupal, but many of them are also Drupal specific kinds of things.  For example, an entity load so that it's more easy for you to recognize in the future when you're profiling on a Drupal site. So we might find a function that's called many times unnecessarily. And really often, not always, but often, a really easy remediation there is to add a static cache. You might find slow queries, right? And so one approach to understanding those further is to run the page again with the develop query log and use the built in explain feature. We can actually run a MySQL explain on a query and get information about why that query takes a long time. You might find many fast queries, but there are so many of them they stack up and then you deal with resource contention in the database. This is a really interesting thing and this is a little bit more of a Drupalism because of the way that Drupal builds database queries. But what I've put on the screenshot is output from develop query log on the top and then XHPROF output on the bottom. And so you can see that there's this database query that has so many clauses, right? These are node access clauses in this query. So many of them that I couldn't fit them in a single screenshot. However, the query still executes in 85 milliseconds. So is this query a problem or not? Well, it turns out that the actually, the performance impact of this query has tends to be on actually assembling the query rather than executing that. And what that means is that often in Drupal, we put queries together in an object-oriented way. So, or just through assembly rather than writing out a direct database query. So the node access system, for example, will go request all the node access parameters that affect a given query and they'll concatenate them into a string and then eventually that gets concatenated into a string and actually the process of assembling that query can take longer in terms of execution time than running it. So that's a handy thing to know and that's another example of something that you wouldn't see just by looking at the slow query log. So we might find excessive entity loads or we might find excessive calls to memcache set and get what does excessive mean, right? Well, it depends, right? You need to understand the specific application that you're working on to understand what excessive means and what an appropriate remediation is gonna be. So for example, if there's data that you definitely need within a request then your strategy should be make it easier to compute that data. If there's data that you don't need within a request, no reason to optimize the process of getting that data. Like, you know, this is another case where if you just wanna optimize database queries, you can spend a whole great long time optimizing database queries. But if it turns out that there was another path where you didn't even have to make that query in the first place, why spend time optimizing it, right? We wanna conserve developer time and make the most efficient remediations we can. You might find page blocking calls. This is such a common one. So if you have a site that makes a request to a third-party API and it does that within the page request cycle, let's say, you know, you need to get information from a third-party API to display information about a user, just as an example.  And that's what you can see in this, in this little screenshot from an XHPROF run. You can see that there's this SOAP client do request and it's taking basically almost half a second, 467 milliseconds to make that request. Meanwhile, that's the time the user's sitting there waiting for the page to execute. If we can queue that and have it run somewhere outside the page request, then it's going to be more performant. Just so you know that there's a little bit of counting going on of you people in the session. So if you're wondering why someone's pointing at you, that is probably why. Great, so we might find excessive calls to Watchdog, which is the Drupal system log. Notices can slow down your site. So if you have a lot of PHP code that you really mean to go back and fix one day, but it's not causing any critical errors, it's just causing notices, those notices in the process of writing them to the database when they occur can actually build up and incrementally add to your page execution time. So fix those notices. It's another thing we might find. Views and panels render time. So we talked about this a little bit earlier, but when you're rendering a view, it may be that the process of rendering the view is actually more expensive than anything else. So I think oftentimes we hear that views gets a bad rap for assembling inefficient database queries, which is sometimes true, but very often the time that you spend with views and incur performance penalty actually comes from rendering the view, theming the results rather than running the query. We may also find a snail writing a turtle because somebody thought that would be a good thing to add to a website. If you find this, you want to just take it out. All right, so how do we get started with XH Prof? I'm not gonna redo pages and pages of documentation because that would not be a smart use of our time, but there's a few different ways in general if you want to install XH Prof and you're running brew on Mac, you can do brew install XH Prof. There's a really handy Drupal XH Prof module, which is a very easy way and convenient way to do XH Prof profiling in your site. There's also this handy single file tool, which is great if you wanna share an XH Prof run file and have someone else look at the results of that you found in your own XH Prof analysis. So we wanna avoid having bad data in our XH Prof runs, so there's a few things that you're gonna wanna do before you get started to make sure that the data you're looking at is useful. So first of all, if you have a menu rebuild and a registry rebuild within Drupal, within a page request that you're profiling, the page is going to be slow and there's gonna be a lot of extra processing going on in that page that is not going to be useful to you because it's definitely not common to have a registry rebuild happen within an end user's page request cycle. In general, you wanna leave the develop query log off since that can also add some incremental overhead. If you wanna come back and turn it on to an analyze a query, that's great, but in general I recommend turning it off. Another one is XD bug, definitely turn this off, make sure it's completely off. This really can add a non-trivial amount of time to your wall time. And I've certainly made a mistake of not leaving it on and then spent time looking at results and then only to find out that I didn't disable a XD bug in my environment and it's definitely a bummer when that happens. Another thing that I think is sometimes easy to overlook is you wanna test as an end user the same level of permissions that you're optimizing for. So if you log in as user one or another administrator on your site, that user's gonna be bypassing a lot of the permission and access checking control that will happen behind the scenes. And that's stuff that you wanna see because that's likely stuff that's contributing to page execution time and stuff you wanna optimize. You also wanna know which caches are in place. So one thing that can really throw off your investigation is if you keep profiling the site, you could look at the same page and get widely different results each time. And sometimes that can happen when you're hitting various different caches and you're not sure which ones you're hitting. So there's a handy script again by Mark Sonnebaum to disable the views and panels or rather the views caches on your site. There's also the views cache audit tool in Drush that's useful but this is a handy little script and that'll disable all your views caches and that's a great way to just make sure you're getting more consistent results so that you can hit the same page again and not have to worry about whether you're seeing a cache or uncached page. Same for panels and pain caching and then there's other kinds of caches. Scrooge McDuck. All right, so let's do a really quick demo before we talk about some more XH Prof scenarios. Okay, so I have a local installation of Drupal Commons here and I've done some stuff to it to make it slower and I've also enabled the XH Prof module. I've granted the access to Vell information permission to regular and authenticated users so that you don't have to be an administrator to see this information and that's nice because the XH Prof module when it's enabled and set to profile every request has this handy little XH Prof output URL on the bottom and so all you have to do is click that URL at the bottom of the page and you'll see the run information for that page. So let's refresh this page and see if it's fast. Spoiler, it takes a few seconds, right? That's not ideal. So this is the first example. I'm actually gonna just copy this link and open it in a different browser window so that I get the administrative theme. So over here I'm logged in as the administrator but it's the same site. I could have just clicked that link and viewed it as that end user. So this is our first XH Prof report that we're looking at, right? And on top you can see the total wall time, total CPU time, they're pretty similar. And we're seeing the top 100 functions. So one thing we could do just to take a look around here is we could start by looking at inclusive wall time. And this is a handy way if you wanna just look kind of top down and see is there any point in the request where there's a significant drop off in time, right? And so you can see pretty quickly as we scroll down, there's this big drop off where we have 1.7 seconds down to 0.9 seconds, right? And that's right after we run the comments posts in it function. So that seems like a suspect. We could also sort by exclusive wall time. So let's go ahead and do that. And if we sort by exclusive wall time, we can now see that there's one call to comments posts in it. And that one call takes 1.7 seconds. So we know that this is something we wanna take a look at, right? So comments posts in it. And if we click that name of that function, we can see the call path that resulted in this function. It was called by user funk array. If we click that as the parent function, basically what we're seeing is a Drupal hook implementation and invocation. So module invoke all, all modules that invoke hook init are being run, which is taking us to the function comments posts init. So let's take a look at comments posts init. This is an example, but you can see that comments posts init does some really inefficient stuff. And the comment is add magic to sauce. I don't know what that means. I'm not sure who this developer was, but we probably wanna remove them and their code from the project. So if we go ahead and let's just do a before and after, right? So if we go back to this non-administrative user, haven't made any changes yet, we can go ahead and refresh. It's still taking, you know, it still takes a little bit of time. So let's now go ahead and remove this problematic code. And I'll actually just clear the cache since we're, actually no, I'm not gonna clear the cache. I'm just gonna comment out the code here. So we're gonna return. And so now this code is not being run and we can refresh the page. And it does load much, it seems to load much faster, but let's confirm that. So I'll open this new xh prof run and we can compare it to the old one. So now we see that the inclusive wall time was one second, whereas before it was 1.7 seconds. Let's see, somewhere around there, right? Before it was 2.7 seconds. So we saved about 1.7 seconds of wall time. And we can say, by looking here, right, comments, posts, and net, we can search and just see that that function is not even showing up in this list of functions. So we don't have to speculate, we can say comments, posts, and net, we saw right here that it was responsible for, too far back, right here that it was responsible for 1.7 seconds of inclusive wall time, or better yet, exclusive wall time. And now when we removed it, we lost 1.7 seconds from the page request, the page execution, and we see that that function is no longer called. So we can pretty definitively say that this function was the problem. So this is an example where it's unlikely that you'll have something, a block of code that's quite that bad, but in fact, you actually will see different issues where there is something that is very clear that it's a performance problem, but it wasn't clear to that developer when they wrote that bit of code. And we saved a whole bunch of time guessing, we didn't have to speculate, we went right to the problem. So obviously that's a simple example, and now a little later I wanna walk through some real world examples of things that we found by the XH Prof and what the remediations were for those issues. But first I wanna talk about how to deal with when the site is slow, right?  And there's a lot of urgency around that request. Performance is very important and understandably folks get a little panic to when performance is not good on their site. In general, we wanna measure performance, we wanna understand what exactly is going on on the site in a more specific way. And so one thing that I like to do is to develop a plan around what are our goals for performance on the site that's very specific. And the reason for that is that it allows us to identify when we've reached success and because we've defined what success looks like in advance. So there's no, because otherwise you can tune until the cows come home and you won't know if you're done. So what I like to have is success as defined by execution time on a specific page logged in a specific user under specific conditions. So we can say, user Steve will log into this page under this condition and it will take one second or less to execute the page. That's how we know when we've reached our performance goal. And that's a very specific goal. Two people can look at the page execution time and agree either it's one second or below or it's not, right? There's no gray area there. And it also, by quantifying things in this way we can actually quantify our improvements that we've made on a page by page basis. So at the end of, you know, we can do before and after for all of those conditions and say, look, for users with this role on this page we consistently improve page execution time by, for example, two seconds or 50% or whatever it was for that page. And that's a really appreciable thing for you and ideally for the stakeholders that you're working for. Sometimes when you'll have more than one person working on a site and recording observations whether it's in the same environment or a different environment it can be really handy to have a structured way to write down your observations. And so I like to just do a simple Google spreadsheet where I record the date, the environment, the user that was logged in, the path that we're looking at, the execution time that we saw. If you have a URL to the XHPROF run file so you can see specific results that's always handy. The person who observed that and then the notes. And the reason for that is just if you're looking at, even if it's just three different pages if you're looking at the page tweaking some settings, trying to disable caches you're gonna load that page many times and it's likely that you will forget the exact set of conditions that you used to profile that page and what the results were. And so it can be really handy to just have this kind of as a scratch pad either just for yourself or share it across a team of people working on a site to help improve performance. All right, so some case examples. And these are things that we found mostly things that we found working on the common scene or other things that we found as related to that. So the first example, does anybody want to take a guess of what we're seeing here? There's one thing that at least to me really stands out. We've got, I'll give you a start, right? We've got the function ctools, token, content type, content types. It's called 84 times and it takes 2.8 seconds of inclusive wall time from that function on down. So does anything stand out to anybody about what we're seeing here? Maybe something that seems a little unusual? Yeah. Yeah, so you're spending over a second localizing strings, right? That's the t function in Drupal is the function that we use to localize strings in the UI and make sure that they're translatable. So that seems like a long time and in fact, it is a long time. One second out of 2.8 seconds is definitely non-trivial for this code path. And also the number of calls, right? We're calling t over 128,000 times. That is too many times to be calling t. You probably don't have 128,000 strings on your UI and if you do, you could consider a more simple UI. Just a little bit of advice. It's not a UX session, but I'll put that out there. So this was a real world example. That's the Drupal node if you want to look at the details. But this was actually a very simple issue to fix, right? We just needed to add a static cache to ctools, right? Adding that static cache, we could see the results of that, right? We eliminated 128,000 calls to t in this particular environment. We reduced page execution time by two seconds, which was, I think, two seconds out of almost a three second page load. We significantly reduced the memory footprint. And the fix was really simple, right? Now, this is another example I would never have speculated. Oh, we're probably calling t a lot of times and need to add a static cache. But with XH Prof, it's very easy to dig in, see that, you know, it sticks out almost like a sort of thumb once you're used to looking at that data and come up with a really surgical remediation. That's actually very easy. Any questions about that specific example before we move on? Static caches, all right. Here's another static cache example and I'll just talk through this one. Basically, we have the Drupal node access grant system, which is how we determine whether a given user has access to perform a given action on a specific piece of content. And the list of grants that they have, which is like, you can see this but not that, basically. It never changes within a page request, yet we do compute it multiple times within a page request, so in Drupal Core. So this is another example where a simple static cache really improves performance. And it's also another example of a system where I think, you know, the node access system definitely balances a lot of factors to produce. It makes it possible for you to configure access control in a complex system. So in some ways, it's not as performant as a system that maybe you wrote completely from scratch. That's always kind of the trade-off that we deal with with a assembled system like Drupal. But there's still things that we can do to improve performance there. So rather than rewriting the whole node access system, for example, or just tossing it out, we were able to make a surgical improvement. I think Eric Web worked on this issue. Yeah, thanks Eric. Benefiting all Drupal Core users. Another issue, let's open up the Drupal.org URL. So avoid unnecessary entity loads in group reference fields. This is another one where basically we identified a code path in organic groups that under some very extreme conditions that happened on almost no sites, but did happen under the site that we were looking at. If you have a node reference field or an entity reference field that references a large number of groups, like 7,000 of them, that can be not performant. And the reason for that, it turned out, was simply that we were loading all the reference entities anytime we loaded the containing entity. So in this case, we had users, users reference groups, users could be part of 7,000 groups. Anytime we, let's say you're logged in and you wanna look at a list of seven users, for each of those seven users, we load the user account and all 7,000 of that users groups. That was not performant, right? And we could have added more servers, we could have, there's lots of things we might have done, but in fact, it was relatively easy to write a patch to just not load those entities. So that was a pretty useful remediation. So this is a more detailed example of the problem statement that I generalized earlier. So in a site with 43,000 users, where each user is a group and can reference other groups, the user is trusted context, we experienced page execution times of 15 to 20 seconds, apparently resulting from large numbers of entity loads and then I went on to describe the code path that made that happen. And then the fact that we observed that when we changed the code path, we went from 15 to 20 seconds to one to two seconds of page execution time. And this is a patch that was committed to organic groups. All right, and so the last one is optimizing node access query building. So this is another one where, I'm part of that little blackout delay where we switch between context here. This is another one where, great. So this is another one where we were able to optimize performance of the node access system and the way that we assemble grants, right? And so it's a little bit, you could say that this is an edge case just in that it only happens on sites with outrageous numbers of, outrageous amounts of content, but it's still important for Drupal to scale to that number of sites. And so I'm trying to find the ultimate patch that we committed here. So another great Eric web patch. And as you can see, it's a relatively simple change to the way that we assemble node access grants. We define the new API function. And in the scheme of things, like it's not a super long patch, but this patch had a really significant performance improvement. And it was another case where we took a system that folks, I think it's easy to say, oh, that just doesn't perform well and we made it perform better by specifically looking at the challenges to scaling that system. So those are the case examples I wanted to show. I'm happy to take questions if folks have questions about XHPROF or performance or other things. We've also got some super smart people in audience that may or may not troll. Hi, yeah. Is there a reason that you choose to use the XHPROF module instead of the XHPROF support and develop? Yeah, so the question was, is there a reason that I like to use the XHPROF module instead of the XHPROF support that comes with develop? Really, I just like that the XHPROF module puts that handy little link in the footer and it's super easy to just download the module and turn it on and configure it. I think they both work great. It's just kind of a matter of personal preference as far as I can tell. Develop puts a link at the bottom? Lousa. All right. So we have maintainers of develop in the room. This is getting hard to repeat. Do you want to speak into the mic? All right, so yeah, and I can summarize. I think everything you're getting at most. Uh. That's Mark Sonamow folks. So the develop support and develop, what it does is it handles the enabling and disabling. It does give you the link at the bottom, but then it requires you to set up the original UI.  And that is like the original UI and it works fine, but it's just another thing to have to set up. It's very fast. I actually generally use that myself because it's very fast. But the reason I wrote the XHPROF module was if you're going to use it in production, I mean, it has a few nice options for like setting it to, like setting a sampling interval. Like you can set it to run on every like 300 requests so you can get some good data in production. It also lets you have that UI available and you can act with Drupal access control so you don't have to like set up a new VHOS or whatever. But if you're local and you already know how to use the old Facebook UI, it doesn't really matter. You can use it however. Most is going to come up to the mic. Is he going to talk about XH GUI? I don't think he is. We'll see. Yeah, so yet another GUI for this stuff. XHPROF.io is the name of the project and the URL of the project. So you set that up on your web server and it analyzes run information. So that's kind of the front end and the way you get runs to be recorded is you go to PHP.ini and there's two lines that you have to put in there that are in the project. I think Ezra's scrolling through it now. It's prepend and upend in PHP.ini and then you get your run information. So the advantage is if you include this stuff within, if Drupal is the thing that is starting profiling, then you're going to miss the beginning of your request because it takes a while for Drupal to start to instruct XHPROF to start recording. So you get more stuff in your run. And the second thing is that this is a nice GUI that works for things that are outside of Drupal and the Facebook GUI is really dated. Mark's is better than that. This might even be better than the XHPROF module, in my opinion. Oh, Eric Duran uses a different one. Maybe what we should do is just collect a list of all the different XHPROF UI's that you can use. I can, can I just augment what Mesh just said? So we'll collect a list and link it from session. Sorry, go ahead. I'll just augment what Mesh just said. If we're talking about doing a lot more symphony stuff, we'll be doing a lot more stuff in Drupal 8 where we may be not using Drupal. So having something that has a GUI that's not relying on Drupal might be a good idea. But what I actually wanted to ask was about visualization tools. Sure. Is there any, are there any ways to visualize the data the way I've used like GraphViz with extabug dumps and stuff? I think it depends on what you're trying to accomplish. I know that. Visualization, you know, just immediately jump at the problem. Immediately, yeah. I know that we've used R to do box plots and things like that, using data. I think it sort of depends on the kind of visualizations you wanna do. Mark, do you wanna say any more about that? The original Facebook UI. Do you wanna say it into the mic? So the original Facebook UI, if you have GraphViz installed, there's a little link at the top to see a, I don't know what that plot is called, but where it puts everything in boxes. Yeah, the call graph. Some people find it useful. I've honestly never found it useful because I can just sort and see that big number. Is that just experience? You quickly learned. Maybe it is experience, but, because every once in a while, I'm just like, I re-think about it, I'm just like, maybe I do need to look at this big thing of circles and I look at it and it's like, nope, this sold me exactly what I could see in the sorted graph. Yeah, right, cool. Hi there. Ezra. You had mentioned disabling extabug before you run this and so I'm curious, does that mean disabling it in the INI or just not turning on a book, Mark, that if you use that to disable it and then listen for it in your IDE? Yeah, you want to make sure, like if you go to the PHP info status page, which Drupal exposes an admin report status, you want to make sure there's nothing about extabug in there. Okay. I'm curious, how do you track your changes over time? Like, is it the way you showed where you just keep opening tabs and making fixes or do you actually? Personally, I like to save the run file. If there's a salient part of the run file that is useful to me, that might take a screenshot of it and then I put it in that spreadsheet format that I just personally like to use and that way I could see, oh, this page with this user under this set of conditions on Tuesday was significantly improved from the previous Friday after we did X, Y, and Z. I think it's just a matter of personal preference, how you want to document that. I know there's tools like New Relic, for example, which will take aggregate data and present that as a graph over time. And that's another nice way to track it. I just like, personally, my preference is to just have somewhere where I record the specific page execution time for the same set of conditions in different instances. Yeah.  Yeah, I think that environmental variables like that can always be tricky. For example, if you have memcache running on your production server but not on your local server, you might see different results as a result of that. I think it sort of depends on each case, but there's a few ways to deal with that. One is to run a virtualized version of your server. Another is you can have, you know, there's tools like Megalodon or just Chef recipes that allow you to recreate the same set of hosting stack locally. I'm not sure specifically if Pantheon offers that. But there's, you know, there's tools like that. I think that some hosting providers let you run XH Prof in production. That's something that I know Acquia has as a beta. It's not like officially there, but it's something that you can... You have it enabled on all servers. It's enabled on all servers, but somehow it's in. So yeah, if you can run it in production, that's great. But in general, it does depend based on those factors. Is there a better answer to that than the one I gave? I feel like that's the truth. It's not a super satisfying answer, sadly. The only other thing I would say to that is that we can easily, I think we'll easily overestimate the need for that. There are environmental differences.  And I can usually tell like, it doesn't matter if it's the same speed or if it's slower or faster, it only cares that you're looking at relative performance. So I can see like, if I made a thousand queries and that was quick on my MacBook, I know that a thousand queries is more queries than I need to be making. And so I just look at more of like the number and what's happening in like what Ezra was talking about earlier where you have to like reason about your performance profile and think about like, is this, is what I'm seeing here, what I expect to be happening? And if it is, then it's usually fine, but usually you can find outliers like that without having to deal with the environmental differences. Yeah. Mark also hosts 99% of client sites on his MacBook Air. Yeah, Mark has the cloud in his pocket. All right, any other questions? Don't be shy. Yeah, please step up to the mic. Which requires traversing the conference center for folks at home. I was just specifically curious what the overhead for XH Prof is in relative to running standard environments. I think it's small. It's some small incremental amount of overhead. I don't know what the percentage is specifically, but it's not so significant that, put it this way, if you're working on a performance issue, it's probably significantly greater than the incremental overhead that XH Prof is going to add. Yeah, it is large enough that you don't leave it on forever for every request in production. That's why, so Mark mentioned sampling, the sampling rate earlier, but the sampling rate means is it's just, you can run XH Prof on one out of every 500 requests or every 300 requests and that way you get data that's from production, but you're not impacting every single request on your site. Excuse me? Yeah, the CPU flag adds the most overhead. So you can turn that off. And I think that the XH Prof module does that for you now automatically, doesn't it? It's an option. Great. I was just largely going to agree with you. Yes, as long as you aren't profiling a page, the impact of XH Prof is essentially zero. So turn it on so you have it when you need it. That's all. Jeff. Hi, Ezra. Hi. Sorry, I don't know your name, but I'm gonna reference your question about production profiling. And this is a talk about XH Prof, but tools like New Relic I think are more valuable for production monitoring and profiling because what you're looking for is aggregate data in those types of environments. Like I can profile locally to get an idea of what's happening specifically on the thing I'm looking at, but over time I might wanna see things that surface that I may not be aware of. One of the best examples I have of that is when we were working on a client site, it's a really big community with forums and lots of comments and the text filter to process the comments was slow, but not so slow we would have noticed it on any individual profile, right? But in aggregate with New Relic, we saw over time that this one method was running a lot and we wouldn't have just stumbled into it and we wouldn't have known that in aggregate, it was one of the most expensive things happening on the site without something that aggregates a lot of profile data together so that we can see what happens over time with it. Yep, thanks Jeff. All right, any other questions? So thanks everybody for coming. Please do submit session feedback to DrupalCon and feel free to submit it to me. This is definitely, it's like a complex technical topic, right? But hopefully based on your feedback, I can get better at explaining it. So thanks for coming, take care.


Don't ask us why we've done this. Right, welcome back to the channel. This is the West Sussex Fund Run League and this week we are in Henfield. This is the shortest of all the West Sussex Fund Run League races. It's only four miles, just four and a bit miles. And it's flat as well, so it's going to be over in a flash. I'm not going to beat her again today, am I? No, I won't.  Just ticked over one kilometre. Partly flat, 346.  Two kilometres in just under eight minutes. It is warm. Right, four minutes for that kilometre as well. So just under 12 minutes, three kilometres done. 4k in, 2k to go, just over. Single track with the river radar to the left. 5k in 20 minutes, just over a kilometre to go. But dying of death now, really hurting. That's six kilometres, 24 minutes. Last bit now, 26 minutes, six seconds. Get up, Mark, come on. Well done, buddy, great work. Good job. Don't ask us why we're a cop-holding party. It's just raw. Good place, Ollie, well done. Place with that. Now, are you catching the guy? I wanted seconds. How far up was he? Making it in six seconds. Yeah. Oh, that's rubbish then.  You need to get better. You're going to whip yourself. Stay down, just want to get back. Hi, Steph. Right, that's it from the West Sussex Fun Run League here in Henfield. It was hot, but at least it was short and flat. Enjoyed it a lot. We'll see you for the next one. Take care, bye.


This is the NAP. It don't mean you're tired. Self ownership, which leads to property. Have a joint thrown in jail. We'll leave that be gone. Are we for now? We won't let you go. Are we for now? We won't let you go. You want my lord? Don't you know their opinions with a gun? The savage state, there's a devil rolling over you. When the slaves were free. That's not going to cost anything.


I'm most excited about being able to be a part of such diversity and such discussion and also hopefully see the change from this discussion during my lifetime.


what's going on guys welcome back to another video so we are back at it again with another food video we've tried Jamaican Indian African slash Nigerian you guys had beef in the comments with that yes that's on yeah that's on yeah and now we're back with Thai Thai food is obviously from Thailand never had any of this before the drinks look crazy the food looks crazy I'm ready to get into it all right let me tell you guys what we have right now so we have for dessert the mango with triple colors is sticky rice and we have Thai bread Thai iced tea I hope I'm pronouncing this right but Paya drink tom yum soup that's this right here papaya salad because this was a big one is this is called pretty packages it is crispy fried served with sweet chili dipping sauce and some bread curry and that's it and then obviously like the Pad Thai well yeah we're about to go in we got some rice I'm ready to go I don't know what do you want to start with first I want to start with this crispy the pretty packages thing okay this is actually an appetizer so that's perfect okay well I want to try that also I want to grow my own papaya tree we see a lot here in Florida and it's jealous out like I'm jealous because that is one tree that I don't have yet in my garden oh it smells so good hold on man hold on we gotta we gotta show them what it looked like it literally looks like a mini crispy dumpling egg roll like it's crab ragoon like it looks like crab ragoon smells good so much what's in here I don't even know thing okay we're gonna find out let's dip it in the logo is this again the sweet what it's like sweet sesame sauce all right let's go that's good I still don't know what's inside of it but it's good I think it's pork hmm wow I don't want to double dip up I might have another one I'm gonna decide oh it's dripping on stripping that's why it's good oh my gosh trip here I'm trying to make it drip mm-hmm okay I love Thai iced tea so I want you to try the Thai tea first man but the purple one looks cool I'm fine let's try the purple one I never tried this one before are we supposed to mix it I don't know but I'm not gonna mix this one the Thai tea though I do I don't want to miss it cuz then you guys are gonna like I don't go ham on me all right let's drink it what is it good mm-hmm what is this supposed to be made out of I didn't say this is good like a little tangy like fragrant yeah but it has like a like I don't even know how to explain it like um it definitely has honey in it not that no like yeah I taste the honey but it's like a tingly tingly feeling on my tongue it's like a slight oh my god what is the word like oh my god I don't know the word I'm looking for clearly oh it's all right it's gonna bother me I'll figure it out it's like that's gonna bother me wow next what do you want to drop I think I want to go in with the Pad Thai okay I think Pad Thai is so good but this is the only thing that I've had what is that peanuts peanuts mm-hmm don't don't knock it until you try I'm not knocking anything I'm just saying it's so good because at first I thought the same thing I was like peanuts and noodles doesn't look like peanuts that's why I was like what is that cuz they're like they're like chopped up let me show them what it looks like the Pad Thai I don't know if you guys can see the steam coming off of it but it is hot which is always a plus mm-hmm I'm gonna get some chicken so I got chicken Pad Thai chicken mm-hmm you could get whatever you want but I got chicken cuz shit it's my favorite big bite you get get a decent piece oh three two sweet mm-hmm oh yeah they made this Pad Thai with love mm-hmm let me get some of that that's good all right I'm gonna rate these as I go the appetizer the pretty packages 10 out of 10 Pad Thai 8.5 out of 10 we'll make it a 10 I like spicy so I don't know if you could really count that but it is good it is okay but I like spicy stuff so I might add some hot sauce to that this come spicy but I got it not spicy cuz I don't like spicy I know brah I know spicy would have made it a 10 so I'm gonna say that so to compensate I got the red curry spicy for you mm-hmm yeah I'm mixing it I'm mixing it don't I don't know if I was supposed to do that or not I'm doing it bro what is that tingly feeling that I'm getting bro I don't know what you're talking about it's like a little it's like soda like bro there's like it's it's a tingly feeling on my tongue like is it like if it's carbonated or something like tangy like I don't get that my god all right well my tongue in your tongue different so okay next I want to choose I want the curry now okay well it has happened with rice okay all right so obviously everybody knows what white rice looks like it's jazz and it's almost in like every culture this is the curry this looks crazy all right so what I like to do that is high as well take a little bit of rice put it on a plate and put some curry on it and like have it together okay hold on do that for me all right I'm so excited I'm ready my mouth is like mm-hmm guess a piece of chicken and this is spicy yeah this is spicy so I'm scared all right I'm trying to first I know you have to eat everything together oh my god my god nothing I can't fit that in my mouth pause just cut into little pieces don't want to do all that look like this all right here we go oh my god I can't get on your capable babe you can do that all right I'm ready three two okay my back didn't know you're going for three damn it one mm-hmm why does that taste so familiar it's still good why does that taste so familiar though mm-hmm it has coconut milk in it that's what you're tasting yep coconut mm-hmm I love Thai curry because it's all coconut based it's good mm-hmm this is so good it's like the perfect amount of spice to yes come on now get okay I thought it was gonna be too spicy but it's a nice cake no such thing is too spicy mm-hmm to me yes good right so tender all right one last piece then we gotta move on we are tearing this up mm-hmm I'm dripping it on the rice I don't care I can see you ordering this again this yes I didn't be like can I have a Thai food where's this called spicy curry this is red curry they're different kinds red curry mm-hmm they all come spicy well I like it mm-hmm let's move on maybe one more piece babe okay fine I'll have the pad Thai I'll let you have the curry I'll just have a little bit I'm doing it what a moral we're done oh wow okay let's have some of the bread what if we dip the bread inside of the curry okay let's do it hold on bring the curry back I don't know if you're allowed to do this I'm sorry if you're not but I feel like it'll taste so good and you always have bread with something looks like I don't know like it's like a tortilla kind of it's kind of like dough yeah like maybe it's sweet like for some reason I feel like it's gonna be sweet all right do you want to try a big piece or a little piece like any small actually want to try it on its own first and then dip it dip it in the curry oh okay oh wow drippy is it sweet mm-hmm well mm-hmm that is so good dip it in the curry oh dip it in the curry and as far give me another piece oh my gosh yeah take that half all right give me another piece give me another piece it's too big mm-hmm whoever made this thank you this is amazing get your hand out of the bowl I'm trying to get in the curry wow wow wow wow dipping it in the curry is 100% a 10 mm-hmm double dipping I don't care but say you don't think that well 10 mm-hmm is a 10 mm-hmm was a ton hey explainer like I'm chewy oh good mm-hmm okay that was good wow oh my gosh moving on that's IT am I supposed to mix this because it's like uh-huh it's like milky mm-hmm that's it has milk in it oh no my straws broken your trade no I like this one better than the purple what is the purple one call the gun pio pio pio tea okay pio tea ate this what is this tidy tidy ton that is five mm that is really refreshing on our day oh my god is my favorite like I haven't had it in so long I just have yeah I used to have tidy all the time in Jersey all right let's try the papaya salad not a big salad guy this is gonna be interesting for me oh wait maybe we should dip it in the sauce because there's sauce in the bottom there's so yeah okay just eat it before I can have a chance to dip it in the sauce greedy mmm oh wow it's actually pretty good interesting that's it that's a salad he could get down with huh other nuts in here mm-hmm peanuts could taste it mm-hmm salads nine mm nothing for me salad wise is gonna top a good chicken Caesar salad please basic but I'm not a salad guy that's good I'm dripping all my god good thing I'm not wearing white mm-hmm moving on last thing no no second to last it's a soup is it spicy please tell me us I don't know I see a mushroom I'm not gonna lie don't mess with mushrooms yes I have a fork for soup sue me all right let's see the chicken mm-hmm oh my god what was it taste like it's so good what's it taste like I can't grab it it's like sweet grass in the broth stuff eating it over the thing yeah good grass in the broth big where's your spoon grab your spoon the brother is good yeah it definitely made it better as I just had the chicken alone the chicken alone without the broth yeah that's not a soup yeah try this whole thing okay chicken I'm not gonna lie chicken flavor was a seven the broth was a eight together I'll make them at 8.5 8.5 I'm not trying a mushroom I'm not trying a mushroom mushrooms are my stomach but I've had mushrooms before and no bueno no bueno is 8.5 definitely would add some hot sauce to that though this guy will have sauce bro all right gotta have the house that was good though wait no don't mess it up we gotta show them I am the colors this has to be like a sweet sauce or something I sauce alone coconut sauce let's see mmm try that I can't smell it should we pour it all over the mango that is definitely a coconut sauce it has to be it has to be like sweet and condensed milk I was just joking and it really might be all right so let's pour it over everything just don't differentiate I'm not all right putting on the mango mm-hmm oh my god what is this stuff though what about the like the scoops it's sticky rice was that's rice mm-hmm why the different colors cuz they made a different color so you eat the rice with the mango so I'm gonna try the green one first oh are they different flavors I don't know they from dipping it a little bit more in here so I get the full how did you get your mango out so good because I have a spoon and I just scooped it I keep telling you use your spoon no it dropped oh my god what what what's it tastes like I'm fighting over here I say I'm fighting I'm fighting I'm fighting baby I got it like Mochi little bit mmm this is like the best thing I ever had in my life I'm not even kidding you oh my goodness you know what it tastes like I'm still analyzing it like the Puerto Rican candy like the cocos the lollipops don't know what you're talking about okay still trying to analyze this mmm this is such a unique consistency together oh my gosh I'm in heaven yo this sticky rice is sticky I'm going in y'all I already tried all the colors they all taste the same nine the colors taste the same but this is definitely like nine one of the best desserts I've ever had you know make it a 10 leave it in the fridge for a couple hours give it to me real cold mmm that would be fire nine if it were colder a 10 but that sticky rice is really sticky I was fighting for it and I'm not using a spoon yeah I guess but um yeah I'm not like that one shocked me rice and mangoes mm-hmm that was good though that was really good I'm honestly very surprised and that was our last one right mm-hmm okay so off the bat all of them were pretty good the one I liked the least was what was that thing called I forgot what it was called was it the soup yeah what no it wasn't the soup what was it no I might have been this is this yeah I had to be that like I swear something else no you liked everything else mm the pad thai no pad thai was good so then yeah I was a soup yeah I feel like there was something else all this hmm this was good I clearly I was dogging it but it's because it's fragrant I don't like fragrant stuff like that but for some reason it gave me like a tingly feeling like a tangy-ness there's a lime in it so I'm not crazy yeah I didn't get that from that but this now that that's heaven son mm-hmm overall though Thai food in general based on the stuff that we tried overall nine yeah I think everything wake it definitely it has give me a bunch of hot sauce with this stuff ten bro all right this was actually my favorite that we tried so far I feel like I said that last time this is my favorite yo I'm shocked it it's mine too mm-hmm I'm shocked Thailand I'm shocked honeymoon I'm not gonna lie don't guys don't come for us like we tried African Indian Jamaican and now Thai food to us Thai is up here not knocking any of the other cultures by any means because they were all fired but this for some reason I'm rocking with a lot I just I'm big on sweet stuff I love like coconut flavors so this is like right up our alley and I love how they have different colors and the drinks foods yeah it's so unique I just feel like it's so cool but man if you're from Thailand shout out to you this was crazy I am down to do a part two of this with different foods comment down below if you're from Thailand any foods we should try that we missed with all that being said this was freaking fire anything else you want to say no I'm gonna finish all of this food off-camera I want them appetizers what all I'm gonna say guys we'll see you guys in the next video


Team keep it clean, sit down because it's probably gonna be a little minute. I feel like in every, any kind of relationship that you have with somebody, that there should be a high level of transparency, honesty, straightforwardness. That's whether it's a business relationship, a personal relationship, whether it's a parent, a child, a significant other, brother, sister, cousin, aunt, uncle, whatever. Homeboy, homegirl, whatever it may be. There should always be a high level of transparency. And I feel like we already have that on here. We have conversations about everything. It ain't just Ravenstubble. We have conversations about life and different things and whatnot. So I feel like we already have that, but in this video, I wanted to take sort of a deeper dive into that, into our transparency because something that's, it's happened, and really I think the situations with a, I've been thinking about this a little bit before, but then the situations with Jaylen Ferguson and Tony Saragusa, it just made me think about it even more. And it's just not entertaining nonsense. Don't entertain nonsense. Don't because it's not worth it. It doesn't do anything for anybody.  I was really, really disappointed because one of my guys who's been watching the channel for years, for years. And the reason I can confidently say that is because I remember his name from the comment section from a super long time ago. But he sent me something the other day and he was like, man, engraving. Wow, I was on the Ravens, their live stream the other day doing the presser. And man, these people were hating on you. These people were hating on you. They were saying that you were a fake Raven fan. And oh boy, you know how many times I heard that. But anyway, he was like, they saying that you was a fake Ravens fan. And you even got like a Steelers page and stuff and you make Steelers videos and da, da, da, da. And you just collect money from Ravens. And I'm like, really? Really? And I was so disappointed, not in what they were saying because we're gonna talk about that in a bit, but I wasn't even disappointed in that. I was disappointed that he even entertained that. Because, and then somebody else, like either the next day or the day after, they sent me this thing from a whole another video where somebody was like, oh man, I like this, this is a real Ravens fans talking on this channel, not like that fake engraving. He's just a fake fan. And somebody sent me that and I didn't even respond because I'm like, what is the point? Like, think about that. What does sending somebody negative stuff that is being said about them, what does that do for you and what does that do for them? It literally does nothing. It does nothing. It doesn't improve anything. It doesn't enhance anything. It doesn't make anything better. It literally does nothing. So this is why I get disappointed when people even bring that stuff up, even entertain it because it's pointless. It's really pointless. And then when you think about it, like the stuff that people say when, this is why, and again, we are not the same person. We're not, I mean, I could throw a little football now, but with Lamar Jackson, this is why I understand so much. It's not on the same level. It's not even close, but this is why I understand so much of what he goes through because when people don't have access to you and they once had access to you, or they're so used to having access to you or having access to other people who are in your same position, but you cut them off, they get upset. And since you're not saying anything to them, then they start to create their own lives. They start to create their own narratives and they really try to push it to where you know that they don't believe it, but they try to convince themself to believe it, even when it doesn't even make sense. Something that some people have said, oh man, and that guy in Graven, he got a Steelers channel and he make videos on the Steelers. Please, if I got one of those, point me in the direction because I don't know nothing about it. I point me in the direction, please. Like with that, first off, if we gonna talk about the Steelers, we do it right here. If we gonna talk about any other thing, Steelers, Bengals, Browns, Chiefs, Raiders, whole NFL, it's done right here. We don't go to no whole other channel just to talk about another. No, y'all know that. You can go through the videos and you'll see. Like that, it doesn't even make sense when people say like foolishness like that. So, and then on top of that, like, because me, I'm not lazy. I'm like a weird kind of lazy. Because sometimes I just, I ain't got a time for some stuff and I just don't feel like doing some stuff. Like y'all remember, the Team Keep It Clean podcast. Y'all remember that? Well, some of y'all remember that. And we had a lot of fun doing that. That was our own podcast that we started and we had a good time doing it. Episodes would go from like 30 minutes to about maybe like 45. And we'd talk about really whatever. There was some football stuff, but a lot of it was just life, excuse me, in general. But I stopped. The reason I stopped is because this channel, it just, it got so busy and I just could not keep up with the podcast. Even though it was once a week. Once, and if I, I think if I really did, like really focused on being like, you know what, I'ma do it. I probably could, but a lot of times I just don't feel like it, man. I just don't feel like it. Because we do so much with this channel and it's a lot of work that gets put in this channel. And then of course everything else that goes on in the podcast, personal lives too. But I just, I felt like with the podcast, I loved it, but I just, I just ain't feel like doing it. I just ain't feel like doing it no more. Because again, everything that happens with this channel and things that just picked up and things that just got so busy and they have stayed busy. So if I'm not even, if I ain't even, if I stopped doing that channel and that was again, my own thing about personal lives and y'all know we could talk all day, every day. Why would I create a whole another channel for a whole another, again, we talk about everybody on here. So this is why when people start these lies, it doesn't even make any sense. It makes zero sense.  I don't care. And again, every time somebody is saying something about me negatively, with 1,000% certainty, it's always somebody that's been blocked on here every single time without fail, without fail. Because again, like we said, when people lose access to something that they normally have access to, because some people, they'll be shell shocked. Some people won't even know that they blocked initially because they might say something disrespectful and sometimes I might not even catch it in the comment section. So they might keep going disrespectful, boom, boom, boom, boom. And then all of a sudden they try to type, oh, whoa, hold up, I'm blocked. Give me a minute. Oh, you know what? All right, engraving, slander time, buddy. And it's like, it's like people, one of the weirdest things that I see with YouTube and it's not just with YouTube, it's in life in general. People will disrespect you. They'll continue to disrespect you.  Why are they, and this is basically what they're saying when they get upset, why is this person not letting me disrespect them anymore? I don't get it. You see how much sense that makes? Or really how little sense that makes, doesn't make any. Why is this person not allowing me to disrespect them anymore? I always say, one of my favorite, favorite, favorite, favorite things about social media. Block, the block button, the block button. Block and move on, block and move on. And that's because that removes that part and I always tell people, I've had conversation with this with a lot of people, especially like other YouTubers and stuff, when they like on the fence about something. They may be on the fence about somebody in that comment section, or even somebody on Twitter, somebody wherever. And this not just for YouTube, this for people in general. If somebody's like, you could, because you could tell a lot of people's energy. You could tell the kind of vibe that they are on, just by the way that they word stuff. You can always tell. You can always, and if you can't tell initially, then over time, you will certainly be able to tell. Because people will always show themselves. They certainly will without fail. Every single, it never fails, man. People will show themselves. So never, ever feel bad about blocking anybody. Cause I don't, I sure don't. I do not care if somebody just started watching the channel, they brand new, or somebody been watching for years. If you come in with disrespect, you're gone. That's it. That's it. We not about that disrespect.  No, we not on that. Why? Because it's pointless. That doesn't do anything for anybody. Nothing, nothing.  You ain't gotta say me nothing.  It ain't doing nothing for you.  Okay, and I understand that you're probably coming from a good place with it. I understand that. But what does that do for anybody? What does that do? Now, I've had stuff on the flip side now too. Like my guy Ravens online, Ungate Keepers. And shout out to Hendo by the way. He has sent me a video because I hadn't known about the video. But it was my guy, MDT. He had sent me the video. And in MDT, in his video, he was giving us a little shout out. So I was like, oh, okay. I said, let me go check out the actual video. Let me go, let me go see it. And I commented, I commented on it and told him, hey, I really appreciate that. So that was positive engagement. That was uplifting, upbuilding conversation. And I'm not saying, I'm not looking for praise because y'all know, I don't care about that. I don't even like praise. I don't. But that was, that's much better than somebody saying, hey, hey, engraving, these people hating on you. Oh, okay. And what, like, when you think about it, what does that say about them? What does that say about them? Because again, it had every single Ravens live stream. Again, it never fails. Never, never fails. I don't even have to say anything. And I'm not saying that in a cocky way. It's more so just showing the toxicity of a lot of them Ravens live streamed the chats. And they definitely, they need some moderators in there. They've been needed moderators. I don't know why they don't have moderators, but they just, anyway, it's just, what does that say about them? I don't have to say a word, but then my name will be brought up and then there'll be a lot of support in there. Cause team keep it clean. I know y'all be coming through boys, but then there'll be some haters and whatnot. And hey, okay, it's fine. And it's like they, I don't know if they're craving attention. They're craving something that they're not getting. And they keep on doing it and keep on doing it and keep on doing it and keep on, and they're gonna keep on doing it. But my message to y'all is don't entertain nonsense. And this again, this ain't even just got to do with me. You can apply this in your own personal lives too. Don't entertain nonsense. Cause it's not worth it. It's not worth it for anybody at all. I remember, cause on here, we have a lot of fun on here. Y'all know we have a lot of fun on here. We laugh at stuff that goes on in the NFL. We laugh at ourselves, we joke around about stuff. They're serious matters of course as well. But we talk about everything, especially everything when it comes to the Ravens. But we have a lot of fun because it's all in fun. It's all in fun. We of course, we got all our different things that we feel like the Ravens should do, what they shouldn't do, different moves that we feel like they should make, they shouldn't make, so on and so forth. And we talk about the Ravens every single day. But we try to have a, just a positive outlook, not just on a, not even just on a Raven, but more so on life. And just to really give people reminders, to really try their best to be positive. And we know it's hard. We know it's hard.  You are so fake. You try to act like you're this happy, go lucky and always positive guy that's perfect and don't make no mistakes and da-da-da-da. And initially, I started writing back. I started responding. But then I was like, no, it's not worth it. It's not worth it. Because in that video, and like we always say, in the video, when I talked, and it was in the Ravens, the comment is gone cause you got blocked, but it was in the Ravens video. The one we talked, a message for Ravens fans, it was in that video. And I talked about how, again, how Ravens fans, we're gonna disagree on stuff. We're gonna disagree on stuff, but we can do it respectfully and that we gotta try to be better people to each other. And that wasn't just for Ravens fans for everybody. It's okay to disagree with people, but just do it respectfully. That's it. Do it respectfully. And I said, we have to try to get better. And I continued to say we throughout the video. I didn't say y'all. I didn't say you. I said we, meaning me too. But maybe that went over his head. Cause you see, again, when people, when people, they wanna believe what they wanna believe. A lot of times people will have selective hearing. When they have their mind made up about you on certain stuff and they really wanna convince themselves that they wanna feel the way that they feel about you, whether positive or negative, then they can have selective hearing when it comes to, especially when they wanna have a negative viewpoint of you. They are going to come up with stuff in their head and try to believe and they're gonna have selective hearing. And they're gonna try to say, hey, you said this. When in all actuality, you really said that. You said the exact opposite. So again, this is why don't entertain nonsense. If you entertain nonsense, you will walk away from it, not feeling better than you felt before you got into it.  Because I know a lot of times when, and I can understand this because this is a human emotion. If people are talking bad about you, but on top of that, they're talking wrong about you. Cause that's two different things. If people are gonna talk bad about you, that's one thing, but if people are talking bad and it's wrong, it's like incorrect information, it's like, oh, it can be like, man, why are they doing this? What are they saying?  Let me go prove all of that wrong. But you can prove it wrong in a couple of ways. You can either prove it wrong by your words and you can address stuff head on. You can address stuff straightforward. You'll be like, hey, no, whether you talk to them, you speak to somebody else, but nope, that's not true. That's not me. Nope. That's false. You can engage with the person who's saying the wrong stuff and be like, hey, you're lying. That's not true. Y'all can go back and forth. You can try to prove to them why they're wrong. They can try to prove to you why they think they're right and go back and forth. And you can end up winning the argument, the debate, the conversation, whatever, but you will not walk away from that feeling better because when you entertain the nonsense, it can be draining. It can be like, oh, man, I, yeah, I proved this person wrong, but man, oh, did it really have to come to this?  No, uh-uh. I don't believe that, but you got to know when to and really when not to even deal with stuff. You gotta know what battles to fight and which ones to be like, no, ain't worth it. So you can prove people wrong through your words, but even better, you can prove them wrong through your actions. Through your actions, through what you do. And I, um, now, one thing that was funny about some of that, the guy sent me the other day, somebody was like, man, in Graven gonna make like five videos off this one presser. That was funny. That was funny. I appreciated that one. I appreciated that, but even with that, like, if, what's your real complaint? Like, think about it. What is people's real problem? Is people's real problem with me or is it with themselves? Cause think about it. If you feel like I'm gonna make five videos off of one press conference, and I think we made two, by the way. We only made two. So he's used right 20%, but he was wrong the other 80s. But anyway, hold on, is that the right math or was it 40%? No, it might be he was right 40% and wrong the other 60. Anyway, I feel like my math is all messed up. Anyway, with that, is there an issue with me was the issue with them and their preference? Because say for instance, if we did make five videos off of one presser, is there a problem? Is there, are you watching all five videos? And if there's such an issue, and we said this before, I just, I don't understand why people feel the need to torture themselves. If it's something that they don't like and something that's not their preference. If you feel like I'm gonna make five videos off of one presser, don't watch them. Don't watch them. If you feel like videos are too long, two options, you can watch them sped up or you don't have to watch them at all. If you feel like videos are too short, you get it? You don't have to watch. You don't have to subject yourself to that. If something's not for you, I don't understand why people feel like if something's not for them, why would they even entertain it? See, cause it goes both ways.  Get it? Why would you entertain them? It doesn't make any sense. If you feel like my videos suck, they're bad, they're this, they're that. If you just don't like them, you don't like me for whatever reason, I ain't got no problem with nobody. So again, that's weird. That's really weird. If somebody say, hey, man, I don't like that guy in grave. If it's, you don't like the style of videos, you don't like my voice, you don't like my face, okay, even though that's still kind of weird, but it ain't, everything ain't for everybody. And that's fine. I appreciate that. But why, if my style is not for you, then why are you continuing to talk about me? You see that? That's weird. That's really weird. Cause I always liken it to a TV show. I always do that, because that's probably the best comparison that I could use. If there's a TV show that I just, I don't like, well, initially, before I realized that I don't like it, I try to watch it. I might watch a couple of episodes, I might watch one or two episodes. And initially, I might be like, I don't know about this right now. Let me watch another episode just to confirm, just to make sure, just to be 1,000% sure that I either do, I'm gonna start liking or I don't like this show. Okay, cool. So I go and watch it and it's like, no, I don't like it. Let me talk about it for a little bit. Initially, I'll probably talk to my wife about it, so I don't like this show. Then after that, boom, it's done. I'm not gonna keep going back to her. Man, I really don't like that show. I don't like that show. No, I'm not gonna watch it. If I don't like it, I'm not gonna watch it. It's like, and it's the same thing with like a restaurant. With a restaurant like, it happened to me with Chipotle. Initially, with Chipotle, I don't even remember why, but I was like, Chipotle, Chipotle ain't nothing. I ain't really feeling Chipotle. So I didn't go back for a while. But then I forget what happened and I ended up going back. It's like, I tried out again or whatever, I tried Chipotle again.   This is good. It's very filling too.  And I was like, oh, yeah, yeah, Chipotle is actually really good. So, but my point is I tried it out. I tried it out and initially I didn't like it.   Cause maybe it was just a one time thing. Maybe they were off that day. Maybe I went there around like closing time and I just, man, I wasn't feeling, nope. Try it again. Oh, oh, yeah, I don't like this. This food, it's not for me. I don't like it. So what would I do? Stop going, stop going. And it's the same thing with the, if you don't, and this is not just with this channel. Obviously it's with anything, any channel that you watch, any show, whatever. If it's not for you, it's not for you. Complaining about it, it doesn't help anything. Doesn't help anything. In fact, it actually, actually it kind of does because that actually drives more people to go see this said channel that you said is so bad.  Hey, this guy is terrible. Hey, this guy is fake. Then some people who may not know about that guy, they're gonna be, oh, that girl, they're gonna be like, huh, who are they talking about? So they're gonna go check them out for themselves. And hey, it could be that cup of tea. It may not be that cup of tea, but at the same time, they're gonna get a cup. They're gonna get a sample of that said thing that you said is so bad. And if they agree with you, cool. If they don't agree with you, even cooler. But you are actually helping them out with your negativity. That negativity is turning into a positive because they coming through to go watch what you're talking about. So, see, it's just, that's why. So if you really don't like certain stuff, there is no need to even entertain it. There's no need to entertain it because it will be the same with, hey, if I'm, ah, man, I don't like that restaurant. That restaurant is nasty. The food was bad, da, da, da, da, da. That could actually make some, cause you know, people are weird. And we are weird with the way that we think, the way that we take things, the way that we understand things, the way that we break things down and whatnot in our minds, it can be really weird. Cause, and especially, it just reminds me of kids. Hey, don't do that. Don't do that. You better not touch that. Hey, you better not mess with that. That can actually make you want to do it that much more. So it's the same thing. It's the same thing. So again, please don't entertain nonsense. Don't entertain nonsense because it's just, it's not worth it at all. And again, I felt like I just had to do this video again, not even necessarily for me, but for everybody because we all got nonsense that we deal with all the time. In one wave shape, form, fashion, whatever, we all got nonsense that we deal with. But y'all know a lot of the nonsense that we deal with on here.  Like I saw, I saw one thing that said, man, Engraven is a fake Ravens fan and he collects money from Ravens fans, but he's not a real, and I'm like, what? Like if you, like listen to people what they be saying, man. And it's like, it don't make no sense, man. It don't make no sense. It does not make any kind of sense whatsoever, man. And, excuse me, but people, they will try to convince themselves of lies, of lies, they really will. I think one thing that people try to do, they try to turn a positive into a negative.  We're straight up about how we feel about the Ravens, about moves that they make, stuff that they don't make. We're straight up about that, but we do it respectfully.  No, we know none of that. But hey, some stuff we agree with, some stuff we don't. And hey, some people like that, some people don't. And some people agree with it, some people don't. And that's fine, that's fine. Because we all got the way that we view this football team, the Ravens. But where people, I think, where they try to really come up with their own areas and what they don't like is respect. Reason I say that is because when we speak of other teams, whether it's teams within a division, like Steelers, Browns, or Bengals, whether it's other teams in ASC, other teams in NFL, when we speak about other teams and we're not on here like, oh, they suck, oh, they're terrible, oh, they're this, they're that. If we actually talking about them, but we're doing it with respect. And we talking about them with the same respect that we speak about the Ravens and the team with. We're speaking about other teams as well. A lot of people don't like that.  And it's like, no, it's not fake, it's just respect. It's respect. In my opinion, I feel like you don't have to badmouth somebody just to get a point across, even if it's something that you don't agree with. You don't gotta be all nasty about it all, crazy disrespect for anything like, no, you don't gotta do all that. What's the point? What's the point? And I mean, again, everything ain't for everybody. Some people agree with that, some people don't and that's fine, but I'm gonna do things the way that I see fit for me. Like another thing too, that people, they don't like morals, morals. I have morals and I refuse, I will never let a check, any money, any opportunity, get in the way of my morals. I will never let any of that come before my morals, growth of the channel and any of that. And a lot of people, they don't like that. They don't like that. Team keeping clean, that's me. And that's not just for the channel. That's just me in general, in life. But team keeping clean is a family-friendly channel is for everybody, everybody's welcome, y'all know that. And that's where the Ravens fans, Lyons fans, like I had the other day, I had some guy comment and he was like, hey man, I've been watching this channel for years. And I'm a Lyons fan. I was like, hey, I appreciate it, man. Shout out to DeSean Elliott and Chris Boyd, by the way. But the channel's for everybody, and everybody is more than welcome to watch, subscribe, be a part of it, man, because for everybody. And, but we keep it clean. Again, it's family-friendly. So adults, if you're watching and the kids come in the room, you ain't gotta be like, all right, we gotta change it. Nope, no, no, they go watch, too. If the kids watching and the parents come in the room, you ain't gotta be like, oh, we gotta put headphones on and we gotta turn it down. No, no, everybody's more than welcome to watch. Everybody. And that's what I appreciate about it, that everybody comes through. Everybody, people of all ages, backgrounds, job type, everything, everybody comes through. And that's exactly what we wanted it to be. What we wanted it to be was sort of a safe space for everybody. Again, that's one of the biggest reasons for questions from subscribers because that created a safe space for people. They may have this question that they think is just wild that, oh man, if I put this up somewhere, people gonna rip me apart. No, okay, well, I'll ask a question then. I'll say it. I don't mind. Give everybody a chance to get their thoughts across on how they feel about different matters with the team and whatnot, and just to do it in fun. To do it in fun. But yeah, so people with morals, especially when it comes to respect, especially when it comes to not no cursing, they even respect it or they don't. And that's life. That's life. It is exactly what it is. I have had a lot over the years, man, a lot of opportunities where companies will reach out, whether it be the different betting companies and stuff. And you know, recently they've been going crazy with it. I don't believe in betting. And y'all know that, I said that plenty of times before, I don't believe in betting. But these companies will reach out and they be like, hey, we offer you this significant amount of money to advertise it on your channel. And this has been a lot. There's been some companies that reached out and I told them no, and then they turn around and reach out again. And the proposal looks nice. I'm like, whoa, okay, wow, that does look nice. There's a nice little chunk of change right there. I say no, no, because I'm not selling out for no check, man. And a sad part, I've seen people that I know that I've watched them grow in different aspects of YouTube and stuff. And I've seen people sell out for a check. I've seen it. And it's unfortunate when you do see it, but you just gotta wish them well, man. Gotta wish them well. Because I wouldn't advertise something on a channel that I didn't agree with and that I wouldn't even support myself. So, yeah, it's unfortunate to see that. But again, I'm not sacrificing my morals for a little extra bread. No, it's definitely not ever worth it. But not everybody likes that. Not everybody agrees with it. But hey, that's fine. In order to be in, so to I guess, this lane, this avenue, whatever, you got to know that you're not going to please everybody. You're not. And that's one of the bottom lines with this whole video. You're never gonna be able to please everybody. And the sooner you come to the realization that you can't and that you won't, the more at peace you'll be. The more at peace you'll be. And you also need to be willing to stand 10 toes down on what you believe in. Because if you don't, you're gonna drive yourself crazy.  I always say, man, hey, if again, you could tell people's vibe. You could tell people's vibe by how they talk, how they approach you, how they speak about stuff, how they comment on stuff. You could tell the vibe that they on. And don't be afraid to remove those people. They'll get upset, yeah, they gonna talk about you. Again, they do it, they do it to me all the time. But it's point, don't entertain them. Don't entertain them nonsense because it is not worth it. You will not benefit anything from it. So again, I don't need y'all sending me what this person said, that person said and whatever comments. Because I really don't care. I don't. I don't. I really don't. Seriously, I don't. Because it doesn't do anything for me, but even more importantly, it doesn't do anything for you. It doesn't make you feel better. And again, like I said before, I know it comes from a good place. I know it comes from a good place because I know y'all got my back. I know, and I appreciate that. But I wanna have your back too. And my way of having your back is by telling you to not even sweat that stuff. Don't entertain it, don't engage with it. Just ignore, block, move on. That's it. That's it. I love y'all. I appreciate y'all. And again, I always appreciate what y'all are trying to do because I get it. I understand it. I understand it, but y'all please try to understand from this side because it does, if you engage with it, it's not gonna make you feel any better. And then you go, hey, Ingrave, look at this. It's not gonna help anything. So don't even engage with it. Don't engage with it. Don't entertain it at all because it's senseless. It's senseless. Jaylen Ferguson and Tony Saragusa, just those unfortunate events that happened just really gave me a reminder for this because it's like, you just never know. You never know when your time is coming. You never know.  Why would you spend your time engaging and entertaining nonsense? For what? That's a waste of your time. It's a waste of your effort. It's the waste of your energy. It's a waste of space on your phone, taking screenshots. It's a waste of the energy that you use your fingers to type whatever message you're responding to. It's just a waste all around. It's a waste. It's a waste. So don't waste your time. I love you all.