What's up everybody, I'm Gil with One Take and today we're talking about Attack on Titan Season 3 Episode 20 also known as Episode 57 titled That Day. This is going to be a spoiler filled review and recap of the episode so if you haven't seen it yet go check it out and then come back and watch this video. I should also say I don't read the manga so there won't be any spoilers from that or future episodes. With that let's jump into tonight's episode. The episode begins right where the last one left off. If you watched through the end credits of last week's episode then you would have seen Eren's dad Grisha with his younger sister Faye in an interminant zone. They run outside the walls of that zone you can tell they're not supposed to do that. They run out to go see where the airships land. This episode we see them arrive in the city, where those airships land and take off from. They reach the airship and on the way there we learn a few things about this world and this time period. We see people refer to Grisha and Faye as devil bloods and more importantly we see them referred to as Eldians which will become important as the episode goes on. We also see that they have to wear armbands and overall they're treated as an oppressed group of citizens. When they reach the airships they are spotted by two people. One of them is a guy with a mustache, the other is a sort of chiseled well-built young lad and the two of them will play important roles in this episode. It's clear that Grisha and Faye are not supposed to be here. The two men pull them aside and ask Grisha labor or beating. He chooses beating as his punishment and also begs them not to beat his sister and asks them to give him the beatings for both himself and for his sister. They agree. The man with the mustache takes Grisha's sister Faye away, claims he's taking her home but we learn that she is found dead the next day in the river. When Grisha goes home he sees his parents being chided by the two men that caught him and his sister. Those two men tell his parents about the death of their daughter, they claim it was an accident and they tell them basically to be better parents you need your son to behave better. You've got to tell him about the sins of your ancestors. And this is where we start to learn a lot of history that explains much of what we've seen in this show. So Grisha's parents are of course distraught.  Grisha's father is holding it together a little bit better. You can tell he's the kind of guy that really tries to toe the party line. They tell him tell your son about your past and he says okay I'm going to do exactly that. And then he goes on to explain a lot of history. I had to rewatch it a couple of times so I'm going to try and break it down for you here just stick with me. So basically 1,820 years ago somebody named Yamir Fritz. This is an ancestor of Grisha. This is one of Aaron's ancestors from nearly 2,000 years ago. She made a contract with the devil of all earth. In the image they showed he looked sort of like the traditional devil.  And she made a contract with this devil to obtain the power of the Titans. Eventually Yamir died and her spirit split into nine Titans. Those nine Titans formed the Eldian Empire and defeated the nation of Marley to do so. This led to the Dark Ages where the subjects of Yamir also known as the Eldians oppressed all of the races. They steal from them. They force them to bear their children and they use the term ethnic cleansing. They said the ethnic cleansing went on for 1,700 years. So the Eldians that's Aaron's ancestors were oppressing people for almost 2,000 years. Eventually the Marleyans were able to rise up, took over seven of the nine Titans through the Great Titan War for 80 years. And it's important to note here. They took over seven of the nine Titans. That leaves two Titans unaccounted for I'm assuming that's the armored Titan and the colossal Titan but it's not confirmed in the episode. After the Great Titan War the Eldian King leaves. He goes to the Island of Paradise and when they mention the Island of Paradise we see an image of a map. And on that map we see the circular walls we're familiar with. So my interpretation of that is that the Island of Paradise is where Aaron and all the characters we've been watching that's where they reside. The Eldian King went there and put up some walls. We see a picture of a bunch of Titans standing and creating the walls we're familiar with. So we finally learn the origins of the walls. We learn why when you break open those walls you see the faces of Titans. Then the Eldian King left the Eldian Empire which has now been restored as Marley. When the Eldian King left he left behind some Eldians including Grisha, Grisha's family, Aaron's parents. So they've been left behind and now they're oppressed because the nation of Marley they're kind of pissed off over the last two, the last two thousand years of being treated very poorly to put it lightly. So one thing I want to say here before we move on from all this. All this backstory is fascinating and when this episode started and we see Grisha, Aaron's father as a child and we see the horrible circumstances he's living under all of that is super interesting and it feels like they hit the fast forward button. Which A is a shame because we don't get to see it all play out to its most dramatic impact and B it was just difficult to follow like I said I had to rewatch it a couple of times and because there's so much information being given to us a lot of very emotional things are happening here and they didn't fully impact me as much as they could have because while I'm absorbing it all I'm sitting there working trying to piece it all together trying to understand what it all means so I definitely didn't hate it but I sort of wish they would have taken their time a little bit maybe this could have been three or four episodes instead of half an episode where they fit in all that history I just described but having said all that it's still a very interesting story and once you process it all it makes a lot of what you've seen make a lot of sense. At age 18 so we've now fast forwarded nearly a decade Grisha is a doctor and he meets someone in his office this person moves his shirt open and exposes an ex scarred into his shoulder which he explains is a sign that he's a patriot he's one of the Eldians who wants to fight back against the nation of Marley. He explains that they have an informant in the government of Marley and from that informant they were able to get confirmation that Grisha's suspicion that his sister was murdered and not killed by some accident that suspicion is confirmed the guy with the mustache sicked his son's dogs onto Grisha's eight-year-old sister and had them essentially eat her and leave her for dead in the river so this fires up Grisha to join the cause become a patriot himself and he says I'd show them who the real devil was and he joined the restorationists so here we see the show touch on a theme it's touched on a few times before which is we see these never-ending conflicts good guys become bad guys all in the name of things that their ancestors did because when you see this you totally understand why Grisha wants to fight back why he wants to restore Eldia to its original state he was oppressed horribly his sister was murdered in cold blood eaten by dogs but is he going too far the whole reason the nation of Marley rose up is because they were being oppressed by Eldia to begin with so that's just something that's very potent in this episode the idea of good guys becoming bad evil be getting more evil oppressors becoming oppressed so we see that more in this episode than we've seen in other ones Grisha has a meeting with other restorationists and he tells them that apparently the history they've all learned from the nation of Marley is false he claims that Ymir Fritz the one who originally gained the power of the Titans from the devil use that power for good she cultivated the lands bridged mountains made the nation great and we have reason to doubt this is true because the person that Grisha met in his doctor's office he's surprised that Grisha knows all this he asks him you know you're able to read this ancient language so easily and Grisha says no I still haven't deciphered most of it and then they ask well how do you know the truth is well because I believe in our founder Ymir I believe we are the chosen children of God so he may be lying here and that's sort of ironic because earlier in the episode when he witnessed the mustached man tell his parents that Grisha's sister was killed in an accident he tells his parents the man was lying he was lying because it was convenient for him and you can tell Grisha was very angered by that fact but we can see over the years he started to become corrupt and now he's using lies to rally this group to fight for him then Dana Fritz shows up she was sent by the informant that's working with the Marlians and she is the last or the the last descendant of royal blood the last descendant of Ymir Fritz that's still left in the Marli nation she explains that the King of Eldian when he left to the island of paradise he brought with him the founding titan and they decide they need to go to the island of paradise to get that founding titan back and they realize that the nation of Marli is going to be trying to do the same thing so they need it to get there first we also learn that underneath the island of paradise there are fossil fuels so the nation of Marli has even more motivation to get there to power all their new technology we see images of airplanes and other tools of war so the restorationists now led by Aaron's father Grisha come up with a plan at this point Grisha and Dina have wed and they have a son named Zeke right off the bat you recognize that name as the beast Titan so you figure this is not going to go very well for them so Grisha and Dina have this child Zeke and they decide that they're going to train Zeke to become essentially a spy they decide he's going to join Marli and fight from within now one a couple of interesting things to note here one we see a photograph taken of Grisha Dina and Zeke so we find out that the portrait we saw in the last episode was Grisha Aaron's father and the beast Titan as a child who would have guessed that seeing that picture last episode we also see Zeke playing with a monkey doll so you wonder if maybe he had an affinity for for a simians and he had some say in what form his Titan ultimately took hopefully we'll find out more on that in future episodes they explained to Zeke what they need him to do we need you to be a spy we need to train you and he says okay I understand but you can see his eyes are wide he doesn't look good so when he says that you have a feeling this may not go the way we want it to very shortly after that that Zeke turns on his parents it's explained that he does this to save himself and his grandparents so he turns his parents in now why did he do this they don't give us a lot of motivation at least not explicitly in the episode itself and I am partly critical of the episode for that this goes back to what I said earlier where I really wish they took their time with this this could have been a very tense thing to watch where you wonder if Zeke will turn or if he'll support his parents but it's within five to ten seconds he turns on them my thought is that it's been established already that the nation of Marley basically brainwashes you so you get the feeling that he's been it's been hammered into his head since childhood this story that the Eldians are evil the nation of Marley rose up you even see Grisha and Dina explain to him everything you've been told is a lie I think it's hard for a kid to accept that so it was a little foolish for them to think one conversation is going to flip this kid from being loyal to Marley to suddenly being loyal to Eldia so I think that explains why he turned on them from there Grisha wakes up at the island of Paradise he's on the wall about to be tossed over the wall and we learn what happens when you're captured and sent to Paradise we see that Grisha's hands are bandaged up and bloodied quick flashback tells us that he was tortured and it's implied his fingers were cut off as they questioned him so it's a little bit gruesome kind of glad we only heard that and didn't actually see any finger removal so they put him on top of the wall and what they do to you here is they inject you with some of that Titan serum kick you over the wall and then you turn into a Titan so we actually learn where all the Titans are coming from on this island and it we should also note here that just about every Titan that shows up so when they inject people throw them over the wall they turn into Titans I recognized most of them I can't place all of them exactly but one of them the old man Titan seasons ago is the one who ate Eren before we found out that he is a Titan another of these Titans also looked very familiar which we'll get to in a minute while we're on top of the wall here a couple of familiar characters show up the two men that caught Grisha and Fey at the beginning of the episode are there the guy with the mustache the one who murdered Grisha's sister is there with his buddy we learn a little bit about this moustached man apparently he's kind of a psycho to put it lightly he clearly takes pleasure in turning these people into Titans at one point one man is begging crying begging for his life this is the man that Grisha met at the hospital the man who introduced him to the restorationists so the man with the mustache kicks that guy over the wall doesn't turn him into a Titan but lets him run and lets all the other Titans chase after him to likely eat him when Grisha recognizes the moustached man as the one who murdered his daughter he asks him why he does this and the man actually answers him and in summary he says because it's interesting he says people actually want to see cruelty we should live thinking this might be the last day we've got which that's actually good advice of everything he said that was kind of the one good thing he says you know carpe diem live every day like it could be your last but then he goes on to say it was educational having my son's dogs eat your sister so I wouldn't take too many life lessons from this guy that's some some life advice brought to you by one take then Dina is brought there Grisha's wife we see is also a prisoner and just before she's injected with Titan serum and pushed over the wall she looks to Grisha and says no matter what form I take I will come and find you and then when she's pushed over that wall and turns into a Titan we recognize that Titan as the one from way back when from episode one Dina Fritz Grisha's wife is the one who ate Aaron's mom which is just one of many insane revelations in this episode she says that she's going to find Grisha she does which implies that the Titans maybe have some subconscious drive she wanted to find him even in Titan form she eventually did in a very tragic way so clearly a lot to unpack and this is only about halfway through the episode but just one thing I'll react to is we've known for a long time now or at least it's been very heavily implied for a while now that Titans are human or used to be human and when we first learned that I assumed it's similar to a zombie movie right you get bit or something happens to you which turns you into a mindless Titan and what we learn in this episode is far more interesting than that we see all this backstory there's so much more to the origins of these Titans and I found it to be a little bit rushed in the explanation but overall a satisfying explanation especially when you add on the ironic tragic twist behind Dina's character right after that transformation we see Aaron wake up in a cell we find out that him and Mikasa have been imprisoned because of the way they went against Levi when he was trying to resurrect Erwin and we find out that everything we've been watching this episode was dreams that Eren was having and my interpretation of this we learned a little while ago that while in Titan form Eren ate Grisha his own father and we also learned that when you do that you can absorb memories from the person that you consumed so I'm assuming here that Eren is reliving some of his father's memories because of that and maybe it's been sort of unlocked by finding that diary one random thought it took me a second to recognize Mikasa she didn't have the scarf on and she had just woken up so her hair was kind of messy so interesting new look I know it wasn't intentional but maybe something she should try out so we go back into flashback mode Grisha is on top of the wall he just watched Dina turn into a Titan and the mustached man is about to push Grisha off the wall and I should say the last couple of episodes we've had some very satisfying moments of triumph we saw them take down the armored Titan we saw them take down the colossal Titan we saw Levi slice up the beast Titan and do a lot of damage there I thought this episode you know what they've given us enough triumphs we're not going to get one this episode the mustached man and his friend are about to push Grisha off the wall he's screaming he's crying and then the mustached man's friend it turns on him pushes him off the wall and we see him about to get eaten by a Titan and we hear it off screen and usually the sound is disgusting but in this case it was beautiful because the man deserved it and it turns out his friend is the informant working for the restorationist the informant known as the owl he helps Grisha up and tells him remember Grisha this is how we turn into Titans and he slices his hand open in emotion we've seen many times before turns into a very badass looking Titan kills a bunch of the marley police people breaks a boat in half and saves Grisha so I mentioned earlier that one of the themes that come back to in this episode is the oppressed becoming the oppressors good people becoming evil they touch on that very explicitly here again Grisha asks the mustached man if he has any remorse and just so I stopped calling him the mustached man I'll say his name is gross so he asks gross if he feels any remorse and gross goes into his whole spiel about how it's interesting to watch dogs eat people and how cruelty is great and all that and then he turns to Grisha and asks what were you as the Eldians planning to do to marley don't you feel any remorse so he basically says to him you were going to do to us what we're doing to you and then he gets eaten so overall thoughts on the episode I keep saying this but I've been absolutely loving this season I'll say this episode of the last three or four is probably my least favorite even though I liked it quite a lot it gave a lot of very satisfying answers to questions we've been asking for years the problem is that it gave us so much information in such a short span of time that I felt it took away some of the emotional impact of what we saw here some of it really landed I would say the last few minutes of the episode Grisha on the wall his friend showing up and getting pushed off the edge dina showing up and turning out to be the Titan which will ultimately eat Grisha's future wife Erin's mother that stuff worked really well but everything in the first 10 to 15 minutes that should have had an impact was sort of overshadowed by me just trying to process everything that was going on so I love the answers they gave but I wish they gave them over the course of two three maybe four episodes so I'm hoping that they've given us this info dump and now I'm hoping they'll take their time a little bit I don't know if we'll be seeing more flashback or if now we'll be going back to Erin and the rest of the gang but I can't wait to find out looking forward to the next episode and thank you for watching if you enjoyed this recap make sure to subscribe to our channel and hit the little bell icon to make sure you get notifications whenever we release more videos like this one thanks for watching


