Welcome to this edition of Vantage Point. I am pleased to have my co-worker here, Karen Zeal. She is the Minister of Faith Formation for the Connecticut Conference and the first question I wanted to ask you Karen is what is this thing called faith formation? Faith formation Kent is quite simply forming people in faith and everything we do in our lives, everything the church does teaches. So all of our experiences, our relationships, those opportunities to tell our stories and hear the stories of others, all of that forms our faith if we think about how is God present in those moments. So Karen, we've got an event called Super Saturday coming up on March 1st in Ludlow, Massachusetts and not everybody knows what Super Saturday actually is. So what is this thing called Super Saturday? Super Saturday Kent is a collaborative event between the Connecticut and Massachusetts conferences with a keynote speaker, with over 45 workshops, with a marketplace, a bookstore and more. It's an opportunity for church leaders and members to come together into network to discover best practices and new strategies for the many ministries that they lead in the life of a local church. Sounds like a really good event for us to go to. Why would I want to wake up in my bed on a Saturday morning, get in my car with others from my church and drive to Ludlow, Massachusetts? The opportunity to learn from people who are engaged in God's mission and ministry and the life of the local church who are energized and eager to share what they've discovered about effective ways to do that in the 21st century church is to me a real draw and to many of the people that I serve who are looking for resources, not only print resources, but people resources to share what they've discovered in effecting change in the life of their church and their communities. Sounds great. And the theme I believe is risking vision which for me intrigues me enough to want to go to be a part of this day. So the keynote speaker for this event is Diana Butler Bass. What can you tell me about Diana? Diana is a religious historian and scholar, Kent who has written many, authored many good books recently about the church in the 21st century and this time in the life of our congregations. She talks to us about strategies for engaging new ministries and new way of ministry to meet the needs of God's people today. In her book Christianity after religion Diana Butler Bass says this, ours is a time of awakening. Since awakenings are cyclical times of endings and new beginnings, events that occur with some regularity as spiritual seasons, then it is easier to participate in what is happening around us with a sense of awareness, purpose, hope, and creative possibility. She talks about culture and church, how those affect one another and how we're called to affect one another. So I've heard Diana speak and one of the things that really interests me about what she has to say is the church can't look inward, the church can't focus in on its own needs, the church has to look outwards and literally take the church into the streets which is pretty biblical. The book of Acts, the church was born literally flinging wide the doors and taking the faith to the streets. So Diana will help create a vision for where the church of the future might need to go. So we are excited about her being our keynote speaker for the event. So Karen, how would I register for this event? There's a simple link on the Massachusetts conference website Kent that gives you all the information you need and walks you through a simple process of registration. You can choose your workshops. And there's 45 different workshops and the topics are quite comprehensive. So and half of the leadership, as I understand it, is from Massachusetts for the workshops and half is from Connecticut. So we are full participants in this project. That's right. The wonderful thing about this collaboration is that we can pull from folks in both of our states, each of our states, who are doing amazing things in leading folks through opportunities to learn more about the ministries they're engaged in. So as we work on this image of interdependence, how we need each other, this is one experiment. The Massachusetts conference can't say to the Connecticut conference, I have no need of you in the Connecticut conference can't say to the Massachusetts, I have no need of you. This collaboration is one example of an experiment of us working together in some new and dynamic and exciting ways. And I'm really excited about this event. I appreciate the work that you've done as part of the planning team for this event. And we encourage all of you to get in your cars March 1st and drive to Ludlow, Massachusetts. It will be worth your time. Thank you, Karen, for being here today. Thank you, Kent. From the United Church of Christ Resource Worshipways, Marilyn Levine, a UCC pastor from North Dakota, offers this prayer as we close our time today. Great God, gardener, creator of all living things, you live with us today shining like the February sun and promising tomorrow and tomorrow and tomorrow. The crocus tells us you are near and the snow drops make vows you alone can keep. May we find you in every blooming thing beneath the snows of our lives. May we see you in the brightness of the morning streaming through these windows. May we know you in the promise of today and today and today becoming always becoming. Amen.


Hey, this is Brett the Ford guy and today I'm going to show you how to get your door code off of your 2003-2004-2005 and 2006 Ford expeditions This is a 2005 Ford expedition just came in on trade. We're not going to keep it, but I Still can help you find the door code on your vehicles with this one So didn't come in with the door code has the door code keyless entry on it this Door code find is only going to take a flashlight you can see I got my flashlight on on my video camera You're going to go to the passenger side You're not even going to have to remove any kick panels The only thing you might have to do is push a cord out of the way So you're going to go underneath the passenger side You're going to look up and there's a little box black box up there with a white sticker and you're going to see that one two four three one That would be your door code for this vehicle or whatever Expedition you may have and it's really that easy on this one Remember that's for 2003-2004-2005 and 2006 Ford expeditions Thanks for checking out the video if you want to check out more Door code find videos like this one on your left a link to those videos if you want to see how to program your own door code on the right and Thanks for checking out the video remember to like subscribe and share have a great day you


