Okay. Good morning everyone. Welcome to today's session. We'll pray and begin. Can somebody from the online batch pray please? Are you able to hear me? Yes. Yes, Nina. We can hear you. A gracious loving father. Thank you for this day and time that you have given us Lord to come to your presence and to learn from your word. We thank you Lord for all that you have been speaking to us and teaching us Lord about our authority in you, Master. We pray that even as today's lesson we come with Pastor Nancy and each one of us that our hearts would be open to receive what you are teaching us Lord and that we would grow in the grace and knowledge of you and be able to use our authority in every sphere. But we ask in Jesus precious name. Amen. Amen. Thank you, Nina. Thank you for leading us in prayer. In the last class we started this discussion about the strategies of a defeated enemy and we said that Satan has already defeated but he works strategically with a couple of, what can I say, methods and he tries to take down the believer first is mind games and we talked about how the mind is so important, our thoughts, our imaginations and if we can conquer this area of the mind and we can consecrate it to the Lord then it is very difficult for Satan to affect us in our mind. So that we discussed thoroughly and we said we have to put on our armor, we should not allow any foothold or any opportunity for the devil to enter in. Then today we will talk about open doors. I know that I introduced it in the last class. I said open doors are another way in which Satan can influence. So how do open doors actually, how can doors be opened in a believer's life? So there are three main things. One is sin. If a believer continues in sin, now the, okay let me enlist it and then I will explain. Sin, second one would be wrong words which we use or it can be certain situations. So when we talk about sin, even as believers now that we are justified in Christ, we are righteous in Christ, that is the positional truth of what Jesus has done. But can a believer sin? What do you think? Can a believer commit sin? Yeah, so a believer can commit sin either in thought or in word, in deed. But does the Word of God provide an option for us to experience God's forgiveness if we make a mistake? Yes, that is also there because the Bible says we can repent, we can confess our sins and we can receive the forgiveness which God gives us. So when we talk about sin as an open door, it's referring to unrepentant sin. Okay, because conviction in the heart of a believer that is normal. How the Holy Spirit works, you know, he convicts us and we read about that in John chapter 16. That's the work of the Holy Spirit. He convicts us. Now when the Holy Spirit convicts us, we should respond. When we are sensitive, we respond. If we are not sensitive and if we don't respond again and again and again, if we engage in sin, that is when this open door is applicable. Okay, it's somewhat like Samson situation where he knows right and wrong. He knows the grace that God has given him through his Nazarite vow of God had told him to grow the hair and his strength was in the hair. He knew everything but he's playing around with the grace of God. He's playing around with his relationship with God and that's very dangerous. And we know what happened. He risked it and, you know, he experienced like he went away from God's best for his life and that is what we are talking about over here. So when a believer does that, we are not repenting. Even when the Holy Spirit is convicting us, we continue, continue, continue. Then that becomes an open door. Now Satan can use it and he can influence us. And what should we do then? We must overcome it. We must recognize that the blood of Jesus offers cleansing for us. Okay, so the blood of Jesus will cleanse us from our sin. It's already provided. As a believer, I should be humble enough to say, I made a mistake. I'm sorry. I will change. Lord, wash me with your blood. Make me new. Okay, so when I do that, it's fine. I can shut the door on the devil. Otherwise, the door remains open. So there are two things which have been listed here in our notes. One is fleshly weakness, which is internal. Okay, when we talk about sin, fleshly weakness, which is internal. Then temptations, which are external. So for a believer, Satan tries to influence from outside. That we know. He will give us options to go after the lust of the flesh, the lust of the eyes, the pride of life. So that work he does. But in our flesh, as James writes, he says that God doesn't tempt us, but we are tempted because of our own desires. So we ourselves, when we don't overcome our flesh, when we don't walk in the spirit, these sinful influences can come from within us. So as a believer, we have to get rid of that. Okay, so both of this are fleshly weakness. That's why the word used there is weakness. If we see any weakness in ourselves, it can be, let's say weakness for greed or a weakness of greed, weakness of pride, weakness of lust, weakness of jealousy, weakness of envy. Okay, so those are all fleshly, but we have to overcome that and of course know how to go against the temptations that we have already discussed. So sin, this is how open doors through sin works. So what are the strategies to overcome? We must submit to the Word of God. We must submit to what the Spirit of God is convicting us and doing in our hearts regarding that matter of sin. We can use the Word. Remember Jesus said, it is written in Ephesians 6, we are told, use the Word, the sword of the Spirit, the Word of God. So to battle against whether it is fleshly weakness or it is temptations from the enemy, we can use the Word, we can use the power of the Holy Spirit and overcome it. So these doors can be shut and we must always remain on guard as believers. Always check and ask ourselves, hey, am I walking in love? Am I walking in submission before the Lord? Is there anything? Is there a habit, a behavior, an attitude which God has convicted me about and I have already dealt with it? These are questions that one can ask so that we keep the door shut on the devil. The second one is of course the words that we speak. Words carry authority. God created the heavens and the earth. How? By the words that he spoke. He said, let there be light and there was light. So we recognize that our words carry authority, they carry power and which is why in Proverbs 18 verse 21 we read, death and life is in the power of the tongue and those who love it will eat its fruit. So God is reminding us and telling us that the tongue, the ability to speak, use words, he has given it to us as a means to exercise our authority and use power as well. Not just to communicate but we can use authority and release power through our words. So the words we speak can also open the doors for the devil to work in our lives. How does that work? Remember when we first said that spiritual can influence the natural and in that we had listed, we said some practices, some dedication, some sacrifices. There are commitments that people make through their words. All that brings us in bondage to the enemy, to Satan and demons. So our words in that sense can put us in bondage. For example, if you take somebody who has dedicated themselves to a certain God or a goddess, you already created that bond with your words. With that demon. Now if things are happening in our lives because of that bond or whatever you want to call it, that contract or that promise, that dedication, God wants us to walk in abundant life but our word has put us in this bondage. So we have to be careful. So through our words, we usually say things like renounce, revoke, use our words to proclaim the opposite. So instead of dedication to certain Gods, what we can say is, I belong to Jesus. I'm washed by the blood of Jesus. I am a child of God. I am redeemed. So what am I doing? I am proclaiming my freedom. I'm proclaiming my position in Christ. Is it powerful?  So our words are very powerful. If we don't affirm that I am now a child of God, I am no longer a slave of the devil, I don't belong to the kingdom of darkness, what will Satan do? He knows how to manipulate because we're not standing aligned to what God has done. So our words are important, dedications that one could have made. Or think about this. With our words, we say something like nothing good will happen in my life or I am not blessed. It happens, isn't it? Sometimes, maybe if you're going through a low or difficult situation, we make some statements and all this is very dangerous because what's it doing? It's giving the devil ammunition. It's giving the enemy an opportunity. So with my own words, I say that I'm not blessed or nothing good will happen to me. I won't get any good opportunities. Nobody likes me. What's happening? It's in contrast to God's word, but I'm using the power of words. What did that verse in proverb say? Death and life.  So that's the danger. When we speak such things upon ourselves or do you remember when we talked about prayer, we said we have influence on family members. So husband and wife, they have influence in the spiritual over one another. Parents over their children, they have influence. All family members, siblings, we have influence, spiritual influence over each other. So when we speak life and parents bless their children, it happens. Then let's say husband and wife, they bless each other. Things happen in a positive way because what are we doing? We are using the capacity of authority and power in our words to declare it on our own family or any other authority figure, a pastor. What do we usually do during benediction?  We are pronouncing, declaring blessing because that's what God told the priests to do for the people. He said bless them. They are my people. They are a holy people. They are like in the book of Peter, we again read that now we are priests, we are a holy nation, they are peculiar people. So we pronounce blessings. We use our tongue for blessing. But if we do the opposite, for example, let's say a parent speaks over their child and says, oh, this child will not do well in their lives. Or there's no hope for this child. That's an open door because the authority is not being used by the parent to bless the child.  So this is the way in which Satan can use our words. And so we have to be very careful about what we speak about ourselves, what we speak into other people's lives. Use it in the right way because the Bible teaches us that we can choose, choose life, speak life and the enemy will not be able to enter in. But when there are words of unbelief, words of cursing, words of fear, all this is very helpful for the enemy to come in. So our words are so important. For example, I remember as a kid, when we become sick and we are small, right? In some ways it's nice because you don't get to go to school, you sit at home and everybody takes care of you, everybody is worried about you. So I remember as a little kid I thought, hey, this is so nice.  And I mean, somewhere once I was born again and much older and all I realized, I was falling sick very often as a kid. But then I recognized, maybe because it's a pact that I made and I told myself, I want to be sick often. But once I came to know that, hey, I shouldn't be saying such things about myself, I renounced it, I revoked it. I said, I canceled that in the name of Jesus. Now I'm healed by the stripes of Jesus. I no longer need to be sick often, all the time. So it's even simple things like that, right? That if the Holy Spirit reminds you of anything like that that we have spoken, then immediately it's as simple as by faith, you cancel it. And instead of that, you speak the blessing upon yourself. Are you all following me? Okay, great. So this is how we must take care of ourselves. Then the next thing is situations. So the enemy will try to use some situations to enter and create trouble, either for us as individuals or for us as a church community. For example, remember in the last class, we said only we know ourselves. And so we must have standards and restrictions based on our weaknesses. Now, if I don't take that seriously. Now, very simple example, if I have a weakness for biryani. Okay, and I know if I go, if I see biryani, if it's put in front of me, I am going to eat like anything. I will have to just tell myself, okay, don't go there. Just don't go there. You know, go somewhere else where you won't find what you like and you won't make that, you know, gluttonous mistake again. So situations, the enemy can use it. I'm just giving you a silly sort of an example. In other instances, if we are not on guard, right, Satan can use that situation. It's unnecessary to interact, maybe a certain person is causing us to sin, they're influencing us. Maybe it's a good thing not to interact with them, right? Because scriptures say that bad company corrupts good character or go to a certain place which will make me sin. So I should be careful to guard myself, I have to guard myself, right? So as individuals, that's how we do it. Then as a church community and a family, again, go by the instruction of God. So there is one incident in the book of Corinthians. So to the Corinthian church, you know, Paul gives them an instruction, one brother, he has fallen into sin.  And to correct that brother, he says, okay, put him away, don't have anything to do with him. Don't interact with him like that so that he will come to the understanding that what I did is wrong. Okay, so initially Paul tells them that and then he says another thing. Once the brother repents, he says, okay, now don't treat him the same way. Now you can affirm your love to that brother, less the devil, you know, find an opportunity to sort of create trouble for us. So what is he saying? He's saying, let's not have an environment of bitterness, accusation, unforgiveness for that brother anymore. Okay, that was not the original intention also. It was more in love that the brother will repent. But now that he has changed, he's telling the believers there should be no opportunity for the devil. If we keep unforgiveness in our heart toward him or something like that, what will Satan do? He'll find that this community is not walking in love so he can do something. Okay, in our midst. So even as a community, he's encouraging them and saying, we should not have any open door for the enemy like walk in love, walk according to the word of God, walk in submission to God, right? So as individuals, Satan can use situations. Even as a community, Satan can use situations. So we must be careful to manage those situations early enough. So that's the way we look at it. So think strategically always. I don't know how to pronounce it. Strategically or strategically, whichever way. But that's the point. See, a good enemy will think how effectively he can attack, isn't it? So when we play those games, board games and all, we'll think, Ah, okay, this is how I should go here. Yes, you think here there's no protection. Let me go this way and attack, you know, checkmate. So Satan thinks strategically when he thinks about us. He sees everywhere this person is guarded. Where is the unguarded part? Okay, and that's where we should not give him access. And so we can pray and ask the Lord and say, God, please help me to identify. How can I be strategic? How can I guard myself in a strategic way? Okay, so I mean, I don't want to get into examples. There are so many examples that we can think of where people are so good in ministry, so this and that, but somewhere in a small situation, they slipped, right? And it created so much trouble for them, for everyone who's following them. So such things have also happened because they were not careful about the areas of weakness. But that's how Satan works. He's happy to see the smallest weakness, smallest weakness he can get in. And so that's what we are learning about.  That's how we can stand strong and continue strong. Okay, so the next way in which he tries to affect the believer is violation and intrusion. This simply means that he knows what is legal in the spiritual realm. Okay, so he knows that God's people now, they no longer come under his slavery. They no longer are meant for, you know, if you say oppression, they no longer are meant for, you know, discouragement, so many things that we know. Jesus has come to set us free. He has come to give us an abundant life. We know that. But what will Satan do? Forcefully he'll come, okay? And he will violate or he will intrude. Even though legally he has no right, he'll come and crash outside of his boundary to create trouble for us.  Because what are we saying? We are saying, hey, you don't have any right, you have to leave. So in matters where, let's say a believer, we have dealt with open doors. We have confessed our sins. Okay, everything is closed. Legally everything is fine. And even then if the enemy is putting oppression, what is he doing? He's trying to violate. He's trying to intrude. Intrude is barging in. Imagine you're sitting in your room. Okay? And maybe you have even latched the room. Somebody breaks the door and comes inside. That's what is intrusion. He has no right, but he still does it. So when Satan tries to do oneness, enter easily. That is through the open door. Or enter forcefully. That is violation, intrusion. If the believer doesn't stand up and say, stop. I rebuke you. Then he can continue to do whatever he wants to do. Alright, so that's how it works. So in a forceful way also, sometimes the enemy can come. And when we look at our family, when we look at our circumstances, situations, sometimes we can recognize, hey, Satan is doing this. Simply to trouble me. He's trying to do all this. We can recognize it. And when we recognize it, we should not tolerate it. Instead we should say, no, you don't have any right. I want you to leave in the name of Jesus. That's where the whole rebuking, the casting out and all that comes in. And so identify, identify the enemy coming in. You know, in John 10, Jesus said the thief does come, does not come except to do what? Steal, kill and destroy. That's his plan. He wants to come into steal, kill and destroy. So identify it and ask the enemy to leave. Now that we have recognized that we already have the victory through Jesus, through the cross. We studied, right? So many things we studied. We studied that the enemy is destroyed. He is expelled. He is crushed. He is condemned. He is defeated. We've already studied that. We've also studied the dimensions of our authority. We have been given the authority. So what is the position that a believer should take? The position that a believer should take is enforce the victory. Okay? So it is now my right and my responsibility to enforce the victory.  Or if I notice whether my church members or family members, something they are going through and it's not right what the devil is doing. What should I do? I should enforce the victory. I should command the enemy. You leave in the name of Jesus. And then we will see the victory over there. Right? So that is how I want us to recognize what we are learning right now. So each one of us try to enforce the victory over different situations. Maybe let's say sickness. We've talked about it. We go against it. Or if Satan through some situations in our personal life, if he's trying to trouble us again, we can command and say hey devil take your hands off. You have no authority over my family members or our finances. Right? Or maybe some issue of protection that you feel like he's trying to intimidate bring fear. So we can say no, we are already protected. In this manner, we can battle for our loved ones and the extent of authority. This we have already talked in James chapter 4 and verse 7. It says therefore submit to God, resist the devil and he will flee from you. We talked about enforcing victory. Isn't it? So that is resist the devil, resist the devil. But before resist the devil comes, submit to God. So our level of authority will depend on our level of submission. That also we have recognized. So the more we are submitted to God, the greater authority that we can walk in. So let us enforce Christ's victory. We can enforce it in the area of marriage. People are married. You as a believer, maybe your family members don't understand these truths right now. But as you pray, as you make declarations, as you take charge, even spiritual warfare, taking authority, binding, losing, you can do all that for your spouse. You can pray for the children. Maybe right now they don't understand, but you understand. Take that position to pray for them. Maybe somebody is far away from God. So we can pray for them. We can pray for finances, work. We can pray for our future ministry and all that. And we can also minister to others. So when you come across a situation where people are affected, we can actually pray for them. So as I've been saying, one is we can take the authority and enforce victory in people's lives. That is one method. But a better method is you teach them about who they are in Christ. Teach them about the promises of God's word. Teach them what is the meaning of believer's authority, how to use the authority. Then what happens? They need not depend on us. They can continually practice having authority in Christ. So that's the manner in which we can enforce. Okay, so I'll stop here and I'm just looking at a question from Jacken. She says, Pastor, can this forceful entry of the devil happen in a believer's life amidst closed doors? I mean when we are watchful, not to give in to our fleshly weakness and remain in word and prayer. So yes, Jacken, that's what I'm saying. In amidst closed doors, sometimes he barges in. Okay, so that's how the term is there, forceful entry. So he can try to create situations that can directly or indirectly affect you. For example, like let's take the workplace. Okay, now you're walking with the Lord, you're walking in victory, you're walking righteously. But what if two or three colleagues, they come up with a plot against you? So what's happening? There's something cooking like a weapon of the enemy. He's trying to forge it against you. It's happening, right? He's trying to intrude. How does he try to influence? It's affecting my peace. It's affecting my joy. It's affecting my hope, right? What is going on in the office setting? So this is the way Jacken, he knows directly or indirectly. And generally it's through closed circles that he may try to intrude. Or let's say in a moment of weakness. Okay, in a moment of weakness. But then it won't be closed doors anymore because in those moments of weakness, just momentarily we let our guard down and he puts the attack on us. So that's how it works. Does it help? Do you have something more to ask along those lines? Okay, great. Yes, so Jacken is okay with that. Any other queries? I think it's the exam week, no? Questions are not coming today. So, okay. Basu regarding our words. So if our words are like so powerful and like life and death are in the power of the tongue, I mean not everything that we say is that powerful or not everything that we say comes to pass, right? So how do we say about that? Yeah, so not everything we say comes to pass. Well, what we say should be aligned to the truth, you know, Rin. So that is one thing. So if we say something like for example, okay, if I say that I can be prosperous by ungodly means, that's not the truth, isn't it? The blessing, the real blessing comes from God and he does not add any sorrow to it. So the real blessing comes by walking in the path of righteousness. So when I say things which are untrue as far as God's word is concerned, then it won't happen. Okay, that is one way of looking at it. And there are many things, okay, like for example, even believing in Mark 11-23, that famous scripture where Jesus, he rebukes the fig tree and he says, whatever you believe and you speak, right? If you ask the mountain to be uprooted and cast into the sea, it will happen. So sometimes we lack faith. We say it, but there's no faith. Then it doesn't happen.  So the lack of faith also can make our words ineffective. So these are all some things. And if it is a prophetic word, then it better be what God has spoken. I am saying something else, God is saying something else, then it doesn't happen. So there are reasons why it doesn't happen. But if we are aligned to the truth of God, so it's got to happen. Like I'm referring to the example that you said when you were small, you said, I like being sick. And that's something that's contrary to what God would want, but that's not aligning. But then it still happened. That's true. That's true. So you see the, it's an open door basically. What I did is I'm giving an open door to the devil. Because I'm speaking contrary to what God wants. And Satan usually likes these open doors, these open situations. That's how he got in and he was able to cause havoc. You understood? So while we were talking about the right things not happening, sometimes the wrong things happen because Satan takes advantage of the wrong words. Is it making sense or you seem like there's a question inside you. And so our words are not so, I mean, there's a limit to the power of our words, right? The limit is the boundary of our authority. For example, you may not be able to, for example, let's say, or let me put it this way. A parent speaks words of blessing over their child or words of rebuke. Now that is very powerful. But then if some third person, let's say, some random person for no reason, nothing that the child has done is bringing a curse on the child or something like that. It may not work because they are outside the boundary of influence. You got it? So the greater influences the parents, they are in the boundary. So it's like that. So sometimes our words don't carry the authority because we are stepping out of our boundary. And if you try to make it work like that, it won't work. Yeah, so there's a limitation. That's the limitation to stay within the boundary. So let's say I am the pastor of this church. Then I have responsibility for this church. So let me speak, let me instruct. That will carry authority. If I try to go and create trouble for another pastor in his church, then words are not happening like it's not getting accomplished. I'm trespassing. You got it? So there are boundaries which we have to respect. And sometimes believers know we step on the boundaries and we expect things to happen. It won't happen. Those are the limitations. Yeah. Yes. Does it apply to the enemy? We should respect boundaries. So you're asking should we respect the enemy's boundaries? Like what example anything you have? Okay. So the enemy's boundaries. First of all, he doesn't respect our boundaries. So I'm just thinking. Well, see, I wouldn't put it as respect the boundaries of the enemy, but it's more like don't take him lightly. Okay. Because it's like if you have an angry, like an angry lion or something, you don't want to be playing a game, right? Because you don't know when it'll charge at you. So it's somewhat like that. So I won't say I'm respecting the boundary of that lion. It's more like I'm protecting myself. But I don't take it lightly. Like I just stay within my zone and yeah, protect myself. And yeah. So it should not be taken lightly. Another reason why I'm saying it is, remember Jude verse nine, I think where the angel says the Lord rebuke you. So there are boundaries of authority. We can't play outside of that. See the angels, they have a boundary. They cannot say or do anything outside their boundary. Like that as humans, we cannot say or do anything outside our boundary. Everyone stay within your own boundary which God has given. Then things work. Yeah. Okay. All right. So no further questions, I suppose. Okay, Nina has something. Yes, Nina. Yeah, this is regarding like a friend of mine who has a special child. Okay, there has been kind of prayer in a way like in a on and off where when we have our prayer times and all that for him. But more recently, some situations have come up and when, you know, my friend's husband said that, okay, we need to put, he's quite still six and a half want to put him in a school or, you know, that kind of a thing because it might, maybe that he'll be difficult to handle and all as he grows up. So then we thought that we would really spend some targeted times just for his name is Sam, the boy. So we've been doing that for maybe about two weeks or so. Yeah. So is it anything else? And so while in the midst of, I mean, praying specifically in the spirit and praying using our authority and all that there has been some small improvements here and there. But is it anything else that we need to do? And in the meanwhile, somehow I feel that probably it's because of our consistent prayer that they have been led to go to certain people who are especially specific in this area, the deliverance ministry like that. So probably they would be going, taking Sam there also hoping and the same time there's some functional medicine treatment also is going on, which is quite specific. Like, you know, it deals with so many things. So is there anything else that needs to be, I mean, that needs to be kept in mind while we do this? Yes. It's persistent. I mean, we just continue and like how is there anything else that we need to do? Yeah. Yes. Yes, Nina. Thank you for that question. So what we could do is see, we always stand on the promise of God and we always content and Jude, he says content for the faith. So what is our faith? Our faith is that Jesus has done it all and that our body our soul, our spirit, everything is redeemed. Okay. So having that in mind, what we would say is you continue to pray for wholeness in his body, wholeness in his mind because we can speak declarations over him. We have scriptures that say that I have not received a spirit of fear, but of power and of love and a sound mind. We can speak that, you know, my mind, I have the mind of Christ. We can continue to speak declarations in line with God's word. So what is our expectation that the child will be made well completely? So we are expecting a hundred percent change for the child and we should never stop praying for that because we serve a God of miracles. We serve a God of the supernatural. So these things happen and even as we trust God for revivals, right? These breakthroughs happen. So our faith should be in that place.  So that is the spiritual way in which you're addressing enough and two things to do spiritual, natural and in the natural, everything that you know to do, which is therapy, approach a special child in a, in a different manner. So we'll keep doing the natural and the praying while we content for his wholeness. So that's how we would approach it, Nina. And I do get the struggle that many of us, especially in the area of healing, we trust God and then, you know, we are, we are waiting and waiting for the hundred percent improvements. But while we are waiting, another thing that we can do is see what is the current circumstance?  Take good care of them. Right? Yeah, we are trusting God for healing. It'll manifest in this way. But right now, they need care. They need love. They need, you know, us to serve them. So I think that is something we can continue to do, offer our love, offer our care, work hard, you know, to keep them comfortable and safe. So that is the approach. I hope that answers your question. No, how is it? Okay. Sure. Sure. So Nina is fine with that. All right. So Jacken has another comment. For example, when there is confusion at home, it is our choice to speak peace according to God's word or we can also give into our fleshly weakness and fear. We speak discouraging words against faith so that that allows the devil to operate.  In fact, makes the situation. Yeah, that's that's perfect. Jacken, in fact, he'll be waiting for those times when people are fighting because people don't think too much right to say the right words when they're angry or they are upset. So yes, we must truly watch out for those open doors which we create for the devil. All right. So I think with that, let's close for today. Oh, you have just one minute. Yeah. So Pastor here talking about sin, unconfused sin and unrepentant sin. So as a believer, like the sin maybe happens every other day. So what happens when we something happened to us like death without this unconfused sins, because I learned like just we are justified, but sanctification is an ongoing process. So how it happens? Yes. Yeah. So see if it is a it is a like a one-off sin, meaning I did something and I got convicted by the Holy Spirit, but I did not have a chance to confess it. Maybe that person passed away. Some accident, something you rightly put it. We're already in Christ. Right. We've been justified. We have received from what Jesus has done. That's all right. You don't have to worry about it. So Jesus has already paid for us since, but in the case of repeated, when we say unrepentant, it is most likely repeated sinning in that area. So that is what we are talking about. So that person knows that they are not dealing with it and they are that is God will hold them accountable for that. Okay. So yes. Let's let's deal with it. Yeah. Same thing regarding the words. So you said like if it's within your family and let's say your kid is sick and all that, and it has small power because you have more influence over them. So I mean the thing is.  It gets worse.  I mean, but then he does not have any influence with the child. So how do you say it? Okay. So see I'm not saying that others don't have any influence. I'm saying the people who are in that close circle have the greatest influence. Okay. Now when you talk about a minister of God, they have influence on the body of Christ. Isn't it? So see when I am a teacher of God's word, I teach in my church, but if somebody else calls me and they ask me to teach, it will still have influence and I pray for those people. Some influence is there, but I'm saying the primary influence lies with the pastor of the church. You understood? So similarly for this situation, the primary influence lies with the parents. Now if they go for prayer to a minister of God, it will work. Because they may be carrying a certain authority because of the grace that God has given them as a pastor or a prophet or something else. So it will work. The influence of the parents worked to whatever extent and the influence of that minister is also working. So good for the child, right? It's not that it won't work. And I was just trying to point out primary influence lies with the authority figure in that structure. So that could be a parent or the father of the family, the husband, the pastor, the leader or the employer, the boss or the prime minister. So there is a particular authority figure that God has placed over each setting and a primary influence lies with them. That's how it is in scripture. Alright, so we'll pray and we'll close then. Can I again ask our online batch to lead in prayer, please? Nice to hear your voices once in a while. Nice to hear your voices as well. I'm just saying because we don't hear theirs. Shall I pray, Pastor? Yes, Jack, please. Father God, thank you, Lord. Thank you for helping us to understand from your word, Lord. What is the authority that we have as your children, Father God? Father God, help us to always remain in faith in you, Lord, and also, Lord, when we give in to those momentary weakness, Lord God, look up to your face, Lord, for help and refuge, Father God, turn to your word immediately, Lord, in that moment, Lord. So that, Father God, we will be able to stand against the wiles of the devil, Lord, that it will not have any control over us as your children. Father, we come at each of us, Lord, to obey your word and stand by it so that we can live victoriously, Lord, day after day, Lord, every day in your presence, Father God, so that we can overcome all the tactics of the devil and live a fruitful life, Lord God, wherever that you have called us to love, Father God, for your glory. In Jesus' mighty matchless name, we pray. Amen. Amen, amen. Thank you. Thank you, Jack, and thank you, everyone. God bless you and have a blessed weekend, all the best with your assignments. Do well in them. Thank you. Bye now.


