Hey, folks, welcome back for another episode of Code Club. In recent episodes, I have been working to build a package in R that would allow us to do a bioinformatic analysis. The details of that aren't super important, but you can always go back and start at the beginning of the series if you're just jumping in right now. What's relevant for today's episode is at the end of the last episode, I tried building a object in R that I think had something like 25,000 rows and about 65,000 columns. And it just exhausted all of the memory that R would allocate to that object. And so that wasn't going to work. What I've been thinking about, though, is that that object has a bunch of zeros in it, so that the data is very sparse. And so I don't need to store it in that large of a configuration. And so there's a variety of different options that we have at our disposal. And so instead of kind of jumping into solving the problem, what I want to do is instead take a step back and think about the different options that we have and think about how those different approaches perform in terms of speed and perhaps memory utilization and things like that. And so in the next three episodes, I'm going to be looking at some of these more fundamental data structures, things like vectors, lists, and data frames. So these are all effectively one form another of a list, but we're going to start with a vector. And so a vector is a container, if you will, where every value in that container is of the same type. So you wouldn't have in that vector, say their name, their age, whether they were over six feet tall or their birth date, right? Those are four very different types of data we'd represent by four very different ways. But instead of vector would be, say, everybody's name. So if you had a class of 20 people, you'd have a vector with 20 values in it with everyone's name. Another vector might be their ages, right? Another vector might be the grade on the most recent quiz they took, things like that. The way we typically access that would be by giving the name of the object and then in square braces a number and that gets us the seat, right? So a built-in vector would be something like letters, as we see here in my RStudio session, and this gives us the 26 letters. And I could always do something like letters two to get B or I could do something sneaky like two colon five to get B through E, right? And so vectors are very versatile. The challenge with vectors comes, however, is when we're using these with really large data sets and creating a vector, it turns out, can actually be quite slow. And so again, in today's episode, what we're gonna do is focus on vectors and think about their performance and how we can use them to perhaps make them a little bit more performant. So in today's episode, we're gonna use a library or package called micro benchmark. Make sure you've got that installed. I'll also go ahead and load up my tidyverse package as well so that I have all those great data manipulation tools at my disposal. So for micro benchmark, there is a function called micro benchmark that then takes a list of functions, right? And then you run that and it will then run each of your functions 100 times and it will then return those timings, giving you some summary statistics of how long each function took on average over those 100 iterations. You can always increase it to a thousand. I'm not really interested in that much precision. I'm more interested in getting kind of a relative sense of how a variety of different ways of creating a vector as well as getting values out of a vector, how they perform. So the first approach that I'll use will be what I'm gonna call growing. So a common function that we use to build a vector is called the C function, which is short for combine. I believe so you can do like C three comma four to get a vector of two elements that's got values three and four, right? And so what we can do is we can use this to grow a vector. So we could say, let's assign this to the value X and then we could say that X is going to be X with say 10 combined onto the end of it, right? So now what we get is X. We get three, four and 10. Of course, we could have always done C three, four and 10 and gotten the same value out, right? But sometimes we don't know all of the values, right? And so what we might need to do is what we'll call grow the vector. And so I'm going to create a function where it will take X to be kind of like any upper value and what I wanna output is a vector that length where each value in the vector is the square of the position it's in. So if it's in position five, the value in position five should be 25, okay? And so I'm gonna take X and for now let's pretend that it's five, I'll go ahead and remove these to kind of clean up the space a little bit. And what we'll do will be a for loop. So I'll do four I in one colon five and define the body of that for loop with those curly braces. And I need a value or object that we'll call output and it's gonna be C output comma I squared. Now we need to define output because if I run this, it's gonna complain because object output not found. So I can define output to be of type numeric. So now when we run this, it works. And if we then run output, we get our first five values. Cool, so let's wrap this in a function. So I'm gonna call this vector grow C and again the function keyword and we'll give it X to be the upper bound or the length of the vector we wanna grow. And so we'll go ahead and tab this over to make it look nice. And then we'll ship out of the function, the output object and then we'll close with the curly brace there, right? And so we can do vector grow C on five and we get those values, right? Cool, I'm gonna go ahead and delete this for now. So that's one method of creating a vector, right? And again, it's a special kind of vector where the values are the square of the position they're in. I'm gonna take this and I'm gonna make another function that's very similar to that. And instead of C, I'm gonna go ahead and call this B or maybe I'll call it BR for bracket. And so what I'm gonna do instead of growing it with the C function would be to do output with the square braces and then put I equals I squared, okay? And so this numeric vector has no length, right? And so it's gonna strike many of you that have programming experiences weird that R will do this, that will allow you to get access to position five when that position doesn't even exist, right? So when we run this now and again do output, we again get those values. I'm realizing that I have one through five here. This should be one through X on the upper end, right? And so I need to go ahead and reload those functions. All right, and so again, we can test that these functions do what we think they should be doing by say taking vector grow C and let's give it 10 and we get those values. And if we do vector grow BR, we should get the same values, cool. So now we have two functions. We're going to go ahead now and feed that into micro benchmark. And I'm going to then give it vector grow C on one E to the four. So a big number, so it takes a bit of time and then vector grow BR on one E to the four. I could also do N equals one E to the four. So I don't have to keep, I'm going to make a number of functions. So I don't have to keep typing this and if I decide to change the N later, I can change the N up here on line 26 instead of with each function. So I'll go ahead and do that. All right, so again, we've got that and we'll go ahead and run the micro benchmark here. All right, so this is outputting in milliseconds we see and we have both of our functions here on the left side because my window is kind of squinched in a bit. Not everything fits on one span, right? So we've got kind of the last two columns of the data frame getting put down here. And so I typically focus on the median column and we see is that growing it with that C operator actually takes a hundred times longer than growing it with the bracket notation that we had here, right? So that's I think lesson number one, do not use this, do not grow a vector using the C function, okay? So hopefully I can convince you of that. Go ahead and remove some white space here just to kind of make our code a bit more compact. And also if you wanna get the code that I'm developing here, look down below in the show notes and you'll see a link to the GitHub repository for this project and I will be saving this. I'll go ahead and save it now into the Filotyper home directory. I'm gonna call this benchmarking. And so that will be there at the end of the episode. So cool, all right. So that's two ways to grow a vector and to create a vector again with the square of the values. So the next approach I'm gonna take is gonna be similar to this growing with the bracket but I'm gonna say pre-allocate and instead of giving numeric an empty value, I'm gonna give it the value x. And so if x is five and then I do numeric on five, that gives me a vector five units along with all zeros in it, okay? And then so the difference between vector grow br and vector grow pre-alloc is that here, on line 21 and line 13, on line 21, I'm specifying the length of the vector. So we'll go ahead and add this to our tests. See what we get. And it's not happy because I have to be sure to load the function, very good. So that ran and we see that allocating it actually, that length is even faster than using the bracket notation. So we see that we're getting a bit faster as we go through, but we're not done yet, okay? So there's another way to create a vector besides the C function and that is to use a colon. So if I did like one colon 10, I can get those 10 values and then if we then raise that to the second power, this is not exactly what I want. This is going from one to 10 to the squared, right? What I want actually is the vector, each value in the vector raised to the squared. So I need to put that vector in parentheses and now I get 10 values where each is the square, okay? I'm gonna call this approach a vector colon. So do function with X, all right? And so then we will do one colon X and we'll raise that to the second power and we'll go ahead and load this. I'm gonna kind of strip out some of this white space so it's not such a long script here. And then I will go ahead here and add this to my testing regimen. Wow, so that's even faster than what we had before. That's pretty nifty. And this is happening because the colon notation is a, it's an R construct, right? And R is basically expressing this under the hood in C which is optimized to be really fast anyway. This is a bit of a non sequitur, if you will, because we're not going to have a function that's as simple as raising a consistent series of numbers to a power, right? The functions that I'm using are gonna be a little bit more complicated. I'm using this operation as kind of a surrogate for something more complicated. Anyway, but it's useful to give us a sense of different ways to make vectors and how those vectors and those approaches perform when we embed them in other functions. There's another way to make a string of numbers, a vector of numbers, and that's the seek function, right? So you could do seek one colon 20 and you could do something like buy twos. And this will give you all the numbers from I guess one to 19 by twos, right? You could also do seek one to 20 by ones to get all those numbers. So again, let's go ahead and repeat this. And instead of vector colon, I'm gonna call it vector seek. And we'll replace this with seek one comma x, buy equals one. I think the buy equals one is the default. So that's probably not, so if you did seek one comma 20, yeah, the one is the default. So it's just there to kind of convince us that it's going by ones. So I'm gonna go ahead and add vector seek now to my pipeline here. So we see that the seek approach is slower than the colon approach, but it's still faster than pre-allocating. This output is getting a little bit cumbersome because I'm kind of generating a number of different functions here and I'm trying to have to eyeball how they compare to each other. So what I'd like to do instead of looking at this table is output it instead of using something from like dplyr where I can then sort the different expressions. And so if I do something like dot last value and pipe that to str, I then see that this is a data frame that's got two columns, the expression column and the time column. So what we could do is we could take this and we could pipe this to group by expr and then summarize and we'll summarize to get a median time as the median on time. So here we go. We have a, I think a little bit cleaner output. So I think that the time here has been changed to nanoseconds. So something like vector colon is at 19396, whereas back here it was 21, right? So that you multiply by 1000, you get 21,000. It's within a couple thousand. It's really close. And again, I'm mainly interested in relative difference between these different functions. One of the things that we've seen already is that growing our vector using the C function is slow, but pre-allocating the memory or the space needed for the vector is much faster, right? So what's happening under the hood in R is that R is doing something called copy on modify. And what that means is that whenever something gets modified, so if we had say X equals five and then I change X to be 10, it's creating or it's looking for a new spot in memory to store X. In other languages, X stays put in the memory and its value might change, right? And so because R is always looking for a new place to store an object, that can get slow, especially as things get quite large, right? And so you can imagine as we're growing a vector and it keeps getting longer and longer and longer, R has to keep looking and looking in my RAM for a new place to store this object. So I'm not totally sure why this version of the function performs so much better than growing it with the C function. I don't really know because we're saying obviously in both cases that output is a vector, but this is again, growing it one element per loop. And so I don't totally understand that, but what we do find is that when we allocate a complete chunk of memory for the output to be the correct size that that performs even better. Of course, when we're doing this with like one colon X or with the C function, R knows upfront that it needs to store this big chunk of memory, right? And it's perhaps even doing it in C. So it's not doing this copy on modify. So it basically creates the vector in C and then brings it back into R by both of these functions and seek is probably a bit slower than the colon because it's doing probably a little bit extra under the hood because it has this capacity to jump seats even though we're not using it in this case. So another bit of our lore out there is that for loops are evil and that you should avoid for loops at all cost. So I wanna repeat this, but instead of using a for loop I wanna use the S apply function. And so we'll do vector S apply and we'll do function X. And then here what we'll do is we'll do S apply and we'll go one colon X. So this is a little bit silly again because I just created the vector just kind of like I did up here, right? Anyway, I'm then gonna use what's called an anonymous function. So an anonymous function is a function without a name. It's anonymous, right? And so I can do that by using a backslash parentheses, a variable name, and then a closed parentheses. Maybe instead of X, I'll call that I to keep things simple. And then what I'll do is I to the second power, okay? And so this is a function that's going to take values of one through X and raise it to the second power and then create a vector as output. If we say X is five and then run this line, I get the expected output, right? So I'll go ahead and load that and maybe clean up my white space here. And then we're gonna take vector S apply and add that to this micro benchmarking series of functions. So we see actually that S apply is quite slow, which is really surprising to me. I'm not really sure why that is. I think it's perhaps because S apply is still running a for loop, although yeah, that's just really surprising that it's actually even slower than pre-allocate. Let me double check. Yeah, it's the same type of syntax. So maybe there's something going on with S apply that makes it just so much slower. Maybe something else I'll try will be an L apply instead of S apply. So S apply will take list output and force it into vector if it can. And so it's doing a little bit extra work, right? And so let's try it with L apply and I'll go ahead and add that as well down here to change that S to an L and nope, it didn't make any difference. So that's a bit of a red herring. So that's really surprising to me that this S apply and L apply are so much slower than an actual for loop when you've pre-allocated the space. So that's really significant. And so I think ultimately what we would do with a vector would be to grow a vector or create, it's not really growing a vector pre-allocated. I should change that from grow to pre-allocate because we're not growing it, right? We're pre-allocating the space and then filling it. So I'll go ahead and fix that name because that's a bit confusing. And so test that again. But anyway, I think when we think about converting our data into a more usable format that is more sparse that it's gonna be more likely that we know, say, how many camber values there are. And so we can pre-define the amount of space we need and then we can use a for loop to go back and fill that in. And we're not probably gonna have such a charmed life where we can use something like seek or colon to plug that in. One other thing that you will often hear when people talk about performance in R is that if you go through all these steps and your code is still too slow then you should use C++. So what we can do is we can use the RCPP package. There's also a CPP 11 package, both of which allow you to write C++ code in R. I'm a little bit more familiar with RCPP. And for this benchmarking, I'm gonna try this out to see if we can't make a C++ based function that we can then use in tide of our pipeline here. And so I'm gonna go ahead and create a new C++ file. And it has all of the great stuff that I need here already plugged in, which is fantastic. So I'm gonna kind of clean some of this up. And so I'm going to have, we've got this header space with using namespace RCPP. So I'm gonna call this vector RCPP. And it's going to take an int, an integer of value of X. And let's see, let's go ahead in here. It's been a while since I've done C++. So bear with me here. We're going to create an output, which is going to be a numeric vector. And output is going to be of length X, right? So we're gonna pre-define that. C++ code uses semicolons at the end, which you can kind of see here, right? And then we'll do for int I equals zero, I less than X, I plus plus. And so one thing I'm noticing right off the bat actually is that it's coming back to me that C++ is zero based. So the first slot in a vector in C++ is slot zero, whereas in R it's slot one. So that's a little bit different. So I'm gonna change what I'm incrementing over here to go from one up to an including the value of X, right? And then my output, I will then do I minus one equals I times I. So the circumflix, the thing over the six, which we use for power in R, does not work for power in C++. So that's a bit odd, right? And so then we will return output. And I'll go ahead and save this benchmarking CPP. Back in benchmarking CPP, I need to do library R CPP. And let's put in a space here. And then I need to compile it. And I can compile it doing source CPP, CPP. And if I run that line, it then compiles my C++ code. Hopefully it goes through without any issues that worked. And then again, my function name was vector R CPP. So I can add that to my testing rig here, give that a shot and see how the C++ code fairs compared to everything else. So what I find as perhaps expected was writing this function in C++ actually outperforms everything else, right? And so I don't know that it'll come to us writing our code for our package in C++. I think the downside of writing things in C++ is that it's perhaps harder to maintain because not as many people out there know C++ to contribute to the package, to kind of help us maintain it as we go forward. But at the same time, it's a lot more performant, right? So if we go from pre-allocating here with 632,000 divided by what we have here with a 17,000, you know, it's a 37, say 40-fold difference in how long it takes to calculate that vector of numbers. So that's pretty interesting. One other thing that often comes up is kind of the amount of effort it takes to calculate a vector, right? And so we've been doing this for 10,000 values in our vector and we've looked at different ways of generating a vector. Well, we could imagine doing the same type of thing, but doing it with fewer or more values in our vector, right? And so, you know, the question that is, how does growing a vector or filling a vector change based on the size of the vector? I think we would like to think that if we double the size of the vector, it might take twice as long on average to fill that vector. So I'm gonna go ahead and copy this down and start with grow C and I'm gonna divide all these values by 100 to give us, say, 100 values, right? And so to see how doing this analysis on 100 compares to 10,000 and to see how the different functions change in their performance. So what we see is again, our vector RCPP and vector colon are kind of the fastest of the bunch. And the vector colon with a smaller dataset performs better than our RCPP code. But again, as the dataset gets bigger, that we see that our RCPP code runs faster than the colon based code. Again, we're not gonna have data as nicely organized as we found with like say one colon N, something like that. And so it's really reassuring and edifying to see that RCPP code runs so much faster. I think the other thing that we might see is the difference between kind of growing it with that C operator, right? Up here, we, let's see what the difference is between these two values. And we see that the difference, so a hundred fold difference, we would expect to take 100 times longer to run, right? And what we actually find is that it's more than that. It's 10 times more than that, it's about 2000, right? So it's not quite, we talk about big O notation, it's not quite N squared. So it's not quite that you double the length of the vector and you quadruple how long it takes to fill it, but it's approaching that and that's not good, right? And so we can also kind of look at some of these. And so the other one that did pretty well was this vector pre-allocation and where's, yeah, here's the other one here. So let's compare those values. And so that's, again, a hundred fold difference results in 52 fold difference in how long it takes to perform. That's pretty good, I would say. We also see like the S supply is quite a bit, it's a bit slower, it's perhaps not a hundred fold quite. Let's see what we get here. Yeah, it's about 60, right? So I think what we're gonna find ultimately is that this RCPP code is just a lot more performant than things that are baked into R. We'll talk about that later, but there's gonna be trade-offs in whether or not we go down that road of using C++ code with our R package. So hopefully this was useful and interesting to think about how to grow a vector. I know there's a lot of kind of urban legends, if you will, out there about vectors in R and whether or not you should use for loops or not. I learned something here. I always thought that S supply was at least as good as a for loop. Maybe that would change under different situations, but I think the key is pre-allocating your vector. So this is generating a vector, right? Setting values in a vector. I wanna look at it from a different approach which is getting values out of a vector. There's a variety of ways that we have to get values out of a vector. I wanna see if those vary in how long it takes for them to run. So if I have a vector, I'll call X, that goes from one to say 100, right? And let's make this a little smaller. So we have a variety of ways that we can get values out of this vector. We could do like X5 to get the value of five out of it. We could keep the theme going with the squared values that we had before. If we want, yeah, so let's do that. So we get 25 for five, right? We could also do like X5, 10, so we should get 25 and 100, right? Sure enough, we get that, right? So there's a variety of different ways that we have to get these values out. So I'm gonna do vector, get one, and this will be a function that's gonna take in a vector of values and we'll then return X and I'm gonna pick five for lack of anything better, right? Cool. So I'm gonna repeat this where we're gonna get 10 values, okay? And so I'm gonna do individual values. So that's five, six, seven, eight, nine, 10. And I'll just kind of, let's go by fives here. So we'll do 10, 15, 20, 25, 30, 35, 40, 40. 45, 50, okay. So we're gonna return, we're not really gonna return, but this is gonna go through the steps of returning 10 values from this vector. So the question then was like, how does this compare to getting one value back, okay? And so I'm again gonna do benchmark on this or the microbenchmark and we'll give it these two functions, which was vector, get one and we'll give it, I'll call it initially long and then we'll do vector, get 10 with long. So I need to define long. So long is going to be one to one e to the fourth squared. I'm gonna go ahead and grab my code from up here where I was kind of making my own summary statistics. Oh, and I need to load long. So I need to load this function. So when I'm creating these test functions, I always forget to load them. We'll get that going. Okay, so that went pretty quickly. And so we see that getting one was faster than getting 10. It's not quite 10x, but there's probably other stuff going on in the functions that cause it to not quite scale linearly, right? Cool, all right. So this is kind of a silly way to do it. We would only output from this function the value of 50. So if I do vector, get 10 on long, I'm only gonna get 50 squared, which is gonna be 2,500. 2,500, right. So I would rather get a vector out, right? So let's go ahead and do vector, get 10. And I'm gonna call this C because I'm gonna combine these together in a vector. All right, so I got that. And so I'm gonna add vector, get C with long. So as we've already seen, creating a vector takes time, right? And so maybe what we'd rather do is have a vector of numbers that we can then index into X, right? And so I'm gonna go ahead and do vector, get index, function X. And then I'm gonna say index is gonna be five. I guess I need to find the function five, 10, 15, 20, 25, 30, 35, 40, 45, 50, okay? And then I'm gonna return X on index. All right, and I'll add a vector, get index to this. So that actually takes quite a bit of time. And one thing that occurs to me is that I don't know that this is kind of an apples to apples comparison any longer because I'm creating this vector. And theoretically, if I was using this in my own function or in my own package to kind of get a value out, I'd have other code that's generating index. So I think I need to copy this line to be in all of the functions, even though it's not used in these other functions, so that we have kind of this similar type of overhead in each of our functions. So I'll go ahead and reload these and rerun the benchmarking. And so what we find then is that the index actually then turns out to be quite a bit faster, that that creation of the vector takes most of the amount of time. And so returning one value is gonna be shorter than returning 10 values, which we saw earlier. So I'm gonna then try, again, what we did earlier, where we changed the length of the vector. And so I will create another vector that I'll call short. Probably knew I was gonna do that when I named one long, right? So I'll do that and let's go ahead and do this as one to 100. And again, all those values squared. And then I'm gonna come in here and add short as the argument to these. And we'll go ahead and run that. And that's quite fast. And again, what we find is that for the most part, there is no effect of the length of the vector on the performance, which is pretty cool. And again, what is happening when we get access to a vector is that R knows where a vector starts. And then it says, I want position say 55 or 50, right? And so it basically can jump directly to position 50 to get that value. Those of you that have been watching know that I went through this process of converting a string into a number. Some people call this hashing. We took it from base four notation for a DNA sequence into base 10, right? And so that is the advantage, right? Is that we can basically jump straight, straight to it. And so I think that's reassuring, right? And so growing a vector scales at least with the length of the expansion of the vector, whereas getting access to the vector doesn't vary. And so we might say growing a vector by pre-allocating the memory is on the time order of N, the number of elements in the vector, whereas getting access to a vector is on time order of one, that it's constant. It doesn't depend on the length of the vector. And we see that we should more than likely use the index-based approach, right? And again, this is using R's built-in vectorized approach. This is very much like why you should use one colon 10 rather than C one comma two comma blah, blah, blah out to 10, right? That the built-in vectorization of R is very powerful, very fast, because again, it's using C under the hood to make it so much more efficient, right? So again, I hope this is edifying and teaching you a little bit about the different tools that we have to build and get access to values and vectors. I know people who come from other programming languages often get really frustrated by R that there's so many ways to do the same thing, wherein other languages, there's one way to do it. Well, that gives us some flexibility. It can also give us some headaches. And so this will be really useful to be thinking about when we go forward with our own project. Vectors, again, are a consistent type of data across all values within that data structure. The seats, if you will, there's slots in that vector are all consecutive. They're all, you can think of them as being next to each other, if you will, in memory. An alternative that we'll talk about in the next episode is what's called a list. And a list is a much more relaxed vector. And so we'll talk about those and kind of go through the same type of benchmarking and then compare them back to what we got here with the vectors. So that you don't miss that episode, please make sure that you've subscribed to the channel and we'll see you next time for another episode of Code Club.