I mean, in a lecture entitled Evolution, does it really take seven clips before you finally get to the definition of evolution? Yes, yes it does, and that's okay. So, Evolution, you probably know by now that I'm actually super interested in all the tiny stuff. I love knowing how cells do what they do and how that ultimately creates what we see.  We can't even begin to imagine how big we're talking when we look at the overall process of Evolution that has happened and given rise to such grand diversity that we see on this planet. But of course, because I love the little things, like I want to know, like, how'd that happen? How did that, like really, how'd that happen that dinosaurs, a kind of dinosaur actually gave rise to a bird? How'd that happen? And so my first definition that I'm going to give you of Evolution is very molecular, very genetic, and that is this, Evolution is nothing more, nothing more than a change in allele frequency in a population over time. And there are a couple of pieces of this that probably deserve a little extra attention. I've found my colors and I have pink now, so that makes me happy. And so the first thing that we have to define is this concept of allele frequency. What? Allele frequency. Well, okay, never mind. That's the second thing that we're going to deal with. The first thing we're going to deal with is the fact that Evolution happens in populations. And I think we've already talked about this because it's such a huge misconception that I targeted and, like, asked you 800 questions on the exam about this. Evolution does not happen in an individual.  And we talked about, we actually defined a population. What is a population? It's a group of critters that can make babies. Often the population is, like, a species. Like, so they're all the same species, but the word species, it gets crazy if we start thinking that through. So if you just consider a population as a group of critters that can make babies with each other, then you're good. Because populations are what actually evolve. Individual critters or people do not evolve. Populations evolve when their allele frequency changes. So visualize this for just a second. Think about our class. Imagine that we considered a trait like tongue rolling, like that. And we imagined, okay, I can't remember what alleles we use, but we have maybe big R and little R.  Like that. Now, we should totally do this in class. We could calculate the allele frequency in our class, I'm so going to do it. I got to make a note to myself that I'm going to make a clicker question like right now so that we can do this in class. So I'm a roller, obviously, and I have a kid who is a non-roller, and so I actually had to have a little R to donate to him, but I'm a roller, which means that I also have to have a big R to enable me to roll, right? So I'm a heterozygous, got it. That means I'm donating one big R and one little R to the population. Let's look at my little kid who cannot roll his tongue.  Now, if he and I were a population, we could calculate our allele frequency. All we'd have to do is say, hey, we have four total alleles, one out of four, our big R, which is what, 25%, and three out of four, our little R, which is 75%. Now, someone came into our house and was like, if you can't roll your tongue, you're out of the population, then that would be extremely traumatic for me, and I really don't like thinking about that analogy. It was quite horrible. But if that happened, bye-bye, little R, then there's going to be my allele frequency just changed in my population. Are you good with that? I mean, hopefully you're not good with that at all because it's quite horrifying, but the allele frequency changed in your population, evolution occurred. This is specifically known as microevolution, and microevolution is that simple. You end up with a change in allele frequency in your population over time. Now, changes happen all the time, and changes can be totally random, and we're going to talk about different mechanisms for microevolution, like how it actually happens. If microevolution happens enough and a population experiences reproductive isolation, I have to write it down, that says reproductive isolation, then you can have something known as macroevolution. Evolution. Okay, ready? Macroevolution takes place. You have a population with a whole bunch more than two people, so I can't give you, I can't draw you pictures. You have a big old population, and let's say the population splits. Like that mountain range comes up in the middle of the population, and half of them are on this side, and half of them are on this side. That's reproductive isolation. Those guys aren't going to make babies with each other anymore. However, they're totally going to have their own allele frequency dynamics in their own populations. They've been reproductively isolated, and they're changing. Microevolution is happening in their population. That can lead to speciation, the formation of a new species. Let's put reproductive isolation and macroevolution equals speciation, or macroevolution, speciation, the formation of a new species. It's not directed, and it's not like they all sit down. You know they do this. They all sit down and go, you know, I think it would be a good time for us to form a new species. You know, these guys, like, we don't really want to be associated with them anymore. Okay? All right, that analogy just died. But the point is that this, if you have these characteristics, you can make new species. Ready? Don't forget this part, because it becomes sort of like, no, that's not possible unless you remember I had to pick the right color, this piece. It's over time. And we're not talking over a couple of years, although microevolution totally happens in populations in, like, observable generations. Like, we can totally see it happening in a population. But macroevolution is, like, jillions and jillions and jillions of years for it to happen. I think that's all I have to tell you. And what was I going to go do? Oh, I was going to go make a clicker question so that we can count up our allele frequency. Okay, I'm going to go do that right now. If I can find my place to push pause. Bye-bye.