Hi there, and welcome back. Hopefully you've been able to recover from the last tutorial on using Make to automate our workflow. It was a lot of work. I really was serious when I said that Make is a central tool for me to make my analyses automated and more reproducible. By the end of the last tutorial, we had effectively written a program to generate a paper from a pretty minimalist directory that we had pulled down from GitHub. We saw a few things in those exercises. First, even though I'd done my best to make things reproducible, there were still weird things that happened that had a subtle effect on downstream files that weren't perfectly reproducible. The things were pretty close, but they weren't dead on. We saw this in the effects of using the random number generator in our camera checking. Second, the mentality of make clean make is very powerful and is a great check to ensure that our work is reproducible and that we have all of our dependencies accounted for. We saw this when we were able to find a few bugs in our make code that we thought had been addressed before we torched our project. Finally, in looking at the 538 data, we saw a value in reproducing others analysis and then going a step beyond to answer our own questions. I'm still pretty surprised by the recent rise in the number of simons in the United States. I can also see now that the ability to predict one's age from a name is pretty limited. These are all insights that I would not have gotten from the original article. For the rest of the day, my head was swimming with all sorts of ways that I could riff on the analysis in the original 538 article. Today we'll be discussing an approach to file away all those ideas and methodically work through them. The approach is called get flow and it's commonly used by software developers to add features to programs. Like get and make, we'll adapt get flow to work for a data analysis approach. I find it to be tremendously useful for documenting decisions that I've made along the development of my analysis plan and for organizing my approach to developing these workflows. The topic of today's tutorial is how we can use get flow to collaborate with ourselves. We'll find this approach is also useful in the next tutorial when we discuss how to use reproducibility tools to collaborate with others. Join me now in opening the slides for today's tutorial, which you can find within the reproducible research tutorial series at the riffamonus.org website. As we've done with each of these tutorials, I'm going to start with a brief pop quiz to see if you can remember some of the things we've talked about in previous tutorials. So the question I have is, what is the make command that we would enter to compile the entire project that we're working on from the Kozich analysis? The follow-up then is, would we always want to run that command when we're working in that project? So think about it for a minute or two. Press pause and then we'll come back and I'll give you my thoughts. So the command is make write dot paper. That was the final rule that pulls together all the PDFs and all the figures and everything and make sure that all of our manuscript files are generated that we might want to use to share with collaborators or for submission to a journal. But it might be preferred to make on another target if you're only interested in generating one of those intermediary files. So sometimes I'll do this as I'm building my analysis. So like I said at the end of the last tutorial, I generally don't have a write dot paper rule until the very end. I suppose I could have that earlier, but usually I'm building my make file more organically one rule at a time. Alternatively, if we get to the end and there's some special visualization that I want to make for not including a paper but perhaps something different to have on a website or to have on a PowerPoint deck, I'll make that image separate. And that'll be a separate rule that might not be part of write dot paper. And so I'll want to build that target. Also recall that it's useful to use make-n on the target to see what commands are going to be run to generate your target. This helps identify a lot of problems that might come up. As we saw yesterday, it'll help identify circular dependencies. It'll help us to see whether or not we accidentally bumped something in our code that's going to start from the beginning again that we might want to deal with that. So these are really useful tools. And again, make is just a great tool for automating our analyses and really making them reproducible. So the goals for today are to learn how to traverse the repository's history and the history of a specific file. We're going to learn about something I talked about in my introductory remarks of GitFlow and how we can use the GitFlow workflow to manage a project. And we're going to use this by integrating with GitHub's issue tracker to direct the flow of a project. And then we're going to experience how to create, work on, and merge branches, which is again part of GitFlow. And whenever you deal with branches invariably, you're going to run into conflicts where two branches don't play well with each other when you have to merge them. And so you have to then resolve those conflicts. You can think of a conflict as kind of being like when you're working on one manuscript draft and a collaborator is working on another manuscript draft, and you then try to bring them together. You can imagine there might be one sentence that you each modify in a different way. That's a conflict. So you're working on your project, and you give your manuscript to your PI with your figures. They look at it, and they notice a small but pretty important bug that you might recall that this image we generated is an NMDS figure. Yet our access labels say PCOA. And so they would like you to fix that to be NMDS access1 and NMDS access2. So we might ask which file contains this image and what file has the R code to generate that image. So far, we've only generated one image file that NMDSplot.png, I think, and I think we also had a file that was like buildNMDS.R. So I'm going to leave the slide deck here, and we're going to go ahead and log into Amazon. We're into Amazon, and I'm going to CD into Kozic. And I don't remember the specific names of my files, but if I go LSCode, I see that I have in here PlotNMDS.R. I also have Generate Figure 4. I'm not sure what that is. So I'm going to open that up. Nano, Generate, code, Generate, Figure 4, seems to be nothing. So I'm going to remove that. So you get RM, code, Generate, Figure 4. You may or may not have that in yours. This might be something I was just messing around with.  All right, Get Status, LSCode. So I'd like to look at the history of PlotNMDS.R. I can do this in my GitHub repository, but I can also do it from the command line here. So we've already seen a command called GetLog, which tells us the history of all of our commits. So we can say GetLog. We can say GetLog, and we see the history of our entire repository. But this doesn't tell us the history of an individual file. To get the history of the individual file, we can type GetLog, code, PlotNMDS.R. And we see that there was one commit. So this bug has always been there. At least when I was making it, I created it on March 19th. So again, that bug has always been with us. So how would we go about fixing this? I don't want you to fix it, but what would we do? You can imagine that we could edit and save code, PlotNMDS.R. We could rerun, make, write.paper, get add, get commit, get push. And so that's kind of the way that we've already developed. And so this is where we're going to deviate slightly and use this as an example to talk about GetFlow. So this way of going in, editing the file, changing it, saving it, running make, write, paper, and then committing those changes, that works in pretty simple cases. But perhaps we want to try something out, and we're not totally clear whether it will work out. You know, I meet with my trainees, postdocs, and students, and I frequently give them harebrained ideas that I just say, just humor me, give it a shot. So I don't want them necessarily to have that be part of the center or the central thread of their repository. I want them to kind of go off on a branch, go off on a wild goose chase, so to speak, and try something out. And if that works, then we'll merge it back in. And so the approach we've been taking assumes that our analyses are a linear process, right? We start with data, and we end with paper. And that is a line. There is no deviation from there. And so that's what we have in this blue line here, this series of arrows where it's kind of you're marching towards a manuscript. But in reality, what we have is something a little bit more like this, perhaps even a little more convoluted than this, where we try something out. We pursue it. At the same time, we try something else in parallel. But that might end up in a dead end. And many times there are forks, where we go in different directions, different paths, different branches. I've heard science describe not so much as a linear process, but much more bush-like, where there might be branches that we cut off because it just isn't progressing anywhere. And so GitFlow works really nicely with the way that science really is, which is bush-like. For example, there are two sets of FASTQ files that we could have started this analysis with. We could create a branch, so to speak. We haven't talked about how we do that yet, but we could create a branch using one set versus another. And then we could compare the branches. And then we decided which set of files we wanted to use. We could use that branch and merge that into our master branch and then just leave the other one there to sit. Alternatively, we could have chosen to use PCOA rather than an MDS to generate our ordination diagram. That could be another branch. And then comparing the results of PCOA to an MDS, we could compare those. And because we have the branches and we have the commit histories, we would have a record of how that experiment went and why we decided to use one over the other. So the GitFlow workflow is a way, like I've been saying, to incorporate this bush-type of structure that we see in our analyses. And again, like I said in my introductory remarks, GitFlow is developed for software engineering where many members of a team are working to develop different features for a future version of the software and they wanna control how the different features are folded back into the next version. So you can imagine if you've got a team of five people working on a program, they're not all working on the same parts, but they're maybe working on five different parts until they each have a different branch, as I've been saying. And then what GitFlow allows them to do is to merge those branches back in in a more coordinated way. So this isn't exactly what we're doing with our bush-like analysis, but it's pretty close. So by making an analogy between software development and data analysis, can you think of some of the examples where it'd be advantageous to use the GitFlow workflow? So some possible examples that I can think of are, again, as I mentioned, if you've got collaborators that are editing the manuscript with you while you work on further analysis, right? You don't wanna just stop your momentum.  Perhaps somebody else is developing code and you're gonna merge those back together into the main branch, the master branch. Alternatively, like I was saying, you and a colleague might be working in parallel on the same project. You might be working on, say, 16S sequence analysis. They might be working on a culturing component and you wanna have two branches that you're eventually gonna merge together. And as I've been saying, we might wanna experiment with different data analysis paths. Do I use PCOA or NMDS? Do I use a parametric or non-parametric test? Do I try this new method of looking for correlations between different taxa? You know, the list is limitless. So the general GitFlow approach, to get a bit more specific than we've already been, is to create an issue in GitHub to then claim that issue so others know you are working on it. Obviously, if you're the only one working on it, it's yours, to create a branch separate from master to then move to that new branch. To make the modifications needed to resolve the issue, commit changes to the branch and then merge that branch back into the master branch. So there's a lot of jargon here and there's things in this list that you haven't seen before, but that's what we're gonna be doing right now. We're gonna work through these different steps of how we can use GitFlow to make this relatively simple change of modifying our access labels. I'm gonna go to our GitHub repository. So GitHub, mine's at pshloss, cosetree analysis. Let me make this window a bit bigger. And what you'll notice across the top here is that there's a button right next to code for issues. At this point, we don't have any issues, so I'm gonna go ahead and click the green button for new issue. I'm gonna then add a title to my issue, which I'm going to say access labels on ordination are incorrect, and then I can come down and leave a comment. And I can say we noticed that the labels on the NMDS file have PCOA rather than NMDS. We confirmed that the data really are from running NMDS in mother and are not PCOA data. So again, the nice thing about this issue tracker in GitHub is that I can add markdown to represent that as a command, so that way then submit the new issue. It's rendered in markdown, and so we can now see my comment is here. And again, if this was something more significant, there are ways to tag other people to say, hey PI or hey students, come check out this issue tracker and give me some feedback. So the next step when we talk about claiming it, we can then claim it by assigning people so I can click on this gear, and I can add me. And so now it's assigned to me. And we also see that the issue tracker has been updated to say that Pishlaw self-assigned this just now. We can also assign different labels or projects or milestones, again, to add documentation to this issue. If there's perhaps 10 different issues, we might not want to have to worry about all those issues at once. You might create different milestones. We might have different deadlines where I wanna get these figures done before the microbe conference. I wanna get these milestones, these things done for this milestone of my committee meeting and so forth. So this is issue one, as you can see by the one there. And so we're gonna go now back to Amazon, clear that screen, and we're gonna create a branch. We could call the branch many things. One option would be to call it, say the branch is issue one, or we could call the branch fix ordination label. We can see the existing branches by doing get branch. And we see that there's one branch, which is master, and the star indicates that we are currently on that branch. Also, when we do get status, it tells us on branch master. We're going to create a new branch by doing get checkout dash b issue underscore zero zero one. The reason I like to use the issue number is because I can more easily link it back to my issue tracker on GitHub. If I were to call it fix ordination label, I don't know what issue that is. That would be hard to track down. So the downside though is that issue one, it's not very descriptive. It tells us now that we switched to a new branch issue one. If we do get branch, we see now that there are two branches issue one and master and that issue one is in green with a star indicating that we're on that branch. Similarly, if we do get status, we see that we're on branch issue one, nothing to commit working directory clean. So now we want to go in and we want to edit our NMDS R script. So we do nano code plot NMDS dot R. And I'm going to scroll down here. And I see that I have PCOA access one. I'm going to change that to NMDS access one. And I'm going to change this to NMDS access two. Save and quit out. I do get status. And I see that I've got one modified file, but those changes haven't been incorporated. So I'm going to do make write dot paper. And I'm going to do make dash N write dot paper just to make sure I see that it's going to run the code to generate the plot. And then it's also going to generate the manuscript output files. So I'm going to do make write dot paper. Runs the R code. It runs the rendering to generate the manuscript files. And it's done. So I should go into file Zilla and make sure that make sure that the changes took. So I need to get my IP address from over here and I'll connect. And I see the output now has NMDS access two and NMDS access one. So our changes have taken. So now we're ready to commit our changes. If we do get status, we see that our R code has been modified. Our manuscript and our figure file have been modified. And we will now do get add code plot NMDS dot R. Results, figures, NMDS, submission, manuscript dot PDF.  And so I'm now going to do something a little bit different from what we've been doing. I'm going to do get commit. And it's going to open up, it's going to open up my text editor because I'm going to give it a more sophisticated commit message. I'm going to give it the subject of correct access labels in ordination diagram. And then I'm going to insert extra space after the subject. And I'm going to say this fix replaces PCOA with NMDS on the access labels. And then I'll say closes number one. So with the really nice integrations with GitHub, putting closes number one or referencing number one in my commit message, when this is finally pushed up to GitHub, we'll integrate across to my issue tracker. So I'm going to save this and block out, get status, life is good, nothing to commit, working directory clean. So let's see where we're at. If I do get log, I see that I've got the commit message we just made as well as the commit I made back on master when I removed that mysterious file as well as the previous things we did from our make file. So the next thing we want to do is we want to merge these changes to our master branch. And so we're going to now want to check out our master branch. So we'll go to get check out master. And it says switch to branch master. Your branch is ahead of origin master by one commit. So that is the origin master is the branch, if you will, that's on GitHub. If we do get branch, we see that there's still two branches, issue one and master and that we are on issue master. And if I want to fold this branch issue one into master, I can now do get merge issue underscore 001, the name of the branch I want to merge into the branch I'm currently on. I hit enter and I see that it's bringing over my changes to plot and mds.r, my PNG file and my PDF. And again, I'm on branch master. And if I do get log, I see that it has brought in that commit that I made. I'm not interested in keeping around that issue one branch because I don't need it. It was pretty small. But again, it was nice to have that branch because if something had gone horribly wrong or if it was something bigger that was gonna take more time, then I'm not committed to having those changes on my master branch. I can decide to move them in whenever, if ever, I decide to. So again, I do get branch. Gonna clear the screen and move that up. I see I have issue one and that I'm on master. I can do get branch-d issued underscores 001. And you might imagine that that minus d means delete. So we're gonna delete that branch. And if we do again get branch, we see that we have our master branch. Finally, we can do get push, enter our credentials. It's pushing those up. And if we then go to our issue tracker, we see that it was automatically updated. Pshloss closed this in this, which is the commit message just now. And so if we click on that, we can see the edits that I just made. Pretty cool. So if we come back, we now look at click on our issues tab. We now see that we have zero open issues and we have one closed issue. So this is pretty cool. We can use these issues not only to solve bugs or to make edits after the fact, but we could also use these issues to lay out kind of the path that we wanna take on our project. Perhaps we need to add code to download the raw files. Perhaps we need to download the code for mother. Each of these little steps we can define as an issue. And that way then we can make branches for individual issues and do those off of the master branch. And then once things are to a point where we like them, we can then fold those back into the master branch. Again, it allows us to work on multiple things at the same time. And it also gives us greater organization for how we're working through our project. So again, this was the general get flow workflow that we just went through. We created an issue in GitHub, issue one. We claimed that issue so others knew we were working on it. Again, I'm the only one working on this, but I can still assign it to myself. Back in Git on AWS, we created a branch so that issue underscore 001. We then checked out that branch. We made modifications on the branch. We committed our changes to the branch and then we merged that branch into the master branch.  Rinse, repeat, kinda keep repeating this as I was saying to work through an analysis. So some people like I was saying develop their entire project this way. So each session of this tutorial over the past 11 or 12 tutorials could have been a different branch that was merged back into master. Of course, I didn't teach you Git until maybe session five or six. So it would have been difficult pedagogically to introduce that back on lesson one or two. Also, the issue tracker serves as a nice to-do list that you can check off as you go through your analysis. Related to this, sometimes your PI or collaborators might not understand what you're doing on Git or with these great reproducible research tools. So they can give you a list of comments or even they could be trained to go into the issue tracker and file a bunch of issues. Something that I've seen others do is you get your reviewer comments back on a manuscript and you make each comment a issue on GitHub. And that way then you can document your response to each reviewer comment as well as the changes you made for each of those reviewer comments. Again, this is a low barrier using these issue trackers to get your PI and collaborators to interact with your repository. Alternatively, like I said, you can do it for them, but we'll talk more about some of those issues in the next tutorial. So more issues. The PI wants us to change the color of the points and the ordination from black and white to orange and blue. We might also want to change the shape of the points to be squares instead of circles. So we're going to use GitHub issues to create two separate issues to address these and we'll create two branches issue two and issue three to address the issues separately. I'm gonna create a new issue and I'm gonna say change color of points on ordination. So change from, so PI wants points to be orange and blue instead of white and black. So we'll submit that new issue and we'll create another new issue to change shape of points in NMDS. We'll say PI wants us to use squares instead of circles in ordination and we'll submit that as an issue. And so again, I can assign myself and if I look at my other issue, I can assign that to myself. Great. So now we have these two issues, issues number two and three. I'm going to return to get. So I want to create issue two. So something to note is that previously we did get checkout dash B issue zero zero whatever, right? So something else we could do would be get branch issue zero zero two. Get status says I'm still in master but if I do get branch, I see I have two branches. So I haven't moved to issue two yet. So when we do that get checkout, it both creates the branch and moves us there. So we can do get checkout dash B or I can do get checkout issue underscore zero zero two. That underscore that dash B would create the branch for us. So now we're on issue two. And so here we want to change from white and black to orange and blue. So I will now do nano code plot NMDS. And down here, I will add, let's see. I need to add here colors as a vector and my colors for plot early. I'm going to make those orange colors for plot late. I'm going to make those blue. And so then in here in my plot, I can do colors equals call and legend. I'm going to do call equals C blue. We quit out of that. We can then do make write dot paper and I introduced some error. I think I forgot a parentheses somewhere. So do note and code plot NMDS.R And let's see, oh yeah. I forgot an extra parentheses here. And I'll do make write dot paper that runs through. Life is good. I'll go to my NMDS figure, open that. I see my legend got updated, but my plot didn't. So let's see, nano code plot NMDS.R and let's see, ah, I should have call equals colors and do make write dot paper. And I return to filezilla, open this up. And now I see I've got my orange and my blue points. Okay, so again, it was important to run make write dot paper to update things and make sure that I got things rendered properly. Great, I'm going to close that. And I will now do get status, get add code, plot NMDS, results, figures, NMDS figure, submission, manuscript dot PDF, get commit, get status, get commit. I will do change colors of plotting symbols. I will say changed from black and white to orange and blue. Closes number two. Save that back out. And then I will do get checkout master, right? So as we did before, we would now merge things in, but I want to show what happens with a conflict. So I'm going to go ahead and create a branch for issue three. So I will now do get checkout dash be issue underscore zero zero three, get status. I'm on issue three. I'll do nano code plot NMDS.R. So here I want to change my plotting symbol from circles to squares. And so I'm going to change these values here from 21 to 15, and I'll make zero this here. And so I also need to change my PCH to be zero and 15. I'll save that and back out. I'll then do make write dot paper. This goes through. I'll check with filezilla to see what the file looks like. And sure enough, I now have my squares. Great, so that worked. I will now do get status, get add code, plot results, figures, NMDS figures, submission, manuscript. I do get status, get commit, and I can now do change plotting symbol to squares, closes number three. So before we did this as a subject and a body, but also know that we can get that integration with the issue tracker, even if it's on the subject line. If it says closes number three, that will work. So we can quit, get status. We're on issue three. We're going to get checkout master to get back onto the master branch. We can then do get merge, issue, underscore zero zero two. This will fold back in issue two. We can then go ahead and do get merge, issue, underscore zero zero three. And it's complaining. So it's saying that there's a conflict in our PDF, our PNG, and our plot NMDS dot r file. So automatic merge failed, fix conflicts, and then commit the result. So we need to open up code plot NMDS dot r and then resolve the conflicts. So do nano, code plot NMDS dot r. And if we scroll down through our text, we see some funky text here. So we see here the series of less than characters followed by head, our text that we've just added, or part of the text that we added, where we had our color from issue two, and then we have equal signs, and then we have greater than signs and saying issue three. So head refers to the text and the code that's on master, whereas the stuff underneath the equal signs is the stuff that's in the issue three branch that we're trying to bring in. And so what we want is we want orange and blue squares. So we could imagine that we want to replace these two lines with these. So what we're going to do is we're going to remove that head. And if you hit control K twice, we'll delete both of those lines and we can scroll up, enter a line, and if you do control U, you'll uncut those. And so then I'm gonna get rid of these two lines and then we can get rid of these equal signs and greater than signs like we did get rid of the head. And if we come down here, we see that we also have a conflict, whereas again, the head is what's on the master branch, issue is what's on the branch that we're trying to merge in, which was the zero and the 15. And so we can resolve this conflict by changing this 21 and 19 into a zero and 15. And we can get rid of all this stuff from the conflict. Get rid of that. We save it, we quit out. We can then do make write.paper. We then look in filezilla at the new version of the file and voila, we have orange and blue squares. So we need to commit these changes and it says we have unmerged paths. So we're in the process of doing a merge. So both branches have a modified version of code plot and MDS results and submission file. So we're going to get add these, get add code plot and MDSR results, figures, MDS, submission, manuscript, get status. We see that all conflicts are fixed, but you are still merging. So get commit to conclude the merge, changes to be committed. These are the modified ones. So we'll then do get commit dash M resolve merge. Close quote, bring that in. If we look at get log, we see that we had our final commit of resolve merge, changing our plotting symbols to squares, changing our plot colors of our plotting symbols. Finally, we can get push. And if I refresh this, and now see I have three closed commits. And so change the point in MDS. This was closed in this commit. As was changing the color of the point on ordination. So I have to say that for the most part, as we saw previously, as we were bringing in issue one with the merge, get is really smart and able to figure out how to resolve those conflicts. But when we have a conflict that say occurs on the same line, that is going to cause problems. And that's when we need to manually go in and edit things. So in these cases, it really helps to think ahead about where there might be conflicts. And so this was again, a very silly example that perhaps we should have changed done issue two, maybe even do issue two and three together. That would be a solution. We could have off of master made a branch for issue two, changed that made a branch for issue three off of issue two, changed that and then merged that all back into master. But sometimes these conflicts are unavoidable. If you've got a fair amount of code and you've got different people working on things. Again, if you think of the use case of two or more people editing a manuscript, you're gonna get conflicts that arise. And sometimes these are just unavoidable. It's nice then that get will help us to resolve these differences. So two exercises, one of them I already did for us was to run make right dot paper on the final merge of the branches. So what I'd like you to do as an exercise is to create and resolve an issue that replaces the NMDS ordination with the PCOA ordination. So you'll make an issue in GitHub to replace NMDS with PCOA. You'll have to modify a few different files. You'll have to run make right dot paper to update all of that. So I'm gonna go into my issues and create a new issue and I'll say replace NMDS with PCOA making a PCOA plot. And they do have emoji built in if you didn't notice. We have more important things. So I will then come over into Kozic. I'll do get checkout dash B issue 004, get status. I will now look at my make file. And I'll make file and I'll scroll down. I'm gonna use a search to find NMDS and I'm gonna change this to PCOA ordination. And this is gonna change from NMDS dot axes to PCOA dot axes. And I'm gonna change this to get PCOA data batch. So I need to update this get PCOA data batch file. So let's do one thing at a time. So we'll go ahead and change that. We'll do get MV code, get NMDS data batch. And we're gonna rename that to get code, get PCOA data dot batch. And then we'll do nano code, get PCOA. And we're gonna change our NMDS to PCOA. We don't need this max dim equals two anymore. I'll save this and back out. So that works. So we'll go back to our make file. And so we've taken care of this rule. We now wanna construct a PCOA PNG file. And we're gonna change this to PCOA. We're gonna change our file name to plot PCOA. And plot PCOA. And this NMDS is gonna change to PCOA. So we need to now update code plot PCOA dot r. So we'll do get MV code plot NMDS dot r to code plot PCOA dot r. And then we're gonna do nano code. Plot PCOA dot r. And I'm gonna change all my NMDS's to PCOA's, all right. And we need to also change the name of our output file to be get MV results figures NMDS figure to results figures PCOA figure dot PNG. Let's go back to our make file. And I had forgotten to change this NMDS to a PCOA. And this to PCOA, and this to a PCOA. And this to a PCOA. So I think that's all the NMDS's. I wanna check into my manuscript or MD file to make sure I change those. So I do nano submission manuscript dot rMD. Let's look for NMDS. And I need to change this to PCOA. And you'll notice that before we had principle coordination of data YC values when we actually had NMDS. So anyway, so we'll save that back out. Just look at what we've all, what all we've changed. We've renamed some things, we've modified some things. We can then do make dash N write dot paper. And you'll see that we are going to run get PCOA data batch. We're gonna plot that. And then it's gonna feed that into rendering our RMD file. So we'll do make write dot paper. So that took a little while, but it eventually got there. So we're going to go into FileZilla. And let's look at, we'll have to do a refresh here, I think, and look at PCOA figure dot PNG. And that looks right. And so we can show this to our PI and see what they think if they like it or a collaborator, whoever. And I'm gonna leave this branch here.  So I'm not gonna use this branch. So if we do get status, I'm gonna go ahead and commit these changes to the branch, but I'm not gonna modify things. So I will then do get add make file code, get PCOA data branch code, plot PCOA results, figures, PCOA figure submission, manuscript, RMD. I'm gonna put a star in there. Good status, those are all there.  And I will open up something bigger. So I'm gonna say these changes or convert NMDS to PCOA. So these changes replaced the code and text for an NMDS file with code for a PCOA. This addresses issue four. So we save that commit, get status, run issue four. I'm gonna go to, we did this, but the image really isn't as good as the NMDS. It is in branch issue zero to four if you wanna check out the results. And so we can close and comment that issue. All right, so again, we're just gonna let that branch sit. We're not gonna worry about it so much. So one thing though, if we look at our code is that we only have one branch here. To push this branch to GitHub, so to make sure we're on the right branch, issue four, we can do get push origin. So origin is GitHub and we're gonna say issue under square zero zero four. And this is now pushing our branch issue four up to GitHub. You could do this for all of your branches. Again, this is up to you for kind of how you wanna deal with those different issues. And so now it says we have recently pushed branch issue four. If I refresh my screen here, I now see I have issue four saved in here. So if I wanted to see results figures under issue four, I see the orange and blue squares with PCOA, but if I wanna see it under master, didn't like me doing that because, right, because we don't have a PCOA file. We have an NMDS file. So we have an NMDS figure, right? Great. And again, if we look at issues, we can look at the fourth one that we just closed and you'll see that there was a commit that was referenced here and see that commit message in our explanation for why we didn't wanna change it, okay? So again, this is using get flow and this issue of branches to document changes to our project and using the issue tracker to document decisions we made or didn't make in terms of folding things back into the master.  And again, we saw it on GitHub, but if we just wanna prove to ourselves that we still have our NMDS files, we can look at LS results figures and we see we've got our NMDS figure PNG file that we no longer have our PCOA file there. Excellent. So we're gonna go ahead and log out, exit, exit. And we're going to go ahead and stop this instance. The idea that I am my most important collaborator is a really profound way of thinking about how to improve the reproducibility of my work. In the recording of these videos, I actually had to take a month break in the midst of them to work on another project that had a hard deadline. Thanks to my documentation, commit messages and use of automation tools, I was able to pick things back up without losing too much rhythm. Under my old approach of, quote, remembering things, it would have taken me a few days to get back up to speed. Days that I just don't have. Lairing GitFlow on top of our tools gives us another layer of documentation to record the results of experiments that worked or didn't work along the way. The examples from this tutorial resulted in us merging our branches back into the master branch. But that wasn't required. We could have said, I don't really like that new color scheme and let the branch sit there. I could have added a comment to the issue for why I didn't like the new colors. Similarly, someone at a conference might ask a question that I could file as an issue. I could work on that question and decide it really doesn't move the project along. But in my issue tracker, commit messages in my branch history, I would have documentation to support an answer the next time the question was asked. I'll admit that the topics of branches is an advanced move and you may not feel completely comfortable with it. Give it a shot and see how it works for you. In the next tutorial, we'll be discussing tools we've been using to foster collaboration with others. We'll talk to you soon.