All right. Hello. Yeah Yeah, okay, so first question is what will be and won't be on the quiz So I post on piazza a list of topics. So last night. I finally got to see the quiz So I went through it. I deleted all the stuff that we haven't covered yet So there's no surprises where you have to go look at his lecture notes or something like that I also post on piazza a list of topics. You don't need to know Just to be clear It's like you don't need to understand how to use fork exec join all of that or wait because they haven't learned it Right, I could ask lots of questions about that, but they don't know how to do it. So can't ask it on the quiz You don't need to know about zombie and orphan processes because you'd have to create processes for that, right? You don't need to know about joinable and detached threads You should however know that threads can execute if they're preemptible in any order and then there's co-optive threads Which it's like lab 2 that you know, you have to explicitly yield and we'll talk about that a bit more today You don't need to know anything about that at exit stuff. You don't need to know like any specific assembly You don't need to know about the MMU. You don't need to know about C calling conventions so if you kind of break down everything quiz ones actually really really easy like like If I can't ask anything about creating processes or managing processes that means lecture 4 Won't be on it lecture 5 won't be on it They haven't done IPC so lecture 6 isn't on it and until the very end Which is like the exception thing and then pulling verse interrupts. Yeah So they talked a little bit about MMU and talked about processes and threads But they went into more like low-level detail That's covered in the lab that you don't that you'll be doing in the lab anyways So I thought it was better to just see how things actually work And kind of combine the Unix calls and when we learn about it. So we already know it. Yeah What post on the discord about the thing about the topics? I put on piazza not discord I can put it on there, too But yeah, so there's a list of topics on piazza the quiz is pretty easy It's like three short answer questions are like max three sentences then there's just multiple choice true false and Multiple answer where you can select multiple things that apply. It's honestly pretty easy You shouldn't be that worried about it, especially because like half the stuff I talked about is an even valid task right, so I think Ashton said he'd post like a mini quiz of like five questions just to give you a taste of it But honestly, it's pretty easy like I would say worry about like lab one I was worried about that for you and lab one was kind of bad. This is not lab one like I'm You'll see after the quiz. It's not that bad. It's just unfortunate that I think this is the second time It was offered like that. So there's really nothing to study for but really if you distill the content We know and they know how many questions can we even really ask? Like even if I if I gave you an example of a short answer question It's likely that it would just be on the quiz. I'd be telling you what's on the quiz So I don't even know if I can give you an example of a short answer through three short answer and then I don't know handfuls Other ones. Yeah Can you give me an example of a short answer that's only one sentence two or three sentences So like they know conceptually what processes are you should know that to what they encapsulate at least virtual CPUs and you know their own address space and Threads are like virtual CPUs with that you can ask some questions. You can compare and contrast It's always a popular thing to ask you can I don't know Say what's different about them? Remember we access the same memory in two different processes and it was different That was kind of cool. You should be able to say why like Yeah, feel free to ask me stuff I'll kind of blast through this lecture and then we can ask general questions in a screw-around. Yeah No, so it's oh, yeah, so it's just an online quiz on quarkus A lot of students are like, oh, yeah, I don't know a good place on campus to get it So what we think we're gonna do is we're going to book a room from eight to nine and I will be there So we'll just have a big room so everyone will have internet or if everyone's internet goes out At least you will have a witness to it If the campus network goes out so I can be like hey everyone that was writing my room got screwed So we'll offer that That's optional you can of course just go home and do it or go somewhere else But there'll be a big room so you know that there'll be a spot for you And I will be there. I of course can't answer any questions, but I will be there for moral support. Yeah You can bring whatever you want Yeah quizzes open whatever because it's not like I mean you could write it at home It's not like I'm gonna be like hey everyone connect to the zoom call so I can watch you creepily write this like That's one kind of an invasion of privacy and two just kind of weird All right So let's just kind of blast through today's lecture and then we can get to you know We can hypothesize some questions if we want If and then next lecture nothing will be on the quiz and we might go over some review stuff. Yeah So everything so lecture four was creating processes all about fork and the parent-child relationship They don't know anything about that. You could all you knows that all they knows you can create new processes somehow through magic That's it Five that's process management. You have to know how to create a process to be able to manage it So five is completely not on it and then six is they didn't do IPC We should you should know like read write and open maybe but Not really and then like pulling verse interrupts and then the three exception classes on the CPU It's the only thing from lecture six. Yeah No, I don't think they really know about file descriptors Yeah, yeah, and I and luckily for you guys too I accidentally told the other class that the quiz won't contain anything from the lab so I Think we're asking wanted to put some questions on there, but because I accidentally said that they wouldn't be there So you don't have to answer those questions Nope Yeah, and you're welcome. I accidentally said that so I just deleted everything All right, so let's quickly just go through today's lecture this the first part of it may or may not help with the quiz So data races and that would not be on the quiz but Arguing about threads and what order they execute is would be on the quiz or would be valid so This will be important later on because data races are kind of the bane of Your existence when you have to program concurrently So it's good to know the definition of a data race. So a data race is when there are two concurrent Actions or accesses to the same variable. So same memory location So same variable and at least one of them is a right So if one thread is reading reading reading reading and the other thread just writes that can also just show or That can manifest in a data race where you get results that you would not expect and data races are bad So when we did that count example, we had count. That was a global variable. We had multiple threads accessing it They were all reading and writing it and that's why we got some inconsistent results And we'll break it down even further today just to make it really clear why we had some weird results So first we have to talk about atomic operations and they are indivisible Operations so anytime you see a atomic operation, you know, it either has not executed yet Or it has executed to completion. There's no middle ground, right? Plus plus count is actually a bunch of operations that it is not atomic But there are it consists of atomic operations that you know, it could context switch out of in the middle of it so Any atomic instruction again happens all at once or or it either happens or it doesn't happen No in between so that means you can't preempt in the middle of the instruction if you preempt either has happened or it hasn't happened So between two atomic instructions, of course, you can get preempted So that's all we need to know about that and then there's this thing called three address code if you get into Compilers, it's really really fun. Compilers are great. Hopefully I might teach that later But three address code is something that is used internally in compilers to kind of argue about optimizations without having to read assembly because assembly kind of sucks so Basically, it just simplifies everything for you so your program is just represented by simple statements and They all represent one just fundamental operation and you can assume each Each statement is atomic So it makes it really easy to use or a reason about data races and it's way easier to read the assembly So because everything looks like this it's just a result, right? Some variable name or something like that equals One operand operator another operand so one plus two or there may not even be an operator They may not even be another operand, right? That's as complicated as it gets So X equals one plus two is the most is the most complex this will get So Jimple is the three address code used by GCC the compiler that you've probably all been using so far This again will never be covered in the quiz. This is more for your own interest sake So if you want to see the Jimple representation, you can use that flag you can see all of the three address code generated by the compiler if you want and It's kind of easier to reason about again, like I said then just low-level assembly so we'll look at that data race example we saw a Lex let last lecture and See the Jimple code for that So Just to make it really clear that you know counts a global variable and it's in memory. I turn I Turned it into a pointer. So p count is just the pointer to that global address that represents the count, right? So if you look at the Jimple of plus plus count you can see it's actually three operations So the first operation here is our load So it will load D reference p count from memory So basically just read in whatever value it's pointing to from memory and then this is just a temporary you can think it's Abstraction is that it assumes that you just have a machine with an infinite number of registers So D1 is just some temporary storage and since it's a register and this is executing on a thread It's independent to that thread So then the next statement is our actual increment which would happen just in that thread. So it's just creating Assigning a new register to the value we just read from that memory location Which was D1 and then adding one to it and then in the last step. It just writes out that value right, that's our So that's our right So let's see all the possibilities here So this is good thing to reason about all of our possibilities. So if I write them down The only thing I really care about is accesses to the same The same variable in which case it's whatever p counts pointing to So I don't really need to label the increment because that's local to the thread. I don't really care So I'll just label the read and write because they are the important things and then Just assume we have two threads and all they do is execute those statements once and of course within a thread Threads are just like everything. We're used to they will they will execute sequentially But since we have two threads, what can we say about what thread executes first? You don't know right? So if you want to argue about data races you have to consider all Possibilities which you can see how this gets kind of hairy quick So one possibility might be that Hey, well my first operation is a read. So maybe I'll just pick thread one to go first So if thread one goes first it would do this It would read from memory which initially here p count is zero, right? So it would read zero So that's all it would do and now At this point, you don't know what's gonna happen. That was an atomic operation. So now that atomic operations done So now there's essentially two possibilities It could execute the next instruction or because we're going to assume a preemptive scheduler It could just get preempted at any time and then switch over to the other thread So if it switches over to the other thread Say we get unlucky It would do the memory read again Which p count is still zero and it would read the value zero now at this case. We're kind of screwed It doesn't matter. So say thread two just executes the increment So we would have d2 equals to whatever it just read zero plus one So d2 would be equal to one, right? And now again, we don't know what would happen It could switch back to the first thread in which case it would execute its version of this and It read zero into d1. So it would be zero plus one Equal one Now at this point, it also doesn't matter. So it would write out p count Equal to one and then it could then at this point if we assume the threads done at this point It could it would switch back to thread two and then also execute p count equals to one Right any questions about that? Yep, by preempts. So there's two types of thread scheduling, right? There's the cooperative one where you have to call yield to give up the CPU and then with preemptible scheduling it can be just taken away from you at any point and you have no control over it So that's and remember we talked about that when we talked about processes, too So cooperative verse like true multitasking or preemptive Which basically means it's just taken away from you and that's you know valid for the quiz How would an operating system be able to take away the CPU from you? Yeah, so in cooperative threading or process scheduling you have to yield the CPU to something and Preemptive is just taken away from you. You have no choice the operating system maintains control and it would the operating system would maintain control over processes because it can interrupt itself essentially It has access to the hardware while your process doesn't because you know clear separation of kernel space and user space Which is all good stuff All right, any questions about this? All right Well, so in the case of So if we got slightly luckier whoops So if we got slightly luckier the normal execution if we just execute thread one all together It would do something like this So then next step would be to write out p count Which would be one and now at this point if it context switches back over to thread two It would read p count into its you know its register which would actually be one in this case So then d2 would actually increment one plus one equals two and Then we would get the correct answer, right? So that's kind of what we would expect to see but you'd have to argue about every single interleaving So if you do all the interleavings well For the first thing that executes assuming we have two threads either Read from thread one can happen first or the read from thread two can happen first, right and then there's two options of What happens after the read from thread one either it could execute its next instruction and we'll just assume the increment Doesn't really matter. We'll just concern ourselves with the reads and writes It could either execute its next instruction or get preempted and do the other thread So if it executes its next instruction, it would execute write one But if after the read and thread one it got preempted then thread two would read right and then Going along This path here to the right If thread one writes, there's only one option so you can just Thread the sorry thread one is done at that point. So there's only one option You can read from thread two or you can write then you would have to write to thread two But after the read there's two options either Because at this point after the read of thread two we can assume we're executing thread two It would either continue executing thread two and do a write two or it would contact switch back and do a write one and Then in either case after the right one would be a right two and then after the right two would be a right one right, so Those are all your options if you start with read one if we are just arguing about that memory address, right? So any questions about all those are leaving anyone see how this can get out of hand really quick if you have like eight threads and You're doing multiple variables, right? So it gets real hairy real fast and again. These are why bugs like this kind of persist for seven years So if we go through all of our orderings, which again, we're assuming that you the compiler won't reorganize our Won't execute out of order or anything silly like that which Actually may happen which complicates your life even further But we'll be nice and say that the compiler in the CPU itself won't reorder anything So if you can't reorder the instructions within a thread it'll always read then write these are all our possible orderings And we'd see that we only get the result we expect in two cases so if it if it's equally likely to preempt that any You know after any atomic construction the odds aren't enough aren't in our favor that will get the correct answer Right So if this was used to like calculate your grade or something you wouldn't want to use this code because it's just going to be lower All right, so let's see how to combat this so this will be used later This is definitely not on the quiz, but it's a good thing to know so to prevent data races the simplest mechanism to do that with is called a mutex and A lot of this is just for reference you can either create them statically like this essentially Did just create a global variable for them and you have to initialize them like that or you can just allocate them Dynamically by calling p-thread mutex and knit which internally will you can think of as just doing the malloc call and some Initialization for you so because we're all good programmers. We know we should free our memory So you would have to call p-thread mutex destroy on it and that essentially is free and Then if you want to include attributes that it kind of looks like the p-thread stuff You'd have to use the dynamic version, but that's just for reference. You can just use mutexes. Yeah So if it's initialized globally like this you don't have to destroy at the end because it's a global variable So you can't destroy it. It just exists as long as the program exists or the process exists So destroy is to pair with a knit So it's similar to How just variables work right if I call malloc. I should call free, but I don't have to malloc every single thing So so this isn't the same block of code. It's just multiple examples Yeah Okay, so this is the important bit is so this is how you typically use locks So you have some code you write and then you call p-thread mutex lock and then within that that protected code Is also called a critical section Which has some unique properties So everything between the lock and unlock only one thread can execute it at a time And that is the purpose of a mutex that guarantees Mutual exclusion so only one thread can execute that at a time And if only one thread can execute that protected code or be in that critical section at a given time We suddenly don't have data races because we can't have two concurrent accesses if only one thread can be in there at a time So everything within the lock and unlock is protected And you have to be careful to avoid dead locks, especially if you use multiple mutexes, which we'll see later But for now we'll just assume a single mutex and also So lock is also kind of a blocking call. We'll see its implementation in the next lecture but if One thread makes it there Gets the lock and another thread tries to get the lock It will just sit there and wait until the lock is unlocked and then it can grab it again If you don't want to block you can use this function called try lock, which you probably won't need it might come up later though And the lock is just how you would expect a normal lock in your everyday life when you create one It's initially unlocked and then you just lock and unlock it and you can't lock it twice in a row And you can't unlock it multiple times. Yeah So deadlock is basically when you can't make any progress So if you forgot an unlock so if you just lock something and Then you forgot to unlock it and then another thread tried to acquire that lock it would just sit there forever because nothing is ever gonna unlock it and Deadlock is just basically you get stuck at a lock call. You can't make any progress. You can't move anymore Yeah Yeah, so between the lock and unlock The code here in the critical section protected code only one thread can be executing that at a time So if that's our only accesses to some global variable or that have a data race We now eliminated our condition for a data race because it was concurrent accesses Right to the same memory location But between lock and unlock there's going to be no concurrency there because only one thread can execute at a time So if anything context switched over to it, it wouldn't make it past the lock. It can't execute it Yeah, so it's just a mutex so mutex is just a type of lock and p thread is just the actual thread it's just Locks and threads are related so it's in the same library So it's just called p thread at the beginning, but they could have been nicer and just called it mutex lock Or something, but it's in the p thread library and sees kind of terrible. So they have to name it something unique So this is our data race example. We saw before so in order to prevent the data race Right, we just create a lock at the top of our code. It's essentially a global variable So we can initialize it like that We could destroy it, but you don't really need to destroy it It just makes it invalid, but it doesn't free any memory or anything like that And then within here so within the loop We'd have our lock call and then we do our plus plus counter and then unlock So now only one thread can execute that plus plus count that increment at a time So we don't have any data races anymore So if we go ahead and look at that Right, so here's our code. We have a lock and unlock If we compile it and run it now because there's no data races, we should get what we expect Right, we should get 80,000 every single time in which case You know I can execute a bunch of times get 80,000 pretty much every time With these data races stuff you can't be you know just because you ran it a thousand times and it worked Doesn't mean it's actually right, but we can actually see the code there that Counter is where our data races now. It's in a critical section only one thread can be there at a time So we don't have any data race and we can argue about that. Yep. Yeah, so that's like a Still an active area of research to verify that because these bugs still exist like people are still finding new ones They've blasted for seven years eight years Stuff like that like some stuff you have a data race, but it just never happens because that's the way the hardware works It just never Happens and then suddenly some new hardware comes out that has some optimization that changes something and now that's no longer true And because it actually had a data race before now you see it Yeah, yeah, so that is the kind of crux of this is that now because between The critical section only one thread can be there at a time I essentially turned this code is now just a really Convoluted serial version right because only one thread can execute at a single time Yeah, so in this case because Each thread essentially all of its work is in a critical section Then yeah, it'd be easier just to just get rid of the whole lock because it's going to take time to do the lock And unlock so I would just do it single threadedly, right? So that's what you would do, but this is just kind of to illustrate the example Yeah, but in real life, right? That's one of the things you have to consider of you know Is it even worth doing this operation on multiple threads if you know There's some dependency or something and I have to make it single threaded anyways then Right Yeah, yeah, so that's Yeah, so that's a good point even If you bear with the silly example One thing you could do to make this actually run in parallel and do it without the lock is you could just have a local counter in The ret run of here Incremented, you know, it's 10,000 times and then pass it as a return value and then have the main thread Just kind of combined all them some all the threads up together And then you'd get your answer you wouldn't have to deal with a lock so that's one of the things you can do and is a perfectly valid technique and you'll and You just have to weigh the pros and cons with doing all of that Yep. Yeah, so the question is how does lock know what thread to serve and it's atomic It's just this if they both arrive at essentially the same time just one will pass and Even if it's in parallel because the lock will probably be implemented in some memory location Something and you'll need hardware support for that which we'll talk about in the next lecture The hardware will go ahead and do all the hard stuff for you and just pick one Yeah Yeah, so So in this case now if I go back to my example So now in the example if we have a lock So if our lock works properly and our first call here is a Lock call here, so it would have to execute lock right? We had lock and then our increment and then our unlock so thread one if it gets picked to run first would first do a lock and The locks initially unlocked so it would pass through and be able to acquire the lock and execute the next instruction So now it'd be running it would do that memory read and now if we Get unlucky and we get preempted The other thread is going to see try the lock call and Because this is a properly implemented mutex. It's just gonna sit there It's either going to yield the CPU or put itself to sleep because the other thread has a lock So it's not going to be able to execute that memory read anymore It's just gonna stay here do whatever and then eventually Either it will yield it will put itself to sleep or it will just time out and just waste a bunch of time trying to acquire The lock over and over again But at any rate at some point it's going to give up and then it will context switch back over to The thread that acquired the lock and then it would go ahead and do its increment so zero plus one and Then even if it context switch back over again, right? It would still be in that lock call over and over again And it's not going to make any progress Then eventually it would context switch back over to thread one and then it would do the it would write out p count equal to one and then finally unlock and Then after it unlocks then it would pass through the lock and acquire the lock now and then it would go ahead and Read It would go ahead and read that memory location which has now been updated So it would read one and then you know it would execute what it should Plus one equals two and then write out p count Yeah, so does everyone see how that works, right anytime a content switch over it'll be stuck in that lock call Won't be able to make progress so then we don't have a data race and I guess I guess to translate it to Kind of the cooperative threading issue So if instead, you know, we just had our code as before but it was a cooperative thread and we had something like this Do we have a data race now? We got a yes and a no Why why yes? So His comment was it's possible that two threads doing plus plus count at the same time yield at the same time So Yeah, so you'd still have an issue as long as this was on multiple kernel threads and they could run in parallel Right, they could still be both doing plus plus count But if you have a single CPU this would not have a data race, right? Because it would do plus plus count and the only time it can context switch over to another thread is by calling yield So it would it would either Then you can think of the three operations plus plus counter as being kind of atomic But not really they're not really atomic they either all three happen And then I yield or I haven't executed them or I'm executing so I'm about to execute them, right? Yeah Yeah, so the question is if I just you know say I just copy pasted This I gave it the name run to and I did that right I did that and then when I created it Let's just say so you want something like that So essentially make half the threads Half the threads use a lock in the other half half the threads not use a lock Well, let's just see All right So there's still a data race then because even though there might not be a data race between the four threads that use the lock and unlock There are our definition of a data race is to concurrent accesses the same memory location So you can guarantee within four threads. There's no concurrent accesses, but there's some other threads that will access it So you still have a data race. I guess you can argue that the number is not as bad Right because we have four of them cooperating together and being a little bit nicer So it's slightly better, but it's still a data race Okay All right, so Let's quickly wrap it up So these are kind of things you want as properties in your critical section. It means only one thread executes So if you actually implement mutexes yourself These are properties you want you want safety aka mutual exclusion So if you implement a mutex You only want a single thread in the critical section at one time Which means if two threads can call lock and pass through your mutex does not work You also want liveness. So if multiple threads reach the critical section, essentially they reach that lock call You want one to proceed Otherwise, if they all sit if they all make it there and then just get stuck at the lock call They won't make any progress and your program won't work. So And then as part of that you don't want your critical section also depend on outside threads They can mess up in deadlock and we'll see deadlocks in a few lectures Also, you want bounded weighting aka starvation free where a weighting thread much must eventually get locked It just won't stay there forever so one of the good points of The good points brought up is that you know, we essentially turned our example into a single threaded So if you use critical sections, you're essentially turning some things that might be able to be done in parallel into sequential operations, so as If you want things to run as fast as possible, you want critical sections to have minimal overhead And you you want them to consume as little resources as possible while waiting You want to make them as small as possible too, right? Otherwise, we're just turning our program into some sequential thing You also want the locks to be fair So you want each thread if they make it there at the same time to wait approximately the same time you don't want one thread to skipped over a thousand times and You want your locks all to be like simple easy to use hard to misuse which is definitely something easier to say than it is to do So similar to libraries you want kind of layers of synchronization. You build them up on top of each other So at the bottom There's going to be some hardware provided low-level atomic operations that you can build on and we'll see what they are in the next Lecture and then on top of these hardware provided low-level operations You can build high-level synchronization permatives so that's where mutexes would be and other lock and other Synchronization tools that we'll see later on and then on top of that you use a combination of mutexes and other things We'll see to build your properly synchronized application that doesn't have any data races and works, you know works flawlessly So this is one instance of a lock implementation if you have a uniprocessor system, so just one CPU core and If the only source of concurrency in that case is interrupts Well, then you can implement a lock by just disabling interrupts so if interrupts are your only source of concurrency and you disable them then you just eliminated concurrency and You're the only thread that can run because you can't get interrupted Right, and then the unlock call would just be to enable interrupts again and now concurrency can happen But this isn't this obviously isn't going to work if you have more than one CPU core because the other one would be able to run in parallel or concurrently and of course because interrupts are a Hardware thing on your CPU if you're writing a normal process the operating system will not allow you To turn off interrupts because that's its domain So the operating system wouldn't let you change it anyways, but if you are the kernel and You have a single CPU you could implement locks like this. Yeah So this is just Processes or threads any execution so not even specific to threads. Oops Yeah Yeah, so this is just concurrency just executing some instructions doesn't have to represent a thread process It could be operating system code. It could be kernel code So these interrupts would be from hardware so you can't control when they come in Right, so there's no cooperative interrupts with hardware. It just happens, right? all right, so Let's try our best to implement a lock in software without any help So I will create a lock and just represent it as an integer. I'll say I'll just Choose values. I'll say if it's zero, I'll say that represents. It's unlocked if it's one I'll say that means it's locked So if I want to initialize my lock, I'll just set that value to zero and within lock Some implementation. I think of is I'll just loop infinitely while that lock is equal to zero or I'll loop infinitely while that lock is equal to one Because that means it's locked so I should just try again Of course, I'm gonna waste a bunch of time here So but I'll just try it over and over again And then if I break out of this while loop Then I know that the lock or the value of the lock is zero So I can go ahead and change it to one and then that indicates I'm locked So then when another thread comes in here, it should you know Just hit the while loop and keep on looping again and again and then to unlock. I'll just change that value back to zero so anyone See an issue with this implementation if I'm even using two threads. Yeah, the last which thread Yeah, okay, we got back there. Yeah So it's wasting time, but so let's go ahead and kind of argue about it. So let's Argue about even two threads So if I have thread one and then thread two and then say initially initially The value of the lock is equal to zero right so Say both of these threads are going to call lock So both the threads call lock You'd expect one to make it past and the other to get stuck in that loop essentially, right? so Looking at our lock code, which looks like lock looks like Essentially looks like while L equals one Then I loop forever and then when I acquire it. I set its value to one right So if thread one gets the lock, let's label our reads. So this is a read I'm reading the value of the lock and this line is a right and That's the same location, right? So if thread one say we'll just say thread one executes first it would read and it would get L equal to Zero because that's what it is initially, right? So then If it's still executing it would go ahead and pass through the while loop, right? It would just Go from the read and It would be there as its next instruction And then if it executes the next instruction it would write out that that value of the lock is now equal to one and Now if we and then it would just return right return from lock now if thread two chooses to execute It would read and it would read the value of L as being one And then it would get stuck in that loop, which is what we want, right? We want just to get stuck there, which is fine because Thread one gets to return from lock. The other thread doesn't get to return from lock So only one thread made it through that lock call. Yeah Yeah, so that's the crux of the issue So if instead before that right happened I got preempted right after that then What would happen is? Thread two because that value hasn't been written yet thread two would go ahead and then read also read The value of the lock is equal to zero and now at that point you're screwed, right? So now both thread one and thread two are at this point Where they'll just break out of the while loop because they read that Into some registers something so it's local they both see that as being zero So they would both not get into that while loop and then they would both return So two threads call lock and then two threads pass through lock in which case it was completely useless, right? The locked in do anything so this of course is not a valid implementation of a lock So it's not safe both threads can be in the critical session. We can argue oops It's not safe both threads can be in the critical section and we can argue about a Interleaving of threads that cause them both to return from lock and it's also not efficient because if one thread You know get switched back there It just pulls over and over and over and over again when it knows well when it should know It can't make any progress. So it's just wasting CPU cycles, which is called a busy wait All right, any last-minute things about the quiz that we can think of or questions Nothing, can you give an example? Yeah, the quiz honestly the quiz is not bad at all if Next week you can say Yeah, next week. Let me know either good job.  All right. Well, we're important for you


