Welcome everyone to the session on property-based testing with Magda. We're so glad you could join us today, Magda. Thank you so much for being here and yeah, without further ado, over to you, Magda, all the best. Hello, everyone. My name is Magda and I'm very happy to be able to be part of the functional conference here and to be able to talk to you about one of my favorite topics about property-based testing. But to be honest, when I first met property-based testing, I wasn't too impressed. It was during my first months in Scala about four years ago, when everything was still new and strange and difficult to me. And at that time I noticed that each Scala project that I joined has something called property-based testing among the tests in it. And at first I thought, oh, that's just another Scala thing. So I will get to do the same thing that I already know in Java, but I will have to learn to do them the Scala way. But when I really got to understand what they're about, I thought, wow, now this is something different. This is something amazing and revolutionary. And the reason why I thought that is that because in property-based testing is the library who does the heavy lifting for you. So your role is to specify some rules about your code and the role of the library is to find the bugs for you, is to find the holes in your understanding of your business requirements. So that's why I thought that it's something really awesome. And my next thought was, so why has no one told me about this before? It's something that you can easily use outside of Scala, even outside of the world of functional languages. So why am I learning about it just now? So today, I would like to do just that. I would like to show you that property-based thing exists, that it's awesome. I'd like to show it to you in the code. And if you haven't yet heard about it, then I would like to encourage you to try it. So the plan for the next 45 minutes is I will show you how property-based testing is different from any other kind of testing. I'd like to show you how it looks like in the code and how you generate the data. And then in the second part of the presentation, even though right now I may sound like a salesperson saying that this is just a great thing, but in the second part of the presentation, I will tell you what is some of the fine print? What are some of the challenges that go with property-based testing? So let's start. And the best way to start would be with an example. Let's imagine a sample domain that we would be working on and then we would like to test. Let's say we have a calculate discount method. This is the method that we would like to test. It takes an instance of customer and a local date of today. And the customer class you have below, it has the customer name, the date when the customer has joined, and their date of birth. And the algorithm, the business logic of the calculate discount method is that if the client, if the customer is with us for less than a year, then they get no discount. If they are with us between one and two years, they get 10% discount. And if they are a client for more than two years, they get 20% discount. And to keep things a little bit more complicated, let's add a special birthday discount so that on the day when the customer has their birthday, they have a special 30% discount just on that day. We will be working on big decimals, so 30% will be 0.3. So now, how would we go about testing that in a traditional style of testing? As opposed to property-based testing, we can call traditional test example-based tests. So if I were to test such a method in traditional style example-based tests, I would write a couple of test cases. So for example, the first test case should calculate 10% discount. I would prepare an instance of the customer class who has joined one year ago. They have some date of birth, but it's not important because it's not their birthday here. And then I evoke our business method, and I have an assertion at the end to verify that the discount is 0.1, so our 10%. And I would have a similar test case for 20%. So again, I'm creating a customer who has joined two years ago, doesn't have a birthday. I call the business method, and then I call the assertion to verify that the discount is 20%. So this is cool. And now let's test the birthday discount. So again, I'm creating an instance of customer who has joined just now, but it is their birthday today. They are 32 years old today. And I verify that the discount for them is 30%. So now with those three test cases, I have the main logic of the method cover. But of course, I know that this is not enough because I have to also test the edge cases. So what test cases could I think of here? Let's say that for a customer who has just joined, we want to verify that they get no discount. So I prepare an instance of the customer who has joined just now, and I verify that the discount for them is 0%. And what other edge case could we think of? Well, let's make sure that the discount doesn't grow indefinitely, so that for example, if a customer is 10 years with us, they don't suddenly get a 100% discount, and then we would get no money. So let's create an instance of the customer who has joined three years ago, but doesn't have a birthday today. We calculate the discount for them and verify that it's still only 20%. So right now we have three test cases for the normal happy buff and two edge cases. And with such set of test cases, I would say, okay, that's enough. I did a pretty good job at testing. I've got the edge cases covered. Everything is correct. Everything is green. So let's move on with life. Let's start implementing the next feature. And now how would that be different in the world of properties with property-based testing? So if this is property-based testing, then what is actually this property? This is some kind of a rule about your code. That you define that you want to say that it has to be true no matter what the input data you have for your method. So it has to be always true. And your role is to think of such properties, such rules, and the role of the library is to find where this rule is maybe not true here because you have a bug. So what kind of properties we could think of here, for our example domain? One property that we could come up with would be that no matter what the customer and the date of today we are getting, the end result, the end discount is never less than zero. So it has to be a positive number. And on the other hand, another property could be that no matter what the input data, the discount is never bigger than 30%. It has to be always true. So as you see, these properties don't have to fully define and fully test your algorithm, your business logic. It can be, it can test just some part of your logic. It can be some kind of an invariant or some kind of safe boundaries. So that no matter what crazy data you get to your method, the end result is within those safe boundaries. And this is one of the ways where property-based testing is very good to make sure that your code behaves. And what other properties could we think of here? We could say that if we have two customers of which one of them joined earlier in the past and the other joined later in the past, then the discount for the older one has to be greater or equal than the discount for the younger one. This is something that has to always be true for the two customers within that relationship. And similarly for the birthday discount, a property that we could think of would be that if we have a customer who has a birthday today and another one, then the discount for the birthday customer is always greater or equal than the discount for any other customer. So this is four properties that we could add here for our domain. So now let's see one of it in the code. But before we move to the code, let's say a bit about libraries. So property-based testing has been with us for over 20 years now. It has started with implementations in Haskell and Erlang. And since then, a lot of the libraries have followed. So right now, no matter really what language you are using, there's probably one or more libraries for property-based testing created for this language. However, not all of the libraries are created equal because as I said, the library here plays a huge role. It does the heavy lifting for you. So we can have the support of the library which is very sophisticated, very helpful, or you could have a very basic library which helps only a bit. So it's a good idea to investigate a bit about which library is the most mature, the best for your language. And where does Scala, sorry, where does Java lay here? Where is it? In Java, you have, I think, more than 10 libraries that I could found for property-based testing, but there are three that I recommend to you that you can have a look at. Which one to choose is a matter of style, really, and preference. Some of them are related to the first one, related to the framework. So whether it's Java 4 or 5, some of them are framework-independent. And this quick theory has this specific DSL which can be to your liking or maybe you don't like it. So you have to take a look. However, all three of them are great. And during this presentation, the examples will be in Java. This is one of my favorite libraries for property-based testing. It's very mature. It has a lot of features and it helps a lot. But everything that I talk about can be easily done with any other property-based testing library in Java or in any other language. The concepts are the same. So let's go to our example that we have been waiting for. We are writing the property that the discount is never larger than 30%. So the body of the test is pretty straightforward. We calculate the discount and we have an assertion that it's not bigger than, it's actually less than 30%. Then at the top we have the property annotation. But all the magic is here in this for all annotations. Because what happens here is we say to Jakewick, dear Jakewick, this is my property. Please generate a thousand valid pairs of customers and current dates. And please verify that this property is true for every set of data that you have randomly prepared for me. Well, I said randomly. But in fact, this is something more than randomness.  Because what the library will try to do is it will try to find tricky data for you so that it breaks your code. For example, if you had numbers, then you can make sure that you will for sure have a zero, the minimum number from the range, the maximum number from the range, and so on. If you had strings, you could be sure that among the data generated you will have an empty string. You would have very long strings. You would have strings with various car sets, maybe Japanese kanji, maybe Polish characters. You would have white spaces, non-printable characters, and so on and so on. In terms of lists, for example, you would have empty lists, very long lists. Lists with consist of the same element, repeated over and over again, and so on. So the library tries to find tricky data for you. And this is one of the things which the library can be excellent at or it can be basic at. It's how nasty data generated is. And what happens now when the library finds a bug for you? When it finds that during one of those thousand runs, something is not right and your test fails. jquick in this, jquick, for example, prints a lot of helpful data here. So let's look at this from the end. Here we've got this original sample. So this is actually the set of data for which jquick has found that my property was not true, that the test failed. But what is here this sample thing? Actually, jquick and some other property-based testing libraries don't stop at finding an example for which your test fails. It will actually try to simplify your example, your input data, to find the simplest example which still makes your test fail so that it's instantly visible to you what the real problem is there. It's called shrinking in the world of property-based testing. And can you see here what the problem was in terms of my implementation and my test? The problem was 29th of February. So I have actually forgotten about leap years, and my code was throwing an exception when such data was passed to it. So see, this is the exact thing where property-based testing just shines at. It finds the bugs for you. Because usually when we write code, we think about a couple of examples in mind, and we write the code thinking about those examples, we write the tests thinking about those examples, and we are biased to thinking about them. And the library, it's not biased. It's finding weird data for us. It's finding tricky data that we haven't even thought of, and this way finds bugs for you. So what happens if we fix the bug? After all, it's random data. So when we run the test again, will it be green because I have fixed the bug or because we have another set of data? Actually, what Jake Quick does, and it's really nice, is that after failure, when you run the test again, it will use the previous seed. If we have randomness, then we have seed somewhere underneath always. So it will use the same seed to make sure that we have the same set of data generated, and that you know that when your test is green, it means you have actually fixed the problem. So that's just one of the things that Jake Quick does very nice. So now let's talk about generators. Where do we get this data from? And in property-based testing, it's a very important thing to provide the right generators, and which will provide correct data for your methods. Because if your generator generates incorrect data for you, which should never happen really in your system, and then you don't have to care about, then if your test fails, it doesn't give you any value. But if you have the correct generator providing correct data for you, then if your test fails, you probably have a bug in your code. So when you're working with simple types, you have a couple of generators out of the box. For example, for strings, you can have generators out of the box. You can specify their ranges. You can specify what kind of characters you want to include, and so on. For numbers as well, you can have positive, negative numbers. You can have big decimals and requested scale, and so on. You can specify collections as well. You can specify what elements are inside the collection and also what size the collection has to be. You can work with optionals or with nulls, and you have many, many useful generators out of the box. And if that's not enough, then you can write custom generators. The way you do it in jquick is you often use this arbitrary class, and on it you have static methods that you have to call, that you can call. So for example, here you have a generator, so a method returning an arbitrary of string. So this is arbitrary is a generator in j. So this method will return to you a generator of strings with the range from A to Z, but with Q filtered out, and with the length between one to eight. And the same way you can have here, and the way you use it in your property-based test is to this for all annotation. You either provide the name of the method or the string that you have provided next to the method. And if this is still not enough, then what you can do is you can combine the generators. So let's say here you want to have a generator for valid customers. So this is our customer case class. We know that it has a name and two dates. So what we need is an arbitrary of customer. And for this, we use an arbitrary of string defined here like that, so strings, alphabetic numbers between three and 21 of length. And then for the dates, we need to provide our own generators. So for this, we write a helper method that for a given range of dates will return to you an arbitrary of a date. And the way you can work with that is first you calculate the size of the range, and then you start from an arbitrary of longs. This is something you have out of the box. And then you say that you want to have longs from the range of between zero and this number, the number of days between minimum and maximum date, and then you map it to create such a date. What you end up with here is the arbitrary or the generator of the dates from a range. And the way we would use it is you provide different start and end ranges, depending on what you want to generate. Because for the date of when the customer joined, the oldest day the customer can join is just the start of our business. And the most recent date is the date of today. But for the date of birth is different. What is the minimum date of birth? Well, I don't know, but let's ask our product owner and when we get the answer, let's put it in the constant here. And the oldest, the soonest, the latest earliest, well, the maximum number from the range, the maximum date from the range is 18 years ago because maybe we have in our terms that you have to be 18 years old to join. So this way you can have two generators defined exactly according to the business requirements and business rules that are true and valid in your system. And then we can combine those three generators. And here we end up with the generator of customers using the constructor of the customer class. And this is what you would do if you don't have a generator for your specific classes out of the box. And then what can you do if you have to specify the relationship between your types, between your instances actually? So in our case, we have this property that the discount should be proportional to membership years. So we need to have a customer who joined earlier in the past and the one who joined later in the past. What we can do is we can use assumptions. What it does is it tells to the library out of the set of data that you generate, the library, please take only those for which this assumption is true. So only take the customers who don't have a birthday, the older and the newer cannot have the birthday today and please take only those pairs when this one has joined earlier in the past than the other one. And now with that assumptions, we can then call the calculate discount method for the both of them and verify with an assertion that the discount for the older customer is greater than for the newer customer. So this is a handy, a useful thing which sometimes you may want to use. And there's another thing that I really love about jquick and some of the other libraries is that sometimes you want to say that some of the data you want to test better more frequently than others. So for example here, in terms of our discount counting, let's say that we have a property which takes the number of years, the method prepare discount is written a bit differently. And we want to say that the majority of our customers are with us for a year. So what we do do, what we do here is we define the frequencies. We want to say that we want an arbitrary or a generator which for 60% of the time returns a one here. For 30% of the time it returns a zero and for 7% of the time returns two years for three, three. This way, and combining it with other generators which provide different data in our system testing them together, we make sure that the data that is most important, most frequent in our system will also be tested more extensively in our tests. So that the generators and the data are closer to real life. So this is an excellent point and something that when you write your own generators can be very useful. So now what are some of the challenges of property-based testing? If it's so great, then why doesn't everybody in the world already use property-based testing everywhere? Do example-based tests still have to exist? Maybe we don't need them anymore? Well, of course, it's not all so perfect. You have some challenges. And I will talk about four challenges here that are most important for my point of view. The first one is that property-based testing lets you, it actually makes you ask difficult questions earlier. Because traditionally, when you write tests, what you could do is you could, for example, follow the TDD, test-driven development, and write a very simple test case first, then write a very simple production code, then write a more complicated test case, more complicated production code, then think about edge cases and so on and so on. You have this nice cycle. And here with property-based tests, the first thing you have to do before writing the first line of code is to answer the question, what is the correct data in your system? So you have to define those minimum and maximum ranges, for example. So you will end up very early in the process, going back to your product owner and asking them, see what is the longest surname a person can have? Or what is the maximum number a person can spend for magazines each month and so on? By the way, these are the real questions that I had to ask when writing property-based tests. So you have to go back to your project owner and ask them those, even though you haven't really tried, you haven't even started testing. So this is kind of different and something you need to get used when writing property-based tests. The second challenge is non-determinism. It's random data. We don't really like it, do we? So it can often happen that you write your tests, they're all green on your machine, you repeat them again and again, they are green, they are green, it's fine. But then you push it and on Jenkins, they fail, they fail. What do you do? Well, what you do not do is you don't say, this is a flaky test, let's rerun it. No, you have to actually open the Jenkins logs and see what kind of data was generated for which you're called through an exception or returned invalid result. You have to take care of that. And how do we deal with that? How do we think about it? Well, don't get mad, think about it that actually property-based testing has found a bug for you. If it didn't found it, then it's probably your client or your end users who would find it. Someone who would have a longer name than you expected or that would put different data that you didn't expect to your system. And the first challenge is documenting. Often when I am new to some part of the system, I want to know what the code is about. What I do is I open the test case and I read the simplest first test scenario, the naive happy path scenario. I have an example there and I already know what the code is supposed to be doing generally. And the way our brain works actually is it likes the examples. It likes the concrete examples. So what it's not interested in that point, it's not interested in some kind of invariance, approximations and so on. It wants to see examples. And for this kind of documenting property-based testing is not so great. So this is one of the reasons why example-based testing have to stay. And the last challenge and the most important one in my opinion is coming up with properties. This is something that is not always so easy. So right now I have shown you properties that can be for the example domain that we have, but when you try to use properties next week in your project, you may find yourself staring at a blank screen not knowing what properties to think of because you have to define a rule which is always correct, but you cannot repeat the implementation. You cannot repeat the production code because then it doesn't have any value because if there's a bug in production code you will have a bug in your test. So you have to think about it differently. And this coming up with properties is a creative process for sure. So sometimes it is easier when you talk about it with your colleagues. Sometimes it's easier if you go for a walk or take a shower, just do something else and then you have this Eureka moment, you know the perfect property which will test your code. It's a creative process, but also you will get better with experience with that. But also that's not all because smart people have come up with a list of patterns for us. We like patterns, don't we? So you can have a look at this list of properties and when you need to find an inspiration to come up with properties, read a couple of them and probably you will find something that matches your business logic and is the right property. Let me show you four examples of such patterns here. The first one is Oracle, but not as a company name, but as a person who knows everything. So if you are a lucky person who somewhere, maybe in a different language, in a different package, has an implementation which does the same thing that you have to do in your code. Maybe you are writing a super efficient algorithm for sorting, but somewhere else in the standard library, there already is an algorithm for sorting, but which is not so efficient for your kind of data. So what you can do is you can run both algorithms on the data generated for your property-based tests and compare the results. If they are the same, then it means your implementation is correct. And if you have such a Oracle or such a reference implementation, then this is a very, very nice way to test your methods with property-based tests. Another nice pattern is alternate wording. So this works best with a colleague.  So if we have a method for sorting and we would like to rephrase it in a different way, we could say that for each input list, the output list is sorted. Well, that doesn't give us a property. Let's try again. For each input list, if you look at the output list, then every number has to be greater than or equal to the previous number. And now this is something that you can make a property of because you can take the pairs in the output and compare them. And this kind of pairwise order is a very nice property in terms of sorting. So this is a very good pattern that you can use every time you want to write a property. Just think differently, rephrase what your method does and find the property. Another useful pattern is invariance. So some things never change. For example, if you have a list, then even after your sorting algorithm works, the number of elements in the list is still the same. So we can check this invariant, this kind of safe boundaries here with properties. Another invariant could be that every element which is on the output list also had to be present in the input list. Nothing comes up from the blue and so on. This is something that is very simple. It's not very creative. Maybe sometimes it can be, but it gives you confidence, some kind of confidence that for weird data, your system, for example, doesn't throw an exception or doesn't duplicate or produce extra values and so on. And the last useful pattern is symmetry. This is something that I like a lot. For example, imagine that you have a serialization method somewhere in your code, but you also have a deserialization method. What you can do is what you can test them together.  Another example could be writing to a database and then reading back from the database and so on. This symmetry is also something that is not very, very creative, but it can find a lot of the bugs for you. Okay, so now that I have said that there are a couple of challenges and that maybe property-based testing is not as easy or not as straightforward as traditional tests, then do you have to have property-based testing for all of your code? Of course not, but where do you apply property-based tests? I have two strategies for you that I recommend. The first one is if you write a new piece of code, maybe start traditionally. So write a simple test, then a simple implementation, a more sophisticated test, more complex implementation, then maybe think about the edge cases and then when you think you have got it right, you have nothing else to add, only then start thinking about properties. And then maybe you will have to think twice about the business requirements and the way you understand them. Maybe the property-based tests will find some edge cases for you. Maybe it will find some bugs. Then you will fix your code, provide another property, and then this way you have a bit longer feedback loop. It's a journey which can be very exciting. And the other strategy is only write the properties for the key components in your system. What does it mean, key components? For example, maybe you don't want to have property-based testing for some trivial parts of the system, but you want to have them for those complicated ones. For the ones which calculate some weird things and nobody really understands what this piece of code is about. If you try to think about properties for them and you run property-based tests for it, maybe you will discover what it's really about and it will find some subtle bugs for you. And what else it can mean, key components, it can be the core parts of your system. This part where your system is different from the other companies out there. This part of the system that you want to make it right because if there's a bug in it, maybe someone will lose money. Maybe your company will lose money, maybe your end users will lose money or somebody will be really angry. So for those, it's worth this extra investment to think about properties and to make sure they're tested as well as it can be. So to sum up, the property-based testing comes with a higher cost, it's creative, it may take you longer time, but on the other hand, what you get in return is you have the value which no other kind of test can provide to you. The thing where the property-based tests shine are with finding edge cases and misconceptions in the way you think about your code. The most challenging thing is coming up with properties but you have the list of patterns and it will come more naturally with experience. And the last tricky part is balance. I cannot tell you that, I don't know, everybody should have 40% property-based tests and 60% example-based tests because every project is different. But if you find the right balance, if you find the sweet spot between example-based tests and property-based tests, then you will know that you have made everything that you could so that your code is as correct as possible for the happy path and edge cases you already know about and for those that you haven't ever even thought of. If you'd like to know more, I encourage you to read the J-Quick documentation which talks about more features that I didn't cover here and also talks more about thinking about properties. This proper testing is a great series of posts about property-based testing and coming up with properties and it doesn't matter that it's about the Erlang library. The first link is this list of patterns that you may want to add to your bookmarks and consult it for inspiration when you are trying to think of properties and all the examples from this presentations live in a GitHub repo under the last link. Thank you. If you have any feedback or comments, you can scan the QR code below and if you have any questions, I will be happy to answer them now. So let me see the Q&A tab. Yeah, so we have a question there. With so many iterations of a given property test, does property testing take a long time to run? This is an excellent question. After all, we are running our test, for example, a thousand times. So it should be a thousand of times slower or longer. Actually, it's a bit better than that. The libraries do a good job of optimizing this but still this is a lot of the runs. And you may want to think about it when your test does something special. For example, if your test reads from a database or opens some files and so on, then maybe you want to specify it in JQQ just provide an annotation that this property test, let's just call it only a hundred times or only 10 times, not a thousand. And this is also something to take into consideration when writing all kinds of integration tests that can take longer. So that's a very good thing to watch out for. Thank you so much. Yeah, that was a great, very thorough presentation. Well, yeah, thank you so much. I'd love to share your experience for this great presentation.