Greetings and welcome to the Introduction to Astronomy. In this week's special topic in astronomy, we are going to talk about altitude and azimuth and how they can be used to determine the position of a star in the sky. So, what do we mean by altitude and azimuth? Well, let's start out looking at the definitions here. The definition of altitude is the height of an object above the horizon. If it is on the horizon, just rising or setting, that would mean its altitude is zero degrees. The azimuth is the position of an object around the horizon. And we define that starting from the north point. North is zero degrees. So, we have here the north point noted here. We have a star, some point in the sky. We measure then would measure its altitude and azimuth. And we would say that it is so high in the sky, that's its altitude up above. So, this would be its altitude, which could be some number of degrees up above the horizon. Let's just say that's 60 degrees. So, we have an altitude of 60 degrees. Its azimuth would then be measured around from the north point. And in this case, it would be 45 degrees east. Now, there is only going to be one point that meets those two criteria, that is 45 degrees east and at 60 degrees north. So, we can exactly then locate the position of an object in the sky. Now, this measurement depends on your position here on earth. So, the altitude and azimuth that a person measures in one part of the world will not be the same altitude and azimuth that a person would measure in another part of the world. So, for example, a measurement on the east coast of the United States would give a different value than someone on the west coast and would be different than someone in Europe or Africa or Australia. Some objects may be visible or may not be visible, depending on what their location is. And in fact, the altitude itself can be negative. An altitude is negative if the object is below the horizon. So, at night time, the sun would have a negative altitude. It doesn't have no altitude. It still has a specific value. It would just be negative, and that tells us that it is below the horizon at that time. Azimuth, on the other hand, cannot be negative. It is always going to be positive and you measure it around toward east from the north point. But that would tell you whether an object is visible. Now, let's look at an example of this with our sun. So, here are paths of the sun on different days of the year. And in fact, prominent days, which are the summer solstice here, the two equinoxes, and then the winter solstice. So, the lower path is the winter solstice. That would have a very low altitude. The sun is very low in the sky during winter. It would be a little bit higher if you go up toward spring and fall, and it would be highest in the sky when you get to summer. So, the altitude of the sun would be different at different times of the year. It will also be different at different times of day. Here, we're looking at the noon time altitude when the sun is highest in the sky. It would also be different at different times of the day. When the sun rises off in the east, it would then have a zero altitude. It would rise, get higher and higher until it reaches a peak, and that would be around noon, and then it would go down to set. And once it's set, it would be back again to zero degrees altitude. And again, that changes depending on the person doing the observing. So, altitude is zero on the horizon. The maximum altitude you can get would be at the zenith, and that would be an altitude of 90 degrees. Altitude cannot be greater than 90 degrees. That is the highest point in the sky, which would be straight overhead. So, let's go ahead and summarize a little bit about what we've gone over this time. And what we've looked at is altitude and azimuth are things that can be used to determine a location of an object on the sky. The altitude measures how high an object is above or below the horizon, and azimuth measures how far around that horizon it is starting with the north point. So, the north point is the starting point for azimuth. The horizon is the starting point for altitude. So, that concludes this lecture on altitude and azimuth. We'll be back again next time for another special topic in astronomy. So, until then, have a great day, everyone, and I will see you in class.


