Beginning at verse 27, reading to verse 32, Luke chapter 5, Luke writes, After these things, he went out and saw a tax collector named Levi sitting at the tax office, and he said to him, follow me. And he left all, rose up and followed him. Then Levi gave him a great feast in his own house, and there were a great number of tax collectors and others who sat down with them. But there's scribes in the Pharisees murmured against his disciples saying, Why do you eat and drink with tax collectors and sinners? And Jesus answered and said to them, Those who are well do not need a physician, but those who are sick. I have not come to call the righteous but sinners to repentance. Now, last time we were together, we looked at verses 16, actually verses 17, following to verse 26, and we saw that the Lord Jesus Christ in that particular portion of scripture has the authority to forgive sins. As we continue though, we need to know that his forgiveness gives us something that reveals what God is truly like. And people today will wonder, what is God like?  Well, the God that we worship is forgiving, and the God that we worship is merciful. And that's what we'll be looking at today. We're going to be seeing the forgiving and merciful love of God towards us. The Psalmist in Psalm 86 verse 5 says, For you, Lord, are good and ready to forgive and abundant in mercy to all those who call upon you. And that's what we're looking at today. We're looking at the fact that God is merciful and God is quick to forgive us of our sins. And the bottom line is, in the ministry of Jesus Christ, he dealt very often with that one basic human need, and that is the need to be forgiven, the need to be forgiven by God. Because without forgiveness, man will be eternally separated from God. The Bible makes it very clear that our sin makes a separation between God and ourselves. Sin has a tendency of doing that. If I have a problem with one of my children, if I have a problem with a friend, if I have a problem with my wife, and we have an argument or something, and while I'm waiting for them to say I was right and all, if we have a problem with them, and they're having a tough time seeking my forgiveness, no, if we have a problem, there's going to be a separation between us. The fellowship that we at one time enjoyed is broken, and it's broken because sin makes separation. Sin makes a separation between human beings. It also makes a separation between man and God. And so the Lord Jesus Christ has come to demonstrate that God is willing to pardon, God is willing to forgive, and God is willing to do so because God is merciful. If I do not receive forgiveness from Him, then I am going to be separated from Him for eternity. In John chapter 5, verse 24, the Bible says, Verily, verily, I say unto you, he who hears my word and believes on him who sent me, has everlasting life, and shall not come into condemnation, but has passed from death unto life. And so God's Word is intended to bring me into relationship with my God. And the Word that God brings to us in the gospel is a message of forgiveness, a message of salvation, a message of reconciliation, a message of relationship that you and I can have with the God of this universe. Now, of course, forgiveness is not an automatic. Many people mistakenly believe that they will automatically be forgiven, or perhaps that God somehow is going to grade on the curve, and they're going to make it because there are so many bad people, or people who are worse than them. But the Bible doesn't teach that. The Bible teaches that forgiveness is a result of repentance and humility, repenting from sin and humbly asking God to forgive me. If you take notes, 1 John chapter 1, verses 7 through 9 says this, If we walk in the light as He is in the light, we have fellowship with one another, and the blood of Jesus Christ, His Son, cleanses us from all sin. If we say that we have no sin, we deceive ourselves, and the truth is not in us. If we confess our sins, He is faithful and just to forgive us our sins and to cleanse us from all unrighteousness. If we say that we have no sin, we are not speaking the truth. But if we confess our sin, when you study the Bible, you'll note that the New Testament was written in what is called Koine or Common Greek. The word confess that you find in verse 9, if we confess our sin, that word confess there in the Greek language is the word homolageo. And it literally means to say the same thing or to be in agreement with. That's what homolageo means, to say the same words. And all that is saying is for you to agree with God. God says all have sinned and fall short of the glory of God. I agree with that. When I agree with that, I'm confessing that. If I confess my sin, I'm simply saying, God, you're right. I'm not perfect. You're right. I have done wrong. I have done wrong in the way that I think, in the way that I speak, and the things that I do. Lord, I am saturated with the reality of my sinfulness. And so if I can only admit that, if I can only say to God, God, please be merciful to me as sinner and forgive me, I can be forgiven. I can be forgiven. The problem is a lot of people don't want to see themselves as being as bad as they are. Don't want to even recognize that they're sinners. And that's where the problem is. And so people aren't automatically forgiven. People are forgiven when they confess. People are forgiven when they repent. People are forgiven when they're forsake, when they come to God and say, God, be merciful to me. And so what we're seeing here in this passage is going to be how the Lord Jesus Christ forgives. He forgives sinners. And He's going to make an example of that for us in the life of a man by the name of Levi. Now in verse 27, notice how Luke writes, after these things, he went out and saw a tax collector named Levi. Now Levi actually is identified in another passage as being Matthew. You see that in Matthew chapter 9, verse 9. It's the same event, but Matthew obviously had two names, Levi and Matthew. Now he had two occupations. One is he was a tax collector, and the other is he made jeans. And they've continued on for 2,000 years. This is an amazing thing. No, I'm just kidding. Somebody write that down. Made the Levi jeans? No. I'm just teasing. We're going to see how the Lord works in the life of people, and Matthew's a great example of how he works.  That's what we'll be looking at. And so anyway, as we look at this, people are beginning to follow Jesus Christ. He's a carpenter turned preacher. His message, his miracles are drawing people to himself now. People are wondering who this man just might be. As they're beginning to gather around him, he teaches them concerning the things of God. The things he teaches them are not things that he made up. They're things that he received from his father to speak to them and to give to them. That's why Jesus in John 7, verse 16 said, And so Jesus is revealing to them the things that God has given to him, and that's what he's about to do. Now what he's about to do is he's about to teach concerning the love of God and God's mercy and the life of man. And so it says in verse 27, after these things, he went out and saw a tax collector named Levi sitting at the tax office. Now he's called a tax collector. The word tax collector is the word publicani, publican. That's where we get the word publican from. It's a man who served occupying Rome against his own people. Matthew was a tax collector, and that simply means that he collected told taxes, he collected import duties and boat docking fees, business license fees, things like that. The fact is during the time of Christ, Jews could buy franchises, and the franchises entitled them to levy taxes on citizens as well as travelers. Sadly, during the day of Christ, many of them were extortioners. They were bribed very easily, and they became wealthy, and they also became hated by the other Jews. This is one who most likely assessed taxes by whim, and therefore would be hated all the more because Rome would give to him a certain amount that he was the levy on people if they had, you know, certain goods. They said, for these goods, you are to receive at least this much. So what he would do is he would increase it a bit, and that's how he made his wealth. The rabbis, during the days of Christ, would call them licensed robbers. They were called beasts in human shape. They were greatly hated by people. According to the rabbis, there was no hope for a man like Matthew. He was excluded from all religious fellowship. He was considered to be unfit and unclean. His money was considered to be tainted, and any who accepted it would be defiled. He was an outcast, and he was classed with people like harlots, gamblers, thieves, and nobody would have a relationship with Matthew outside of people like Matthew. But how does Jesus teach this man? Well, notice with me that Jesus actually approaches him because in verse 27 it says, he said to him, follow me. You see that Jesus initiated something there. Why would Jesus approach Matthew if anybody else would have relationship with him? Well, the reason that Jesus would approach him, at least one reason, is because he came to seek people to follow him, and Matthew needed to follow him. He came to seek people out who would serve him. Matthew was being called to serve him. Jesus came to seek and save those who were lost, and Matthew was just as needy as anybody else.  In John 15, verse 16, the Bible says, you didn't choose me.  And so Jesus sought this man out, the way that he sought you out. And you may ask yourself, how did the Lord seek me out? You know how the Lord sought you out. The Lord is the hound from heaven. He is constantly at your heels. He was convicting you of your sin. And there was a time when you finally heard his voice as he was calling your name and calling you to follow him. That's what happens. He does that through the Word of God. He does that very often alongside of a praying parent or somebody who loves you and lifts you up to God in prayer and says, Lord, in Jesus' name I'm praying for my mom or I'm praying for my dad or I'm praying for my brother. I pray for my sister. I pray for my aunt, my uncle, my friend, and my co-worker and guy I go to school with, whatever. There's somebody praying for you because God works within the prayer and he works within the Word of God and he has a heart to seek you out. And that's what Jesus is doing here. Jesus is seeking him out. And as he seeks him out, he gives to him a simple command. I want you to see the command. It's only two words. Follow me. That's the command. He's saying, look it. I'm calling you to do something. I'm calling you to follow me. And the fact is, Matthew, according to verse 28, left all, rose up and followed him immediately. He left it all behind. Everything. He said, follow me. And Matthew was ready to do just that. Paul, when he was writing in the book of Philippians chapter three, verses seven and eight, Paul the apostle said, whatever was to my prophet, I now consider loss for the sake of Christ. What is more, I consider everything a loss compared to the surpassing greatness of knowing Christ Jesus my Lord for whose sake I have lost all things. I consider them rubbish that I might gain Christ. And so everything is left behind. He decides to follow Christ because Jesus Christ has ministered to him. There's no indication up to this point, at least in any of the gospels, that I can see that this was a prearranged signal of any sort. But I do have a belief that Matthew was well aware of the claims of Christ and that he was a prime candidate. And so Jesus calls him to follow him.  Well, notice verse 29, Levi gave him a great feast in his own house and there were a great number of tax collectors and others who sat down with them. But the scribes and the Pharisees murmured against his disciples saying, why do you eat and drink with tax collectors and sinners? Jesus answered and said to them, those who are well do not need a physician but those who are sick. I have not come to call the righteous but sinners to repentence. So Matthew did something. I want you to see this. Matthew made his calling by Jesus Christ public by giving Jesus a banquet in his own home. There are quite a number of people who are called secret disciples who are basically hiding their faith in Christ. Matthew wasn't one of those. Matthew wasn't a person who was a secret follower of Jesus Christ. He wasn't a chameleon. There are numbers of people who I refer to as chameleon Christians. They blend into the surroundings. If you're around other believers then you can quote Scripture. You talk about the Bible. You talk about church. You talk about fellowship. You talk about prayer. You talk about those things. If you're with the world, you talk about those things. You just blend in. Matthew wasn't that way. Matthew was called by God. Jesus Christ said, follow me. He got up and as a result of that he said, I'm going to make this open. I'm going to make this public. People are going to know that I'm a follower of Jesus Christ and so he has a banquet. He gives Jesus Christ a meal. He decides to openly identify with the Lord Jesus Christ and let me encourage you. Let me encourage you strongly today to openly identify with Jesus Christ. Don't be ashamed of the gospel of Jesus Christ. Don't be ashamed. The word ashamed in the Greek speaks of shrinking back.    You're supposed to talk about Jesus. There are numerous pastors who don't speak boldly for the Lord. I can tell you that for a fact, but beyond that, I haven't started just being open and bold for the Lord because I'm a pastor. I did that when I was a college student, when I was in secular school, when I'd be one of the only or the only Christian in the class and I was willing to stand up and be counted. Why? Because a professor needed Jesus Christ, because the students needed Jesus Christ and because I'd been given a responsibility to share when I have opportunity to. So I did. And do you want to know something? I was one of these guys who would just take a deep breath and say a quick prayer and then open my mouth and see what the Lord was going to do. I was very careful to be honest with you. I didn't want to bring shame to the name of Jesus Christ. They didn't want to say some brainless thing, you know, to make the gospel look bad. But at the same time, I would be in class and I would look around and I'd say, God placed me in this position for a reason, you know, whether it was political science or social psychology or whatever class I was taking. He put me here for a reason. I'm here to be a witness for Jesus Christ. And so I made a point of making it clear as soon as I could when given opportunity in class to say, I follow Jesus Christ. And I did that at the age of 23 and 24 and 25 and all the years that I was in college. Both secular as well as Christian college. But I spent a lot of time in secular college and I can tell you, it's a difficult place and some of you know exactly what I mean. It's a tough place. Your faith is there on the stand. People are looking for things to accuse you as a believer of and all. But you know what I just said, Lord, you know, I've been given the responsibility of being an open Christian. I'm not going to hide this under a bushel. I'm not going to hide this.  It's to be open so that the house can be lighted up and therefore, Lord, use me. That's all you need to do. You'll be amazed at what God will do with a vessel that is simply usable. You'll be amazed at how God will use you. There are going to be times that you'll be sharing when you have an appropriate moment that you're going to probably wish that you had, you know, some kind of recording device so that you could put it on K-Wave later on. So people get here, this marvelous message that God just gave to you. It's just an amazing thing. Now the Holy Spirit will begin to flow when you simply, like Isaiah, say, here am I, Lord, use me. I want to be used by you. It's just, God is just looking for people like that. And you know what? Matthew was the kind of person who was willing to be identified with Christ. In his gospel, Matthew chapter 10, verses 32 and 33, Matthew records that Jesus said, whoever confesses me before men, him I will also confess before my Father who is in heaven. But whoever denies me before men, him I will also deny before my Father who is in heaven. So he wasn't a secret disciple. He was openly and willingly identified with Jesus Christ. Now notice verse 29, there were a great number of tax collectors and others who sat down with them. Matthew in his gospel in chapter 9, verse 10 says, there were many tax collectors and sinners sitting down with him. Now these friends were the only friends that he had. But these friends became his ministry and he invites them to meet the Lord Jesus Christ. You see, the Jews who considered themselves righteous would not have accepted an invitation from Matthew but his friends did and Matthew would bring his friends and he did. He brought his friends to a saving knowledge of Christ. He wanted them to know Jesus Christ and so he is willing to identify them the way many of you, just this last weekend for Easter were inviting friends and family. That's why you do that. That's why I did that. I wanted my friends, even though I knew my friends would reject me, I wanted them to know the Lord and I would openly invite them. Why didn't you come with me to church? I would tell them the little that I knew. What do you really know when you're a week old in the Lord? Once I was lost, now I'm found. Once I was blind, now I see. Once I was dead, now I've been made alive. That's all I knew. Once I was a doper, and now I've been set free. I want you to know God and they'd say, well, why? Well, you know what? I can't really, I can't explain it yet, you know? You've got to just come and I did that and I would bring friends. I would bring them to Calvary Chapel there in Costa Mesa. I would tell them about the Lord. This is kind of dumb. I don't know if I've ever admitted this to you before.  I was inviting people to my parents' house so I could teach them the Bible.  What did I know? I already told you. Once I was lost, now I'm found. Once I was blind, now I see. That was it. But you know what I did? I would go to Bible study and I would memorize what the teacher was teaching. I would listen. God had restored my memory. And I would listen to the passage and I'd make my little notes. And then I'd bring people over and I'd say, you know what this means? Thus saith the Lord, I would it? I know. God is very gracious.  I'll give you two years in the military because I just wanted people to know the Lord. And who else is a better candidate than those you already do know? Your friends. Your family. That's why my sister Madeline, the day I got saved, the day I got saved went home. It went to bed, actually. I was home and she went to bed December 27, 1970 just like I did. And she prayed when she went to bed and she said to the Lord, this is what she told me.  I mean, the first person who was converted to my, in my family was my sister that I had witnessed to the day I got saved. Within three weeks my father and my mother got saved. A couple years later, my brother got saved. You know, that's how it works because that's what you want, isn't it?  Don't you want them walking with God? Don't you want to know who did it? And Matthew did. And so what does he do? Well, he invites his friends and he gives Jesus a banquet and it's an open declaration of being a follower of Christ. Well, as this has taken place there are people who showed up, too, verse 30 tells us there's scribes and Pharisees murmured against his disciples. So there were some people there not to discover Jesus but to make judgment. And so, they're murmuring against his disciples saying, why do you See, not everyone was pleased that Jesus would spend time with sinners, but you know the neat thing about the Lord? He still does. He still spends time with sinners.  He still hangs around with people like us. It's not that Jesus had so much in common with these sinners is that Jesus wanted to reach them. Now it's interesting, they don't like what the Lord is doing, so how do they deal with that? I want you to see, they spoke to His disciples. Matthew chapter 9 verse 11 says, they said to His disciples, why does your teacher eat with tax collectors and sinners? And so this is something that he's not simply being confronted with, but the disciples are being asked this question too. Here's your question for you, why would they begin to address the disciples with that kind of question? Well, I'll give you the answer. There's a principle involved here. If you want to destroy a work, cast doubt on the leader. If you want to destroy a work, cast doubt on the leader. All you need to do is undermine the pupil's trust in the teacher.  Human nature, being what it is, loves to believe evil over good. I was toying with the idea of sharing some of the things that have been said concerning me, but I don't think you want to be bored with that. But I can tell you this. I can tell you that one of the ways to undermine a ministry is to try and undermine the leader of the ministry, because if you smite the shepherd, the sheep will be scattered. And so if you can raise a question concerning the ethics and morality of that leader, even if it's untrue, there are multitudes who are dying to believe such a thing. I'll give you one example, just one. I remember receiving a report that somebody was saying, Pastor David can't possibly love his wife Maria as much as he seems to. I'm just waiting to see him when he goes out on her. There are guys and people who say things that are absolutely incredibly vicious and evil and so wrong, and what they do is they want to undermine the ministry by attacking the leader. That's a principle. You see that, you know, like Jesus, I just quoted this a moment ago, Jesus said that a house divided cannot stand. If you can create a division, if you can bring a spursion on the character of Jesus Christ, then the disciples will cease following him, and that's the way they were doing it. The Bible in Proverbs 16 verse 28 says a perverse man sows strife, and a whisperer separates the best of friends. And so Jesus answers this. Notice how he answers this. When the question is asked, why do you eat and drink with tax collectors and sinners? Jesus' answer, verse 31, is those who are well do not need a physician, but those who are sick. I have not come to call the righteous but sinners to repentance. And so the bottom line is, is only the sick will visit a physician. And he's pointing out unless you understand your own condition, I can't help you. John Wesley once said, I am fallen short of the glory of God.   That's a general rule. There are some people who like to go to the doctor just because they like to go. But you can't get me to the doctor unless I'm half dead. I was in Scotland and we went and got some food in this little shack, if you will, and got something to eat. And the next day our friends asked us, what did you do last night? We said, well, we went to look at the town a little bit and stopped and grabbed something to eat. Where'd you guys eat? Well, we ate just up the street from the hotel here at this little place and we named it. And my friend said, you shouldn't have eaten there because that's been condemned by the health officials here. And I said, well, you know, what's done is done, didn't think a lot about it until six weeks later. Six weeks later I'm laying in bed and I am just perspiring and I'm drenched. And so Marie says, honey, what's wrong? And I said, I don't know and I don't feel good at all. And we take my temperature and I've got 100 and 304. She says, you better get to the doctor. I said, no. No, I'm not going to a new doctor. I just got a fever. It's no big deal. I'll be all right. And so for the next three days I wouldn't sleep in bed with her because I was drenched so I slept in the front room. You and I are not getting me to the doctor.  I'm still not going to the doctor. There's no way. I'll be okay. Give me some aspirin.  So now I'm getting even worse. And so finally I remember going to a blood specialist in Pomona and I remember it was August. I remember walking into his room and looking at him and saying to him, do you mind if I lay on your carpet?  Can I sit on your, lay on your carpet? He says, okay. So I'm laying there on the carpet. And he says, this guy's got hepatitis. That's what he has. And so I said, you know what, okay, I got to go to my car. So I remember walking to my car opening up the trunk, the lid there and laying down in the back. And I'm laying on these metal rods that have been baking in 100 degree. And I didn't feel a thing on my back. I was Superman for a day. I didn't feel a thing on my back. My wife ends up taking me to the hospital. And I was in the, I was imprisoned for four days, for four days. They came and they gave me an IV. I remember the lady trying, you know, sticking in and she says, oh, it didn't take. I'm so sorry. I'm so sorry. It's supposed to be painful, I guess, when you do that. I was so dehydrated, I didn't feel a thing. But there was no way you were going to get me to a doctor that is still true now years later. Marie gets mad at me all the time. She says, if I say, I'm not feeling well, we ought to get you into the doctor. I say, no. You go to the doctor. Only the sick will go to the doctor. And I'm not going to admit I'm sick. There's no way. See, now some people say, oh, I've got a temperature. I better get in to see them. You know, they become best friends with their doctor. You know, I'm not that way at all. So I kind of understand what Jesus is saying.  And you know what?  The righteous, or those who are not sick, don't need to. Well, the bottom line is, and he says it, those who are well do not need a physician. Those who are sick, I haven't come to call a righteous, but sentenced to repentance. You've got to be willing to say, I'm sick. You've got to be willing. And you know the thing that amazes me about that, as I am still amazed at the amount of people I encounter who will not admit that they're in need. They just don't. The way I would not admit that I needed to go in. The way I would not admit that I needed to go in. I broke my ankle in high school. I broke it. And I didn't know about that for two years, until I sprained it. And then I went in and the doctor said, well, this ankle that you sprained has been broken. And I said, oh, yeah, I remember, I remember when I twisted it. You broke it two years ago.  I broke my wrist. I was lifting weights, fell back, snapped my wrist. Weights fell on top, snapped my wrist. I didn't want to go in. My mom made me go in. I can tell you story after story. I do not like to go in. So, I don't know why I'm telling you this. I just feel like it, because I'm sick. No, because mental illnesses don't count. You just have to be willing to say, I need a doctor. These people were not willing to do that. That's why Jesus said, look it, you see these sinners here? You see these tax collectors? You see Matthew?  I'm the great physician. I can forgive them of their sins. I can cleanse them of their unrighteousness. I can heal them. You, on the other hand, you say, we see. There's none so blind as those who cannot see. You can't see yourself. And because you can't see yourself, you're not going to ask me to help you. That's why a lot of people will come to churches just like this and will know, will know that they're not perfect. But when they're invited to come to Christ, they'll say, I really don't need him. I'm doing fine. I'm doing fine as I am.   Always somebody else's fault that provokes them to do that. I've seen people in multiple marriages who always married the wrong person. The person was the real problem, not me.  And if you don't, you'll remain sick even though you think you're well. While all of this is taking place, verse 33, they said to him, why do the disciples of John fast often and make prayers?  And he said to them, can you make the friends of the bridegroom fast while the bridegroom is with them? But the days will come when the bridegroom will be taken away from them and then they will fasten those days. Then he spoke a parable to them. No one puts a piece from a new garment on an old one. Otherwise, the new makes a tear. And also, the piece that was taken out of the new does not match the old. And no one puts new wine into old wine skins or else the new wine will burst the wine skins and be spilled. But the wine skins will be ruined. But new wine must be put into new wine skins and both are preserved. And no one, having drunk old wine, immediately desires new, for he says the old is better. And so as the Lord is speaking here, he's beginning to give to us an insight into the newness that God is bringing through his message. Now notice how it says in verse 33, they're asking a question. Why do the disciples of John fast often and make prayers? If you take notes, you might want to note Matthew 9.14, because Matthew tells us that the question is being asked by John's disciples. And the question is, why do we and the Pharisees fast often but your disciples do not fast? You see, the disciples of John were the ones who had not given their allegiance to Jesus as of yet. The disciples of the Pharisees are busy rejecting him. So it appears that Jesus' association with sinners disturbs both of them. Now in verse 33, that's really a question that relates to Jewish ritual religion. In that day, they had adopted twice weekly fasts, and they were saying that that is the evidence of righteousness. And what has happened is external ritual became a badger outer emblem of godliness. When Jesus was speaking in Matthew on one occasion, he spoke concerning praying and fasting and giving, because those were three external evidences of religiosity.    And so those were three elements of the Jewish religious faith during the time of Christ that would denote that somebody had a godly walk. So external ritual has become an evidence or an emblem of being a godly person. That's why in Luke 18 verses 10 through 12, Luke speaks in this way and says, two men went up to the temple to pray, when a Pharisee, the other a tax collector, and the Pharisee stood and prayed thus with himself, God, I thank you that I am not like other men, extortioners, unjust, adulterers, or even as this tax collector, I fast twice a week, I give tithes of all that I possess. So Luke recording the words of Jesus as he was speaking concerning that was pointing out that people's external religiosity counted for something in the Jewish society at that time. The fact is, according to Galatians 2, 6, God does not judge by outer appearance. And so just because somebody has this outer appearance of being religious doesn't mean that their heart is close to God. We know that, don't we? I mean as a young man, and boy it's a long time ago I realized that, but as a young man, you know when I was young and people my age were coming to Christ and at that time the big taboo was the long hair and all of that, people were looking at us and saying you can't possibly be committed to Christ.  Mormons looked wonderful compared to the hippy Christians. They would point to them and they'd say look at these devoted kids, their hair is short and they wear these ties and white shirts and they do all of that, but you hippies, how can you say you know Jesus Christ? And we would hear that. We were confronted by older people about that all the time. Now you would think we learned something from that, but we haven't because people my age do the same thing, the same thing except now we're pointing at tattoos. Now we're pointing at piercings and we're saying if that person was really saved they wouldn't have that tattoo. How can you call yourself a follower of Jesus with a tattoo? I mean we do that. We are constantly caught on the external thing and so you can have somebody who fasts and prays and gives and automatically somebody will say oh that is a righteous person. But you know what? God doesn't judge according to outer appearances, men judge. He looks at the heart and he sees what's inside there and that's what the Lord wants to teach us. How come you guys don't fast off and make prayers like those of the Pharisees? Yours eat and yours drink, Jesus gives the answer, verse 34. Can you make the friends of the bridegroom fast while the bridegroom is with them? The days will come when the bridegroom will be taken away from them, then they will fast in those days. His answer, in Scripture fasting represents voluntary humility and mourning over sin. You see the Bible tells us in Psalm 3513, I humbled my soul with fasting. And so Jesus is saying this isn't a time to sorrow, this is a time of joy. My being here is like a wedding. I mean you know there's a difference between a wedding and a funeral and I've done a lot of weddings and there haven't been too many like funerals. Most of them are happy places. Most of them are joyous occasions. And so we say listen, you know, this is not a funeral. This is like a wedding.  And a Christian is the candidate for being the most joyful person on the face of the earth because the fruit of the Spirit is joy. I mean what a joy it is, listen to what a joy it is to know your sins are forgiven. What a joy it is. My sins are forgiven. What a joy that is for me to know that. I hope you know that tonight. Your sins are forgiven because of Jesus, do you know that?  But the Bible tells us in Romans chapter 5 verses 10 and 11 if when we were enemies we were reconciled to God by the death of his son, much more being reconciled we shall be saved by his life. Not only so, but we also joy in God through our Lord Jesus Christ by whom we have now received the atonement we are rejoicing. Now when he says can you make the friends of the bridegroom fast, the friends of the bridegroom were the groom's best friends, they were in charge of all the festivities. And so that's the point he's making. Now he goes on in verse 35, but the days will come when the bridegroom will be taken away from them and at that time they're going to fast.  The day is going to come when Jesus Christ is taken and crucified. Peter spoke about that in Acts 2.23 when he said that Jesus was delivered by the determinant counsel and foreknowledge of God. He said, and you have taken by wicked hands have crucified and have slain him. And so the day will come when he is going to be removed or taken forcefully. But the bottom line is is you need to understand, you need to understand who Jesus Christ is. Now he's speaking to these disciples of John and he's saying your loyalty to John is getting in the way of your being saved through faith in me. You need to begin to follow Jesus Christ is what he's saying. John's purpose has been fulfilled. He came to present Jesus to the world and therefore you ought to be following him. He continues in verse 36 and spoke a parable. No one puts a piece from a new garment on an old one. Otherwise the new makes a tear and also the piece that was taken out of the new does not match the old. We all know that. That's easy to understand. You have a rip in your jeans or whatever and you put a patch on it. It's a different color. If it's not shrunk and you wash those jeans and everything when that cloth shrinks when you dry it and it pulls away and that's the point that he's making there. So what is he saying? He's saying there's a time when attempting to patch up something's foolish. My ministry isn't here to repair the Pharisees' religion. My ministry isn't here for that at all. You need to understand that that Phariseeism cannot be repaired. He goes on and he says in verse 37, no one puts new wine into old wineskins or else the new wine will burst the wineskins and be spilled and the wineskins will be ruined. New wine must be put into new wineskins and both are preserved. No one having drunk old wine immediately desires a new, for he says the old is better. And so he's saying this. Three things. One, he's saying that the Pharisee order is not right because it's built on self-righteous legalistic traditional Judaism. It is not spirit-led. It produces religious but unspiritual followers. Second, he's saying as disciples of John you need to remember what his ministry was. To present me as Messiah to the world. And then third, it's time to be open to God and the work that he'll do to Jesus in you and be willing to accept whatever new thing God would do. Do not become traditionalized or you become an old wine-skin. When I first got saved and I'm going to make this personal and we'll close. When I first got saved, coming out of a religious denominationalism, the United States being a very religious nation and still is. But not as firmly religious in terms of the Christian faith as it was when I was growing up. Pastor Chuck Smith there in Calvary Chapel, Costa Mesa. That pastor who's now 79, almost 80 years old. That people look at and say, well you know he's just an older man now. First time I encountered Chuck Smith, Chuck Smith was 43 years old. He was 13 years younger than I am right now.  First time I came into contact with Pastor Chuck and he was 43. And I looked at him at that time, I have to be honest with you and I thought he's an older man. He's an old man. What does he know? But there was something, and I want to share this with you. I hope you can hear this. I hope it makes sense to you. There's something that younger people can't identify with if you try real hard, maybe who are older, an older generation here now. We have to kind of cast our memory back there and try and remember a little bit. But there was a time, there was a time when if you went into church you had to be dressed in basically a suit everybody. I grew up, I grew up in a time when the women, the women who are widows wore black all the time. I grew up in a time when women went to church they would wear these little doilies on their head. They had head coverings. A lot of you know what I'm talking about. They had head coverings. And I mean that was typical garb. I mean when a woman went to church she had a head covering in the church I went to. I remember Marie's aunt, who's a platinum blonde, got up early one morning and rushed to church and she put her little hat on or, I forget what you call it, but she went to church and one of the ushers tapped her on the shoulder and said, excuse me, she turned and said, you know, leave me alone, I'm listening, she said, excuse me. She goes, leave me alone, I'm listening to what you say, ma'am you've got your underwear on your head. True story, she had some black underwear on her head and she was embarrassed because it said Monday. But anyway, and it was Sunday. That's a true story, I'm not kidding about that.  But it was a different era, it was a different time, it truly was. There was no way you'd ever have somebody with a guitar playing up in a church. It just didn't happen, it just did not happen. When Pastor Chuck, in 1965, when he took over Calvary Chapel there in Costa Mesa, and then when he began to serve in that area, when Pastor Chuck originally saw the hippie kids 66, 67 and all, 68, when he began to see the kids, you know, for Chuck coming out of my dad's generation, these hippies were everything that my dad's generation hated, could not stand. There were bums, there were dopers, you know.  That's how it was with my dad and me, he didn't hate me, that loved me, but my dad could not stand what I was, and I can tell you that beyond a shadow of a doubt, and me, I didn't care, so what, you know, so we had real major conflicts about that, and I'm growing my hair and I'm doing the dope in the whole nine yards and not working, and when I would work, I wouldn't work, I would only work for a week or two at a time, save up some money, and then I would just use it for, you know, I just use it very sparingly and then that's just the way it was, and it was that way for a long time. But the church, the church was just a different place, I mean when you went into church, it was quiet, it was different, there was, there's no joy, it was just a different kind of place to go to, and it was a place that young people didn't want to go to, but Pastor Chuck and Kay would go out there to Huntington Beach and they would look at the hippie kids who would be walking by, and Kay, and Chuck would be folding his arms, you know, and just looking at these off-scouring, and Kay would cry, and his wife Kay would cry, and weep for these lost hippie kids, and Chuck just couldn't handle them. He couldn't handle those kids because there was everything that he preached against. But it was the love that his wife had for these kids that broke the heart of Chuck Smith. Everybody associates Chuck Smith with the Jesus movement because God used him tremendously to reach guys like me. But the bottom line is, is he had to be broken too. He had to see that God could do a work in the life of that generation, he had to see that, he had to believe that, he had to know that, and God brought him to the place where he did see that. And there's stories that are legendary, you know, when I first went over there it was in 1970, I was 19 years old, and I went in for the first time, and I sat amongst the hundreds of hippie kids who were Christians and all, and I experienced that, and then I started going there when I was 20 to Calvary Chapel. And it was different, I mean, they had music up there that I related to as a 20-year-old. It was just a different feel, a different thing that was going on there. It was a new thing, but the churches around there didn't like it. The churches would say that these hippies can't be Christians, these hippies can't be saved. Look at them, they're still walking in there, and they're barefooted. And Chuck tells the story of how the hippies, and this is true because I did it, how the hippies would be sitting in those pews, like you are right now. I didn't wear shoes. I did not wear shoes. I didn't wear shoes. I would wear slacks and a shirt that was a dress shirt with no shoes. I didn't wear shoes even to this day.  And so, I mean, that's the way it was. And I remember, I stuck my toe in that communion cup holder there just like the others did, and people would get all freaked out, how gross is that? Make those hippies put on some shoes. The old people, man, they had a tough time with the young people. But there was something that was happening, and it was that God's love was spilling out into the life of the young people. The Jesus movement is a youth movement. It's a youth movement. It wasn't started by the old people like me now. It was the 20-year-olds, the 19-year-olds, the 21-year-olds. It was the young people who said, I hate this hypocrisy. I hate it. Something's got to change. It's got to be real. We got to be real. And that was my heart. It still is at my age. It's got to be real. It can't be phony. It's got to be real. And we saw that in Chuck. We saw that in my youth pastor, Lonnie Frisbee. We saw that. We didn't want to be old wineskins. We wanted the fresh work of the Spirit of God in our life. We would leave on Wednesday night Bible study just like this, packed out with hundreds of kids, hundreds of kids. And we would go straight to my friend's house. And we would hold hands, and we would pray and worship God in song. And we'd open the Bible up and somebody would say, look at what God has promised us. We need to embrace this. And I saw God do marvelous works by the power of His Holy Spirit. Some of the largest churches in the United States are Calvary Chapel churches that are pastored by these hippie off-scouring. We've gotten older. That's true. But we haven't lost our love for Christ in His Word and His ability to change lives. And I'm praying. I'm praying. I am praying that the Lord will raise up an army of 20-year-olds, 21-year-olds who get away from the drugs and the fornication and the drinking and the partying, get away from that and start telling their friends about Jesus Christ. Well, I'm praying for revival. I've been praying for one for years. Lord, let your spirit, again, again touch these kids because they're lied to. They are being lied to. They don't understand. And I don't know what to do other than what I do. I teach the Word and I pray. God touch the youth. Only because I know one day the Lord will say, you know, Dave, come on home. And I won't say, oh no, can I stay one more moment? I'll say, take me, Lord, here I go. Yes, I want to go and be with you. No doubt about it. Thank you, Lord. But I know that when the Lord takes me home, should He tarry, I need to have someone in this pulpit who can lead this fellowship to love and serve Jesus Christ. I am praying for a Joshua, for a young man in this church to be raised up so that I can one day put my arm around him and say, I'm seeing you later. I'm handing this ministry to this young man who's going to take you further on and further in in Jesus Christ. I pray that he may even be here now, that God is putting on the heart of a young man, a desire to win the loss for Christ, to honor God and to serve him with all that is within him so that this church will have a pastor who has a passion for the things that please God. That's my prayer. I don't want to be an old wineskin. And when I get to the point where I see somebody with some funny looking taps and some weird piercings and I start saying, oh, my, my, my, I can't handle that, I should get out of the pulpit.  Just like Jesus is saying, you see, you don't put new wine in an old wineskin because when the fermentation process takes place, that dried up old piece of leather is going to explode. Well, me, I don't want to be an old wineskin. I don't want to be an old wineskin. I don't want to be one of these judgmental grumpy old men who says, oh, look at you. You ought to do that. I don't want to be that way. I want to be somebody who just sees the potential of what God can do in somebody's life if that kid will just let go and just let go and let God do something in him. And I'm going to, I've seen it already. Many times we've seen 20 some churches birth from here.  And you might be the person God is raising up to be the pastor of this church. He's here. He's going to be here. Either he's here now or he will be here someday. And I'm waiting for him because the day is going to come when I know the Lord is saying, son, you know what, you can't hobble up there anymore. You're boring them to pieces. They don't want to hear stories of Marie. She's 92 years old. I know that's going to happen someday. So all I'm saying, let's not become old wineskins. My Chuck, he's going to be 80 years old in June. He told us recently, told me recently, he said, you know what, ministry starts at 80. He said, I'm just beginning. He said, I'm just starting my ministry. And I agree with it. I know that Chuck's got a lot to give. And he's a great example to men like me. And I look at him and say, well, you know what, I want to serve the Lord like my pastor does until, you know, my prayer is, I hope it doesn't scare you. But my prayer is that I just die here in this pulpit.  You know where I went. I want to serve the Lord and I want people around me who want to too. And the bottom line is, is we need to be careful that we don't get hardened. We don't get traditionalized. We don't become old wineskins. I want the spirit to move us and keep on using us and we have to have an eye for what God wants to do. We need to have a vision for what the Lord wants to do. And I believe that I do have vision for what he wants to do. And I know he wants to do more. And so Jesus made it very clear. Listen, I didn't come to reform the Pharisees' religion. I came to bring the Holy Spirit to take people and transform their lives with new life. That's what I came for.  I came to reach out to the sick people who recognize that they need help. That's what I came for. And you know, this church is filled with people who understand that, starting in this pulpit and throughout this church. I understand that because I know my testimony, especially the parts I've never told anybody. I know my testimony and I know what God can do. And I know what God can do in a life that is fully yielded to him. And that's my prayer for me and that's my prayer for you, that we would fully yield our lives to him. Let the Holy Spirit loose in your life and watch what he'll do.