I thought that the few days before the trip as well as like the trip that I'll be separate I'm going to vlog. We got a film. So this has been an exhausting time So this is the morning before we're leaving for the trip. I don't know if this is a separate vlog, but if it is Welcome to the vlog. I'm pretty much all packed. I just have to do a few things. So I'm going to like make my bed Do some computer quick stuff before I go for my YouTube videos that I did yesterday because I got them all done But I have to like deal with a copyright thing and then have to deal with a thumbnail thing so other than that they're done, but complications So I was not able to get all my videos stuff Managed before I have to go because one of the videos I have to re-upload But it's fine because it's done so soon as I get back or like when I get back whenever I technically have a video done I just have to upload it properly But there is a video schedule to go up while I'm away So I'm super happy about that and I hope that all goes okay because like the new like YouTube studio beta thing It's like really weird. Like you guys who have channels are probably like what like same like I It just looks weird, but anyways, I guess now I'm leaving for my flight or at least drive to the airport So we made it to New York City. I'm here with my mom and one of her good friends. So I'm super happy to be here I'm not here for anything like special like book con But like I'm super excited to be here because like I don't travel that much I'm just super happy to be here and it's my March break So like I have time off and I'm just really excited so like the previous clips are all from around the city and stuff like that So that's super fun. I'm just like such in a good mood I just had a video call with my boyfriend and I was in a super good mood because I just love that you know, I'm Traveling and I'm around and yeah, I'm super happy I went to my favorite little bookstore around here not strand. That's my like other favorite but the Kinikua I can't even say it properly But it's like the little Japanese place and I got the girl from the other side like I showed them previous clip and I got Cheese sweet adventures volume three, which is brand new. So I'm super excited about these ones and those are the two Little books I bought. I also have to get some things for not have to but I want to get some things for like my friends and stuff So like I have to like look around and like see if I can find anything for them We're only here for like three or four days. So Yay chilling by myself in the room um It's about like nine o'clock. So like most things are closed unless I want to like I'm not going to go to a club because no, thanks but like Most things are closed. So like I don't really know what I'm going to do but Maybe I'll read or something like that. I don't know playing what I'm going to do tomorrow The entire day I didn't film absolutely everything just because I didn't have my camera the entire time But like I went to places like the nintendo store Rockefeller center stuff like that Um, it's a bit later in the evening now. I just got Thai food. I got it uber eats at the hotel Um, which was a pain, but I'm kidding. It wasn't a pain the people here are actually great but I got a bunch of Thai food and I'm super excited about it and it looks amazing and it's all vegan and I'm like super happy about it So, yeah, I just wanted to give you guys an update um last night. I fell asleep. Um Reading and watching tv not reading tv I was watching forensic files on tv and then during the commercial I would read from five feet apart So that's what I've been doing. Um, that book is interesting I don't hate it. I don't love it. It's just entertainment at this point But I'm super excited to have my food. So that's what I'm gonna do But like today yesterday was in a super good mood today has been kind of the opposite Which is usually how it goes for me anyways So I'm just trying to make the best out of my trip. So that's all I can do right but Yeah, and I went to Did I go to bookstore? I went to board the noble today as well Um, I just looked around quick and I got a quick like I got a vinyl as well I got the new avelovine album while I was there Like that's like the only like non metal music I listen to anymore. It's like avelovine Um stuff, but yeah, and I'm gonna watch some tv and eat my Thai food and I'll talk to you guys later