Welcome, welcome, welcome aboard, people wandering in. My name is Michael Godak, I come from Austin, Texas. I'm a developer. I've been doing Drupal stuff since around 2001, something like that, and a dev for a long time before that. And I work for ThoughtWorks, which is a global software company. I'm just a little guy in a big company in that sense. And we're gonna talk about continuous delivery. So, but I wanted to try to get a little feedback in here, like how many people in here are, we're gonna go over some like roles, right? Roles are like dev, QA, project manager, other, right? So how many devs? You can be more than one, a lot of devs, right? QAs, dedicated QAs, not a one. And like business analyst, project manager, right? It's back in there, and like bosses, right? I mean, it's like, yeah, I'm the boss, right? It's coming up. So any other roles that I didn't cover right in there, people that just wandered off the street for coffee or anything else, right? So, and how many people here are like doing continuous integration today, right? And anybody doing continuous delivery today, CD, right? Going through, yes, all right. So, we'll just launch in, there's folks coming in here and everything, but there's a lot of material. The talk will be, there's like three kind of sections of the talk, right? The opening part is the turkey talk, right?  So we'll try to keep that opening part like short, but we have to go over the why of why we're doing this, right? Because it's really kind of, in most of the dialogues I have, it's kind of the most important part, because people kind of get it that they wanna do it, but they don't really have the narrative to sell why it is that it's important to invest in getting this work done, right? So we'll cover that first. And then we'll look at a particular tool, right? Or this Go platform, and not the language. And then we'll go into some, like case study stuff towards the end to try to put it together so to give you, not the way that I'm saying that you should do it, but a way that it could be done, right? Just to try to give it some context. So that's really the scope of it right here, right? So we launch, right? We'll go in right here, right? What the first question is what is continuous delivery? Right? And so continuous delivery, we'll call it like a technical practice of Agile, that's concerned mostly with getting good ideas delivered in the shortest time possible. That's really what we're trying to do, why it is that you wanna be doing this stuff. So since it's kind of about this question of time, getting stuff done in the shortest time possible, then let's go look at time. So we have the time that it takes to get a story. There's some of these terms, like there's story, requirement, feature, they're kind of synonymous, right? And we in our culture use the word story to say the requirements that we're asking a dev to deliver. So the time it takes to get a story to dev complete is called cycle time. That's your cycle time.  And this, the cycle time tells you something about like developer resource utilization, but the larger context is the time it takes from the time an idea is originally expressed and a requirement is expressed to the time it's actually delivered for use by a customer. And that's called lead time, right? So continuous delivery is concerned with both cycle time and lead time, but we really wanna emphasize lead time because you don't get any return on investment on software until it's actually delivered for people to use it. So the fact that you've got something dev complete, if it's still sitting there and not delivered, there's no value in it, right? It's still just an expense that nobody's actually getting any benefit from. So cycle time, lead time. So here's an image of the product that we're talking about Go. It's an open source product. And I guess I'll, let me take a sidebar. We actually have two copies of this book right here, Continuous Delivery by Jez Humble and Dave Fairley, who were thought workers at the time they wrote it. And it's really the best book on the subject. It's an awesome book. You should definitely read it. I'm gonna give away two copies of this book at the end of this session to whoever tweets the most interesting questions at the hashtag goforcd, G-O-F-O-R-C-D, right? Or, okay. So anyway, two copies are right here, honey. Okay, so we have this idea, right? We wanna get to faster cycle time, faster lead time, faster feedback, continuous delivery. We're gonna need some tools to get this stuff done, right, to do this. But, and so we're gonna look at this particular one, Go. Not Go-Lang, but Go-C-D. It was a ThoughtWorks product. It's now an open source project, right? So now you can just go to, it's go www.go.cd is the community site. And then it's on GitHub and you can get it, install it, and it's yours to use and contribute, et cetera. It's an awesome tool. There's other tools. Hopefully everything that we present in here, if you decide to use other tools, the concepts are still the same. We wanna get you to understand the lay of the land of what CD tools are really about and how to differentiate what you can do with Jenkins with other tools to ElectroCloud or Bamboo or Go, right? But Go is awesome. But still it's like, you gotta start with this caveat that usually the biggest problem with getting your organization to, you know, transition to CD is typically not really the tools. There are usually things to have to do with like organizational change management, architectural issues, process issues, that kind of thing, right? So it's kind of like a big takeaway we're going for here is that we wanna leave you with a better sense of what you're trying to achieve in a CD transition so that you can take this question of tools, which are really fun, and put them in the context of all this other work that you have to do in order to actually get to delivery. Because delivery is not just a technical thing. It has to be the, it's really, it involves everybody on the team from customer through to dev, everything. So let's look at a CD in the context of Agile, right? Because CD is continuous delivery is born out of Agile, right? So the Agile Manifesto from 2001, the first principle of the Agile Manifesto is, quote, our highest priority is to satisfy the customer through early and continuous delivery of valuable software, right? So the continuous delivery movement as we know now was simply trying to realize that expression from the Agile Manifesto, right? Now, Agile's the term that it's like it's been so abused at this point that often it's kind of hard to know what people really mean when they say it, right? They say, I'm Agile, you're Agile, whatever. So when we're talking about Agile, we're talking about an adaptive process as opposed to a predictive process and we're concerned with making sure we're building the right thing. That's what we're talking about with Agile. Now, iteration is often associated with Agile, right? Clients often going to agree to an iterative process and principle, but still like they essentially impose this predictive model on the project, right? I want these requirements, we'll do iteration, we'll do Agile, everything, but we want these requirements in this period of time, right? And so if you've got this like predictive straightjacket on top of an Agile process, then you end up with a process that really is dedicated to prioritizing and estimating requirements, sorting the requirements into sprints, like maximizing resource utilization, that kind of stuff. So essentially what you have is like a project management process, leaving out a lot of the technical practices that were discussed in, if you go back to what Agile, the intention 2001 forward, right? It's not just the project management processes, there's technical practices such as continuous integration, automated testing, paired programming, unit testing, and continuous delivery are technical practices that are part of Agile, right? And I don't mean to state those as prescriptive things like you have to do paired programming to do Agile, but those are technical practices that really, you need to be doing parts of those to really get the benefits of an Agile process. And so typically we get into the discussion of like, why is it that you can't, on your organization, you can't get to these technical practices and usually it has to do with like, our customers won't pay for it, the customers won't pay for quality. Everybody's got their own story, but we hear that part a lot. So really to get into this question of context, we'll step back, have this short discussion about this relationship between quality and productivity. And to do that, there's this guy, who knows this guy, W. Edwards Demings, right? Demings is he was this management consultant and statistician and he went to World War, he went to Japan in post World War II period to work with re-standing up manufacturing. And he really, he just changed the world of what he did from there. He's an awesome guy. And he's really associated with this, the Toyota production system, right? And Demings, it's hard to separate those two things. And so Jez in the book in continuous delivery, they start right off. That's how I know that Demings, right? In the reading of this book, is that they talk about really the debt that we have today in figuring out the software delivery process, the debt we have to Demings work, right? We can still go back to Demings to try to figure out what it is that we need to do now. And so I'll close this initial part with this quote from Demings, it's a 1982 book. So Reagan, Margaret Thatcher, all that, and it's back in that time. And he wrote this book called Quality, Productivity, and Competitive Position, which is a pretty cool book. He talks a lot about statics and statistics and it's focused on the manufacturing process. It's really a pre-software world era at that time. So here's this Deming quote to try to put this question of quality and productivity in context and continuous delivery. And he said, Demings says, our aim is to illustrate with simple examples that productivity increases with the improvement of quality. Low quality means high cost and loss of competitive position. Some folklore, legend has it that quality and production are incompatible, right? That you can't have both. A typical project manager will tell you that it's either or, right? In her experience, she'll tell you that if she pushes quality, that she'll fall behind in production. If she pushes production, then quality suffers. This will be her experience when she knows not what quality is nor how to achieve it. A clear, concise answer came in an interview with 22 production workers in response to my question, why is it that productivity increases as quality improves? Less rework. There's no better answer. These workers know how important quality is to their job and they know that quality is achieved through improvement of the process. That improvement of the process increases the uniformity of output of product and reduces rework and mistakes, reduces wasted time and material and thus increases output with less effort. Other benefits of improved quality are lower cost, better competitive position, happier workers on the job and more jobs as a result of the better competitive position of the company. These are lessons that management must learn and apply. Reduced waste transfers man hours and machine hours from the manufacturer of defectives to the manufacturer of additional good product, effectively increasing the capacity of a production line. So the benefits of better quality through improvement of the process are thus not just better quality in the long range improvement in the market position that goes along with it, but increased productivity in much better profits as well. Improved morale of the workforce is another gain because now they see that management is making some effort themselves and not blaming all the faults on the production worker. End quote. So that's a quote from the very beginning of Deming's book, right? And obviously most of American manufacturing has missed that whole boat, right? Because they're still stuck in this other crazy model that doesn't really seem to work that well. But Deming is awesome, it's a guide, right? For where it is we're trying to get to, right? Quality is not something that you're, it's not an extra cost that you're paying for. This is your road to better productivity and better competitive position and profitability. And the software delivery pipeline is part of the structure to help you get there. So that's our constant goal in this, right? Is to get to foster a culture of improving the process, right? If you Google the improvement kata, K-A-T-A, right? There's a whole school of stuff on the improvement kata, right? What that's about, constantly improving the process. And so this is CD practice is all about getting there and it's about reducing the cost, time, and risk of delivering incremental changes to users. So that's a lot like, you know, the mountains off in the distance, right? They're really beautiful to behold and everything, but they're a little bit further than they at first appear. So nobody's gonna like, nobody gets the CD overnight, right? It's not like you get a tool and now you're CD, right?  And so you need to like focus, figure out why it is you're doing this, keep that in context and measure your progress as you're going along, right? You're shooting for reduced cycle time, reduced lead time, faster feedback on all the way through the process and to keep the focus on value-added work instead of non-value-added work, which is to say, you know, to try to match your efforts with work that customers are actually willing to pay for, right? So the purpose of the tools are to support these efforts of ongoing improvement of the process of building and delivering software. And so in that sense, all of the effort to build software, build automation is like a musician's rehearsal, right? So by the time that you go out on stage, right? Then all the technical issues should be resolved at that point, right? You're going out to perform at that point. Fully automated deliveries is a goal that you want to get to. If you're not getting to it right away, it's not a problem, right? It's a journey that you're going to to get to where you have fully automated deliveries, deliveries, you press a button. Nobody has the SSH or shell into anything, touch anything, it just works. And you have rollbacks that are just as easy. So it takes the risk right out of it. So we've introduced this concept of the pipeline now, right? The software build pipeline. To put it in context, here's a quote from Martin Fowler on what we're trying to do with the pipeline, right? So we go out, where we go from continuous integration all the way through to production. And so Martin Fowler says, quote, one of the challenges of an automated build and test environment is you want your build to be fast so that you can get fast feedback, but comprehensive tests take a long time to run. So a deployment pipeline is a way to deal with this by breaking up your build into stages. Each stage provides increasing confidence usually at the cost of extra time. And early stages can find most problems yielding faster feedback while later stages provide slower, more thorough probing. And deployment pipelines are a central part of continuous delivery, end quote, right? Martin Fowler. So let's talk about stages, right? So we got a pipeline are these stages. A pipeline in go is essentially a container for stages. Stages are metadata within the pipeline. And so in our case, this kind of case study thing, we're using four stages, a commit stage, a QA stage, a showcase stage, and a production stage. You know, maybe you'd call them something different, maybe you'd have three stages or two stages, right? Commit to production, I suppose you could do that, right? Or you could have more stages depending on what you wanna do. That's not important. The important thing is you've got this flow that goes through, right? So here's what our stages look like. Now we're looking at a tool, right? We're inside go, right? This is a go admin dialogue. And we're configuring our stages, right? So we get from our concept here to actually configuring the tool. So we have commit QA showcase production stages. The idea is that every time code is committed in trunk, goes automatically gonna rebuild the system, right?  And so the commit stage is continuous integration, right? If you have a go pipeline with one stage, then you have CI, right? You have two stages, now you have something more than CI.  But, so first let's take the side bar and continuous integration because the term gets used in different ways. CI isn't running Jenkins on feature branches, right? Because there's two words in continuous integration, right? Continuous and integration, right? And so in order to do continuous integration, you have to be integrating. And running on a feature branch isn't integrating anything. It's just running on a feature branch, right? And so the purpose of CI, one of the things you're really trying to accomplish with CI and modern build process is if you have a stage in your process where you're scheduling time to do merges from feature branches into trunk, then that's kind of a problem at this point, right? You wanna get rid of this whole merge thing, get it down right at the very beginning, get developers committing code at least once a day or more times a day or more directly into trunk. And no feature branches only for like experimental spikes or something like that, only trunk. And then use feature toggles instead of feature branches to separate out code that you don't want to be turned on in environments, but you're just going down one pipeline. And this is kind of, this has become standard practice. This is Google, the entire Google code base is one, they, this is trunk. Everything goes into trunk, right? And they're pretty big, right? And they can manage it, right? Facebook is the same thing, Netflix is the same thing, Tesla works that way. This is the, the time that you spend in this merge process is time that you wanna get back. CI, so we have to step back. The stage is kind of a bit of an overloaded term in here because we're thinking of stages as these deployment instances, right? Dev, QA showcase, right? But in Go, the stage can be like a little more granular than the instances. So we'll drill down, right? These are like 12 stages. They're like four instances, three stages for each instance. So here we'll drill down into just one of these stages, the showcase instance, right? We're actually in Go, we're gonna build three stages. We're gonna build the software, we're gonna test the software, we're gonna release the software. We're gonna do that for each stage, right? So we end up with something, I'm not saying you have to do it this way, this is like a model that we're using, right? So we have these four instances that we're deploying to, and in each one, we're building, testing, releasing, then building, testing, releasing, building, testing, releasing, building, testing, releasing, right? So back again, here's the, each one of those rows is a pipeline. A pipeline is triggered by some change, so every change in source code kicks off a new instance of the pipeline, and every, the goal in CD is that every commit is a release candidate, right? You wanna get from a development perspective, when you push code, then you wanna have this mentality of like, this code could actually go to production and it wouldn't break anything, right? Even if it's turned off, whatever, but every commit is, so commit, the pipeline becomes like the medieval feature quest, right? Where the hero goes after the girl, right? And he's gotta go after all of these challenges in order to get there, and maybe he's slayed in the middle of the, it's the red things, right? Where you have failures, right? You're slayed by the dragon, right? But the point is to get all the way through to green, and the emphasis is on keeping the build in release ready state all of the time. And so when you get to, when you really have a CD practice, the keeping the build in release ready state is actually more important than getting new work done, right? You want your team to always prioritize keeping the release, keeping the build in release ready state, right? That's the first priority. If there's something that's preventing that, then you do that first. So here, we're gonna kinda punch around in the tool a little bit. So you have the pipeline, and then on the left-hand side, if you click on the little link there, then you get this dialogue that tells you the changes that are driving this pipeline build.  So you can navigate and see what's going on. This is a drill down into one pipeline instance. So the stages are across the top, across the right-hand side, you've got like a stage history, previous runs of the same stage, and in the middle there, you've got the commit hashes of the build materials, the source code, right? So you can see what's going on. And then on the left, you've got that where it says deploy content in this case, you've got a link that goes into the console. So in Go, you get this console view for every build, every run, every time you get the view in detail. And this console log in this case goes on for pages, pages, pages, pages of detail. So when something breaks, you can go through and see what actually happened on the console, right? So the way that the tool organizes this stuff and presents it to you is what makes the tool valuable. This is that stage history that was on the right-hand side. And so here you've got different runs of the same, different pipeline runs of the same build. And here you can click on that config changed link and get a diff of what actual code changes went into the differences. So if you particularly get this case where you deliver software and everything's good, and then like a week later, you find out that it's broken in some way that nobody really noticed, right? Functionally broken. And so you can go back to that release and you can go here and you can see what code went in at that point, right? So the tool helps you out with that. So once you can get all the way through, right? On this journey to fully automated deployments and you gain enough trust in your automated tests that you can actually, you're willing to click that button to do automated deployment based on what's there. A really interesting thing happens, right? The decision to release software is no longer a technical decision, right? So if you're a project manager, right? You don't have to go and ask the devs if what's done, right? Because you know how that conversation goes, right? Is it done? Oh yeah, right. Is it, I mean, is it, how done is it, right? Oh yeah, it's totally done, right? Well, I mean, is it done or is it done? I mean, right? So, you know, you want to resolve all that stuff. So the software that's on showcase is done, right? So you no longer have, this is what you're really going to, right? So you get this transparency out of the process, right? So you want to build this confidence that what's on showcase is what's done and you don't have to review it. And so at that point, the conversation, the release decision becomes a conversation really between the project manager and the product owner or the customer, right? To say, okay, here's a release candidate, right? This is the stuff that's in it. Do you want the stuff in production? Because if you want the stuff in production, we'll click the button, you'll get the stuff in production, right? If it's not what you want, then we'll keep working on it, right? So then it really, it changes everything, right? So you think about it, right? With Agile, the Agile recognizes that when stakeholders first see working software, it changes their perception of what the requirements are, right? So in Agile, we try to like, we say, okay, what do you want? Here are the requirements. We try to like build them something and show it to them so that they can say, oh, no, no, no, so what I actually want is this, right? So you still have time to just like build what they actually need, right? And that's a good thing, right? That's what part of what Agile is about. With continuous delivery, it's taking that same idea really all the way through to the delivery side, right? To change this relationship between the stakeholder, the customer and the build team. And this really implies some really much richer relationships with the customer. That's really where a lot of the value is. The value is not so much in like saving time through automation so you don't have to do the DevOps work every time, right? The real value is on how it changes your relationship with your customer builds a trust relationship. The competitive advantage of it is awesome. The alternative, right, is like you spend a lot of time like fixing things, right? Low quality, Deming says, low quality means high cost and loss of competitive position. So let's look like in more detail of the tool, Go itself, right? So Go is, it's a server and it's agents, right?  So it's a lot like Jenkins. Jenkins has a master only mode but most of these have the same concept of agents and a master server, right? And a build pipeline is a sequence of stages that are pinned to resources. So here's the, we're gonna like drill down into the stuff, right? These concepts. How to declare build materials, how to set up build stages, how to set up jobs to run in stages, how to get agents to run your jobs, how to configure tasks and how to use trusted built artifacts, okay? And so this thing, one of the things that is takeaway that we hope to get out of this is to understand this distinction between build materials and build artifacts, right? Materials are like the ingredients going into your recipe, right? The source code is going in. The ingredients are constantly changing the recipe, right? That's why you're building this stuff. And the artifacts are the cupcakes that come out of the oven, right? After you bake the recipe, right? They're the result of the process. And so you're always tinkering with the recipe. No two batches are gonna be the same. So GO supports this concept of trusted artifacts that allow you to have these contractually consistent cupcakes within the context of a given build pipeline. And so for like a Java build, the Java binary is the contractually consistent object, right? That you only build the binary once in the build pipeline and then you deliver the built binary down the stream. So you never have to worry about whether or not somehow it's built a little different in production than it is in earlier stages, right? So in our kind of case study thing, we're gonna look at the Drupal database as the artifact, as the cupcake, right? As that we're gonna bake. So it's a little different concept than how most Drupal sites are built and hopefully it'll be a stimulating discussion. So we'll come back to that, but let's kind of take a step back, right? The first thing you do when you set up a pipeline is you declare build materials, right? You say, here's my source code. This is where it is.   Or any of these tools. And the agents are gonna take care of like pulling the source code onto your server and getting you started. And so to get the build to kick off automatically whenever your material changes, you just gotta check off this automatically, automatic pipeline scheduling. That's what gives you, once you do that, you declare your materials and you check that box, you've got CI at that point, right? Not necessarily your tests, but you've got CI. So far we've covered build materials, the triggers and stages. So next from here we drill down into jobs, tasks, and artifacts. And then you're gonna have the whole picture. So a job is still a meta concept, right? It's stage is a container for jobs. And so you declare these jobs and for them to run, go server goes and find some agent that's suitable for running a job and it hands the job off to the agent to execute, right? So servers, the orchestrator, the agents, the executor. And this process of matching up jobs to agents is just a tagging, right? So you set up tags in the agent that says my website DevBuild and you set up the same tags in the job and then the server goes out and finds that registered agent wherever it happens to be, right? So resources are effectively just tags. This is tag matching to get your jobs and your agents to match up. And here's the agent view, right? So this is a list on that right hand side of these tags that allow the jobs, the go server jobs to find the agents. So if pipeline is a container for stages and stages are a container for jobs, right? Then you'll probably find no surprise that jobs are containers for tasks. And tasks are commands to be executed, right? So finally we're getting to actually doing something, right? Up until this point, it's all like meta configuration stuff and the tasks are actually doing something, right? So if you've got a back of a napkin deployment, which is fine, right?  And that's like your base build, right? And so the next thing is you write that into a batch script and you run the batch script. And then the next thing is you write it in Python or something like, all the go is doing is taking your napkin and bundling it all up and automating it so you're doing the same thing every time all the way through. And the task is where this actually happens, right? So we're gonna, we'll drill down into task, but so now that we have all of the components, these meta components sort of defined, so let's take a look at the architecture of go because hopefully that'll help you understand what you're looking at as you're looking at various CD tools, right? So go has got these carefully considered abstractions providing tasks inside of jobs, inside of stages, inside of pipelines with a mix of parallel and sequential processing. So pipelines and jobs are running in parallel, they can run at the same time and stages and tasks are running serially, right? And this was a carefully considered design. If you try to build your pipeline in Jenkins, then you're gonna be inventing your own abstractions, right? How you wanna be modeling this stuff, right? So now you've become the architect. The guiding point in go was this, have you ever heard of Joe Splotsky's, the law of leaky abstractions, right? That was what was driving this. And Joe Splotsky says, right, our goal is to have powerful enough abstractions, the right ones to make it possible to model your path to production and effectively and more importantly to remodel it as you learn and evolve over time while at the same time resist the temptation to continuously introduce new unnecessary abstractions that are only gonna make things more difficult in the long run because they will be leaky, right? So it's true anywhere in software or architecture, right? Is you're dealing with this question of what is the right abstraction for the job that you're trying to do and we try to use patterns in order to avoid the process of us and constantly reinventing our own probably leaky abstractions.  So drilling down into this task configuration, right? We have, here's like a copy task, right? Everybody knows copy, right, CP. And this is how you'd configure it in Go, right? You have got the command, the arguments for the command on each line.  So the command either has to be on the path or you have to specify the full path or it's not gonna run. And the command is gonna be executed by a user, the user that the agent is installed in. So that user has to have the rights on that system to do the things that you want it to do. They should be self-evident, but you'll spend a lot of time getting, you always spend that kind of stuff and DevOps, right, getting that stuff right is a big part of the job. So the second part of our job, this job is a task, it's a thing called to build the system, to build our Drupal site, right? And so thing is a patchy ant for PHP, it's a target-based XML scripting language and there's a lullabot primer on it, that's awesome. So, you know, these build systems are generally, they're either target-based like ant and thing or product-based like Maven and make. And the target-based systems are like easy to get started with, but they're XML, so they get like long-hared and hard to deal with. The build, these make systems or I find them like hard to like jump in the middle of a broken process and figure out what's going on. So I prefer the thing stuff, but the main thing is that Go isn't like imposing a choice or a way to do this stuff, right? The Go is an orchestrator of your tools and processes as you choose. So whatever works for you, right? The devil you know is probably the best one. So here's the task dialogue for our thing call, right? And we get down to calling user bin thing, right? And the dash F says what file the load, the build that XML, deploy dev is the thing target that we're actually gonna execute. And so this is what the thing actually looks like, right? This is this XML thing code, right? That gets down to this call that says deploy website and the deploy website, then we get down to the next target, right? And so this sets up the Drupal site, right? And it calls at the end of that red box site install. And so just to show that like there's nothing up our sleeve here, right? This is a drill all the way down to a Drush call, right? So Drush is still doing the heavy lifting in your deployment, right? This is you're just orchestrating the sequence in order this is being done in, plus you're marrying all your Drush stuff with all the other DevOps system configuration stuff that goes along with it. And then Drush is supported in Fing with this, it's an add-on called, what is it called, drush-task.php. So if you're gonna use Fing, you've gotta get drush-task.php and then you're in business, right?  This would be Drupal 7 and Drupal 8. It'll be, this is where your configuration management stuff is gonna come in, where that whole red block is today, right? This is all features and stuff like that is what we do in Drupal 7, right? We build the site out. So we build the whole site out in code from there. So, you know, there's, I could go through, I've got like another 10 slides of the detail going in, but I'm, and we could drill down into that, but probably we'd be better spent like jumping to the discussion rather than drilling through because probably we've provoked a lot of questions, right? So, yeah, how do you sell CD, right? And there's, it's kind of in a similar space of how do you sell Agile, right? And I'm not, I'm working on that, right? That's why I'm here, having this conversation, right? And you know, the tact that I'm on, right, is deming, right? You know, like, take deming as your guide to say, we're not talking about adding on a whole series of costs to your project, what we're trying to do is to get to higher productivity, right? So if you're selling it inside the organization, we're talking about selling it based on productivity, right? Because who can be against better productivity, right? How can you be against that? Nobody wants to pay for quality, but everybody's willing to go for higher productivity. So you keep the emphasis on that and then quality is a vehicle to get to better productivity, right? You got to build quality in. Now, if you're selling it to the client, then product, they're not really, they don't really want to hear about your productivity problems, right? Because if you bring that up, they're saying, oh, you've got productivity problems? Maybe I should be talking to somebody else, right? And so they're really, it has to do with responding to them on a faster basis. In that sense, it's not a question of like selling it to them, like saying, this is what we want to do and you've got to pay us to be able to do this other stuff. It's like gradually getting to the point where these are the capabilities that you have. It's not like it's a big expense. It's your time, right? And once you have the skills, it'll just be what you do. It won't cost you to be able to do these things. It's just a ramp time to get there. And once you get there, then the way you sell it is the fact that the customer says, well, we think that this is what we want. And then like the next day, you say, well, here it is, right here, right? You get to where you can deliver like small incremental changes quickly. And it changes the relationship with the customer and it changes the trust relationship with them. And then once you have the trust relationship with them, then you're on the basis where you can say, especially with a larger organization, you can say, now what we want to do is we want to help you transform your organization along the lines of these practices, right? So you can expand the scope of your engagement with the customer, right? And this is your book, right here, by the way. Here you go. So next question. Come on up. This question is for you. All right. So can you read that question, please? Yeah. What integration points does Go have with ticket systems and other ones? Whose book is this? I have a tarant, Marshall. Here you go, tarant. Come on up. It does. I'm not really like a big expert in that part of it because I'm not using, there is like an integration interface in Go that I haven't delved into. And let's see if we can jump over right here. So here's Go. So hopefully we don't, we're actually not up on screen, are we? So this is, if we take off mirroring, this is probably gonna kill me, right? Okay, so here's Go right here. And then over here in the admin section, you have, or no, actually it's, yeah, admin, pipelines. And then for the pipeline, you've got the integration, those integration points are over here, right? They're plugins, right? The tools are plugins. Go has a plugin interface, so, and it's an open source project. And so there's some stuff that already exists. I know that our own mingle project management integrates some other tools integrate, and other integrations are being built as we go. And the whole interface is there to create new interfaces going on. Kind of as long as we're along this, Go also, you know, this whole thing of the pipeline, Go provides you a GUI for configuring the pipeline, and all of it resolves to this XML, and so you can actually modify the pipeline in this context right here. So that's part of the integration of the plugins. So that's kind of, here's the plugin tab here, right? So, it's kind of a weak answer just because I'm not that familiar with that part of the system, but it's all open, everything can be done. What is done, I can't tell you. Yeah, what do you got? Yeah, in theory, we're kind of really doing different things. Like in our world, we're building, we build our servers with OpenStack, we provision them with Chef, and all that's done before we're talking about doing our Go builds, right? So at least in my, because it's a big world, there's a lot of different cases, right? And I live in my world, and so maybe I don't understand your context exactly, but basically our build is on the application level, right? So we're just going through an application build process, and typically what we're doing is orchestrating a series of steps that you would be doing on the command line. Certainly, I mean, you can be calling batch scripts instead of commands, and the batch scripts can then be contextual in terms of what they're doing, right? I'm not doing anything like that, but sure, yeah, why not? Yeah. Well, yeah, I mean, you can certainly, you can set up four Jenkins instances, right? And then kind of write some glue code to put them together to make a pipeline, but then you'll be declaring your own relationship, right? The relationship between commit and QA and QA and showcase and showcase and production are all gonna be kind of your code that's gonna make that happen. And if you wanna do artifacts, then you're gonna be using some Jenkins plugin to make it happen. You can do it, sure, there's definitely, you can definitely do it, right?  So we wanna concentrate on building and delivering changes in the software for our customer, not really, we wanna have the tool, the technical aspects in the tool, we wanna try to bury those so they're not really what our team is dealing with all the time, right? We wanna be dealing with the changes that we need to deliver with the customer as much as possible. And there's a lot of tools at this point, right? There's bamboo and electric cloud, and there's tools you can pay for, there's free tools. Yeah, on set updates? Yeah. Right, so how do you deal with this thing with schema changes, database updates, et cetera? And it's a really, really cool topic, it's kind of a big one. And the path that I went down or we went down was that we build the entire Drupal site from scratch with every build from site install. We start with a blank database and then we do everything in code to build on every commit, right? And then after the sites, we do that and we build everything from code, then we build our content from code as well. In other words, we use, in our case, what we're doing is we take a non-production facing site that the content editors, the marketing people, post their content to this non-production facing site and then we run a node export, we export their content to JSON, we commit it to Git. And so when we get in the build, right, so now we build the entire site from scratch, everything in code, and then once it's built, then we start importing the content from Git and so we can end up reproducing the entire site from scratch all the way through to the production parallel instance and we deploy that to production right beside the existing production site in another document route with its own database, right? So it's sitting right there, ready to go. And then, so then you have the deal, you have the, so any schema changes, obviously they're already in the new thing. If you have schema changes that affect the node import, you've got to deal with those in code. But so the thing that you've got to deal with at that point at actual release is any data that's actually production driven. So if you've got like a Facebook web 2.0 site, this doesn't make much sense. But if you've got a typical corporate property, most of the content's being driven from marketing forward, not coming from public, right? And so then architecturally, we reduce these production generated issues by moving comments to discus so we don't have to worry about comments, right? We moved web forms to Marketo so they're actually not in the Drupal database anymore. Those are, you may not want to make those choices, but those are choices we made to get our content as much being driven from our own source rather than coming from public. And then any remaining data that's in tables that only comes from production, right? That data could have changed the second before release, right? So obviously you can't, right? You have to get it from that source. And so in that case, you've got these two sites, there's separate document routes, they're sitting right next to each other out there in production. And so when it comes time to do the cutover, you click that cutover button, then you put the production site in maintenance mode, do a SQL sync of those individual tables that need to get synced from production to the outgoing to the incoming site. And then you simply rewrite a sim link to what Apache is loading for production so you don't even have to bounce Apache. So the whole thing takes a process of like the cutover takes like less than a second. And since most of the sites behind Varnish anyway, that nobody will ever see any, it's like totally seamless cutover time. And we've done this with a Drupal commerce site, right? And so with Drupal commerce, you actually have large sets of tables that are production oriented, right? So you have all the customer data, all the order data, all that stuff, right? And we could do that and we'd SQL sync it between the two site instances. And it just takes a second to do, it doesn't take very long at all to do that part. And one of the advantages, once you look at that kind of architecture of doing things, then think about what a rollback means at that point, right? The rollback means you just rewrite the sim link back from one site, because the other site's still there, right? The one you just cut away from, you just rewrite the sim link and you're back on the other site. So it reduces the risk tremendously, right? Rises the time and the risk, right? And which are the main goals, right?  Get rid of that fear so that you're just like concentrating on all those issues should be done at that point. So there's other ways to deal, this thing with dealing with schema changes, data changes in releases, the one thing you definitely, I always wanna avoid is touching that production database in a site upgrade, right? Because you never really actually know for sure, no matter how many times you've tried it, you never know for certain what's gonna happen, right? And so then, if something goes wrong, your best case is you've made a database dump, you went into maintenance mode, you tried your site upgrade, you tried to test it out, it didn't work, and so you're going back to your database dump and your window's bigger and you're sweating and it's the fear factor is higher, right? So in this case it's like, there's no way you can go wrong in that. So we're out of time, right? But I'm still here. So my Twitter handle is August, 1914. This is however I got that. So tweet me there, I'm godeck at ThoughtWorks.com. Email me there and if you want to have a larger discussion about this, I'm more than willing. Thank you very much. And...