le have a bit more spare time. Yeah, we've probably had at least 100 people here from all over Ireland. There you go. OK, fascinating. Brilliant. Chris, thanks for your insights. And well done. It's the pinnacle of your bird-watching career, I'd imagine, so far at least. Absolutely. Great. All right, lovely stuff. Thanks, Chris. That's Chris Ingram there. He found and photographed a black-winged Pratt & Coal at Blanket Nook Wildlife Reserve in Newtown, Cunningham, on Friday. And as I mentioned, very rare on the island of Ireland to spot this bird. 1935 in Galway, I believe you mentioned, and also in 73, 74 in Antrim. And over 100 people have made their way from different parts of the island to go and see this bird in its unusual habitat by its own reckoning. OK, there you go.  We'll not leave you at wanton't in anything. Hi, Greg. Just in regard to the dog rule on beaches, we were walking on Kiddie Howe beached on Fannahe yesterday afternoon at about 3 p.m. and also during the week at around 4 p.m. Counted up to 11 dogs. Either running loose and someone leads in about seven on Wednesday. I don't know whose job it is to enforce it, but it has not been enforced on both days. That's the thing. Who's going to enforce it? And there's no public information out there such... Is there signage up on these beaches? I don't know. I haven't been to any. I can have a look at it a little later on. You know, I think people have to be made aware before we talk about slapping people's wrists, don't we? I think it's... We need proper signage to say, by the way, just to let you know that dogs are not allowed on this beach in this area between these times. I think that's the fairest we could do, especially with visitors who probably get a bit of a shock, don't they, when they can't take the dog onto the beach? They're probably more likely to adhere to signage, maybe, than locals in the know. Hi, Greg. Listening to your show, I would like to advise people at night, especially in bars tapping. I was caught myself saying tap didn't go through, tapped again, and I was charged twice. Lucky I had my bank up on my phone and alerted the bartender immediately. Be cautious, young, not so young. Yeah, indeed. That is something I'll be much more aware of going forward. Good morning. I was in Letterkenny on Saturday, miserable out. The staff in the stores were a ray of sunshine, could not be more helpful, much appreciated. Thank you, Kathleen. The importance of good customer services, well done to all in Letterkenny that engage with Kathleen. Hi, Greg. Power is off in town, in a town yesterday, and people had to leave the shop without their groceries because they couldn't pay in cash. Are we starting to maybe all realise that cash is in fact king? We talk about elderly people and their need for independence, but everything is online, Greg. For example, to get a bus to Letterkenny from Lyfford, we now have to book online. Same goes for even going to watch a football match. Older people struggle with this, so I feel for them in relation to self-service tills. Everyone talks about independence, but no training or patience is provided. No wonder elderly people are nervous to know a simple task that was once going to the shop. I think I've used... I'm just going to be completely honest. I think I've used a self-service till once, and I panicked and I had to get help. I don't know where you're supposed to put the shopping down. I hold on to the shopping, and then it says there's something that's not present. I don't find it really clear where I'm supposed to put the stuff down then. I really don't use them because I... Do you put the shopping on the left in the bag? And then do you put the bag on the right and then put the stuff into the bag? I don't know how it works. I simply don't, so I don't engage, and I'm too proud to ask anyone. And to be honest, though, it's probably a me problem because I only figured out how to use the coffee machines about a year or two years ago. I was afraid of coffee going everywhere, and now I'm a big boy. I can use one of those coffee machines, but the self-service tills, I get a fear of them. And I'm really pretty good on stuff like that there.  I'm your man, I'll wire it for you as well. But come to a self-service till, and I panic, and I disengage, and it starts beeping. An item not present. I'm like, well, there it is. It's in my hand. Oh, it's not present on the wee shelf. All right, it's pure panic stations. Kevin from Dunlowe, well done to a Donegal ladies team who kept up with the Dublin team, but as your man, as you can see, the highly resourced was brought to the fore. It's not often they play away from home, maybe because it's the fellas are always in croaker. Well, there'll be some retiring. We'll have to rely on the younger talent, like Rosheen Rogers, and there are any more McLaughlin's coming up. Nev is heading down under. That's according to Kevin there. Thank you for that. All right, okay, let us take a break. And we're going to be talking about a new book, Everything by Kathleen Chadd, it's a memoir. It's the story of a mother's survival, tragic heartbreaking and inspirational. We're going to be speaking to the author, Kathleen, after we take this break. It's going to be a tough conversation, but hope an important one and useful one. Stay where you are. Watch the show live now on YouTube, Facebook and at HighlandRadio.com. While you've all the magic moments or great scenes you've captured on your phone, sitting there or in the cloud when you can have them printed at McGee's Chemist. Using the McGee's app or one of the in-store kiosks, you can upload your photos from your phone, Google Photos, Facebook or Instagram and have them printed instantly within an hour or in by 10 and ready by five. See McGee's.ie for more details. Hold your memories in your hand with McGee's Chemist, letter Kenny. Pick up the perfect dinner guest at M&S with 20% off our classics wine range. Maybe a crisp, elegant Pino Grigio or sparkling Prosecco or perhaps a sumptuous Chianti. With 33 wines in the range, there's a classic wine for every occasion and you'll only get them with 20% off at your local M&S. Terms and conditions apply, please drink responsibly. New this week at home store and more. All school bags are all half price, but better hurry because when all the half price school bags are gone, they're gone. Also, all indoor clothes errors and all outdoor cushions are still all half price. But when all the half price indoor clothes errors and all the half price outdoor cushions are gone, they're definitely gone. Drop by your local home store and more or visit us online at homestoreandmore.ie. New store now open in Prescotti Center, Black Rock Dublin. Home store and more, a happy home. All men's wedding suits packages are now 20% off. Just book your wedding suits before August 31st and get a whopping 20% off. Don't stand still. Evolve. Letty Kenny Retail Park. Terms and conditions apply. Don't miss an incredible night of country music with Derrick Ryan at the Highlands Hotel Glanties on Friday, July 28th. Tickets are 20 Euro and available from ticketsstop.ie or by phoning the Highlands Hotel Reception. That's Derrick Ryan at the Highlands Hotel Glanties Friday, July 28th. On this week's Monday Focus, we're joined by Kathleen Chadder who wrote a book about her life and the murder of her children by her then husband, Sanjeev. Author of everything, Kathleen Chadder and Memoir. Kathleen, thank you for joining us this morning. It's lovely to see you. Lovely to have you on the programme. Thank you, Greg, and good morning. And a happy... Thank you for having me indeed. Your book in front of me here with a beautiful picture on the front. Tell us about your children. My boys. Yeah, they're my boys. So what is the purpose for writing this book, Kathleen? I suppose there's a few things. It's probably been there for a while. I do a lot of talking. Greg, I'm a talker. And I talk on various things, you know, in relation to both grief and the justice system here in Ireland, and I suppose in lots of ways, every time I talk, every time I do an interview, there's always a little bit extra, a little bit of something. And in a way, what I wanted to do was just sort of... Because I've been asked, why do you talk? Why do you talk out? Why do you advocate? So it was a little bit of that, just to show the background of me. It is also... You know, it's very much about Owen and Rory and about, you know, their mark on this world and the mark that they left behind them, which is important to share as well. And I also wanted something that was tangible, that was, you know, very... I suppose it's a physical piece of work, if you like, for my nieces and nephews and my family, my extended family. You know, they were all very, very young when this happened and they've grown up with memories. And some of those memories are not even true memories for them, but the memories that we've instilled in them, if you like. And so it's something as they grow older and, you know, they meet sort of friends and significant others, et cetera, that they can say, there you go, that's what it is about. That's what it's all about. That's my anti-Cathleen, you know. So it was kind of multi-faceted, really. And there's a lot in the book, but at the same time, it's not huge. It covers everything, but it's incredibly accessible. Was that by design? Yeah, this wasn't a book that you were going to take, you know, that I wanted people to have to get bored with, basically, or that it was going to take, you know, a week or two weeks to read. This was something, you know, there's only so much of me that people want to know about, if you like, or that would need to know. So it was important that it was... I remember one of the meetings with the editor, with Liam, and saying, you know, at the final draft, if you like, we could put so much more into it. I could double the size of it, of course I could. But does it add anything to the book? Is it needed? Is it necessary? And I kind of felt no. So it was important to kind of have it something that people will read. And so often I hear they've read it in one sitting, or maybe over two nights. And that, to me, is what I wanted it to be. This wasn't something that needed to go on and on. It's not a self-help book, although I'm hoping that there's nuggets within it where people will pick up and go, yeah, actually, oh, yeah, that makes sense now, maybe that would help me. So, you know, for all of those reasons, it was designed in a way, not consciously, to begin with. But I think as it evolved and as I saw that first draft, I kind of felt, no, there's a really not enough lot that's going to add to the book, if you like, that's necessary to add to it. Yeah, I get you. And I suppose you put it out there and it's up to the reader to take from it what they will. That's all you can do, isn't it? And you hope that, as you say, there's just a layer and layer of tragedy in this story, Kathleen, ultimately, you're robbed of your life with your boys. That is it. But what leading up to it, that July in 2013, it's unimaginable what you had to do and how you've survived it, it's astonishing. And I presume the strength comes from your boys. It does, it does. And I've always said I come from a very grounded background and that definitely helped. And I've got very practical parents, very practical women in my life, I suppose. And that's me, I am OK. If there's something that's happened, I can't change it. I can't bring Owen and Rory back. No matter how much I've prayed and willed it and wanted it and wished for it and imagined it, that can't happen. So what now? And I was the same, that's me, if you like, that's how I am. It was the same when I found out that Sanchez had embezzled the money. It was like, OK, fix it, what do we do now? The hardest part sometimes is actually realizing that you can't fix it. I can't fix what happened. I can't and accept in that.  But actually accepting that that's real, it takes a lot of time. And for me, a lot of time with my psychologist is working through that, you know. You met Sanjeev in whilst working as a nurse in Saudi Arabia. He was born in Northern Ireland. You were going to move to London, but then settled in Carlow. Was there anything about like, can you describe and you do in the book, the marriage, because I'm sure you've reflected on it and saying, well, was there signs that I've done something? But what was married life like? Was there anything that could have even suggested the horror that was to come? No, not the horror of what was to come. Absolutely not. I look back on my marriage now, I suppose, quite differently. And I have to be careful not to to lose the good parts of it, because there were good parts and it's important for me to remember that. Because we were, you know, on the whole, we were a happy family. But there were pockets, I suppose, in there that that probably I didn't. Maybe I didn't want to see in regards to to Sanjeev. You know, when I was pregnant, he he we didn't plan either of the boys. As such, I always say, well, if you're, you know, if you're not planning it, then, you know, take a good book. But anyway, with the boys, and he was quite upset when both of them, when I found out I was pregnant in both of them. And yet I would never have doubted his love for the boys when they were when they arrived, you know, he was a very hands on dad. He was very involved in their lives. So it's a real contradiction, if you like, in regards to him. He was somebody that I would have never, ever seen as aggressive ever in any way. And and yet I look back on it now. And I think, well, there was a passive aggressive side to maybe that that I didn't and I didn't see it at the time. And that that's the problem with with any kind of sort of force of control or as I see it now.  Because you're looking back with very different with a very different view, if you like, after what he's done. But the person that he was when I first met him through the relationship, through marriage, through parenthood was so far from from the person that he has has become, if you like, or did become on that night. And it was his intention because it became clear in a suicide note that it was to kill you and the boy. Yeah. I mean, is there any explanation as to what he's mo. Why? Yes and no, to be honest with you, he had so he'd been found out of that he'd embezzled money from our local community centre about 10 days beforehand. And and that was now public, if you like. So I think it was maybe the first time something he might have done was suddenly in in the public eye. And he knew what this was going to mean. This is my family, my community, where I grew up. And and he had done this, this awful, awful thing. But he. Sorry, Kathleen, you've muted there. I beg your pardon, not no problem. You were about to say he was the reason, if you like, a twisted logic. And that's the only the only thing that I can ever come up with is. And I suppose it's shame, you know, and it's so it's such an inadequate reason, if you like, but it that's genuinely the only thing that I can come up with is suddenly he was he was filled with shame for what he had done. And he didn't want the boys to see the real him, if you like, that he didn't want to because they did have him on a pedestal. They adored him, you know, and suddenly he was going to be coming down off that pedestal. And what has his explanation been through his actions since? Were you ever able to find that out? Do you want to know? No, not really. I did in the beginning. I absolutely did. So I agreed to accept letters from him and he wrote me three letters. I think it was and there was nothing. There was no reason, no explanation. There wasn't. I wouldn't have even said there was really an apology or a remorse in those letters. So that was the only the only sort of direct contact were those three letters. And I asked to stop after the third because I just couldn't. I just wasn't. I couldn't handle it. It was it was too much. So there hasn't ever been. He's never given a reason. And I suppose at this point. There's no reason that would ever be enough or good enough. So therefore, I think what would would do to me right now is just completely and utterly wind me up if I felt that he was trying to justify what he did on some level. You're if you should never see the light of day. Oh, no, no, no, no. And I, you know, that's one of the things that I fight for is, is, you know, we've had the increase of application for parole from seven years to 12 years, which is great. You know, it's I know that at 12 years and that's two years away still. I know he won't get parole at 12 years. He probably won't get it at 16, 18, maybe at 20 years, 22 years. But, you know, there's every possibility that he will go out into an open prison. And I'm sorry, if he's not behind a locked door, then he's not serving his sentence. And I, you know, I don't believe. And I'm, you know, I'd be quite liberal in my thoughts, generally speaking. But when it comes to this, I don't believe that he should ever see the light of day. Or could you ever feel safe because we don't know his state of mind and he has expressed his expressed his intention to kill you, too. When you say everything in the book, as horrific this person is and what he did, he was presumed someone you loved at that time and a marriage and your beautiful boys. Is that everything? Is that the everything you reference? That is, that is everything. And, you know, it's because I had my everything.  I, yes, he was a stay-at-home dad. I was the one working, but I had a good job. I enjoyed the job. We were lucky enough to be able to afford to live on one salary, as I thought. I was luckier than many wives of gamblers because that I now know is what his addiction was. You know, our mortgages paid, bills were up to date.  They were incredibly lucky that in that way, I was lucky it allowed me to do my job with no kind of concern about getting home to crush your school or sickness or any of that. That was all managed.  We had a beautiful home. We were living in my community, if you like, where I'd grown up. The boys were going to school where I'd gone to school. So, you know, that was and it was everything. And, and everything was taken. You know, and I never really there. I mean, like, I know whatever about the pressure of people finding out about the embezzlement of 56,000, 56,000 year.  You'd have worked through it in a year or two years and the shame would have gone. And you're beautiful still with you two boys. I reference there. Yeah. Yeah. And that's the thing. We could have we could have gotten through this.  My my biggest concern. And this is this really annoys me about myself almost. Oh, you know, I don't beat myself up over it. But, you know, my concern was for him. I'm worried that he was going to do something. I worried about his state of mind. I worried that, you know, all that night, I kept saying he'll be OK. The boys, he's got the boys with them. And I really get that. I think that is such a natural response because you would never imagine a parent, especially adulting parent, as you described, and would ever whatever about harm to themselves, you would never imagine they would ever do harm to these two young, beautiful young boys. And and they were missing for 24 hours. And it was he that told you. I mean, yeah, it's about the layers of this tragedy. It's just really. Yeah. And it was I don't even know when he was telling me that that those that were on the scene of the crash realise the boys were were in the boot of the car at the time. And he he had to crash the car. Obviously, people came to help and assist. And he asked for somebody's phone and phone me. He would have known my number obviously up by heart. And so he phoned me.  He told me that there had been a crash. And my reaction was, are you OK? Are the boys OK?  And that's even, you know, there's a cruelness about that, if you like. Now, I appreciate that that wasn't necessarily in his mind at the time. He didn't care, I suppose, in my head. He didn't care about me at that point in time. But there was there was a coldness and, you know, and I remember sitting waiting, because obviously the detective took the phone from me because I can pretty much collapsed at that point. And but I come around and I was sitting there waiting for the detective to come in and tell me that, no, absolutely not that they were fine. They were going to hospital, that they'd be OK. And I was just going to have to get to wherever they were. But at that, you know, I still and it's still something that a very strong memory of that detective having to walk back in the door because he'd gone out to take the calls and to kind of speak to whoever he needed to speak to. But as he walked back in the door and literally, you know, he knew as he walked back in the door that that my life was over as I knew it. So I mean, just encapsulating life is tough. And we all have to go through things and bereavement, but your share of that is just far in an excess than any person should ever have to bear. And it's astonishing the way you could speak about it in the whole path. Do you hope maybe people read this book? They might see red flags, not that would ever leave to lead to such a horrendous outcome as this, but maybe save them some grief or injury in their lives. And that's it. It's question, you know, just question. If there's if there's something that you feel is is not right, just question and share, you know, that's the other thing. I'm I'm as I said at the beginning, I'm a talker, so I talk things out and shutting me up is the problem for a lot of the time. And but, you know, it is about share.  And that might be enough, you know, and it's hard because you're able to work through this. Exactly. And I mean, in a way, you're able to look at this retrospectively in the moment, things might not align like you can see looking backwards. But people are in different situations. And like, it's it's every turn in like, you know, the natural instinct would be to rid yourself of his surname, but it's your beautiful boy surname. So you have to make a decision and carry that with you in their memory.  A lot of people worried or wondered about that in the very beginning. And, you know, I absolutely you're right. Oh, and Rory were born as Chadda, you know, and I can't change that. I don't I don't want to change that. They were proud of that themselves, own in particular of the Indian heritage. And he loved the mix, if you like, of the two, you know, the Irishness of him and the Indianness. So, you know, that's that I can't and I don't want to forget that. I don't want to wipe that out. As I often say, I don't want to get over losing on and Rory.  And it is up to me, if I can, to make something of that, you know, and I'm very proud of the fact that the photograph that's on the front of the book is one that a lot of people recognise. You know, they may not remember why or they may not remember boys' names, but they recognise and they'll smile. Yeah. People smile when they see that beautiful happy. And it's the brother connection stuff is there as well. I think it's the fact that, you know, it's a beautiful picture and I hope with everything that you've gone through and I genuinely hope and I hope you never have to concern yourself with him being in an open prison or free because you've had to endure so much. You should never, ever have that as the final insult and in a way, then further empowering someone that should never have freedom or liberty again. And you should never be empowered to have that over you because you were able to choose not to take the letters and you should be able to choose or have a huge influence in never having to worry about if he'll ever follow through and he's threat to you, which is exactly what he wrote down. And I think, as I say, I the book is very important, but I also it's not a huge book. It's very accessible, as you say, and people will hopefully get something from it and also at the very least be able to remember your beautiful sons with you in that because that's really important, isn't it that they're never, ever forgotten and the impact their short lives had on someone like yourself. How do you cope, Kathleen? I was supposed to begin with. I had a really good psychologist now and that and I do credit him in those early days. I had a friend who got me sort of seeing somebody and I've got a really good family and and talking. I don't bottle things up. I mean, I describe grief as something physical within my body. And if I don't keep talking it out, then it will take hold. And I'll ask for help. If I, you know, when things go, go, pear shaped for me and I'm not in a good place. And I know at this stage, you know, it's very important to me having had all of the control taken away from me. And it's important for me to be in control of my life. And so it's important that I can can reach for help and ask for help and when I need it. And I'm pretty good at doing that at this stage. So that's a lot of it. And, you know, good friends, friends and family don't underestimate what they can do for you and they they keep you going when the chips are down. OK, I'm delighted to have been part of helping to talk about and remember your your sons again today as well, which is important. And I really appreciate you speaking to us. Thank you. OK, thank you so very much indeed. Good bless. Good bless. Bye bye. That is Kathleen Chada there. A memoir. Her book is called Everything. Kathleen Chada, a memoir. And there's for those of you who are watching, there are her beautiful children pictured on the front of that book. It is available from Umbrella Publishing. And as I say, you know, maybe. Kathleen's story as with the most horrendous of all outcomes, there might be information or advice within it that might benefit people even in not such the most extreme and horrendous of situations, if that makes sense. OK. I'll get out for further details as to where people can get that book. Quite a few inquiries coming in looking forward. Don't miss the ultimate Lidl Saturday summer clearance sale. Comfy Hanging Gardens share and three burner gas barbecue were two hundred and forty nine ninety nine now one hundred and seventy nine ninety nine each. Stay warm with an outdoor gas bar pit was two hundred and seventy nine ninety nine now one hundred and ninety nine ninety nine. What stocks last? Go on. Shop without compromise. Go full Lidl today. Enhance your skills with SIFTECH's part funded training programs. At SIFTECH, we provide courses including first aid, roadworks, people moving and handling, confined spaces, electrophusion and machinery training for Ireland and UK sites. Also online programs such as water hygiene, construction supervisors, safety reps and much more. If you have a group for training, SIFTECH will go to you. Contact SIFTECH today at SIFTECH.ie and take the first step towards upskilling and safety compliance. A public interest message from Donegal County Council.  Local authorities are updating the electoral register and it's your responsibility to ensure that your details are current and correct. Even if you're already registered to vote, now is the time to check and either confirm or update your details by providing your PPSN, ear code and date of birth to have your say on shaping Ireland's future. You must be on the electoral register. Checking is easy. Simply go to checktheregister.ie, the easy way to secure your say. The new Volkswagen ID Buzz, fully electric, fully connected, full of new ideas, an icon of a new era. The all electric ID Buzz combines comfort, sustainable mobility and fun wherever you take it. Available now with 0% PCP finance from just two five nine per month for July 2023 registration only. Book a test drive today with Connelly's Volkswagen Letter Kenny or see Connelly's Dot IE terms and conditions apply. Finance provided by way of higher purchase agreement from Volkswagen Financial Services Ireland and a subject to land and criteria. Volkswagen Financial Services Ireland Limited is regulated by the Central Bank of Ireland. Visit connelly's Dot IE for further information. Now, we have spoke on this programme before about a documentary still a Michael J Foxx movie, which has received seven Emmy Award nominations, including one for our next guest, our own Michael Hart from Letter Kenny. Good morning and congratulations, Michael. Well done to you. Hey, Greg, how's it going? Good, good. What was it like working on this documentary? It was it was something else. I have to say we went to Los Angeles to work on it. Me and my family came up with me as well. And we got to hang out with Michael J Foxx and tell his story. So it was as good as it could be. And then, you know, he's just an amazing character to work with. And the film, I think, is a testament to who he is as a person. As much as the Emmy nominations are really nice, actually, the journey was was was more important to us than the result in the end. Yeah. And with that comes great responsibility, Michael, because you're telling a very important personal story. And, you know, you have all of the source material, but you have to put it to do justice to the subject matter, so to speak. So not a role I would likely take on. No, you know what? It's it's yeah, it's true that it's it's my job to do that. And I've worked on a lot of things over the last 15 years. But this is the one I was most nervous about, and I kind of grew up watching a lot of his and a lot of his movies and stuff. And so he was a he was a bit of an idol for me growing up. And I remember I used to rent back to the future from I think it was midnight out in better kind of years ago when I grew up. And I used to get in trouble. I used to get in real trouble for leaving the videos back late. And so that was my that was my childhood. So then to be in a situation where I had to watch those films again or documentary was there's a lot of fun, but you're right. It was so much responsibility and the truth is that I don't think he could ever do his story justice. We get as far as we can get.  Luckily, we kind of did the best we did. But we had great support to Apple Brilliant. And the director, David Stuggenheim, deserves a huge money. Credit is incredible. Documentary and one of the best that's ever been in America.  So if it had failed, there would have been finger pointing left, right center, right, right. Yeah, and I suppose marrying in footage with Michael J. Fox and the archive as well. Again, it's another layer of complexity. I'd imagine it was. And, you know, we hadn't really seen it before. We we looked at a couple of different movies in the same vein. But we always knew when we were making this from the start, and Davis very much, as I said, the director was always, we have to try something different to get this right.  And we had to impose ourselves on it. So when we figured out, as they call the grammar of the film and how we were going to do it, that to me was more scary than actual working with Michael, because we were trying something that nobody really done before to the extent we did it. And so that failed. That's on me. That is definitely on me. It's a storytelling device and it's on Davis as well. And we went to Sundance, though, that and I remember the night before we premiered at Sundance, where I'm sitting in the movie theater with Michael J. Fox on Davis thinking, I'm not sure if you've seen it, but it's a very funny film. There's a lot of humor in it. And the good thing about doing films with humor is that it's really easy to gauge the audience because they'll just start to laugh. And if you don't get that first laugh, you're out. And so I remember in Sundance, the first minute is there's a joke in the first two minutes. And I said to Davis, we don't get this laugh for day and night. And when the joke happened, the place erupted with laughter. And so we thought, OK, let's just pay it off. Well, Michael, congratulations on your nomination. I would love, I'd love an opportunity to have a longer chat with you in the future, if that's OK. But thank you so much. We just wanted to recognize the remarkable achievement. Thank you so much, Michael Hart there from Letter Kenny. Now, some sad news to finish with. The death has taken place this morning at his home in Burnford of Danny Sharkey. As you would know, a former presenter here at Highland Radio. And many of you would have listened to his weekend shows here on the station. He was pre-deceased by his wife, Moira, and daughter, Dr. Moira. Thoughts and prayers are with his sons, Patrick, John, Donal and Wider Family Circle. Funeral arrangements are to be confirmed. We'll be back with you tomorrow morning at nine.