You're listening to the Naked Bible Podcast to support this podcast with the NakedBiblePodcast.com and click on the support link in the upper right-hand corner. If you're new to the podcast and Dr. Heizer's approach to the Bible, click on New Start Here at NakedBiblePodcast.com Welcome to the Naked Bible Podcast, episode 219 or 29th Q&A episode. I'm the layman, Trey Strickland and he's scholar Dr. Michael Heizer. Hey Mike, how you doing? Pretty good. Pretty good. How are you? I'm doing good. I'm doing real good since our first Naked Bible conference is selling quite well. So we probably got just a little over a hundred tickets left. So I just want to urge people to not wait because I don't want them to miss out. That would be a bad idea to wait. It would be a bad idea to wait. So I did want to let everybody know that I will be recording it. So just know that. Live streaming is still up in the air, but the video I will record it. And what we do with the video after that remains to be seen. So just know that at least it will be recorded. So I wanted to get it. Mike, I'm getting tons of emails about that. So I just want to officially put that out there. And as the summer goes on, I will have more information about live streaming and things of that nature. So there's still hope. So I want people. But you're not guaranteeing that the video taken will see the light of day anytime soon though. We don't know what we're going to do with that, correct? Correct. It will see the light of day, but soon is the optimal word there. I wouldn't say soon. Soon might be a year. Who knows? Hopefully not. But maybe. So I just don't know yet. So as we inch closer to it and I work out more of these kinks to figure out what we're going to do. We'll have that. Those types of answers for you. So just know everybody. The email me questions about the video and live stream and all that. It remains to be seen. At least there will be video. And when you get to see that, I don't know yet. So there you go. Hey, I can bring Calvin along and he can use a video camera. Yeah, there you go. There you go. We can have everybody work go pros. How's that? Yeah. Pass them out. That's exactly what we do. That's where right there. There you go. All right, Mike. Well, we the lie to you last week, you said we were to do baptism of the dead, but we're actually going to do two Q&As one this week and one next week. And then after that, we'll pick up the topic about baptism of the dead. Yep. So I guess with that, you want to jump into these questions here? Sure. Let's go. All right. She has a question regarding generational curses in the book of Deuteronomy. It talks about the curse of the law and about blessings and curses as Christians. Are we still bound by those laws? Do we have to renounce what our parents did and our grandparents and so on? Yeah, I'm not quite sure from this question exactly what curses. Stephanie is talking about because cursing shows up a number of times in Deuteronomy. So if we're talking about curses tied to the land, I would say, well, that's really not sort of in view because the whole concept of the people of God isn't really tied specifically to the land and or Israel failed in those regards and they were cursed. Now I'm thinking of a passage outside Deuteronomy like in Leviticus 26. It's very clear if you do this or that, I'm going to drive you from the land and that happened. That was the exile and so on and so forth. So if she's talking about that kind of stuff in Deuteronomy, the Leviticus 26 kind of stuff, there's not really much of a connection. But I'm going to assume she's talking about Deuteronomy 5. This is one of those generational curse passages that is a bit more sort of not attached to the land. It's a bit broader. Let's put it that way or at least not linked to that specific idea. So on that assumption, I'll just let me read Deuteronomy 5. We'll start in verse 8 and go through verse 10. Again, I'm just guessing that this is probably what's behind the question. This passage says you shall not make for yourself a carved image or any likeness of anything that is in heaven above or that is on the earth beneath or that is in the water under the earth. Sidebar, there's your three-tiered cosmology again. Verse 9, you shall not bow down to them or serve them. For I, the Lord your God, am a jealous God visiting the iniquity of the fathers and the children to the third and fourth generations of those who hate me, but showing steadfast love to thousands of those who love me and keep my promise. So that's the end of the passage. And you get this third and fourth generation phrasing in this passage. So I'm guessing that's where this comes from. So it's the question, are we still bound by these laws? Well, in one sense, sure, we're not supposed to worship other gods. We're not supposed to bow down to other gods. The third and fourth generation thing, I think, though, is kind of really what's driving the bus here. And I would say that, again, in my understanding, again, I'm not alone here, just in the academic understanding, third and fourth generation, that language is there because that essentially amounts to the lifetime, the lifespan of the person who commits the crime, so to speak. So biblically speaking, you know, generation is actually not a terribly consistent thing to nail down in the Old Testament because the term is used in different contexts with different time spans, the longest of which would be 100 years for a generation. So if you have this family heritage, if you want to take the long number, you know, it's probably not, you know, something that's in the picture anyway.  So a generation, practically speaking, was roughly 20 years. And if you have third and the fourth generation, that's 60 to 80 years, chances are the person who commits this offense is going to be dead by the end of the fourth generation.  God is going to visit, you know, the sin of the father, really as long as he lives the rest of his life and his children are going to be affected by it. So third and fourth generation is pointing to a finite amount of time, even if you take the one instance I can think of where the term generation is sort of attached to something that would be longer than 20 years, in case people who are listening are interested in what I'm thinking of there. It's the Genesis 15 passage where God is conversing with Abraham about what's going to happen to his descendants. They're going to go down into Egypt and be, you know, in bondage there for 400 years, and you have the, you know, if you look at the passage, you have four generations mentioned there. So we do the math four divided by four, you know, 400 divided by four is 100 years. So that's probably a broad general statement, because if you actually even go look at the generations involved in national Israel from Abraham's time all the way up there, it's not a very precise number. So, you know, what the exact meaning of that is, again, is debated by scholars. But when it comes to actual physical genealogical generations, people typically in the biblical period got married before they were 20. So we use round numbers. So third and fourth generation is basically the natural lifespan of the person who commits the crime.  Is that fair? You know, why is God looking at this way? Why does the passage say God's going to visit the inequity of this person, you know, to the third and fourth generation on the children? Part of this has to deal with sort of the Middle Eastern, ancient Near Eastern outlook that scholars would refer to as corporate solidarity. And the idea there is that society, basic unity of society was not the individual, it was the family and the extended family. So you have instances both positive and negative in the Bible where a person will do something, you know, like a sin and their descendants will suffer because of that. And you have the opposite as well, where if somebody does something good, then socially, just societally, their descendants will reap the benefits of what their ancestor did.  You know, he gets promised a bunch of things and his descendants are included in the benefits that will accrue to David if he gets rid of Goliath. So you have this sort of social sense that if you, in David's case, if you do this, you know, life's going to be better, you know, for your kids and their kids and so on and so forth. So there's this corporate idea going on in the ancient world that's very common. It's not just with Israel, but it's to other civilizations as well at the time. Now, for this question, though, probably my favorite commentary on Deuteronomy is Teaguez. I've quoted it before. And I'll just read what Teaguez says about this idea because there are other places in the Torah, in Deuteronomy, in fact, that are clear that there's individual responsibility going on. That, you know, it's the idea that even though we have this sort of corporate mindset, basic unit of society, and there's, you know, corporate solidarity and all that, it isn't necessarily the case that God is holding other people guilty for what somebody else does. There's a difference between suffering the effects of sin and being considered somehow a guilty party of something that happened before you were even born. So we have to balance out how we look at this language with other passages in the Torah, and specifically in Deuteronomy. So Teaguez has a nice summary of this. He says, effective as this approach may have been, again, this corporate thing. Deuteronomy 24-16 forbids its application by judicial authorities. And he quotes the verse, a person shall be put to death only for his own crime. That's the end of the verse. So that's very, it's very clear statement of individual responsibility. Teaguez continues, he says, but experience showed that people often do suffer or benefit because of the actions of their ancestors. Cross-generational punishment by God is partially mitigated in the Torah itself. In the Torah, only Exodus 34-7 and Numbers 14-18 state without qualification that God visits the sins of fathers upon children. In both versions of the Decalogue, that means both versions of the Ten Commandments, the list of generations to be punished and rewarded is qualified by the phrases, quote, unquote, of those who hate me and quote, unquote, of those who love me and keep my commandments. And our passage, Deuteronomy 5, 9, and 10 is one of those, one of those qualifying passages. The phrases most likely refer to descendants, meaning that cross-generational retribution applies only to descendants who act as their ancestors did. In other words, God visits the guilt of the fathers on future generations that reject him and rewards the loyalty of ancestors to the thousandth generation of descendants who are also loyal to him. In other words, God punishes or rewards descendants for ancestral sins and virtues along with their own if they, the descendants, continue the deeds of their ancestors. So that's the end of the TGA quote.  You know, God's going to remember that sin is going to hammer away at you. Again, you have these other passages in the Torah that make it pretty clear that individual responsibility is important, you know, to God. And so you couple that with these qualifying ideas from other passages to say, well, essentially, if you walk the same walk, if you walk in the steps of your ancestors who did this thing, you're going to pay for it. You're going to suffer for it. So that's a little bit different than suffering the residual effects, say of a broken marriage or maybe alcoholism or something like this. Some sins that we're familiar with that have a long lasting effect on people's lives or at least could. That's a little different than God holding you guilty for something that happened before you were ever born. What TGA is suggesting here is that it really isn't the case. There are these qualifying passages in the Torah that sort of make, again, following in their footsteps in a behavioral sort of way part of what's going on in these kind of statements in the Torah. Greg has our next question. In one of the podcasts, Dr. Heizer briefly mentioned the documentary, Patterns of Evidence, which discusses an alternate timeline for Egyptian history. The producers also mentioned that the histories of surrounding nations are tied to the Egyptian timeline. Sounds like serious implications if the producers are correct. Yeah, that's true. This is a question that is really, really complicated. It's really not possible to give any sort of detail in a format like this to this question. I'm going to give it some broad brush strokes here, but even that is really not going to be adequate. People out there in the audience are interested and Lord help you if you are in ancient chronology. I say that as somebody who used to really be into this subject and sort of it became the pit of despair for all of you who have sort of watched the princess bride. It is a quagmire of obtuseness, complexity and difficulty and really no resolution. But if, nevertheless, you're still interested in ancient chronology, please subscribe to the newsletter. I've put four or five articles in the protected folder for newsletter subscribers by two authors, one of whom is Rol, R-O-H-L, and the other one is John Bimson, B-I-M-S-T-O-N. And the articles essentially talk about redating the exodus chronology. And there you're going to get all the nuts and bolts, but I'm going to try to broad brush stroke this as best I can. The issue is you do have serious problems in what is called third intermediate period chronology when it comes to ancient Egypt. Egypt for some of the listeners may know you have like old kingdom, new kingdom, middle kingdom, all that stuff. Well, between those kingdoms you have intermediate periods and flash or I guess, you know, quick crash course on Egyptian history. You have kingdoms when you have one pharaoh and everything is sort of solid and stable in society. You have intermediate periods when people are competing to be pharaohs and things are just chaos. So that's how Egyptologists break Egypt's history down. So during one of these, the third intermediate period, which a lot of that overlaps with the divided monarchy in Israel, there are really significant problems in third intermediate period chronology. And this is actually where David Roll, he dealt with TIP chronology, third intermediate period chronology in his dissertations. So he sort of camps out here. And, you know, I've read a number of articles by Roll on this and I think he's right. There are serious problems here. This is not the neat picture that other Egyptologists like to portray. So I think he's got a point. The short version here is that you have missing names in king lists. There are gaps in the king lists for TIP chronology and other issues as well. So if you look at it the way Roll looks at it, you can compress the third intermediate period by a couple hundred years. Now that means when you compress that period, all the rest of Egyptian history compresses with it. And the timeline shifts forward in this case since the third intermediate period is a late period. And if you do that, then the synchronisms between Egyptian history and biblical stuff change because you're moving the timeline. For anybody who's seen patterns of evidence, they try graphically to illustrate this. And I think do a pretty nice job of it visually. But if you compress the chronology, everything shifts. And this is what Roll is essentially arguing. Now, people who don't like Roll would say, well, you can't do that because there's a clear synchronism between one of those pharaohs in the third intermediate period, pharaoh Shishank and a biblical reference to pharaoh Shishak during the time of Rehoboam. So you can't just shift things. We have a secure anchor. Well, that's not really the case. One of the Bimson articles in the protected folder will show you in excruciating detail why the military campaigns of Shishank do not align in fundamental ways with the invasion of Shishak described in the Bible. They're markedly different. Just by way of a few examples, you've got, you know, in the biblical account, Shishak and Jeroboam, the king of the north, were allies. But in the Egyptian account, Shishank attacks the northern kingdom and doesn't attack Jerusalem. But in the biblical account, Shishak attacks Jerusalem. I mean, these are just fundamental disconnections between the military campaign stories of in Egypt, Shishank, and in the Bible, Shishak. People have sort of just assumed these are the same guys because their names are kind of similar. But when you actually look at the descriptions of what, you know, happened with Shishak's invasion and Shishank's invasion, they are just, I want to say miles apart. Maybe that's an exaggeration, but there are significant differences that really just can't be reconciled. And so if you don't have that synchronism and that it's really the only quote, unquote, secure one you have where the Bible overlaps with the third intermediate period, then you can shift the Egyptian chronology all you want. Again, you know, again, within the bounds of evidence. And this is what Rol does. He shifts it, he compresses it, and that moves the timeline, which then in turn produces other synchronisms that today Egyptologists and biblical scholars don't see there because they're still playing with the old timeline. So you have Egyptian texts that seem to talk about the plagues. You know, you have Egyptian texts that seem to correlate with certain parts of the Exodus story. And nowadays people say, well, no, we can't use that as evidence because it's 200 years too early or 200 years this or that. But if you compress the timeline, then they line up. And so this is Rol's argument. Again, this is very broad brush stroke. If you want the nuts and bolts details, please subscribe to the newsletter. You can just read all that to your heart's content and just get lost again in the vortex of ancient chronology. But, you know, my personal opinion is there really are problems on the Egyptian side with this. And I just don't know how you surround the disconnections between the Shashank and Shashak problem. I mean, for Egyptologists, it's easy. Or the Bible's wrong.  You know, and for some biblical scholars, that's where they go too. You know, either, again, they have no qualms with trying to figure this out because they want the synchronism. They need the synchronism to sort of make the picture what it is, regardless of their confessional commitment or lack thereof to any sort of sense of inspiration and biblical historicity and coherence. For those of us, that's just not, you know, like the first default position.  And Rol, I mean, I don't think Rol is a Christian or anything like that. But Rol doesn't like arguments like that. And good for him because they're cheesy. You know, they cheat. They take the easy path. And he's taken a real close look at TIP third intermediate period chronology. And I think he's right. I think there really are problems. The problems need fixing now. My disagreements with Rol are going to be because Rol quote unquote fixes this problem. Then he wants to try to fix ancient chronology problems everywhere. And not just the Near East, but like everywhere all over the Mediterranean to have like one coherent system. And he winds up pressing the case too far in a number of respects. And he says goofy things. He says some truly goofy things. And that's really unfortunate because it makes him an easy target. It becomes a convenient thing to say, well, look at the silly thing he said over there. I'm not going to, I don't have any reason now to listen to him when he talks about the Exodus chronology. That's just really unfortunate because just because he might do something that's just sort of a little weird or a little wild or doesn't really work well in one area. Doesn't mean that he's wrong everywhere else. But that's kind of how the mainstream looks at Rol. So it's unfortunate, but that's just the way it is. Nick wants to know if there is still potential for us to sin in the new heaven, new earth. Well, you know, I've said this before, since our glorification doesn't mean that we become God or become Jesus, then we can't say that we are clones, 100% of them, and possess with exhaustive completeness their perfect nature. So that still means we're lesser, even though we're glorified. So in theory, and this is the way I always put it, in theory, that means, well, sure, we could have a hiccup. We could commit some flaw or some wrong or something like that. You know, I'm only led to say that because we don't become Yahweh. There is only one uncreated creator. I mean, we don't become him. We don't become Jesus as though we are Jesus. But we do become as close, as like Jesus as we can possibly get. So you can say that we still aren't God and therefore, you know, we aren't ontologically 100% the same. We don't have 100% God's nature and the nature of Jesus. So we're still lesser, and yes, that means that there's a possibility of rebellion. You can say that. But possibilities are not probabilities in any really meaningful sense in this case. Now, I would illustrate it this way. It's possible, like I've said on coast to coast AM in a number of settings, it's possible that I could be the next American Idol, that I could be President, that I could win an Academy Award, that I could win a Nobel Prize. All those things are possible, but they ain't going to happen. They're just not going to happen. The possibility is so infinitesimal that it's basically meaningless. And that's what we've got going on here. Ken asks, if salvation in the Bible is strictly loyalty to Yahweh, are modern believers of Judaism with loyalty to Yahweh saved while not embracing Jesus as the Messiah? No, they're not. To refuse Jesus is to reject Yahweh incarnate and to reject the plan of salvation that Yahweh came up with. So if you reject Jesus, you are rejecting the plan of Yahweh, the wisdom of Yahweh, and saying, you got something better. You reject the old plan, which by the way wasn't works to begin with, but you don't get to make the rules. You don't get to prefer one thing over the other when Yahweh says, this is my plan. This is the way of salvation. You can't reject his plan and be saved. You don't get to swap something else in. If you could, that sort of makes all the preaching of the apostles meaningless and kind of dumb, really just pointless, hopelessly self-contradictory. So this is what Yahweh decided. Yahweh, again, came as a man in Jesus Christ, died on the cross, rose again, ascended to the right hand of the Father and all that stuff that the New Testament, including of course the book of Hebrews, talks about. And if you think that you can just sort of trade that in for something else and say that you're still being loyalty, being loyal, Lord, I'm rejecting the plan that you've given me, but I'm still loyal to you. That's just not coherent. Our next question is from a chef WB in the axe podcast. Dr. Heiser said that idols were thought of as a house or dwelling place for those particular gods they were fashioned after. In Zechariah 1117 it says, woe to the idle shepherd that leaveth the flock. The sword shall be upon his arm and upon his right eye. His arm shall be clean, dried up, and his right eye shall be utterly darkened. What is this verse trying to say in regard to idle shepherd? With my new understanding of what an idol is, it almost sounds like the idle shepherd will be indwelt by one of the divine counsel. Yeah, the text really doesn't mean anything like that. There's a translation problem here. Idle shepherd is apparently, well, it's not apparently, it is the King James translation, which is pretty awkward and I would say pretty poor in this instance. Now I've looked at the new King James, and the new King James actually doesn't have what the regular King James has for here. The new King James is like basically every other translation and they'll translate the Hebrew word as worthless or something like that. The word translated idle in the question in the reading of Zechariah 11 and 17 that was in the question and again is reflected in the King James. That Hebrew word is alleal and that term can be used and is used elsewhere in the Hebrew Bible for something that is weak or faceless or defective or useless or vain or worthless. For example Job 13 4, let's just read that passage just to give you one example, there are others.   So again it has this idea of uselessness and think about the context, Job 13 4. Again it's not talking about idols that are masquerading as physicians or divine council members that are sort of possessing or inhabiting physicians. It's not talking about anything like that. It's about physicians were useless in helping Job they were worthless, they were defective, they couldn't help it. They were totally ineffectual and so that's what's going on in the Zechariah passage. A shepherd that deserts the flock is by definition useless because he's not doing the job of a shepherd. He's abandoning the job of the shepherd so he is useless. I don't think this has anything to do with the divine council. Alright, Mike, there you go. That's all the questions we have for this week so you did it. What do you know? I actually got through a bunch in a reasonable amount of time. Put it on the calendar. Nothing left to talk about now other than we need to give, we've got a live studio audience member Robert we need to give him a shout out. That's right. Let's turn him loose. Robert, you want me to mic there? Hey, what's going on? Oh, yeah, I don't think Okay, that's enough. You're part of podcast history now. There you go. Alright. Where's that from, Robert? I'm from Little Rock, Arkansas the old place mentioned a modern city in the vibe. Here we go. We can edit that out. Alright, Mike, well, that's it, man. I guess we want to thank Robert for coming in the studio. We need to start doing a live audience. That'd be fun. He snuck in. He snuck in here. That just sounds good. I like saying that. Alright, Mike, well, that's really it. Unless there's anything else you'd like to get off your chest. Alright, Mike, we're done. Alright, sounds good. Well, we appreciate you answering our questions as always and I want to thank everybody else for listening to the Naked Bible Podcast. God bless. Thanks for listening to the Naked Bible Podcast. To support this podcast visit www.nakedbibleblog.com To learn more about Dr. Heizer's other websites and blogs go to www.ermsh.com