Going on everyone Sam here with late in sports cards been 10 box Tuesdays 10 box treasures basketball mixer number 168 random team style There's a look again at your random results as always could find those on the website under the results tab as well as the link That's in chat. Let's go look everybody again 10 bucks Tuesday down to 20 spots to go 10 bucks football Let's get that filled up again. That's gonna be at 22 NT hobby 2020 not NT collegiate 2019 NT hobby as well So that's gonna be a lot of fun, man. Yeah, I have a very good time ripping that 22 go 22 go everybody All right, good luck. We got the 10 bucks open I'm gonna do 2020 21 multi-sello. Yeah, we still got we still got 2020 sello. Yep Oh, yeah We still have I mean we don't have we don't have that much of it left because we've we've ripped so much of it You're between mixers between like the four boxes we do of it. We have gone through a lot of sello Multi-cellos, but Yeah, that is always a cheap fun break that's true Randy like 30 bucks a spot or something ain't bad Wow He's good He's up there and MVP. I mean obviously nobody's gonna take it from Otani, but You would be like the next one silver magic Johnson green monk CJ LB Langston Galway Silver Robert Williams green markets Morris Silver dominance Russell Westbrook Najee and base Conley RJ Hampton green poll Anthony rookie so Malcolm Brogdon Aaron S. Smith Bruce Brown in a manual quickly Silver Joellen bead Y as bouquet and a column sexton Silver Xavier Tillman rookie Devin Vaselle and Tyler Bay Prichard precious achua green Carol Lewis jr. And An obi toppen ain't no stopping silver Peyton Prichard Isaiah Stewart Vernon Carey Desmond Bain rookie Skyler Mays and Kendrick Nunn What I saw him at the concert I would have made a really mean Tyrese Albertin Killian Hayes and James Weissman rookie CJ LB Milestarner Man, yeah, that's that's never good And guys, we've got 20 to go on 10 bucks football. Let's get that moving big double-O on Yoko Kongwu Sabique Bay rookie Tobias Harris RJ Barrick Usma So RJ Hampton Brandon Clark Laja Hughes red red white and blue rookie for the jazz Isaac Acoro rookie A nice one here is gonna be Tyrese Maxi The Sixers and Cassia Stanley rookie red white and blue All right, let's do uh See ya it's gonna be crowned team all oh Johnny Davis 17 of 18 going to the Wizards Grats Washington Nice one there. Patch Baldwin red Asia That Luca beer and Fox Pascal Siakam and Michael Porter Jr Not bad box there. Let's do uh optic fast break now Optic fast break Jared Jackson Jr to 49 do a quick uh dice roll on these one two three left four five six right It's gonna be a one gonna go to the left Go to the left I'm gonna go with AI Sohan rookie silver or hollow dame tray jones disco and a bunch of these Benedict Matherin Hollow josh christopher stargazing Tatum Jaylen Williams disco is chris d'Orte paces Ty Ty purple josh giddy nice one there too 99 for the thunk That is disco Seth Curry Uh, yeah, I don't think this week. No charlie. We got 19 and 20 though 19 and T in 2020 um Nt collegiate palo purple That is 54 of 99 congrats on that one magic Here you go orland. I think that's alvin Alvin alvin alvin. Yes, it is congrats alvin with the magic Nice purple palo coming your way Preston Kevin her jade and ivy rookie disco Tatum disco Donovan Mitchell Still have some spots at nt as well Got three to go on the first break That's Vince Williams jr. Disco, uh, Kate Cunningham rookie Uh calves would probably be isaia mobley would be the number one to look for Played very well in the summer league That is going to be a Walker kessler rated rookie signatures fast break going to the jazz. There you go, utah Nice one there robert avante grand Keegan merry rookie blue Mike Conley. Nice one there two at 49 And threes lamello base base and more base do this Sean m with the falcons and a spot in tear. Thank you Sean Appreciate you buddy Again you guys 10 box tuesday football. No, that's the wrong 10 box. There it is 20 to go 20 to aug 20 to aug Keep it moving Do the optic choice next Isaiah stewart hollow deer and fox auto steve ker nice one there for the bowls That's on that optograph steve ker uh tj warren 288 For the suns we've got a jason Preston red green choice exclusive and a blue jared allen to 24 Uh one of 24 nice one there the fro david roddy and musa diamate Up next is prism fast break disco cody martin disco lamello ball marjon bow champ It's gonna be a red of bones highland. Nice one there two at 100 uh disco devin booker paul pierce and ryan ronalds blue disco shack for the lakers shack this the 150 silver trey jaden hearty rookie and dalin terry blue alec berks for the pistons It's a 150 That's the trait kawai prismatic disco jaden ivy rookie xion disco jay shawntate disco variations palo nice one again magic going to alvin very solid pete maravich and jake laravia uh disco grace and allen disco ja widescreen jabari smith rookie for the rockets wilt chamber and jordan clarkson that is going to be number two at 100 for the jazz ex-benedict comermatch matherin lock of lottery Trevor keels with the wheels pink ryan ronalds rookie nice one there for the warriors that is going to be 50 50 of 50 yeah it's a jordan clarkson for the jazz fast break uh auto ty ty and herbert jones silver is talen horton socker harry smarton and base disco erin gordon disco james harden prismatic mark williams and a trey murphy the third and guys still 20 to go i'm also going to drop you a link to number 45 broncos jags eagles three to go three to go three to go broncos jags eagles all on sale all of them are on sale uh we are on two prism hobby now prism hobby feeling during silver levine walker castler rookie then it's rodin red wave spencer din witty for the mabs silver gary patin yovitch tim duncan red wave tim duncan luka prism or hyper is i take a coro it's palo rookie christian colloco purple ice coming up here it's going to be victor oladipo for the heat uh that is the 149 one of 149 this one here going to the calves mark price it's awesome great point guard of the 80s and 90s very solid scotty pippin hyper oh sorry bram ewing scotty pippin jr red power coming up here chris paul for the suns 275 56 to 75 that is benedict matthair silver anthony davis feeling limbs uh price is it payton it's a bobby happy tuesday to you as well man bobby the hill well buddy his dad taught you how to shoot when you were a kid that's pretty sweet that's pretty sweet yeah i love mark i think mark price is super underrated he got eliminated by jordan five times dude uh montae morris orange to 49 five of 49 for the wizards silver trey christian brown migrady and drabari walker and guys still 20 to go on 10 bucks get that filled up uh 10 box football use of nerkitsh kawai pulsar alex caruso jeremy sohan wendelmore and ray allen you've got uh obelisk might get cut oh no he's he's got it they got to give him one more year i think no bogdan begonovitch to 299 ai hyper is bam out of by d weight isaam obly matthew johnson that's pretty sick actually payton his older brother or his brother still lives there that's cool well yeah silver jaw silver onyeko kongwoo aj griffin silver firework zion silver nemius kata second year payton watson in there as well red uh 299 is really go bare stifle tower nice one there to 299 auto larry johnson for the nicks and uh oh you freaking moron you just got jingled on the hyper joe engels hyper jenny davis chris weber go to their face they're like hey freaking moron you just got up a dingled hyper jalen noelle jaren jackson lake westley and brice mcgowen's case of the butterfingers yeah that's fair on to obsidian now 22 23 obsidian hobby uh i didn't watch any of the ones last night i watched i watched and sorted the breaks from sunday i watched and sorted sunday's breaks so i saw a lot of cool ones from there but yeah pop sentries fireman i like pop sentry got a bluge barry smith to 30 20 of 30 nice one there for the rockets and oran barkley 250 quit and grimes tony parker jimmy butler oozman garuba the goofy garuber to 149 nice that's actually pretty sweet on the galaxy and to uh 35 mark williams rookie hatch auto one color and three color rats on that hornets all right 22 23 select h2 chris v with a divvy tomorrow divvy spot tomorrow very nice and guys just the broncos jags eagles left on nt still 20 to go on 10 box football all right we got uh select h2 22 23 select h2 see something big in here man all right uh jeremy sohan we got a green the yoke it's jabari smith jr three of five go into the rockets congrats houston that's that's big bradley are congrats buddy big time jabari smith coming your way that's actually pretty nasty rats on that buddy get that into a mag silver tatum bad so far red iod to soon move courtside to 49 and a jalen suggs chat rookie helden johnson nice keegan mary courtside light blue to 99 congrats kings hey what up chris yeah it is pretty sweet and drew holiday a j griffin steel a draft white zion that is to at 75 for the pelicans and i would assume brian k with the jags and eagles we're down to just the broncos now in the first case of nt thank you guys appreciate that just the broncos brian uh brian k thank you that was a great box great box right there i have to say of select h2 uh we've got 22 23 impeccable h2 now and there's a bar card let's go hell yeah we'll do the bar card last all right we've got marjan bow champ red asia exclusive base we've got asia exclusive base jalen brown nice one here going to utah walker kessler that is 60 of 88 congrats jazz on card auto there as well walt frasier three of eight nice one for the nicks nicks legend walt frasier on the red asia to eight three of eight very nice all right comes your bar card ah that's pretty sick going to the blazers dame dolla six of six damien lillard nice little uh color match there congrats portland michael s congrats michael nice one there buddy big dame all right we got nt coming up now joel m picking up the seahawks in 46 down to five to go on 46 everybody also dropping you guys a link to 10 box just 20 to go 22 go let's get that filled on up everybody all right 21 22 nt uh basketball good luck guys here we go this is the good stuff what's up remars aloha hey remars hello sam shon katt that is a reggie jackson to 99 for the clippers you meant to say chat i just give in remars a hard time for that that's going to be collin sexton nice one there for the cavaliers on the printing plate from impeccable this is pretty sweet going to the timberwolves j cross over that is going to be game worn jamal crawford uh 15 of 99 congrats minnesota just have money bag yo and dame do a lot of god this one's sick going to the pistons 12 of 25 zeke isaiah thomas game worn patch dude alvin to back to back days killing it dude going to alvin 13 of 25 wow rpa france vodner congrats alvin nice one there buddy i am going to send you the empty box and wrapper because of that corner up there but i think this makes up for alvin again jaylen suggs 67 of 99 on the rpa two rpas both going to the magic alvin congrats buddy that's awesome congrats my friend alvin back to back days doing really well here man really well all right we've got nice one here the chief robert uh perish 71 and 99 for the seas hello james nice one there another jersey card it's going to be going to the magic that is going to be uh col anthony uh that's nice one sweet dude this next one is so sick going to the kings how about 30 of 49 mike bibby mike bibby for the kings hikai what up buddy nice one there sack town and then going to the next to 49 darik colman nice one there nets that is nasty treasure signatures there is a damaged corner i will um write down to get an empty box and wrapper for the nets in 10 bucks bibby is jack these days flight you're right about that it's kind of wild all right guys quick recap here very solid break overall we had a robert perish isaia thomas jamal crawford darik colman mike bibby walt frasier walker kesler mark williams usman garuba larry johnson mark price jordan clarkson steve kerr oh uh johnny davis and walker kesler mags guards we had the damon lillard nice one there uh green jabari smith jr to five for the rockets we had a palo 299 frans vagner rpa to 25 for the magic and a jalen suggs rpa to 99 for the magic that'll do it for the break guys thanks again for the fill coming up next is uefa