Hey psych-to-goers, do you ever wonder if you look attractive to others? Those with low self-esteem may believe they're not as good-looking as they appear when really they're forgetting the qualities that make them great. You may just have forgotten that you look more appealing to others than you think. Here are six signs you indeed look better than you think. One, you have a bright and uplifting personality. Who doesn't love a good-hearted person? Especially when they have a bright personality that radiates with kindness. Are you someone who is often uplifting and sweet towards others? If so, others are sure to notice this attractive quality of yours. When people are in a good mood and share the happiness with others, they appear as their best selves. What's more attractive? Someone when they're grumpy or someone when they're happy. Two, you have good hygiene and grooming. Want to look your best? Practice good hygiene and take care of yourself. A daily shower and a nice haircut can really make the difference when appearing attractive to others. Maybe you're sidetracked on some of the small flaws that you forgot how nice you appear towards others. Simply because you maintain good grooming. So while you may think it goes unnoticed, that new haircut of yours makes you stand out even more than before. In a good way, that is. Three, you're true to yourself.  Those who are confident in who they are and know what they want can be viewed as desirable towards others. Why? Because everyone wants to be confident and true to themselves. So when we see another who radiates their confidence, we're instantly drawn to them. So as long as you're not cocky, there's a difference between being arrogant and confident. Four, you stay true to your style. Speaking of confidence, are you true to your style? Maybe you're the type who wears whatever they want, when they want, and you're not afraid to wear something different. If so, most people are sure to appreciate your taste in style. Why? Because it says something about you. Who you are. This means those who are similar to you or favor your taste in fashion will likely gravitate towards you and they're bound to think you look good. You should too. Five, you give your opinion. Hmm, I'm seeing a theme here.  Are you the type who doesn't shy away from expressing your thoughts on a subject? Sharing one's unique perspective openly can be a great quality to have. This also goes back to confidence, but it also can allow you to stand out, hopefully in a good way. Because you're not afraid to share a viewpoint or idea that others may not have thought of, people may admire your interesting perspective or ideas. Maybe they find your opinion is unique and agree with you. If so, they may just find they're grateful you spoke up about it. And in turn, they find you attractive. Six, you notice people staring at you or raising their eyebrow. Have you ever caught someone staring at you or maybe they've raised their eyebrows in surprise at you?  But it could be possible. They just think you're really good looking. This can be a sign that you look better than you think. Body language tip. People will often raise their eyebrows in reaction to spotting a person they find attractive. This isn't the case with everyone, but it does happen. This is often a subconscious response to being taken aback by a good looking person. If you catch someone staring at you or even raising their eyebrows, ask yourself, are they smiling, blushing? Are they really looking at your messy hair or that broccoli stuck in your teeth? Or are they looking at those beautiful eyes of yours? Give yourself some credit. You're better looking than you think. So, do you relate to any of these signs? Have you found others staring at you with a smile? When's the last time you were caught with broccoli in your teeth? Let us know in the comments down below. We hope you enjoyed this video. If you did, don't forget to click the like button and share it with a friend. Subscribe to Psych2Go and hit the notification bell icon for more content like this. As always, thanks for watching.