Hi, my name is Skylar Fulter and I work with Bifresh by Local Nebraska here at the University of Nebraska-Lincoln. I'm the program coordinator of the program. We support local food producers from small to medium scale growers to farm to table restaurants all the way to suppliers for local produce and grocery stores. We were awarded a Youth Educator Sierra Grant in 2017 and it was an awesome opportunity to take youth, mostly high school students to visit farms in the area. So we got to see certified organic farms, we got to see aquaponics gardens and they had flowers and fish and showing students, I guess, really where does your food come from because there's really deficit in food knowledge these days and disconnection of youth and food. More people are living in cities, even in rural cities and they haven't seen the tops of a turnips. What does that look like? Why do we need the soil? Why is it important? Through the Sierra Grant we worked with over 200 youth from three different schools and it was over the course of a school year. The age groups were probably between 15 and 22, most were high school age, sophomore, junior and senior, but then we did some engagement with college classes as well. Kids really like seeing livestock and so we visited a farm where they had bindweed issue, which is a common issue and the farmer brought pigs onto the land to help remedy that situation and the students got to see, you know, why somebody might not grow, why they might raise not hogs exclusively, why you might have a system that's diversified and where you have pigs and chickens and crops, vegetables all in one system. Another part of the grant is we visited, so I visited several culinary arts classrooms and we went to a farmer's market and toured farmer's markets with some students and the teacher actually brought local food back to the classroom, could tell the story of the farm or how it got there and then show them, or, you know, they together cooked things like ramen with white turnips and with heart carrots and things like that that really I think engage students on a level more than just a presentation because eating is so visceral and really connects us back to the land.