Hey folks, over the last several episodes I have been building out a project where I'm trying to highlight different aspects of tools that we can use to make sure that our analysis is more reproducible. We've talked about things like version control, we've talked about package management with things like Kanda or Mamba, we've talked about pipelines with Snakemake, we've talked about R, we've talked about Bash, we've talked about a lot of great tools. I love these episodes because it really allows me to show you how different tools tie together to bring about a great result. The final result that I want to bring about is a web page that gets updated every day when the NOAA website gets updated to show a world map indicating the level of drought for the past month for different regions on the globe, right? And so we're going to look at the amount of precipitation over the past month relative to that same window of the year for the past 100 or so years. A tool that we're going to use to help do that is called GitHub Actions. At least that's my plan. That might change, but that's my plan. GitHub Actions allows me to automate this process, but when you're using other people's resources, you have to follow other people's rules. One of the sets of rules that we have to be mindful of is that we can only use 14 gigabytes of drive space and 15 gigabytes of RAM at any given time. So in the last episode we talked about some of the challenges that we are going to face because the data we're getting from NOAA is quite large. In the last episode we solved the problem of it taking three weeks to read in that data effectively and quickly into our computer. We shortened that down to from three weeks to a couple of minutes. And the challenge that I am now facing is when I try to read that concatenated file that's compressed and is relatively small into R, what I find is that reading it and then which is wide and then pivoting it longer to make it longer takes up quite a bit of RAM. I've got my top running down here and you can see that my R session as it's currently processing this whole pipeline is consuming 26 gigabytes of RAM. That's clearly way too much and is going to force me to find a different solution for what we're doing here. So as I think about the data a couple things occur to me for how we can clean this up even further to make it a lot smaller. So a couple things come to mind. So first of all at this stage where I am pivoting longer and making a date and converting the precipitation from tenths of millimeters into centimeters, I don't need to do that on the full data set with the 36 million rows or however many rows there are. Instead, I could chunk that. So instead of having to worry about taking up 26 gigabytes all at once, perhaps what I could do is I could take instead of 36 million data lines all at once, I could take 36 files that each have a million lines and then I could pivot that longer I could do these conversions. So that's one thing. Another thing is that it occurs to me that a lot of the data in these files are zeros, right? So if we're looking at precipitation, most days don't have precipitation, right? And so I can remove those zeros to also clean up a fair amount of space. So to do all this, we're going to need both bash as well as R. So I already have a file here for reading in this concatenated DIY file. I also have the script that we made in the last episode for concatenating the files within my tarble, right? And so I'm going to show you how we can continue to develop these two scripts so that they work together to integrate to come up with a file will be a lot smaller and use a lot less drive space as well as RAM that again in the end will make it possible for us to put our analysis up on GitHub to run GitHub actions. Something to keep in mind is that if you have a Mac and you're using bash, the odds are good that the bash version you are using is quite old. So before we get going too much further, I'm going to make sure that I have the latest version of bash available for my project. So again, I'll do a conda ENV list to see which environment I'm in. I'm in my base. I want to be in that drought one. So I'll do a conda activate drought to get the latest bash tools. I can do Mamba install core utils. And so again, this will get us the latest version of the core utilities for running on the command line. I will also want to come to my environment.yaml file and add core utils to the end of that. I see that core utils version 8.32 was what was installed. So I'll go ahead and pin that version there. Save that. And so the next time we burn down and relaunch our environment that that will get loaded. But for the time being, we have the latest version of those command line tools available to us here in this project. Great. So the first tool that I want to tell you about is a tool called split. Split is a tool that will take a file and it will then split it into many files, right? And so we could imagine having this data tarball, this ghtmd all targz. Again, if we look at that, it's got 3.3 gigabytes. So, you know, perhaps we're sending it over the internet and we don't want to send 3.3 gigabytes all at once. We'd rather chunk it up into smaller pieces. This is one of the common places where people use split. So if I look at the help page for split, I will see that there are a variety of ways that I can split a file. Some of the arguments that I will commonly use with split would include b for the byte size. And so that way we make sure that every file is only so big. Another that I will often use is lines. And that way I put a specific number of lines into each file. And another is n for the number of chunks. So say you want to generate 10 files that are split versions of the bigger file, you can use n, right? So again, what we might do would be like split hyphen n. And then let's look at our data ghtmd all targz. And for our n, we could put in here like 40. And so this is going to take that tarball and split it into 40 files. Now, what you'll notice is that we now have a whole bunch of these files that start with x. And so these are the files. And so we talked about last time wc. I can do wcl and x. And I'll put a star because that will expand to match anything that starts with x. And so what we find is that we now have these 40 files that each have different numbers of lines in them, but are roughly the same size, right? If I do lslth on x, I find that they're all 84 megabytes in size, right? So again, that's what you should notice is that the split file by default comes out as x a, x a, b, right? And so it's an alphabetical order. So that's putting things by n, right? And so if I do it instead by b, let's go ahead and do let's do 40 million. I think that's right. Yeah. And I forgot to delete all those other files. So I'll do remove x. And then I'll rerun my split. And then let's look at lsx. And we can see all those files. And again, if I do wcl, I can see that there's 88 files. And if I do lslth on those x files, I see again, they're 39 megabytes. Because again, 40 million bytes is different than megabytes, right? And so there's a little bit of a conversion factor there. The third approach that I will frequently use is to split things by the number of lines. So that doesn't totally make sense for something like a tarball. But maybe we could think about it for the all files file, right? And so what we could do would be split hyphen l and let's do 1000. And so that will generate files with 1000 lines each on data ghc nd all files dot txt. And so this is a file that should have 122,000 or so lines. And so we should get out 122 files. So that should write over all the existing x files. And again, ls on x, and see that there are 123 files, 122, and change, right? And then if I do head on xaa, I will then see the first 1000 lines are in xaa, right? And so that if I did like head on xab, I won't have that header line, because that was only at the top of the first file. Okay, so split is a really useful tool for splitting up our files. You can split up a binary file, you can split up text files. Typically, what people will use split for is to have a big archive that they then split into like 1000 files, they then upload it to a web page, or they move it to a different drive, knowing that sometimes internet connectivity isn't what it should be. And so they might lose the connectivity, right? And so they'll see, well, we've got, you know, 50 of these 100 files moved, I now need to move the other 50. And so then once they get to that remote computer, they can then concatenate them all back together. And it will be as good as the original file. So we're going to use the split operator as part of our pipeline. And so to this point, what happens with because we've got that tar big O, it's going to decompress our tar ball to the stream. It runs that stream through grep to remove only those lines that have PRCP precipitation data. Then what we can do is we can then split that stream into, you know, 1000 values or 1000 lines per file. And then we can put that into G zip. So let me show you how we can do that. So again, we will pipe this into split. I'm going to split it into million line files. And so we've got 36 million lines in the output of this pipe so far, right? And so that will give us 36 different files. We could go for more files if we wanted. But let's start with a million and we'll see how we do there. And then because split doesn't output to standard output, what we can use instead is a argument called filter. And filter, then we can give it a command to run on our data. And so that what we're going to run on that split is G zip. And we're then going to output, like we did here, right, we redirected the output of G zip to a directory. And so I'm going to put this into data forward slash temp forward slash. And then I want the file. So I'll say file dot GZ. And so again, if we look at the help for split, we'll notice that somewhere up here there is a there's a filter here filter command, right to shell command. So that's the command that's here. File is name file name is dollar sign file, right? So we're going to put that to dollar sign file. And that then again, should take our data, it's going to decompress and pull apart the archive grep to get the lines that contain PRCP, and then split that into individual files about 36 or 37 files that each have a million lines, it'll then compress it and it will output it to data temp dollar sign file GZ. So I need to make that temp directory. So I'll do mkdir hyphen p data forward slash temp that hyphen P says make it. If it's already there, don't give me any noise about it. So I'll go ahead and run these two lines down here. So while this is running, let me show you what's going on in data temp. If I do LS data temp, I see it's generating those xaa xac xav whatever files, but with the GZ, right? And so if I do LS LTH on data temp, at the top here, I will see that it's building xas.gz. So you'll don't see any other files here. And so the beauty of these bash tools that are streaming the output is that I'm not actually saving anything to the disk. And if I do top, and I start by memory, I see that, you know, I don't have anything here that's really using tons of RAM as it does this operation. So again, the nice thing about the bash tools is that they're really lightweight in terms of what they demand of your computer and space. Whereas if I were to do this in R, again, as we saw, it just uses tons and tons of RAM and tons of space. So that all ran through. And again, I could do LS LTH on data temp to see that I've got those 37 or so different files. They're all close in size. But again, they're going to be different size because they have been compressed and different files will compress differently based on the contents of that directory. Great. So now we have these 37 individual files that are basically subsets of our overall tarble. So the next thing that I want to do is I want to take one of these compressed files and run it through my read deal, why file script. And what we can then do is we can read it in, we can clean it up, we can pivot it longer, and then we can output it, right. And so then we'll get another 37 outputted files that we can then compress together.  So we're now going to move and do things in R. I'm going to change the name of this R script. So doing this in a get friendly way, I'll do get MV code, read DLY files, I'll move that to code read, split DLY files. R. Okay. And so now that I'll close that, and I'll reopen this. Great. And so, as always, I want to practice this with smaller files, smaller number of files before I do all 37. So I'll go ahead and get these libraries loaded here in R. And we want to make sure that we've got quadruple width headers, right. And here I'm going to put in data temp XAA dot GZ. And this should run rather smoothly. So that took a second or so to run. If I look at the top currently, I see that my R session is using 392 megabytes considerably smaller than the nine gigabytes that we saw at the end of the last episode. So we can then run this through the rest of the pipeline here. I'm going to hold off on writing it out for now. So that outputs a data frame with 29 million rows. And one thing I notice just in these first 10 is that seven of the first 10 rows are precipitation values of zero. I don't need to keep those around, right? Because ultimately what I'm going to look at is the sum of the amount of precipitation in a window of time. So I'm going to come back to my code and add a filter to remove those rows that have precipitation of zero. So I'll do filter, prcp, not equal to zero, add a pipe to that. Also, I notice here that I've got filter element equals equals prcp. I already did that in my grep statement. So I'll get rid of that. I also don't need the select statement, because I can remove element from here as well, where I did the call select. So little things we can do to make our code maybe run a little bit faster and simply. So I'll go ahead and run this. And we should really drop down the number of rows in our data frame. So now we see that we've got about 5.8 million rows in our data frame. But again, we're going to have 5.8 e to the six times 36. And so that's a big number. That's going to be 208 million rows to our data frame. So I want to think about other ways that we can perhaps simplify each of these 36 different files to make them smaller. So one thing that occurs to me is that we could go ahead. And at this point in the pipeline, we could filter out those days that are outside of the window that we're interested in. And so again, constraints force you to make certain decisions and have certain trade offs. And we're not all the way through the pipeline yet. So it's a little bit uneasy to say, well, I'm going to set a 30 day window for my analysis. But I feel good doing that. And perhaps we could make it a variable that the user passes in to set the size of the window. So I think what we could do is we can go ahead and filter on date to get things that are within 30 days of today or any other day that we might give it. Also, what we can do is for each window for each year and for each station, we could go ahead and sum up the precipitation, right? So we can do those two things to really make I think the output a lot simpler. So the first thing I want to do is go ahead and define the window, right? And so at this point in the pipeline, I'm going to go ahead and do a slice sample. And I'll do n equals 1000. And I'm going to go ahead and output this to a variable that I'll call D. This is a right arrow. It's the same as the left, but in the other direction. So again, looking at D, we now see that we have 1000 rows of our data frame. This will be a lot simpler to work with for kind of doing some quick manipulations for figuring out what is in the window. Okay. And then once we're done, we can merge our two pipelines together. So we'll go ahead and take D. And I'm going to do a mutate. The strategy that I'm going to use is for each year, I'm going to calculate the Julian Day. So the Julian Day is also called like the year day. So, you know, January 1 is the first Julian Day. January 10 is the 10th Julian Day. December 31 is the 365th Julian Day, right? And so by keeping track of the Julian Day, we can say, well, today is Julian Day 300, I only want to go back 30 days. So I want to look at things that are between 270 and 300 for being in my window. Okay. So to get that, we're going to use the Luber Date package, which we already have loaded. And so we'll then say Julian Day equals Y Day on date. And so now we get this Julian Day column, right? So January 13, it's Julian Day 13, right? I now want to generate the difference between the Julian Day and today, right? T Day, Julian. And that we can then say is today, right? So today is going to give us the date. And of course, I can then wrap that in Y Day as well. To get date today is day 267. I'm recording this on September 24. And so now we can use that to calculate the difference between the Julian Day and today, right? And so we'll then define a variable diff to say T Day, Julian minus Julian Day. And so now we see that we've got days that are negative, which would be a couple of days down the road, right? So this is September 30, 1934. And so this is six days from now in terms of Julian days, whereas this June 19 was about 97 days ago, right? And so I can now begin to create a case when statement to say is in window. And we'll do case when so case when diff is less than window. And so my window, I will also define as a variable up here, right? And for I think 30 is a pretty good window that we'll use. And so now if if diff is less than window, then that is within the window, right? So that'll be true. But diff could be less than window and be negative, right? So like negative six is less than window, but that's not within the window, right? So I could say diff less than window and diff greater than zero, then that should be true. Running that, we now see that these values are true, like this one, right? The difference is six, that's true. So now we want to build out the other scenarios for where it's false, and see if there's any special situations. Okay, so if diff is greater than window, then that's going to be false, right? So like this case, this is 254 days ago, back in January, that's not within the window, right? So we'll go ahead and run that. And so now we see, yeah, so like January is false, but September 18th is true. Okay. Now we also have these dates that are in the future. And so that's not what we want either. If diff is less than zero, then that should be false as well. So that takes care of all of our differences. What if we were looking at a date in early January, and we wanted to go back 30 days or 100 days, right? So if we're on January 1st, and we're looking back 30 days, well, then our difference is going to be negative, right? And so there are, you know, times at the beginning of the year, say, where we would want to have a negative value. So to test that out, I'm going to go ahead and add a modified variable. So I'll do T day, Julian. And I will set that to be equal to this January 14th. So that'll be the 14th, right? In my window, I'll go ahead and make that 100. So if we go back 100 days from the 14th, we should be sure to get these October dates that they should be within that window. Okay. So run that. And now if we rerun this pipeline, we find that, yep, this January 13th is in the window. But these October dates are not in the window, right? And so we need to modify our code so that those are included. So the first situation would be like T day, Julian would have to be less than the window, right? So we'd have to be within the first 100 days in this case of the year, our difference plus 365 would have to be less than the window, right? For that to be true, right? So again, if Julian day, so day 14 is less than 100, the window I'm using for this testing example, right? So that would be like these cases, you know, yes. Today, the 14th is less than 100, right? And so then the difference, so this negative 278 plus 365. So if I do that plus 365, this is less than 100. So this should be true, right? So that's still within the window. Okay. So if we go ahead and run this up, I forgot a comma at the end here, I should go ahead and make this true. And so now what I see is that yes, this January date is in the window. And these two October dates are also within the window. So I'll go ahead and break this line across two lines to keep it from scrolling around. And I'll go ahead and put back our today Julian and our window and rerun this. And so now again, we see that we've got those two dates that are within the window. So I can then pipe this to a filter for is in window. And again, is in window is a logical already. And so I don't need to worry about saying is in window equals equals true, because it naturally evaluates to true or false. So if it's true, then we'll get those lines out. And so now we see that we've got all values of true for the column is in window, and we've gone from 1000 lines down to 78. So that's really simplified things down considerably. Again, I'm only interested in summing together the precipitation values for the cases of things being within the window. So to sum together things that are in the window for the same year, I need to go ahead and create another column. So I'll do year equals the year function on the date. Again, this gives me my date. And so that works. Again, if I've got the situation though where I'm at the beginning of the year, then I'm going to have things from the previous year that need to go with the current year, I'll go back to having today, Julian, be 14, and my window be 100. Because I need to do some logic on this year column. So to add the year to those December dates, I'll go ahead and use the if else function. So if else, so if the diff is less than zero, right, so for like, these cases, right, where it's got like a negative value, then I will say diff less than zero, and is in window, right? So if it's from the previous year, then I want to take year and add one. Otherwise, I want to use the current year. So now I have the correct year I have that it's in the window, I can go ahead and now summarize this by doing a group by ID and year, right? So we're looking for each station in each year for the data within the window, right, I can then do a summarize. And I can then do PRCP equals sum on PRCP. And I now get three columns back the ID, the year and the precipitation. Now, remember that we've got 36 files, and there might be some weather stations that are cut across different files. So we'll want to repeat this. Once we've concatenate everything back together, I'm going to go ahead and do the dot groups equals drop, probably not super necessary to do that for this application, right? So since I've shrunk the data frame so much, I wonder if I really need to output this to a file, or if I can't just do all 36 37 files at once, and then output the single file. So I'm going to go ahead and bring this pipeline together. I'm going to get rid of that slice sample because we want all million lines, not just 1000. And let's go ahead and run this. And I actually want to leave off the right TSV. I want to see how big it is because maybe we can do all 37 files in together without having to send them out to temporary files that we then later pool together. So maybe we can do the pooling all right here. So I like this idea of not writing things back out to another temporary file. So I'm going to go ahead and put this all in a function. And what we'll do is we'll say process x files, and we'll do function on x, right, and then we'll grab this, tab it over a smidge. And I'm going to then replace this path with x because that's going to get passed in from our map function. And I'll close that out. And yeah, so let's go ahead and load process x files. I'll do process x files. And we'll give it data temp x a b dot GZ. And there again, we get similar number of rows in our data frame. So I now want to create a vector that I can map over to do this process x files. So we'll go ahead and do list dot files data forward slash temp. So that gives us our GZ files. I want the full path though. So I'll do full dot names equals true, gives us our paths, I'll call these my x files. Right. And then we can do map DFR to map over all of the lines of our vector, right. And so I can then do x files. And we'll send that to process x files. Because this might take a little bit of time to run, I'm going to add something in here to print out the value of x. So I know how many files we've processed. Alright, so now I can go ahead and run map DFR. So that took about 10 minutes to run through. And you'll see that the output is about a 2.9 million row data frame. As I mentioned, we summarized within each of the 36 files, but there may have been stations and years that spanned different files. So I'm again going to do my trick where I call this D for data and assign that the value of the last value. Again, last value is the value of what's coming through the pipe. And if I do D, I can then pipe that to group by ID and year, and then summarize. And again, we're going to sum the precipitation. So we'll do PRCP equals sum on PRCP. And that reduced the number of lines by about 10. So not a big difference, but but still important, I'll go ahead and do the dot groups equals drop. And I'll go ahead and pipe this out to a right TSV. And I will save this into data. And I'll call it ghcnd, tidy dot TSV, and GZ, right? So it's going to be a G zipped output file. So if I look at the size of this LSLTH data on that, I see my tidy version is 15 megs, very, very palatable size file, that's great. I'm going to go ahead and bring this up to the whole map pipeline. And that will then be the output file, right?  So to do that, we need to add a shebang line to the top of our R script. And so that's pound exclamation point user bin ENV R script, we can make that executable by doing chmod plus x on code read split dly files, I can come back to my bash script, and then do code forward slash read split dly files dot R. And then to clean things up, I need to get rid of all of these temp files, right? So I'll do RM hyphen RF data forward slash temp, and that will then get rid of that directory. So I can put in my target, I can actually remove this ghcnd cat file, because that was the previous output of concatenate dly bash. So I'm going to go head back down to that, right here, right? And I'm going to call this, I'm going to bring it down to the end. And we'll save it there. And I'll say this as summarize dly files. And my script, I've got the concatenate dly bash, I'm going to call this actually bash script. And then we still want that turbo I have an R script. And that is going to be code forward slash read split dly files. Remember the comma. And then here for the shell I want input bash script. And my output file again is going to be this target here, which I can plop in here, save that. And so we have our rules again, the inputs data input is the table. I have these two scripts. Although I only call the bash script from the rule itself, I still need to include the R script as a dependency. And I've got the target up here. So now what I can do would be snake make hyphen C one. And by default, it will use that first rule targets. And it'll hopefully see that those first four targets already made. And I'll go ahead and make my tidy TSV GZ should take about eight or nine minutes. And hopefully everything works well. Wonderful. So that took about 15 minutes to run the concatenation from the tarball all the way through processing here in R. If again, I do LS LTH on data, I see that my temp directory is gone, which is good. And I've got my GHC ND tidy TSV GZ file, 14 megabytes. Awesome. So let's go ahead and clean up some things. I see that in my project root directory, I've got all those x files. I'll go ahead and do RM x star. Looking again in my home directory, I see I've got a hold. I'm not sure what that is. So I'll go ahead and remove that hold. Hold is the directory. So I'll do RM, RF hold, that must have been something I was making while I was practicing. Again, that looks good to get status so we can commit everything that we've changed. So we'll go ahead and then do get add. I'll use the period because I know what I'm committing. Usually that period is a little bit risky. I'll do get commit hyphen m, I'll say summarize precipitation for window for each station and here. Get status. I'll go ahead and get push. And we are good. So I know this was a bit of a long episode. We covered a lot of really cool topics. The main bash concept that I covered with you all was the split function, as well as seeing how we can tie together bash with our scripts. Again, all the stuff that we did in our none of it was really new at all. But again, seeing it in different contexts. And again, seeing it in the context of running it from a bash script. So I think we've made a lot of great progress today, although it was long and winding road. And we're ready to go on and start thinking about how we're going to further summarize our data to make that great visual that we're so excited to make. Well, so that you don't miss that episode, please make sure that you subscribe to the channel, you click the bell icon, give me a thumbs up and let your friends know what we're doing here. All right, take care, and I'll see you next time for another episode of Code Club.