All right, we've got somebody on the phone, 917 aviacode. If you want to ask a question, I'm going to unmute you. Hi, who's this? Hi, this is Andrew. Hey, Andrew. Ask away. Hey, you're on. So I wanted to get your take on what a rationally egoistic approach to empathy in this situation is. Personally, I've gone from religious altruism to objectivism. And that transition in philosophy has required me to substantially rework my empathy response. I really had a long struggle with kind of feeling bad for other people's problems that weren't my fault. Now we have this situation with corona. And these issues kind of garner my attention for obvious reasons. And somebody on Twitter said something about Trump, of how he has resentment towards people suffering, like he sees it as weakness per se. And I agree with that observation. I think he is desensitized from his humanity. And I think that trait is shown in a lot of alt-right type people. There are actual people in this situation, health care workers, for example, who I think it's good to identify with their struggle not being able to see their kids for two weeks and that kind of thing. It brings you in touch with your humanity. On the other side is I'm seeing a lot of these calls for kindness, kind of limitless kindness and compassion. And maybe it's because I see this from the former religious altruism that I read too much into it. But some of it, I think, is guilt-tripping. And this kind of attempt to limitlessly drain the positive energy of somebody for something that's not their fault. So I wanted to get your take on what you think is kind of a rational approach where you're still in touch with their humanity. But if you're being moral under objectivism, you can't exist in this permanent state of sadness because you've got to survive and you want to be happy. So I just wanted to get your take on that. No, I think you've got it. I think you're absolutely right. So I think it's completely legitimate to feel empathy towards somebody who's suffering of no fault of their own, whether it's just somebody who got the corona flu and is now in a hospital bed and life is at stake. And that's a legitimate reason to be upset or saddened because there are a lot of people like that. And they might be people you know, they might not be people they might be people you don't know, but partially you don't know because there's so many of them right now. And it's sad that people are going through this. Suddenly, the health care professionals that are putting their effort on the line here and really exerting themselves and exhibiting real values and real, you know, real pro-human life values of working hard to and being productive and saving somebody's life and values that we want them to have because our lives might one day be in their hands. So, you know, we certainly want to, it should sympathize with their struggle. But there has to be a limit to that, right? It's them, us. Empathy doesn't mean you are them. It means you understand their plight. You understand their suffering. And I think it's legitimate to understand, to feel, but you can't let your feelings overwhelm you in any situation, right? You're not dominated by your feelings. So you have to recognize that people are suffering and that is sad and feel that. And yet still be able to use your mind and focus your attention and focus your mind on the things you need to do to improve your life, to survive in this mess and to guide your life towards a better outcome. So, you know, I think being human means, part of being human is to recognize suffering that is not somebody's fault and the difficulties they're going through and to appreciate that. And at the same time, be able to fully orient oneself towards one's own life and towards one's own success and make sure that the one doesn't need to feel with the other. And, you know, feel enough and be aware enough of what's going on in the world to help you deal with what you have to deal with in the world and to make it possible for you to feel a part of the world, right? To feel part of what is going on in the world. So it's difficult. It's very easy in times like this and I feel under myself because I, unfortunately, I read the news a lot, right? And I don't watch television news, so that's a good thing. That keeps me sane, I think. But I read a lot and it's depressing. And when you watch the market do what the market does and when you think your livelihood is dependent on this crap and you think that, like David was before, you think your livelihood is dependent on decisions made at City Hall in Austin or decisions made in City Hall in Chicago, one of the most corrupt places in the planet, right? And yet they are determining your business's fate. Everything, all the blood, sweat and tears and money and capital that you have put into it is now completely at the hands of some bureaucrat. So it's very difficult to stay positive, engaged and focused on success in life when there are people suffering all around you and to some extent not for their own fault but because of bad government, bad agency. And to stay sane through all of this, so I find it difficult and I think a lot of people find it difficult. What we need today, what I call the new intellectual would be any man or woman who is willing to think. Meaning any man or woman who knows that man's life must be guided by reason, by the intellect, not by feelings, wishes, whims or mystic revelations. Any man or woman who values his life and who does not want to give in to today's cult of the stare, cynicism and impotence and does not intend to give up the world to the dark ages and to the role of the collectivist broad. Using the super chat and I noticed yesterday when I appealed for support for the show, many of you stepped forward and actually supported the show for the first time. So I'll do it again. Maybe we'll get some more today. If you like what you're hearing, if you appreciate what I'm doing, then I appreciate your support. Those of you who don't yet support the show, please take this opportunity, go to uranbrookshow.com slash support or go to subscribestar.com uranbrookshow and make a kind of a monthly contribution to keep this going. I'm not sure when the next.


Hey, hey, I'll do me be smart. Just no team points, right? I Don't I can't get any either we need them all. All right Hey smart. We'll do a note. I know I said me too.  I don't care I know go to the table. I like to just yell