here for the Bill's Bustin' Bash, the AFC wildcard playoff game coming up Sunday, a 105 kickoff time, the Buffalo Bills and the Jacksonville Jaguars. Everybody's coming, right? It'll be the first home playoff game in this stadium since 1999. Please welcome Jaguar's owner, ShotConf. You like the Nailies place? Let's welcome the man who's been the bright one for us behind the Jacksonville, Mayor Gladion Curry.


What is going on guys welcome back to the channel critical overload here since I'm a halloween ends in this video here again today Shout out to phantom empire for disclosing this information in a recent video that they put up on their channel I'll leave a link to it in the description and you know for those of you who watch phantom empire You know that phantom empire gets these details disclosed to them about the films regarding how many kills and now of course How many ends from their trusted sources who I guess haven't steered them wrong so far and they continue to get Related information from those people that are their sources so then they come on and they make these videos Disclosing the information with you guys so this is going to be about the state of haddonfield So like what the town of haddonfield apparently is going to be like going into halloween ends as far as like the fallout from the Events of halloween 2018 halloween kills since it's again important to remember that those both take place on the same night So you have to consider that haddonfield has been through that and they've been through something 44 years ago now with the events of 1978 and then I guess the fallout if you want to factor this in of the 63 events when Young Michael Myers killed his sister Judith and how that impacted the town and you know just messed up that small community So going into what they had stopped what they had talked about just made a couple of notes about it They'll so the state of haddonfield in halloween ends apparently is going to have a lot to do with division So some people apparently have moved out while some have stayed And I guess what they are doing is not believing the rumors of Michael or what happened in the town four years ago That's what I gathered and there's like I would say a collective gaslight attempt to Like not let themselves believe what they were there present to see while also I guess also negatively impacting those who are moving into town since you have people who stayed and are just like in denial about what happened and Then I apparently also the big John little John stuff in this movie is gonna be toned down So like the comedic aspects that you had in halloween kills and with halloween 2018 I would say more so with halloween kills that stuff in that big John little John stuff stuff like that stuff like with Julian That's apparently toned down very much So in the sense that I guess this is gonna be the least comedic of the three So you will be getting a darker tone than the last time I hope so what I hope we get to see of course is a very much so character driven film that isn't held back by these Breaking moments for humor that either just is overdone or it's just out of place So hopefully we don't get anything like that in halloween ends and I guess according to a fandom empire source It doesn't sound like we have to worry about that too much if we do get some humor It's probably gonna be very minimal again Probably might be the lowest you've had in any of these trilogy any of these films you got recently from David Gordon Green So this one in the trilogy might be the most serious take for the Michael Myers of David Gordon Green timeline And then the other thing I guess he talked about was different characters that are having their own side quests That ultimately culminate into one arcing story that represent the title of the movie being of course halloween ends So this would have to do I guess with the new characters and how they're all gonna be having their own things They're dealing with I would imagine that some of these people that you can factor into that will of course be Lori Strode Allison Lindsay Wallace and how halloween kills in 2018 impacted them and then throwing all these new characters We're expecting to have involved that might be people tied with Allison and a few other people Maybe tied with Lori or just other people who were present for the events of 2018 and kills but we didn't actually get to see them on screen and Maybe these people that have moved into town and how they've all been shaped by the gas lighting going on for some people and Just some other things going on in the town because again, they apparently they've also had to come out and dealt with the pandemic That's gonna be something that's factored into the film apparently We know we've had comments about this in the past But I guess it's gonna be very minimal in the sense that Expecting them to be on lockdown probably shouldn't be one of your concerns But just expect a town that's very divided on the events of what took place in 2018 you're gonna have people who have obviously left town you're gonna have people who are in denial again I'm gonna be calling it collectively gaslighting themselves Into thinking that what happened all those years ago actually didn't happen to create this mentally Perfect world in their mind of what hadn't feel once was even though it's not like that anymore And then of course on top of that coming out of that two years later you had to deal with a worldwide issue and Hopefully again, there's nothing that is overly dramatic with that in this movie and hopefully I've seen people joke about this Hopefully that has nothing at all whatsoever to do with how this man dies If Michael Myers dies because of this worldwide crisis I am not going to be coming on here and defending any aspect of that movie That is a instant killer for the movie as a whole I don't care what else went on in the movie if you do that you're done if you do that you're done You're dead so as far as anything else phantom empire went over He did state that they would have another video to talk about these new characters I guess how they're gonna be factored into the narrative So we'll see how that plays out when they talk about what other stuff I guess came from their sources, but all in all this is what I would expect Had to feel to be like, you know Given the events of what happened in 2018 and in halloween kills You're gonna have people who of course are gonna be on on edge You're gonna have some people who might have moved on a little bit easier than others You're gonna have people who of course did not stick around in town What they did was they left town and they decided to you know, haul ass to go find find a residency somewhere else And I am curious about the Baxter's I'm curious if the Baxter's will be one of the people that move in the town and then something happens that leads to their daughter going missing Maybe it has to do with how Michael Myers and the impact he's had on the town for the past four years or Something else related to the mythos of Michael Myers You know some people not believing it other people believing it and if the Baxter's have moved in the town Did something happen where their daughter ended up going missing? Because of a debacle either with Michael himself Because again, we don't know where he's been at for the past 40 years not 40 four years in between the last two movies in now So maybe she did maybe the one of the Baxter kids did something that Megan Baxter Of course ended up going missing but we'll see how it plays out when the movie comes to theaters later this October Those are some good details to find out as it pertains to where the town of had if it will be going into this trilogy Conclusion, but I know there are still some people who are on the fence about this movie as a whole Because of the fact that Halloween kills to a lot of people was a major step down from what you had in Halloween 2018 Again, I will say this to know in Halloween kills has a lot of strong elements to it That are definitely not present in Halloween 2018 but overall as a movie standpoint and from which one is better on a Technical level and all those boxes being checked off. I would have to give that to how in 2018 While the flashback stuff in kills is definitely some of the best we've ever seen in the franchise again That's one of the strengths and things I will always defend about that movie There are other there's certain other elements like how they use the legacy cast essentially just to you know Be just there for cheap nostalgia. There was really no use of them I would say they use them worse than in screen 5 So let me know what you guys think about these new details down in the comment section below about the town of Haddonfield And where they're gonna be at if you haven't of course make sure you subscribe turn on positive teacher and image video in the description I have links from social media accounts on Facebook Twitter and Instagram. You can message me there Of course, there's any movies views or reviews you like me cover in the future with all that in my guys I will see you in the next video