Hi everyone, and it's nice that you're here listening to me talking about nurturing a first disciplinary professional culture. Well, that's a bit heavy. I can barely pronounce that. Just putting it simple, I'm here to talk about one wide-angle perspective on forming professional teams. At the same time, this is sort of a guideline to getting better on what you do. It has absolutely no time to get background. I've just collected some information. Hopefully in a meaningful way. I have twice went with some external leaders and I'm hoping that this all makes some sense to you. This is actually what I do as a designer as well. First off, I'm looking into professional performance from three angles. The first one is professional skills. By this, I mean the heavyweight arguments you are going to drop on the table when you are describing yourself, for example, when you're applying a job. On the other hand, as an employee, you are demanding these skills from the people who are working with you. This is definitely not a comprehensive base. And please don't be afraid if your area of expertise is not mentioned in here. There are people who truly are focused on one single area of expertise and there are jobs like that too, and that's totally okay. But I bet that quite many of you can actually successfully work in more than one area. One area might be your main expertise. Perhaps you have formal education background which supports that. And the other ones you might have learned by working. Your special interests might broaden your expertise. And what's really nice is that there are people whose expertise overlaps yours. And these are the people who are really fun to work with because they truly seem to get what you are meaning although you don't exactly work with the same, exactly the same things. They just apply what you mean to their area with a great success. They are really great people. Okay, the second handle is your supportive, more general skills. And I think that the medium of these is quite underestimated. These skills are also something you probably mentioned in your job application when you describe yourself as a person. But these are not your personality and these are not properties of personality. These are definitely skills and they can be learned. And the third handle is your personality. Which can of course be described with many personality theories or models. I just picked one for one here. It's simplified Myers-Briggs model. And I picked this because from community functions it emphasizes how we perceive the world and how we make progress. So that's probably why it's quite useful in working life. Just putting it simple, each person acts typically somewhere here in these four axes. You can show extreme tendency to one word and another end here or if you can show more balanced behavior which would be somewhere in the middle. This is actually not how strongly you manifest the behavior. It's a point of how heavily introverted person you seem to be. That thing has to do with other personality-building books. For example, some people talk something about community energy. Your temper might do something to that. And there are some previously mentioned supporting skills that actually help you to recognize your behavior. But what I can say is that often these extreme inclinations they tend to make your life really difficult. So for the second thing, let's put this information together. It's basically put together every time a working team is here. And this is the basic traditional or school way. Which is simple because we just need to decide what areas of expertise is needed and just pick the guys for the source. And then the project manager will take care of the people who are lacking in their support skills. And should we talk something about chemistry between people? What chemistry? I mean, the support, we should get over that. When you look at this image here, it's obviously how communication-heavy this kind of network can be because do these people even speak the same language? Should we use the project manager here as an agent running between these areas? Of course we already recognize that there are those people who have skills more than one area. And lucky us if they pick them here because at least they will have us to solve some of these communication problems or challenges. Plus they are the people who are nice to work with. Here's the alternative view. This is something that I actually borrowed from Nisami Poimala. I have to let you know that he's maybe a Microsoft guy so we were, well, seriously, his method for team building is quite nice. He's addressed quite strongly that we let teams believe themselves. And of course at least many of you who work as a freelancer you have at least some sort of a chance to do this. What this does, it takes care of the chemistry issues, for sure. And perhaps when people trust, perhaps these people who get to do this they also can trust that the supportive skillset is good enough when they get to work with people who they actually know. For every project we still need to do the basic thing, identify the requirements in these areas. But then comes the difference. He wants us to trust those people with more than one information. Find the least amount of people that offers all the requirements. This sounds nice to me because it must mean savings. It doesn't mean just money, for example, communication. It's much more economical in that way. It means fluid communication because people understand each other and we get lots of people who are actually going to work with this one project. And even the one occasional single expertise expert is not alone here either because his expertise will overlap at least one another person. That's because it's beautiful. Now I have just one short set from a personal perspective. Work with the people who you want to work with. This is really nice and easy. You could say it's comfortable. Work with the people who you want to know better. And I have to say that this is a bit of a curve for us inwards, at least. Work with the people who can teach you. This is definitely much more economical than getting a muted rate, for example. Know your skillset and develop it consciously. Work in the projects that challenge at least one of your secondary professional skills. Work in the projects that challenge at least one of your supportive skills. And find books to help you out if you find getting better by yourself challenging. There are lots of them there, but mostly self-help, I guess. Solidize your weak support skills with teamwork and technology. But I'm not saying that you have to be us. I mean, be responsible of your own doings and ask for help and give credit to people. Give credit to where it belongs. Especially develop your self-awareness and self-knowledge, because these are sort of essential supportive skills. And the last thing, you have to understand which supportive skills help you to smooth the spikes of your personality. It will definitely help you to solve the conflicts in a constructive way. And overall, it makes more confident. Yeah, now it's time for a fist bump. And thank you. Thank you, guys.