business and always on a constant rotation of courses throughout the year as victims during this exercise. A year ago, we would have had different circumstances that we were under. So we're actually having the role players. There will be makeup on them to simulate injuries that the hospital emergency rooms will respond to as the patients get transported to the hospitals and treated. So it's a very realistic situation, a very realistic scenario.


Okay. Sorry about that. So, hi. My name is Skyler. So, I'm a developer of a new hardware description language called Chisel, and also related to a thing called Fertil. But what I'm going to be talking about today is about how to build accelerators for the accelerator socket that ESP or that Luca was just talking about for ESP. But about trying to use all the power of software engineering to make it dead simple for people to build accelerators. Okay. So, this is a classic academic slide that's basically just saying that accelerators are important because we're in the end of Moore's Law era. So, one thing you can always do to get a lot more performance is go and build accelerators. However, with one caveat from a pretty cool paper, it was just saying that the big benefits you get from accelerators is one time. It's not about iterating on the, right, we got Dave Winslow in the room. So, basically just saying that, hey, if you want to build an accelerator, you're probably going to get a big benefit going from CPU to accelerator. Thanks, Palmer. But after that, so basically just the design is important. You want to make it easy for people to build accelerators and do it fast. Okay. So, but usually I like to think about things in terms of like type hierarchies. So, really what we're concerned with at this point are loosely coupled accelerators as opposed to tightly coupled accelerators. So, something like SIMD instructions you might add to a processor. This is like something that's like a fixed function accelerator, something that you would think about and you have a C function. You want to go and build an accelerator that's going to go and accelerate that C function. So, in this case, things like a fast forward or a transform, or the model that you would have for something like a GPU, where you do like a CUDA mem copy over to a GPU, you then go and run some kernel on it and then do a CUDA mem copy back, or stuff like a neural network. I have a neural network and I have an image and I want to classify it or something like that. So, this is sort of the restricting the domain of the problem that then we're talking about here. And just to sort of concretize that, this is sort of just like an example like toy timing diagram of an accelerator that is just doing a computing the sum of all the memory, or computing the sum of an array in memory. And what that looks like is you start off at the top and there's some configuration. You're saying, hey man, go look at address hex zero or hex A. It's a vector of size three. And I want you to compute the sum and write the output to address B. So that happens. The accelerator says, OK, I'm working. It goes off and does a DMA request onto address A, goes and grabs that data. The data comes back over multiple cycles. Here you're seeing that with one, two, three. The accelerator does some computation. OK, computing the sum is not that complex, but it finishes some time later. The result is six. It writes it back and then reports that it's done. So these are like the sort of the class of accelerators that I'm talking about for this. All right, and this example of sort of building up an adder accelerator is sort of goes through this whole talk. And there's also an example available on the GitHub right now. OK, so Luca's embedded scalable platform comes into the picture here because it's basically saying, we want to be a platform where you can go and just grab your accelerator. You have an accelerator. You want to build an accelerator and just integrate it with the system. And sort of the pitch for that is great. Bring your accelerator in any language. The accelerator can then be easily integrated with this SOC. But there's sort of a couple of little flies in the ointment here if you want to go and build in like Veralog or VHDL. So and the first thing is the ESP framework has to know about the accelerator. So in the sense, there's all this metadata that you have to describe to that nice, pretty gooey that Luca was showing. And that's all in the sense of an XML file. The second thing is there's sort of a defined interface for this ESP accelerator. But you can also configure that with additional configuration lines if your function has more parameters, right?  You know, maybe you provide a schema for it. And you also say, I have these wires and they have these names and you have to code to that. That's really brittle.  And I sort of come from the school of, you know, I would like to just provide something that is, you know, I would like to get a compiler warning if I screw up any of this. So for that, it just is one more example just of what this accelerator kind of looks like. You have an ESP accelerator here. The things which are in green or sort of a white color are things which are fixed. So the Exocket is providing a DMA port, a debug port for like an error code when you're done, something the accelerator can say it's done and something that the processor can then say for the accelerator to start working. But everything in red is something that the user has to go and implement. And these are things like you have an optional, an optional vector of configuration parameters that you have to pass to this. You have all of the business logic associated with the internals of the accelerator. And then you also have this XML, which is supposed to be consistent with what you've written here. Okay, so the usual answer for something like this as well, just code it up in, you know, Veralog, System Veralog or VHDL. However, Veralog and VHDL are kind of annoying because you don't have optional IO. This is just like a fundamental feature that they don't support. Second, we're kind of coding in the 1970s here or even worse, even earlier. But there's no object-oriented programming in system Veralog or VHDL. With a slight caveat, the system Veralog supports classes but only for verification. You can't go and build hardware that uses any of this stuff. And with the slight caveat that even like, it's like with the BaseJump STL stuff like great work for Michael Taylor. But he's even highlighted like System Veralog has some like annoying features that make it hard to try and do this kind of stuff. So where then I come in is with, so a language sort of jointly developed at IBM, UC Berkeley and startups, well, not so small startup called Sci-5 called Chisel and Fertile. What is Chisel? So Chisel is a hardware domain specific language.  And Fertile is a circuit IR. So you guys all know about like LLVM IR. This is basically just LLVM IR is program IR. Fertile IR is for describing hardware circuits. And you put all this together and the benefits of the fact that this is a language in Scala is you get all the benefits that Scala has to offer. So you get simple parameterization, you get parametric polymorphism. You get first class function support, functional programming and object-oriented programming. So basically you don't have to wait for the vendor tools to come along and say, well or you don't have to wait for a standards body to come and build out to come and make an addition to the System Veralog specification. You can just say, hey, I'm going to go and use all of this awesome power to go and build hardware. So what is this process then actually look like? You write your circuit in chisel, that runs through the chisel front end, that generates fertile IR, that runs through the fertile compiler, that generates a lowered form of fertile IR and then that runs through a Veralog back end and you get Veralog out of it. You can customize this whole process with custom transforms that you inject into really any stage of this process but here it's just shown in adding custom transforms into the fertile compiler. Okay, so there's a whole website on this chiseling.org. It's an open source project, check it out. But what really what the point of this talk is, is how you can try and use chisel to restrict and define sort of like a hardware API for this ESP accelerator socket. So the sort of abstraction that we came up with is this notion of a specification and an implementation. So a specification is sort of the encapsulation of one of these sockets and then the implementation is the actual hardware associated with that. So for one specification, you can think about lots of different implementations. Like as an example, you could build an FFT accelerator. It could either be pipelined or not pipelined. Those would be two different concrete implementations but they would all have the same specification. So the specification is the thing that handles all of the configuration. What are my IOs? How much memory do I need? All of those types of things, but the implementation is the actual hardware. So for this then, and this is also sort of a type hierarchy kind of thing, from the chisel three module class which is just a generic hardware module. You have an ESP implementation that extends that and an accelerator mixes in a specification with that. Okay, and so I think this is on later too, but this is the website of the project for the specific part of it. And then sort of going off of this example adder accelerator that we have from before. So this is sort of what the code for writing the specification for this adder is. So you have three parameters here. So these are the things that you would configure. You have your read address, your size, and your write address. Some additional things that are useful for humans to look at like a name or a description as well as things that the ESP framework cares about. Like what is the memory footprint as well as device ID. So what's cool is that I can just say, hey, you as a user, if you wanna go and work with ESP and write chisel, you just have to implement this API. This is, I mean, it's just an abstract class. If you don't implement it, the compiler yells at you. Or if you miss something, it'll yell at you, and that's nice. You want errors as early as you can get them. All right, so then the implementation is really just something that's mixing in that spec, you define the actual implementation name. So how do I differentiate this from other implementations? And then finally, all of the business logic associated with this. So if you wanna look at this example, I finished it, it's up online last night. You just go and look at it and check it out. Okay, so sort of the quick kind of can demo for what's going on here. You just go into the project, you type SBT run. This will go and build all of these accelerators for you. One of them is this sort of toy adder accelerator. But what you get out of that is just automatically you wind up with an error log for this accelerator, and you also get this XML file. And what's really going on here is that we add a transform into the fertile compiler that goes and looks at the design. And then emits this additional XML data which we care about. And then these are the two things that the ESP framework wants to consume. And then you're ready to go. So basically, there's no confusion on what is this supposed to look like? What is the interface? What is the schema for the XML? We just take care of it for you. And I think just, yeah. And just give you some concrete idea of what that XML output looks like. This is what it expects. What are the configuration, the optional IO that I have for my design? And there, and you can see this example online.  So we currently have like three ESP chisel accelerators. Two of them are toys, one of them is not. There's a counter accelerator, which is just like report done after in cycles. There's this adder accelerator that we have and we also have an FFT accelerator that integrates work from UC Berkeley on building nice, fast, efficient FFTs. And future work for this kind of stuff. So obviously like this notion of emitting extra XML, you could also think about emitting test benches, emitting Linux drivers. Trying to make it just super, just dead simple for people to go and write hardware. But also if they don't want to use the system C, HLS, high level synthesis kind of approach, they can do this but still get the benefits of all the collateral that automatically gets generated. All right, so this is just links to the project, some stuff about me. So the main project is ESP project. There's the chisel accelerators, which is a sub module of that. For chisel three, that's on free chips project, but that will eventually switch to another project called Chips Alliance. We have a chisel three Twitter, there's the fertile project and my GitHub, if that's of any interest, and that's it. And I think I somehow got back on time after the interesting start. So thank you. Sure, any questions? Shoot. So we try and just take advantage of open source tools. So Verilator is like an open source compiler of a Verilog file to a C++ executable that you just build with GCC. So that's like the how do you get it to C++ to simulate it. So we just use Verilator for all of this stuff. But there does exist another project called Tretl, which lets you just directly simulate the fertile IR. And you can use that for testing too. So we have all bunch of unit tests with this thing. You just type SPT test and it runs all the tests for the accelerator as it goes along. I'm actually not, sorry, I need to repeat the question. So the question was can you go from system C to fertile? I'm not aware of that right now, but the project EOSIS does have a Verilog front end and a fertile back end. So you can theoretically try and take advantage of the fertile compiler ecosystem from Verilog. So you could go system C to Verilog to fertile if you wanted to, but you'd probably lose a lot of semantic information along the way. Yeah, so the question is what are the benefits of chisel versus something like system C to Verilog? So generally the way that I understand you're gonna use system C is sort of if you have these macros and you're very restricted in the set of what you can do. With the benefits of chisel it's basically saying you get all of the last 40 years of software engineering and you can really apply whatever programming paradigm you want to the process of hardware generation. So you have first class functions, you have parametric polymorphism. There are no restrictions in the sense of you don't have a synthesizable subset.  And you can build more complicated libraries on top of this for doing whatever you may need or your company may need. So, got a minute, anything else? Do you wanna borrow the minute? I can yield time too. So I'll be around if anyone wants to talk about chisel or any of this kind of stuff today and tomorrow. So thanks guys.


This study reports the development of a temperature responsive recognition system in an artificial host guest system that can switch selectivity between two similar gaseous guests, CO2 and C2H2, by utilizing a dynamic porous crystal with flip-flop local emotive organic moiety. The dynamic local motion regulates the diffusion process of the guests and amplifies their rate differences, allowing the crystal to selectively adsorb one guest at low temperatures and the other at high temperatures with separation factors of 498, CO2, C2H2, and 181, C2H2, CO2, respectively. This article was authored by Yang Tzu, Kenichio Take, Jiu Jiu Xing, and others.