Hello and welcome and again this video is part of a series be sure to check out the full playlist there should be a link in the description and at the end of this video. And so far we have looked at doing Morse code, transmitting and encoding and decoding on our computer and we have also looked at using GUI interfaces for something called PSK31 which is useful but as I mentioned in the previous video I need something that is a shell application so I can pipe information into it and also pull information out of. So that's where this program comes in, Minimotem C. Morse code is just way too slow so we need something that does frequency shifting to send the information a little bit faster. PSK31 is an option I played within the past but again it's only GUI applications that I can find. But this program Minimotem which uses FSK, Frequency Shifting, I should have looked up before I did this video, something like that, Minimotem which is in your repository so I'm using Debian as I mentioned in the previous videos but I'm going to search for Minimotem and you can see I already have it installed because you can see this I right here. And that's what we're going to be playing with today. And again, I forgot to mention in the previous video with the Morse code I have example codes. Check out the link in the description which will bring you to my GitHub page which will have a few different example files that you can play around with. So let's go ahead and play with this Minimotem. And again, similar to the PSK this is going to sound like an old modem if you're like me and you live through the 90s you remember what the old modem sound like and that's basically what they were doing they were using audible tones to communicate with other computers and that's what we're going to be doing. So Minimotem and let's have a quick look at the man page here it tells you right here this is the command to transmit this is the command to receive and you can do different speeds and we're going to play around with this today. There's a lot of options in here we're just going to touch on the base of it. So what I'm going to say is I'm going to say echo hello world I'm going to pipe that into Minimotem dash dash TX and I'm just going to say 110 for our speed. Now you can change that and make it faster and definitely you can go faster than 110 and still get good results but the faster you go the more likely you are to get errors. So let's go ahead and give that a try it's kind of low let me turn up the volume a little bit on my computer here it's because it's playing through my headphones let me change that okay there we go there we go that's a good volume right there so you see we quickly transmitted hello world a lot faster than the Morris code and again you can pipe files into there let me see so here I can get out this address log which is just a list of addresses 30 or so of them and I can pipe that into our Minimotem command and we can say transmit 110 and it's going to go through and to go through this full list you know it isn't the fastest in the world but a lot faster than the Morris code so there you go that's a transmitting a file using a Minimotem so let's see how do you receive a file so basically the same thing we're going to use Minimotem let me clear the screen here modem and this time dash dash receive and we got to give it the same speed that we're transmitting at so there we go now it's listening and let me go ahead and open up my audio manager here you can see it listening here it's listening to my USB microphone I'm going to tell it to listen to my audio output on my machine that should be the right option there and now I should be able to transmit so basically I'm going to be playing this out through my speakers but this command up here is now being listening to my speakers so it's like it's I'm transmitting and receiving on the same machine but it's listening to it audio wise through my audio card let me go ahead and hit enter here so the first address got a little gargled there but the rest of the address that seems to be coming through fine and I think that's just you know the starting it just took a second for it to catch up there's a little static there at the beginning but you can count one two three four five so about five seconds per line here and again we can make it go faster but I find this being a reliable speed and again my original scenario here is as a firefighter in a pinch where we have no normal commutes means of communication through computers like we do during like a hurricane that we previously had we can get information out we can tell trucks this is the address this is the problem and send it out to all the computers and whoever's closest can pick it up or whatever but it's just you know three or four lines of information we can we need to send so in 20 seconds we get the information out and of course we can verbally send that to them but it'd be nice to have the computer output because that's what we have normally so you're not having to write everything down but as you can see this is very easily transmitted and in the first video in the series I showed doing that through walkie-talkies which will get more into that and other options in future videos so I'm just going to control see to kill that go up here and kill that so that's transmitting receiving get look in the link in the description this video bringing to a github page and so we have folders most for the Morse code right now and for the mini modem and so you can see we have some shell scripts here that basically just show you what I do so you can just go in here and say okay transmit run that and it's gonna start transmitted it's gonna tell you the command that it's running and it's gonna tell you some other options in here and same with the receive so go ahead check that out download that code download that program play with it and we're gonna get more into this in the next couple of videos so I do thank you for watching please visit filmsbychrist.com that's Chris of the K there should be a link in the description of this video and if you like my videos and want to support think about supporting me over at patreon.com forward slash melex 1000 there's a link to that in the description as well you can also support me through PayPal on my if you go to my films by Chris website there's a link there under support I do thank you for watching as always I hope that you have a great day