Amen. So keep your place in first Kings chapter 2. We'll get there in a minute. I want to look at a specific story from that chapter. But we're finishing up our sermon series this evening on the book that we've been studying on Sunday nights called Up from Slavery, which is the autobiography of Booker T. Washington. It's a great book. I hope you all got a chance to read it. I mean, if a six-part sermon series or five-part sermon series or whatever it's been will not get you to read a book. I don't think anything will. But this evening, I want to look at a topic from this book that I think is kind of, and it was one of the things that really popped out to me after reading the book, especially I've read it several times at this point in my life, but I'm especially studying through it like we did. But what I want to talk about this evening to cap off this sermon series, I guarantee every single person in this church tonight has a problem with this from one degree to another. So this is going to apply to everybody here tonight, not that every sermon doesn't. But what I want to talk to you about is the subject of bitterness this evening. I want to talk to you about the subject of bitterness. Go to Ephesians chapter 4 and look at verse 31 or look at the verse of the week on the front of your bulletin.  So I want to talk to you about, before I even get to anything from the book, this evening I want to just give you some, you know, an overview of this idea of bitterness and what the Bible has to say about it. So the Bible is telling us in Ephesians chapter 4 and verse 31 in many other places, you will never find a place in the Bible where it says bitterness is good, by the way. The Bible is telling us here not to be bitter, but more than that it's saying put away all bitterness. So what kind of bitterness is there? When you think about bitterness in your life, when you think about what causes bitterness, what do you think that means? Where does that come from? Where does it originate from? And most of the time I would, probably all of the time it comes from this idea that somebody has personally wronged us. Somebody has personally wronged me, so I am bitter about that. I'm bitter at somebody or something or a group of people or a situation in general has something has caused me to be bitter, but it's something, maybe it's someone that's mistreated me personally is the way I look. Maybe it's somebody that stole something from me.  These are the types of things that can cause us to be bitter. So basically what I'm trying to get you to understand is that bitterness begins many times with what you may look at as a just cause. So it's a, look I'm right. Brother so-and-so did something to me, he hurt me and he was wrong and what he did to me was wrong and I'm bitter over that. So you think someone wrongs you. Turn to 1 Kings chapter 2 or just look back at the story. You think, look and here's the thing. As we saw from this morning, what you think is right and what you think is wrong, here's the problem folks. In your own mind it's subjective. It's subjective. If I get in an argument with one of my brothers and Christ or just anybody even out in the world or at work or whatever, there's a good chance that if we look at things from the perspective of the Bible, there's a good chance that we both might have blame in that situation. I would say that's most conflicts between people. However, bitterness sets in when you think that someone just wronged me. Somebody did me wrong. Somebody did me wrong. Look at 1 Kings chapter 2. This is what we see in this story. You think somebody wrongs you and then you think somebody, that person owes me. That person owes me whatever they stole from me or they owe me an apology or they owe something to me to make things right and it just makes you bitter. That's where bitterness begins. Look at 1 Kings chapter 2. I want to focus on the story of Adonijah here. Now remember Adonijah, he tried to take over the kingdom. He tried to take over the kingdom before Solomon became king and look what he says down in verse 13. It's actually a very, it's kind of a humorous story if you actually read it and understand what's happening. But look at verse 13 of 1 Kings chapter 2. And Adonijah, the son of Haggath came to Bathsheba, the mother of Solomon. So Solomon is now king. His mother is Bathsheba and Adonijah tried to just hire a bunch of people and kind of get a conspiracy going and take over the kingdom by just having like the people follow him even though he wasn't the one that was supposed to take over the kingdom. And he knew that. Look at verse 13. He came to Bathsheba, the mother of Solomon and she said, come as thou peaceably. I mean he tried to take over the kingdom and it could have been a violent situation as we know the situation from Absalom what happened. And he said peaceably. He said, I'm here peaceably.  He said, moreover I have somewhat to say unto thee and she said say on. So keep in mind he's now that that conspiracy has been put down. Solomon is king and now he's coming to the king's mother. He's not coming to the king which is interesting in itself. He's coming to the king's mother and he says I have something to say to you. And she says say on. And he said, thou knowest that the kingdom was mine and that all Israel set their faces on me that I should reign. How be it the kingdom is turned about and has become my brothers for it was from the Lord. Now that's a funny statement right there. If you think about what he just said, he's like don't you know that the whole kingdom was mine and he says all the people were with me. All the people were with me and it was mine. It was just the Lord that said it was Solomon's. You know just this God guy right? So turn to 1 Chronicles chapter 28 and let's look at that situation. 1 Chronicles chapter 28. I mean this shows you 1 Chronicles chapter 28 is where God basically said Solomon is going to take over the kingdom. Look at 1 Chronicles chapter 28 and look at verse number five. 1 Chronicles 28 and verse number five. Look what the Bible says. And all of my sons for the Lord hath given me many sons. This is King David speaking. He hath chosen Solomon, my son, to sit upon the throne of the kingdom of the Lord over Israel. And he said unto me, Solomon thy son he shall build my house and my courts for I have chosen him to be my son and I will be his father. God chose Solomon to take over the kingdom. Remember David wanted to build the house. He wanted to build the temple and Nathan came to David and Nathan said no. He said your son is going to build it. And that's where God tells him that Solomon's going to take over. God tells him your kingdom will last into eternity and we've studied that out before as well. But the point is that God chose Solomon.  The kingdom was mine and you owe me. And then he asked to marry this gal. Well I mean you know it doesn't really work out for him. Look at verse 16 of 2 Kings chapter 2. 2 Kings chapter 2 look at verse 16. I asked now of one petition of thee, deny me not. And she said unto him say on. He's basically saying because of this that I was wronged because God got his way and not the people. He's like you owe me. Look at verse 17. And he said speak I pray thee unto Solomon the king for he will not say thee nay that he give me Abishag the Shunamite to wife. And then down look at verse 25 this is how it turns out and King Solomon sent by the hand of Baniah the son of Jehoida and he fell upon him that he died. So basically he goes to Bathsheba and he says look you owe me. You owe me. This was my kingdom and it was just because of the Lord you know. The Lord that you know it was taken from me. You owe me so let me marry this the Shunamite. And King Solomon hears about it and you're like man he kills him for that. Why is that? Why does he kill him for that? Why does he execute him for that? I mean isn't that I mean isn't that kind of harsh? You read that in the Bible you're like man he killed. Well here's why. Because Solomon realized that instead of feeling bad and being repentant for what he had done instead Adonijah had become bitter towards him. He'd become bitter towards the way the kingdom went. And look that would only get worse and be troubled into the future. And Solomon knew that. Turn to Job chapter 21. So we see that bitterness can cause this. We can think that someone has done wrong to us. Maybe they have or maybe they haven't. Maybe it's a just cause. Maybe it's an unjust cause. But bitterness can form inside us. We see that in this story with Adonijah. He was bitter towards the way things had turned out. And thus he thought that somebody owed him something. When he wasn't owed anything. Turn to Job chapter 21. Job chapter 25. I'm sorry. Verse 23. The Bible says this. It says, One dyeth in his full strength. Being holy at ease and quiet.  And his bones are moistened with marrow. It says one person is full strength. Is whole at ease. They're relaxed. They're having a good life. They're well fed. You know their bones are moistened with marrow. And then here's another guy. Verse 25. And another. Dyeth in the bitterness of his soul. And never eateth with pleasure. They shall lie down alike in the dust and the worms shall cover them. So look, whether or not it was somebody that justly did you wrong or not, the Bible is saying is that bitterness will rob you of joy in your life.  Turn to James chapter 3. James chapter 3. James chapter 3. Look at verse number 14. Look, folks, having bitterness and bitterness in the Bible is always bad. It's always bad. Look at James 3 and verse 14. The Bible says, But if you have bitter envying and strife in your hearts, glory not. And lie not against the truth. Look, being bitter in the Bible always leads to other things as well. It leads to things like strife. It leads to things like envying. It leads to things like lying. Look, was Adonijah telling the truth? Was the kingdom his? The kingdom was never his. It was never supposed to be his. But he just, look, he thought himself that he was justified. And that led to bitterness. So look, that's where bitterness leads. And we'll look at that in a little bit more detail later on. But it doesn't matter. The point I'm trying to make is it doesn't matter what the beginning of bitterness is. It always leads you to a bad place. Whether or not somebody just, you know, did you wrong or not, it always is going to lead you to a bad place, which leads me to a couple of things I want to read you from, up from slavery. The very first page of the book, the very first page of the book, Washington says this. He says this.  You think about, I mean, all the things that we have studied through, whether it be, you know, hard work, perseverance, education, all these things that we've looked out, how to gain traction in your life and get moving in your life. Look, out of anybody that could claim that they couldn't do those things, this guy had one of the best reasons, the best excuses that I've ever seen in my life.    They stole, somebody stole his life from him. They stole his labor from him. Yet Washington was not bitter. Listen to what he says on the first page. He says, my life had its beginning in the midst of the most miserable, desolate, and discouraging surroundings. And you keep reading through the book and anybody that knows about this time in history would agree with that if anybody had a just cause to be bitter, it was this man.  Let me read you a page from page 88 where he says, he says this. He's now in a point where he's now started his own educational institute at Tuskegee, if you've read the book. And he's dealing with a lot of rich people. He's dealing with a lot of rich people. He's going and he's getting funding for his school. And you would think that, you know, he would just have a lot of bitterness towards these people. But look what he says. He says, my experience in getting money for Tuskegee has taught me to have no patience with those people who are always condemning the rich because they are rich and because they do not give more to objects of charity. In the first place, those who are guilty of such sweeping criticisms do not know how many people would be made poor and how much suffering would result if wealthy people were to put part at once any large proportion of their wealth or were to part all at once with any large proportion of their wealth in a way to disorganize and cripple great business enterprises. Look, the guy wasn't bitter towards even the people that he was going and getting donations from for his school from. Even these people that had great wealth and all this. Look, he even had respect for that. He said they lift people out of poverty. He didn't have bitterness for that. And I think if you remember the sermon on the general, I think that his attitude towards life in general came a lot from General Armstrong. And if you remember the sermon on General Armstrong, he said this about General Armstrong. He said, although he fought the Southern white man in the Civil War, General Armstrong went to war against the South. And he fought the Southern white man in the Civil War. I never heard him utter a bitter word against him afterward. So here was a man who fought these people in the war and he never said a harsh word about them in his life afterward. On the other hand, he was constantly seeking to find ways by which he could be of service to the Southern whites.   That's the kind of people that Washington modeled his life after. So look, Washington knew that being bitter was life-consuming. He knew this. And look, it can be life-ending if we listen to what the Bible has to say. Turn to Hebrews chapter 11. I mean, bitterness probably begins with everyone. Look, I'll give that to you. I'll give that to you. That bitterness for everybody starts with a cause that you feel is justified. I'll give that one to you.  Look at Hebrews chapter 12. Hebrews chapter 12, look at verse 13. Look what the Bible says. And make straight paths for your feet, lest that which is lame be turned out of the way, but let it rather be healed. Follow peace with all men and holiness, without which no man shall see the Lord. Looking diligently, lest any man fail of the grace of God, lest any root of bitterness springing up trouble you, and thereby many be defiled. So this is really interesting. This is really interesting how it says that, you know, this, it starts with a root inside you. It starts with a root.  It grows inside you. So look, there's two roads in your life.  There's two choices.  You forgive. And I don't know how many times, you know, I've brought up in sermons and we've studied the Bible on this, that this is why forgiveness is to be a one-way street. We'll look at that in a little bit more detail in a few minutes, but forgiveness needs to be a one-way street in your life. But look, these two roads, this getting bitter and this forgiving, these two roads lead in completely opposite directions. And here's the funny thing. The reason that Hebrews chapter 12 says that it's a root of bitterness is because bitterness, if you let it take root, will always lead to more bitterness. It's a snowball effect, if you want to think about it that way. Look, it may, like I said, it may start with a justified grievance. Somebody did you wrong? Somebody stole from you? There's the root right there. But then it just leads to this attitude of just being bitter about everything. And that road, that root of bitterness in Hebrews chapter 12, the Bible says it will turn you out of the way. It will turn you out of the way. Look, it's sad. It's sad, but people are being raised this way today. People are being raised today to think that they're owed something. People are being raised to think that, look, they're bitter against, people are being raised to be bitter against people they've never even met. Someone they've never even met. They're bitter for no reason. They're bitter because of maybe the situation that they find themselves in. And then they become bitter because of the situation. And then they become that bitterness just leads to more bitterness and more bitterness. And they're standing around waiting for others to do something for them and give them something that they're owed. That's where bitterness will lead you. And then you will become more bitter of where that leads you.  And that is what the Bible is telling you. This can be said about your Christian life as well. Turn to Luke chapter 9. Jesus said this about your Christian life. Bitterness in the Bible is regressive to the Christian life. That means, you know what that means? That means it will set you back in the Christian life. That means if you want to go forward in your Christian life, you have to get rid of bitterness because it will set you back. It's not like it's going to pause you. It's going to turn you the other way. Look at Luke chapter 9 and look at verse 62. And Jesus said unto him, No man having put his hand to the plow and looking back is fit for the kingdom of God. Look what this is saying. Putting your hand to the plow is going forward in your Christian life. It's going and harvesting that field and doing the work that needs to be done that you all know needs to be done in this Christian life. Look, the Bible says if you look back, you're not fit for it. Look, it doesn't say you can't do it. It doesn't say you don't deserve it. It says you're not fit. That means you can't do it. You're not able to do it. It's like if we go on a big long hike and somebody's out of shape. It's like you're not fit for that. You can't plow the field if you're bitter because bitterness is going to keep you looking back. Bitterness is a form of constantly looking back and it will completely stop forward motion. This is the huge problem with bitterness. You find me. Look, you find me a bitter person that accomplishes anything. Find me a bitter person that accomplishes anything, especially in the Christian life, especially in the Christian life. Two steps, folks. You forgive and then you put your hand to the plow and you get moving forward. Look, I mean, this book, this book, this was one of the best things in this book, but the most amazing thing in this book, we looked at so many great quotes from this book, so many great character traits that Booker T. Washington had, but this thing popped out at me as, look, the most amazing thing about this book was the things that were not said, the complaints that were not made by him. Born in the worst conditions, in the worst situation, truly wronged, truly wronged, and then freed, and then freed, and he only chose to move forward. And what do you think? Do you think that after the Civil War, things just suddenly just got great? He couldn't go places. He couldn't buy things. There were things he couldn't do. There were places he couldn't stay. He said that in the book. There was still no bitterness when he talked about those situations. He just chose to only move forward. That is a great character trait. That is a great character trait. And you know what?  And there was plenty of wrongs still happening. This is why that forgiveness needs to be a one-way street.  I'll forgive you as long as you apologize for every single thing that you did wrong. And you know, you're one of these people, and you say, oh, but you didn't apologize for that one thing. Look, you have to forgive, period. It's one way. It's for you. It's not for them. But you have to recognize this pattern in your life, folks. I know we all suffer from this to one degree or another. You have to recognize, you know, you were wronged. You have to recognize that there might have been some disappointment and some anger that came from being wronged. And then you know what came in? I bet you some unforgiveness sat in. Turn to Matthew chapter 18. Matthew chapter 19, sorry. Matthew chapter 19. Matthew chapter 19. Matthew chapter 19. Look at verse 21. No, I'm sorry. It is 18. Look at Matthew chapter 18 in verse number 21. Look what the Bible says. Then Peter, then came Peter him and said, Lord, how off shall my brother sin against me and I forgive him. Tell seven times. Jesus saith unto him, I say not of thee until seven times, but until seventy times seven. You know, what Jesus was saying there was, just keep forgiving him. It's not like you have to keep track and do the math on that. He's just saying, just keep forgiving them. I think sometimes that we all forget this, that letting go of wrongs and forgiving, letting go of wrongs that people have done to you and forgiving other people is a benefit to you. It's a benefit to you personally. It's more, look, it's more than just the person being forgiven. It's for us to regain joy in our lives. It's for us to move forward in our lives. Forgiveness isn't really at all for the person being forgiven. It's for you. After all, look, it doesn't say that that person has gotten right in Matthew 18. It doesn't say that they got right. It's a command for you. For you to act towards your brother. Look, so the root of bitterness doesn't start to grow within you. That's what it is. And guess what? That root of bitterness will grow and it will turn you into an unproductive Christian in this life.  This is a real threat to the ministry. Bitterness.  Can you imagine as a pastor is leading a church that is out plowing the field, that is out carrying the gospel to the lost and doing that work and putting his hand on that plow? Don't you think Satan would like to get those hands off that plow? Why do you think you see so many pastors being attacked? Why do you think you see so many pastors being attacked from inside their church, from outside their church? Look, this is why Pastor Jimenez, I don't know if you've ever heard him say this, but there's this really great statement that he made one time. I don't know, maybe he said it a couple of times, but he said, every look here, it's a real threat to the ministry. It's a real threat because look, if I just get bitter, it could just destroy my joy for the ministry. Could you imagine? Can you imagine? I mean, that would be, that would be, I mean, joy. I mean, it kills joy. It kills optimism. It kills the excitement of reaching people with the gospel. Bitterness. Sounds like a perfect tool of Satan. This is why Pastor Jimenez said, one time he said, every man, every man, talk about a blanket statement, every man should either be a pastor or be supporting a pastor.  No, hey, if you don't want to support me, fine. But go to somewhere where you can support a pastor. Go somewhere where you can get behind a pastor, someone that's carrying the gospel to a lost and dying world and support that man. Because look, they need it. They need it. Just like Moses needed his hands held up by other men. Look, the ministry is, look, you're just, it's pretty easy just to come to church. You're like, oh, it's not that easy for me. Look, that's the easy thing. It's easy. You just come to church. You just listen to the sermon.  Look, being in the ministry, you are the center point of attacks. And look, this needs something, this needs support. This needs support. And look, I have to be careful. I can't get bitter. I can't get bitter, could wreck the ministry. If I just became this bitter person, you know, if somebody called me, yeah, I can't come to church, yeah, you never come to church. Look, it could literally get the hands of the preacher off the plow. And then what's going to happen? And look, here's another thing. Here's another thing. Look, you just got to forgive people and move forward. And you got to not worry about other people. Because guess what? But you're like, oh yeah, but if I forgive them, then they're not going to change. Look, guess what? Guess what? I got to tell myself this. You tell yourself too. It's not my job to change you. I'll stand up here and I'll tell you what the Bible says. You go home and decide for yourself. And then you and God can work it out.  It's your job to forgive them. It's your job to forgive them. You're like, but then they won't get right. That's not on you. That's not, that's the answer, folks. You forgive people. It's a one-way street. That's it. Forgiven. Forgiven. Did they get right? I don't know. I hope they do. I pray they do. But that's not on me. And guess what? That's not on you. Don't put that on you. There's enough put on you in the Bible. Don't put other people getting right on you because that will form that root of bitterness inside you. Don't ruin your own Christian life because someone else didn't get right. What sense does that make? It doesn't even make any logical sense. Because as that root grows, it gets even worse. You're like, how could it get worse than this? I'm going to give you one last point. Here's how bad it could get. Bitterness. Turn to 2 Peter chapter 1. You have to forgive other people and them getting right is between them and God. Bitterness can focus you so much. Here's the last point I want to make this evening. Bitterness can focus you so much on the sins of other people. You could become oblivious to your own sin. Turn to 2 Peter chapter 1. 2 Peter chapter 1. Look at what the Bible says. 2 Peter chapter 1. And to godliness, brotherly kindness, and to brotherly kindness charity. For these things be in you and abound. They make you that ye shall neither be barren nor unfruitful in the knowledge of our Lord Jesus Christ. Verses 7 and verses 8 is the good. Verses 7 and verses 8 is godliness, brotherly kindness, and in brotherly kindness charity, which is love. For these things, look these are the good, but he that lacketh these things is what? Is blind and cannot see afar off and have forgotten that he was purged from what? From his old sins. Look folks, bitterness, bitterness will blind you. Can you imagine a state in your life where you could be blind to your own sin?   Because these people are, if they're saved, they're second Peter chapter one people. They're second Peter chapter one people. They have let the root of bitterness turn into a tree and they do not even know that they're sinning. They're so blind. They're so bitter and they're so blind they have this tree of bitterness completely covering themselves. They don't even, they're oblivious to their own sin. Can you imagine being in a worse place in your life where you're just committing grievous sin after grievous sin, after grievous sin and you don't even know you're doing it? That's where bitterness will get you.   What a nightmare for a saved person to be in, but the Bible says that that can happen. You got to take, look you got to fix that, that that root starts to grow. You got to fix that thing right away. I mean to think you could fall into sin yourself and not even know it. Scary. Bitterness is a terrible disease and I guarantee it affects us all. It affects us all to one degree or another, but look folks, you got to recognize it right away. You got to identify its cause and you just got to forgive one way. That's what the Bible says. You got to move on, you got to move forward and guess what? You know what'll happen? You know what'll happen if you forgive one way and you put your hand back on the plow and you start plowing, you know what will happen? Your joy will come back. You're like I just been bitter and I've been negative for so long. But forget, look I'm telling you, this is a choice. This is a choice that you can make. You can choose to forgive somebody that has not gotten right. You can make that choice and it will be like a ton of bricks that comes off you. You will feel it.  You pray that God intervenes and helps get people right and helps people to come to the truth. And you can pray but that's between them and God.   And as far as your Christian life goes, look if you're not having joy in this Christian life, if you don't experience joy in this Christian life, if you don't enjoy coming to church and hearing the Bible, if you don't enjoy seeing your brothers and sisters in the church and spending time in fellowshiping, if you don't enjoy that, if that doesn't give you joy, there's something wrong. And you need to think about that. You need to think, somebody's forcing you to come to church, you know look, there's something wrong there. And you need to find what that is. I guarantee you right, there's a good chance that bitterness has something to do with it. It's a risk for all of us. It's a risk for all of us. And guess what? Booker T. Washington is just such a great example of somebody who just didn't have any part of that.  This is an autobiography, this isn't the Bible. But you know the beauty of the book and the reason we went through all these different subjects was because we look at somebody who actually practiced the principles that the Bible says. And we're like, man, that sure worked for him. I mean, what else can I do?  If you listen to the Bible, things will go the way that the Bible says. Look, these are promises that God gives you. But it's also nice to have an example of someone that actually did it. Of somebody that actually got those results. Somebody that actually did put these principles in practice in his life, it's a proof. You ever do a trigonomic proof? It's a proof that the formula works. It's a proof that the Bible works. And that's why we went through this sermon series. But bitterness, it wasn't what the book said on this topic. It was what he didn't say. He was not a bitter man. He only looked forward. He kept his hands on the plow because he can't do both. Let's bow our heads and have a word of prayer.