Everybody forced here ripping two boxes of twenty one twenty two obsidian soccer team all For Nick M. Thank you Nick and good luck first of the team all I've seen Two autos or men per box on average four cards total. That's nice looking. You got paydry number to 26 very nice It's a great looking Lorenzo Pellegrini auto 13 of 44 great box here as a mckello yorzebol dual patch eight of eight Wow Numbering always is great Yorzebol and an equinox Luca Modric 24 26 on the equinox die-cut. That was a pretty good pretty good box right there one more These are right into the point man. These are great Got a Zio go Hyota. That is 22 of 26 Jersey auto Rodrigo Bentancor or Bentancor to 44 jersey card Arturo Vidal One of 44. Wow. Look at this red. That is sick rookie Romain parode Southampton red 10 out of 10. That's nasty gorgeous cards. There you go, Nick Good stuff there for you, but we'll get it right out to you


Next question is from L.Squy. Should a seated dumbbell shoulder press be done at a slight incline or at 90 degrees? Oh yeah. You know why they're asking this.  It's at a slight incline. And that's because they don't have great shoulder mobility. That's right. That's really what it is. It's compensation. They don't have the ability to really get that full extension at the top. Are they both hitting the shoulders? But if you can't press directly up over your head, you should be doing things that get you to that point because that is expressing that kind of full shoulder mobility. And I would say, and you know, there's some studies that show this, that good full range of motion under control tend to build more muscle than shorter ranges of motion. Of course, all things being equal, right? You should be able to do it. So don't hurt yourself.  That's basically it. Yeah, that being said, and I 100% agree with you that that is what's going on.  They'll either be at the slight incline or they'll have this massive arch where they actually, like, I mean, I'm not watching. They're doing it themselves. Yeah, I remember watching my buddies would scoot their butts at the end of the thing and then just their upper back is against the bench and it's like, damn, I mean, they may as well be on an incline. Now that being said, it doesn't mean though, you can't, like, because I'll do this every once in a while. And I have the shoulder mobility to do it where I'm like, oh, I'm doing shoulders today and chest. And so I'm gonna do something in the middle there where it's good, it's more of, it's not a full, you know, like 40, your traditional 45 degree incline bench press. It's more like, you know, I don't know what degree I would say that is. It's more like at a 60 or a 75 degree angle. So it's a lot more shoulders and I'm doing shoulders that day, but I'm also doing upper chest. And so, and I never really do that. So I'll include it every once in a while. So if that's your desired outcome, there's nothing wrong with doing that. But when you see it, like to your point, it's mostly because people can't do a straight up, you know, 90 degree press. Well, this is also why I like the Viking press and, you know, the stuff with the land mine as well, just because of the amount of force that's, you know, the directional force, I can actually like push, you know, the weight and get full extension. So I'm up, but also like, it's not quite as demanding on the shoulder joint specifically. Like it's not all the forces aren't straight down. Yeah, because of the way the angle of the bar actually is a little lighter at the top and you can move your body forward. You can move your body forward into it. I think that's a great way to kind of transition you into, you know, like direct overhead load. Oh yeah, that or a z-press. I mean, to me that's- Oh, z-press, you have to. Right, I would either do a z-press or what I actually started to do when this, I become, I became aware. Because I was guilty of this, right? I was guilty of being this bodybuilder guy who did the arching his back like crazy. That's why I didn't do overhead press a lot. As I became aware of that and started to work on the mobility and address it, one of the things I would do, if I sat at a, you know, 90 degree bench to do a shoulder press, I'd actually take my back off the bench.  Yeah, so that I have, so I have to, my core has to stabilize me and I can get, I get full extension. And I, that way I don't, if it's all, if my back is touching, then I'll scoot and I'll arch. I'll cheat because it's there. Whereas if it's not there and I have to stabilize, kind of creating a Z-Press. You wanna know what's funny? When I was a kid, I noticed that if I focused on really getting straight up at the top, I'd get like a way better shoulder pump, right? And it's because you have to stabilize more and all that stuff. So you know what I actually did? I used to work out with one of my cousins and we would sit, I had a bench that was adjustable and let you do that. But then you'd find yourself as the reps went on that you'd slide, your butt would slide forward as you started to cheat. So we would take a canvas belt. Remember those belts you used to wear that are made out of canvas? Can you strap yourself to the bench? Around the bench and under weight. I sort of got it. This was my solution when I was 15. That's awesome. But it worked because you couldn't slide forward and it actually worked. It got you a really heavy weight. We'd drop the weight, we'd have to go lighter with the weight but I got a way better shoulder pump. You know those hoist machines are cool that do that too.  So it kind of gives you that, yeah, it kind of gives you the Viking press feel in a seated position on the way the hoist machine works. The thinking of shoulder presses, machines, one of my favorites is the hammer strength where you kind of lay it back but the handles go back here. I'm a fan of hammer strength. Yeah, I actually like that one. But you know what? I have never used anything that I like as much as the Viking press. I mean, no affiliation or anything like that. That's the best shoulder machine I've ever used. It's crazy to me that, I mean, we've talked before on the show about, you know, things that we find that are new or things last. Like that's one of the most recent things that kind of blew my mind, right? That is the most recent thing. I've been lifting for a long time and I just recently started to use a Viking press and I mutually, we're all in love with it. It's so complimentary too to overhead press. I can't really get a sponsor on that. It gives you such a great pump. Can you one of you two find a company that you really like that makes them? I tried. Maybe now that we're seeing a podcast. Contact us. Let's put it out there, yeah. That's right. If you make a Viking press, I want to sell your Viking press. So let's work out a deal. Hey, if you enjoyed that clip, you can find the full episode here or you can find other clips over here. And be sure to subscribe.


Yng nghyd-egwelir yma yma ar gyfer yr uwch? Mae'r yma i gwybodaeth ddylam i'r pethau yma, mae'r ddא�f yn gwneud i Gymru, ac fel anghylch, ond yn amlwg yr oedd yma ar gael y tro, am y chancol, a'r amgarwch i'r amgarwch. Mae'r amgarwch am fifio pa'r angen. A gallwn yma mae ceisio ar mynd o'r unrhyw yn y proseddau? Mae'r angen yn mwyaf i'r yma. A oedon ni, mae'n amlwg ond yn gyda chael ddechrau gennym. Felly, iddyn nhw'n gweithio'r swydd, ac yn ôl atddiadau, mae'n fyddechrau'n amlwg am fflaen nhw. Rwy'n gweithio, mae'n gweithio'r gweithio'r gweithio. Mae'n gweithio'r gweithio argyfrifiadau yn cyfrifiadau llwythol. Mae'n gweithio'r gweithio'r gweithio, ac mae'n gweithio'r cyffredigau. Mae'n gweithio'r gweithio'r gweithio i gweithio ac i gweithio i gweithio. Mae'r ddweudio'r ddweudio y cwestiynau cwestiynau a'r ddweudio ar y golygu a'r ddweudio'r ddweudio yr honiad gan y golygu. Ac erbyn yn gweithio'r ddweudio'r profesor, Dianna Eck, rydyn nhw i gynyddiadu'r ddweudio.   So, for example, LLM student Natasha Latif founded a pro bono initiative for women's rights run by volunteers from SOAS and other universities. The group conducts legal research and offered training on women's rights under Islamic and international law. They've successfully developed a litigation model of gender-ectable sharia-based arguments for Afghan lawyers successfully obtaining divorce for cases of domestic abuse and reduced sentences for adultery and rape. This is something that's been voluntarily for free. It's initiatives like that that seem to me to set SOAS graduates apart from the rest. There's another innovation this year you'll have noticed by SOAS students in LLM, Muslim and non-Muslim, is the Ramadan tent. It opens every evening for Iftar or the breaking of the fast during this, the holiest month in the Islamic year. The time when, if you believe some newspapers, our diverse city has riven with tension and distrust, our students are proving the opposite. People of all religions are flocking to the Ramadan tent to talk and share. It's in the precinct, so do visit it after the ceremony. Right now, actually literally as we speak, which is why one of the co-presidents isn't here because she's teaching one of these classes, we have 100 teenagers from London families with no prior history of attending university are getting a taste of higher education, SOAS style, through the summer club organised by our excellent students union. Volunteers from amongst our students and staff are running courses like the Anthropology of Food, Middle Eastern Politics, World Literature, Knowledge and Power, and obviously non-European languages like Swahili, Hindi, Chinese and Arabic. These are just some of the stories that make me incredibly proud. They highlight the real impacts our students make when they're students, and I know they'll carry on doing that when they go out into the world. So what does it mean to be a graduate of the school? Well, you've already heard that by becoming a graduate you're joining a worldwide family of 50,000 oolwmlau, most of whom are still in regular contact with us. We've got authors, philosophers, musicians, TV presenters, filmmakers, comedians, restaurant owners, my favourite, chocolate makers, diplomats, journalists, MPs, criminals, managing directors, human rights lawyers, political activists and academics. You name it and a SOAS graduate has probably done it. Now many of our graduates enjoy giving something back to the school, not just money but also time. We have a take an alum for coffee scheme, for example, which puts current students in touch with their wonderful network of alumni for insights and advice about the wealth of the different career paths they've followed. In April we held our fourth telephone campaign, during which current students phone up alumni. This year we phoned up the UK, Europe and America, and they were very generous, and that means that we can fund scholarships of talented local students from disadvantaged backgrounds, hardship fund for international students and a variety of student-led projects. So please don't let your association with the school end today, become an active alumni, become a mentor, visit us, stay involved. If you don't do anything else, please carry on telling people what a great time you had at SOAS and suggest that they should come as well. You're graduating at a time when austerity rules in Britain are many parts of the world. We all face challenges but SOAS is in good financial and academic shape and just to be competitive for a moment in much better state than most universities. We're carefully planning our future. We're working towards our centenary which we all celebrate in 2016 and 2017 on the grounds that if you've got a good excuse for a party you might as well spread it over two years. We'll do that in proper SOAS style and we'll do that not just in London but also around the world. This year we gained the lease of the North Blocker Senate House and through consultation with staff and students the design concept has been developed. We're poised to begin refurbishment. When it opens in September 2015 the building will offer state-of-the-art teaching, research and student services. It means, and I think this is important, that SOAS will once again be a single site campus with all the energy, intellectual curiosity that defines our community concentrated in just a single vibrant precinct. That's the perfect launchpad for our second century. So thank you students for your feedback during the consultations on the Senate House. Do come back and see the campus when it's in its new state. But much more important than that, thank you for your contribution to the life of the school while you've been here. The schools only as good as its students and as the staff here know and the parents and family know our students are the very best that there are. So thank you so much.


In this video, we're going to look at a way of presenting data, the histogram. There are lots of misconceptions about histograms, and we will try and clear up some of these along the way. Consider this frequency table of data. You might be tempted to plot the information in a bar chart. However, if you did, it would end up looking like this. At first glance, this might look perfectly fine, but there are actually a couple of issues with it. Firstly, the data in our table is continuous, meaning that there is a group for every value, including non-integers within the range of 100 and 200. Bar charts are not used for continuous data because they require gaps between the bars and gaps don't work for continuous values. The second problem is that the group 150 to 160 has the same height as 120 to 140, even though it represents a smaller range. This therefore does not give us a true comparison of the data. To solve these issues, we use something called frequency density. Because plotting against frequency doesn't work when the group sizes, also known as class widths, are different, we plot against the frequency density instead. We calculate frequency density by dividing the frequency of each group by the size of the group. As density is a measure of how much mass there is in a volume, frequency density is a measure of frequency in a set space. This allows us to solve the problem with unfair comparisons as all values plotted will have their group size accounted for. We start by adding an additional column titled frequency density. We then divide each frequency value by its corresponding class width to find the frequency density. Pause the video and see if you can work out the frequency density for these values. Let's see how you did. The first frequency value is 20, which divided by a class width of 20, gives us a frequency density of 1. The remaining values are found like this. We can take these values and plot them against frequency density, not frequency. If you want to try this yourself, pause now. The completed histogram should look like this. The bars touch on a histogram, which works with our continuous data, and we can draw clear conclusions about what the data shows now. As we can see, now the group 150 to 160 is taller than the 120 to 140, showing a higher frequency for the same class width. It's also important to be able to interpret the data in a given histogram. Take a look at this one here. Estimate the number of people who took between 30 and 90 seconds to complete the test. If you want to have a go first, pause the video now. Firstly, we need to rearrange our histogram equation to find frequency. Because frequency density is equal to the frequency divided by the class width, to find frequency alone, we have to multiply the class width by the frequency density. If we look at our histogram, we plot frequency density against class width, so the area of each bar is the same as its frequency. Rectangle 1 has a height of 0.5 and a width of 30, because the bar's width is 30 seconds to 60 seconds. Between these tells us there are 15 people in rectangle 1 between 30 and 60 seconds. Rectangle 2 has a height of 1.5 and also a width of 30 seconds, from 60 seconds to 90 seconds. 1.5 multiplied by 30 equals 45 people, so in total there are 15 plus 45, giving an estimate of 60 people. Have a go at this question. Estimate the number of people whose average speed was 10 to 40 miles per hour. Rectangle 1 has a width of 10 between 10 seconds and 20 seconds, a frequency density of 2, so 20 people in total. Rectangle 2 has a width of 20, from 20 to 40, and a frequency density of 6, so 120 people in total. There are therefore as an estimate 140 people whose average speed was in the range of 10 to 40 miles per hour. It's important to remember that when you have different class widths, you need to plot frequency density on the y-axis. You can however have a histogram with frequency, but the class widths must be even. These tend to feature discrete data, such as shoe sizes and scores, rather than continuous values.