My name is Alexis Drake and I studied the Marketing and Leadership MSc with the Senior Leader Apprenticeship at Cranfield School of Management. My job title now is the Talent Attraction Marketing Specialist and I work at Read Talent Solutions. I would say this course transformed my career because I was headhunted into a more senior position and it's allowed me to do much more strategic work than I did previously. I decided to study the Marketing and Leadership MSc at Cranfield for three cool reasons and firstly it was really to consolidate my marketing experience that I'd gained over a lifetime. Secondly I really wanted to learn the strategic theories and concepts that backed up that knowledge and lastly I felt it was a really good way of springboarding my senior career in marketing. It's important to me that the Marketing and Leadership qualification was developed in partnership with the CIM Academy because I felt that the CIM was such a well-respected marketing organisation globally so it was very well renowned. Also it meant that the academics were underpinned by an industry recognised qualification which is a lot more practical for working people like myself and also the work-based project was fantastic for my employer because it meant that they felt they got value out of me studying. There are so many benefits to studying an apprenticeship. Firstly you can work, study and apply the learning simultaneously so literally the minute you start the course you're applying it into your job. Also for me kind of an unexpected benefit was that I got to meet peers in my industry so you can get a little bit myopic working in your own organisation or your own industry and it was a really great chance for us to cross-pollinate ideas so you get put into learning teams and you get to understand how people do marketing in different industries which was great. Also I've definitely made friends for life on the course.


This comes back to the basic human rights question, why do we fight for human rights, I guess. But in this context I think it becomes more obvious than ever. For me it's clear either we choose the way to do it jointly and to look after each other and do it in an empathic way or we go down the road of survival of the fittest which is not the society I would like to live in actually. And that's for me the deep conviction that we are social beings and therefore it's so harsh for us, especially for us to be in these social distances at times but as social beings we need to look out for each other and we shouldn't join in and look out for the strong ones but we need to look out and protect those that cannot speak for themselves or that are not heard and to be their voice I think it's a very strong message that comes with human rights.


Hello children, it's story time again. Today I'm going to read a book to you. It's about a boy and his name is Tim. What can you see on the front of this book? Well, I can see a mirror and I can see a boy in that mirror. The title of this book is, Who's That Baby? Author is Chisanka Mukuka and the illustrator are Natalie and Tamsin Hendrickson. Tim is playing in his room. He looks at the mirror and he sees someone. He's wondering, who's that baby? That baby can walk just like me. Tim bends down to touch his toes, my wiggly toes. That baby's wiggly toes. Mama covers the mirror with a sheet. What's the color of this sheet, children? Yes, that's right, it's red. Mama covers the mirror with the red sheet. Now Tim can't see the baby. Oh, that baby's gone, says Tim. Mama lifts up the red sheet. Now Tim can see that baby again. Who's that baby, he asks. Tim starts waving his hand, my waving hands. The baby starts waving his hand. The baby's waving hands. Children, can you wave your hands? Tim picks up his ball. What's the color of his ball? That's right, it's blue. He holds his ball in his hand. He wants to play with the baby in the mirror. He asks the baby, want to play? Tim is very curious. He wants to find, who is that baby? He searches for the baby. He looks behind the mirror. Oh no, that baby is gone. I can't see the baby in the mirror now. Tim peeps back in the mirror. Huh, now I can see the baby. Tim wonders, who is that baby? Tim touches his nose. My cute nose. That baby's cute nose. Well, can you show me where is your nose? Tim starts making funny faces. I make a funny face. So does that baby. Tim goes closer to the mirror and he looks at the boy in the mirror carefully. Hmm, the baby has hair just like me. He has two eyes, one nose.  He has two hands and he has fingers and two legs. Oh, that baby is me. That's right, that baby is Tim. Look at Tim, what is Tim pointing at? Well, he's pointing at all of you. Ah, he is saying, go look at yourself in the mirror and see, who can you see in the mirror? Well, do let me know next time. Until then, happy reading, happy learning. Bye.