Welcome everyone. Thank you all for joining us today for this live stream event. My name is Rebecca And I'm the event planner of the Microsoft reactor in New York Before we begin we recommend checking in to receive session resources. There are a lot of Learn modules on the check-in page we have a github repo on the check-in page definitely check in get those resources It's all neatly on this one Web page, so check it out the website is a k a m s slash reactor check-in and the event ID is 1 5 0 0 0 I dropped that into the chat as well and I'll have it up on the screen again in a little bit So quickly just to cover our code of conduct Microsoft reactor seeks to provide a respectful environment for both our audience and our presenters We encourage engagement in the chat But we just ask that you're mindful of your commentary you ran professional and on topic Our event guidelines this session is recorded. It is live right now on YouTube and will be available later on on demand If you have questions feel free feel free to submit them into the chat if you have not yet participated on a YouTube Live stream you do need to be signed in with an account to interact there So if you haven't done so yet you can do that now or you know if you have questions You're not able to send us right now. You can always message us later So today is a session. Let's bring up Jay Hey there How are you today? I'm great. I'm great. So this is Jay Gordon. He's a cloud advocate here at Microsoft reactor He'll be walking us through how to deploy bicep files using github actions That's exciting It looks like we've got a few people in the room already again if you haven't checked in yet. Oh welcome from Berlin we've got Philip joining us Hello, welcome Philip. Hi Philip. Yeah anybody in the chat feel free to let us know where you're joining from what your experience level is What you're hoping to gain from this session? Or you know, I know Jay from previous sessions. He's a big fan of the Yankees, right? So if you want to talk about that, too, we're we're here for it Absolutely, so why don't we jump into my slides and we'll kind of get started here I think that we've got some cool stuff to talk about. It's gonna be pretty fast-paced session. I Hope you're prepared. I've got a whole lot for you. My name like Rebecca said is Jay Gordon. I'm a cloud advocate. I Do a lot around IT operations infrastructure Things that help people get into and using the cloud and so I really do appreciate you taking part and if you want to send me any response any Information if you have questions my Twitter is always the best way to get in touch with me after this session I Welcome you to follow me and Interact and I am also Always doing Azure Funbytes. It's every Thursday at 2 p.m. on learn TV I'll get you more information about that if you check out my Twitter So let's talk about our agenda really quickly We're gonna be reviewing the components of this workshop. We'll configure the dependencies We'll secure our credentials with Key Vault and then we're gonna deploy our Application to Azure Kubernetes service. All right, and we'll get into all those different components as we continue along So if you're gonna follow along you're gonna need a few things to get your prerequisites in you're gonna need it SSH public key If you don't know how to do that, it's in the docs We'll be able to show you how to do that once we get to those docs You can use the template repo so you can run github actions. It should be in your own account You can't use the public template to run github actions. You need to have it a part of your user An Azure account, we're gonna be building something for Azure So an Azure account really helps $200 of free credit We'll get to that link in a second and then you're gonna want to clone your your Locally, I'm gonna be using a Visual Studio Code today So if you want to sign up for Azure keep this up for a second You can go to aka.ms slash CDA free Azure 12 months of free services 25 other free services that always and $200 in free credit if you want to follow along and Actually do this workshop yourself You can also just watch this video and follow along After the fact you can go to aka.ms slash DevOps slash aka s bicep Or just github.com slash jdestro slash aka s bicep And you can go ahead and just use the template and you don't need to fork it You just want to use the template and what it will do is create an entire version for you That copies exactly what I have into your own personal repository And so we're gonna be building today a demo app. The demo app is going to be just a simple .NET application that's using I believe JavaScript for the front end and It's also using Redis to store our votes, which is either cats or dogs. I'm voting dogs So let's answer a few questions before we actually start building things sound good. All right, so let's do this cool So first question is what is bicep? Well, we can start out with an intro on what it is Which is a domain specific language for deploying Azure resources? Declare it at least so you could think of it as the next generation of arm templates Which if you work within the past, you know that they came with a burden of working with JSON So bicep has a simpler syntax compared And it's aimed at simplifying the authoring experience So a good analogy to understand the relationship between bicep and arm would be similar to the relationship between type script and javascript Type script is like bicep javascript is like arm and bicep transpiles down to a standard arm template into JSON Which means that the arm JSON is effectively being treated as an intermediate language and all the work is being done In open source on github and you can keep a view of it. It's been like that since day one of how the product is evolving so bicep has a very reasonable writable syntax similar to arm templates in Terraform bicep is a declarative language where you say what you want and Azure makes it so so opposed to imperative approaches such as using Azure CLI or PowerShell That require you to tell Azure how to do things procedurally With bicep, you don't need to worry about the complexities of how with modules. You can break up your bicep code into manageable chunks bicep has a first-class authoring experience It has rich type safety validation IntelliSense a bunch of features. There's a really great visual studio code Extension it really makes it a lot easier to start authoring your templates and bicep also offers a Decompile command so you can take your arm template and convert it to bicep there's a bunch of tools that you can use including a Bicep playground that will let you actually transpile Your your arm templates directly into bicep. So why use it? Day zero support for all the different Azure resource types and API versions Let's continue along No state files, which means you don't have to actually store a state file in something like Azure storage or keep it locally as part of the repository Prefight validation so you can fail fast So you know where your problems are first and foremost before actually using it and deploying it The VS code extension is part of the tooling along with it being directly into Azure CLI You can use Azure PowerShell and like I said, there's this bicep playground where you can get different types of bicep templates Marcus was kind enough to put a blog together Marcus felling If you go to that blog post on the bottom, you can see why you would maybe want to use bicep over Terraform Alright, so let's keep going along So what's github actions? We covered what bicep was but github actions is first and foremost its first class CICD it's an automation tool for any software workflow related to your repo We've been using it for CICD But that's only one way you could run a workflow when someone comments on an issue or when you're someone work forks your repo you'll get Actions kicked off But it's really good at CICD and it can deploy almost anywhere So a workflow is a configurable automated process made up of one or more jobs You must create a YAML file to define your workflow configuration github actions is available with github free github pro github free for Organizations github team github enterprise cloud github enterprise server and github a so there There's lots and lots of places that you can actually use it You can create runners for your build process You can use it native to windows linux max so you have all these different cross platform ways to actually deploy Or I should say do builds public repos are free private repos include 2000 free minutes and there are more than 2000 if you you need to use that more in build time You need to use the paid offering and then self-hosted runners for windows linux back are capable So you install an agent on your build environment if you have a specific build environment Or you're worried about security or something like that and you could set that up And so the next part is keyboard which is where we're going to be storing our secrets So We have a multitude of places in the world of you know software development where you can store secrets and the list is pretty exhaustive, but There's a few common places that we can keep them and right now we can use github secrets Which we were going to be using in just a little bit We're going to be using these different application platform potential Potentially to store secrets like app settings and an Azure app service or secrets and AKS And then centralized key store, which is what we're going to be using today in Azure key vault So it's a centralized place to actually Store your secrets and certificates and so why should we use it? In addition to being a central location to store our secrets keep all layers on additional benefits to managing our secrets Find great access control network access control We can limit exactly where we actually can get those secrets and where they can go so we've got a Lot of different options to be able to keep your access control backups logging secret rotation of your secrets Keep them secure keep them easy to access and then finally a part of our intro We're going to get into our Actual demo in just a few minutes Is Azure Kubernetes service and so what is it? It's a serverless Kubernetes experience it's integrated continuous integration and Continuous delivery is possible It provides you enterprise-grade security and governance You can guide your development and operations teams on a single platform to rapidly build delivered scale applications with confidence so if you think about it this if Arm or Azure resource manager is the control plane for all of Azure AKS can be a control plane for your Kubernetes configurations and so you'll use this to build manage Kubernetes clusters You can orchestrate any type of workload running in the environment of your choice whether you want to Move dot net applications to Windows server containers modernized Java Java applications in Linux containers or run microservices In the public cloud at the edge and hybrid environments You can even use your own data center if you're using AKS on Azure Stack HCI So there's so many different solutions for you to run your your orchestrated containers with Kubernetes So why don't we get to work? We'll follow along at go in the chat ask questions if you need them This will be recorded so you can also just follow along in a later day so I've got my my screen up and What we're going to do is work together and put myself right down here in the corner What we're going to be doing is using this this Template that I've come up with the AKS bicep that's got all the instructions on the left side You can see here. So we're able to use all the different instructions that we need to be able to actually Build this this demo and deploy it on our own If you'd like to so if you're here in the AKS bicep repo You're going to just click use this template and then it'll give you the ability to copy the template into your account with your own Repository name. I've already done that and here we go. This is where my actions will run You can see I've already got a failed action because that the code is still generic Set up and and so Let's let's move ahead As we said before we need to have an SSH public key in order to actually do anything here So to create a key, I've got an example right here SSH key gen And if you're not familiar with it, I Really recommend taking a look on you can use a popular search and look up SSH public key generation But that command will get you one really quickly The next thing you need to do is you're going to need to Clone this repository and so I'm just going to go here to code Local I'm going to copy this I'm going to clone repo here I'm going to go ahead and open it up in VS code. I'm just going to see elect repo location Okay, and we'll open it up and now we've got our repo and you can see in here I've got a get ignore file and the big reason why I've created that get ignore file is I like to set up a scratch file That I'm not going to save and I also am going to be saving some credentials Locally and I don't necessarily want them to get checked in so I've got a get ignore file I've got my bicep template I've got a parameters file That's going to be modified And then I've got my github deployment It for my github actions workflow. So we'll go through those as we progress through the session so We need to get our subscription ID and set it as a variable and to do that You can just run this command in our terminal So subscription equals az account show query ID And in what it does is it actually drops our subscription into a variable. So if I just go echo Subscription you can see there's my subscription ID then what we need to do is set up some In shell environment variables for our location and the name That we're going to be using for our resource group our cluster and our keyboard I've simplified this where we're just using one name because naming things are difficult So we're just going to name we're going to use the location at East US. We're going to use the name aks bicep 02 which is what I named my template Repository that I I've stored locally. So all I have to do is paste in these two different Environment variables into my shell if you're using PowerShell, obviously, this is going to be a little bit different of a process So now I've got my environment variables for location and the name the name You should be unique if you need to just use a random name and numbers whatever it is Just store it as a variable So the next thing we're going to do is create the resource group in our shell and a resource group is we're All of our resources are pretty simple. That's where we keep everything within a Azure deployment Everything is in specific resource groups and it's kind of like a carton of eggs. You can take eggs out. You can put eggs back in And if you don't like your dozen of eggs, you can throw the whole thing out. So we're going to go ahead and use those environment variables to create Our resource group. So there you can see This is where our resource group is. It's underneath my my Subscription and you can see here. There it is. So this is all from the API. It puts it everything in JSON and so Once we finish that we need to create a service principle and the service principle are credentials That allow you to log into your Azure account when running github actions And so what I'm going to do is I have already kind of set it up here So we have our name environment variable our contributor Roll let me bring this up. So it's a little bit bigger so you can see So what we're doing is we're running an Azure CLI command and then we're specifying the scope for that specific resource group and then We're saving that is a service principle dot text file So it's just saving it locally and that's the big reason why we have it here in our get ignore So we can't check it in so What it's going to do is it's going to save my credentials for this Service principle in that text file. Here it is This is in JSON format. It contains a client ID a secret a subscription ID all this we we need this in order to actually connect our github repository to our our Azure account So what I want to do now is I need to create a few github action secrets environment variables So I'm just going to prop this They put it in another window so that you can kind of follow along to what I'm doing and So where I have to go next in order to create these environment variables is here on the side with the triple dots We'll go to settings for the repository and if you scroll down you can see here. There's secrets It's all blown up so you can see secrets right there and Action secrets or environment variables that are encrypted So you don't have to worry about clear text being passed along with your credentials for your Azure account. We don't want that So we're going to create three different Secrets that we need here. So what we're going to be doing is storing our Azure credentials so I'm just going to go here in my Action secrets section and click new repository. I should say new secret for the repo I'm going to name it as your credentials and then what I'll do is I'll just grab these entire credentials that we got That we got from our Azure CLI command that created Our service principle and I'm going to just dump them all right here. So the entire piece of JSON I'm going to throw it right in here and then click add secret at the bottom So that's our first one. Then we need our Azure resource group. That's the resource group that we created So we're going to just create new repository secret And we're going to just call it a case bicep go to We'll add that secret Cool and then our third one is our Azure subscription And so that's the subscription ID that we looked at before All we have to do actually is go back to our Our creation you can see here is of our resource group and you can see that our subscription ID is there But it's also stored as an environment variable So if you need it, you can just go echo subscription If you're on a Mac pipe it in the PB copy So let's bring back up this here we go. And so our final Action secret that we need so now that creates a service principle trust between my github account and my My Azure account so now my github actions are allowed to log into Azure and create resources All right, if you have any questions go ahead and put them in the comment section I'll see if I can get to them. We're going to keep moving along so We've taken care of these first Parts we've created our resource group. We've created our secrets and the next thing we need to do is create a key vault Now what I've done here is I've provided you with a CLI command that allows you to use AZ key vault create and What it's going to do is it's going to give it a name and then that name is that AKS bicep o2 variable The resource group same name variable the location of where our key vault is going to be is in East US You can set it to what particular region you need especially if you have some specific governance on where Data has to be stored for your apps. There's so many different Places and regions for you to do that We can say Here's some options that we can add so we can say that we can access our key vault for template deployments for disk encryption and For deployment to virtual machines so you can do it that way or You can use the portal and the portal gives you a next next last way of creating it I've already created this because it takes a few minutes to create a a key vault and you can see I've got it online here and What I need to do In here is to store some secrets. I I need some secrets that we're going to be able to grab from the parameters file and From that parameters file Specify that we're going to access this SSH RSA public key the one I told you about and that actually allows you to Have SSH access to the underlying Kubernetes cluster of virtual machines So if you do some troubleshooting, you'll be able to still get in your service principle client ID and that is right here and Then the service principles client secret So it's kind of like a username and password We don't want to send those over the wire in the parameter file. We'd rather store it Here in our key vault So we need to create these three and it it's just a matter of a couple of commands So let's go through that. So the first Section we need to do here in our key vault is go to secrets because we're not going to be storing Keys or certificates. We're going to be storing secrets and we can click generate import and What we're going to be doing is giving it a name and so based on our documentation the first one for our SSH public key is This name. So what we're going to be doing is Creating the secret name as SSH RSA public key Now we need to actually enter the secret and the easiest way for me to do that is I can just go in here to my Terminal I'm going to cat My SSH key. So I keep it in dot SSH ID RSA pub and then what I can do is just Cat it or I should say pipe it into PV copy as well. I mean you can also just copy and paste it directly But what I'm going to be doing is taking this value and just putting it right here and you can also see that you can look at the value you store just double-check and We can set activation dates and expiration dates if we need to have this key rotated every so often And then we just click create and that secret is created. I don't want to save this now Next we'll go to generate import because we need to get to our next secret. That's our service principal client ID And so we'll go back here the same process service principal client ID We'll go here to the sp text file and just grab our client ID The reason I'm showing you all this way We're doing it manually is that normally you would have to use multiple Bicep modules in order to be able to create your key vault to store your secrets I wanted to show you kind of like piece by piece how it all fits together. So create I've got my my second diff of Secret that I've stored and now I need to just add my last one and Our last one is our service private principal client secret so we put in our username with the client ID and now we're going to put in our password and We're going to go ahead and and this is so we can set up a Trust for our actual AKS cluster. So our service principal Principal client secret that is what this is called and then we can go to client secret Copy that and for the value click create So now we have our three secrets Cool, and if we go back here to our overview We can see that we actually have a URI that we can access if we need to programmatically access these secrets and then display them somewhere That that's basically how it's able to create and you can retrieve secrets using a Azure CLI you can use it using via various SDKs and and you can set up different access policies networking Identity management all the different things that you expect to be able to do with your Azure account For these different resources that you create you're able to do right here in the keyboard portal So we we've got our Credentials stored as secrets and now what we need to do is to update the parameters file And we just want to give it the name of our resource group And so our parameters file is located right here in the root of our repository directory and What we're going to do is Is take a look I think I took that out actually So we've got some names that we want to use here. We have a unique cluster name and DNS prefix I Have actually taken that out. I have to update the doc. I've taken that whole thing out just to simplify And it's automatically just utilizing that from the AKS template and we'll look at that in just a second So what we're going to be doing now is Updating where exactly so I have these three parameters that we just created secrets for and you can see right here SSH RSA public key we're referencing a particular keyboard that we created and so all we need to do Is take this section right here And we're just going to update some of these parameters and we can just go to edit replace and What we're going to do is copy that paste it in here So we're going to update our vaults name, which is a ks bicep O2 Our subscription ID Which we got from before right here and Our our actual Resource group we actually need to add in here and that will be a ks bicep To so we'll place these three And any oops an extra slash Let's just get rid of these here. So we've got our subscription set and we've pointed it to the specific Resource that we've created for our keyboard and within that keyboard. We're specifying these secret names So why did we need to do that? Well, simply stated that if you go into this a ks bicep template You can see that there are a number of parameters that get set So DNS prefix like I said, it's just going to use the resource group name and you can see how it's it's just declarative it's it's Allowing you to just add these parameters Provide strings for them You can add descriptions so you can actually know what they are And and we've got all these different values so we can specify What the size of the disk is so we could we can add all these different parameters into our parameter file So we don't have to manually hard-code them into this bicep template, but I've Taking care of just some three key things and so we've got our unique cluster name parameter We've got our Linux profile user name and then now we have here our public key That's stored as a secret. So that's we go back To our secret section. That's why we created these three That's why we have our client secret because we need to access it here and This parameter Specifically references exactly where it is All right Looks like I Overcooked this parameters file and I'm going to fix it really quick. Let's see. Yeah, I did it All right. Give me one second. Let me back up Fix this. Sorry about that. You know when you do it live sometimes you make mistakes. So I'm just going to Copy this and I'll do real place again. So go to edit the place Pop that in Pop that in here Vault name AKS bicep o2 subscription ID we got before so let's go ahead and just grab that and Then we just update the last parameter which is our resource group and That's the same here. Sorry. It's not a little easier But I have made this more difficult for myself for some reason and it's always fun when you're doing it live and You are making it more difficult. So All right o2 there, all right, so our key vaults are updated subscription the resource group the provider the actual Key Vault API that we're accessing in the name of the key ball. All right. So that's all set. We've got our three parameters Specified that for SSH public key our service principal client ID and our secret name. So I've saved it Okay, so I've saved this file. You can see it's in my actual source control And for the person that's asking the question, what's a bicep file bicep file is a template for authoring Azure resources so you can Basically declaratively state what you want created how you want it created Where you want to create it and it's a domain specific language for Azure resource manager. So What we've got to the point where we've made all of our changes And then we're going to take a look at the action file So we've set up our application to be able to start Deploying what it is we need and I'm sorry I'm moving so fast But we only have a little bit of time left I've got this YAML file That's our github workflow that when we have a push to our repository we're going to first of all reference our Resource group or I should say our Repository github action secrets. So that's just showing this variable right here We need the cluster name, which is Azure RG The resource group Azure RG. That's the name variable. We created before the namespace That's where the namespace within Kubernetes. We're going to be saving and creating our application and then the app name of the specific application that we're building and so what we can do is look at our runner and our job is going to Build and deploy everything on Ubuntu We're going to check out our code in this case. We're not checking out any code We're logging into Azure. So that's why we saved our credentials We're deploying our bicep file and we'll take a look. We've got our template right here a ks bicep and The parameters as you're deployed up parameters like JSON where we modified our parameters before Then what it'll do is it'll set the target for our Azure Kubernetes and so it'll use our credentials it'll give our cluster a name and it'll use our resource group and Specify what I'm changing is going to be done within this particular Kubernetes cluster Then we're going to create the namespace Where we keep everything and then eventually we're going to deploy our app to AKS and our our Deployment is actually just in this manifest files. This is a standard manifest for Kubernetes in our deployment You can see it's going to give all the information. So the name of our app The front end the back end the node selector And then the container itself so the container image that we're going to be deploying if you were creating your own AKS an ACR as your container registry combination you would specify Where your ACR is located in this case? We're just going to be using these base images. All right, so Let's go ahead and and get to the part where we start deploying So I've got the changes here to the Azure deploy file in our source control And I'm just going to go ahead and add it We're going to be just staging this and then we're going to just commit to the main branch If you were working in a team, you probably would want to Directly commit to main branch. You might want to have a separate branch do so, but we're doing a demo today We're going to try to move along fast So we're going to be saving a commit message and we're going to say deploy to AKS All right, and then we'll sync our changes. So what that's going to do here on the GitHub side And so we'll go up to GitHub actions Pushing that is going to kick off a GitHub actions workflow and you can see right now We've got deployed at AKS And so what's going to happen now is we're going to go through a build and deploy process that we specified in our workflow file So it's going to set up our job. It's going to be running checkout main So it's going to grab the image the repository and any code that we need Then it's going to get to that next section where actually logs into Azure and then specifies the environment So the cluster name the resource group the namespace for Kubernetes the application name and Kubernetes And the provider which is Azure R and Then what we get to the point is we're doing the deploy and so you can see here GitHub actions looks at that workflow file and says I'm supposed to kick off a build from this template using these parameters With this environment so all these different environment variables that we specified within GitHub and within our different I should say our parameters We've got all this ready to go And so it'll change the subscription context if necessary it'll validate the template and then it'll start creating your deployment So this will take Depending on on how many instances you have This will take a few minutes because what we're actually doing is we're creating a brand new AKS cluster which is getting some underlying virtual machines and To those virtual machines We're applying Kubernetes install from there. We're going to be actually then Deploying our application to that Kubernetes install now I'm lucky enough that I've already got one of these finished and so I'm going to show you what it looks like when it's done So here's the action and you can see I've built a new one here and the build and deploy completed and if we go to the build and deploy you'll see We finished our entire process it went ahead and it deployed our front-end and our back-end and Then it applied a public IP address So you can see we get a cluster IP for internal IP addressing and then we've got a load balancer so we can actually access our application from the front-end from the web and In order to be able to get that IP address We can just log in to AKS using AZ CLI and just grab our our credentials, so let's go back to the actual code here We'll scroll down and you can see I've given you a command to access your public IP from the load balancer So what we're going to do is use the Azure CLI and We're going to go over into this section right here, and we're just going to specify the name of our resource group and that is in this case AKS Bicep 01 and Actually, that's the the name of our cluster. Sorry, and then the resource group is the same so We're specifying we need to get the credentials for the AKS Bicep 01 cluster from the AKS Bicep 01 Resource group and so what it'll do is it'll go it'll access. What am I? Let's see. Oh I see. I just it should be the resource group instead of me anyway Of course, let's see what I did wrong here unrecognized command AKS AZ credentials great Let's see. Let's try this once more. Sorry about that Do it. You do it live, right? Okay, so we'll set our resource group Bicep 01 Buster name and so now it'll go and it emerged our AKS Bicep Kubernetes credentials into this This.cube config file and now what we can do is we can get the services So here's an example of the output of what it will look like What I need to do is get this load balancer IP. So I'm just gonna Boop cuddle get services all namespaces It's going to go into kubernetes and it's going to ask What are the IP for all these different services and you can see right here? Here's the front-end load balancer and the external IP address. So I'm just gonna grab that Put it into a browser and now we've got our application. It's up and it's online Dogs dogs dogs all day, right? cool That's how everything is built. I know it was really fast I really recommend that you take a look at some of the resources to get even more information Than what we present before so here are some great places for you to get some resources There's a quick start deploy bicep files by using github actions It's gonna give you a similar version of what we did today. It helps you just deploy a storage file if You go to this next link you can get information on how to get started using Azure Kubernetes service all the different product information If you want documentation about Azure Key Vault security aka at ms slash security features 3 underscore 12 1 What is github actions for Azure and? Then what is bicep? So just some basic documentation that we've got set up This bicep learn module. It's free education. It's free training Okay So you can use this to start learning more and more about bicep if you go to aka dot ms slash bicep learn And and that's everything and so To answer Rea's questions, we're covering all things DevOps on Azure While we also talking about the specific Azure DevOps products and times on this We also really love to talk about all the different ways to use DevOps methodologies in order to create a great experience using Azure So there's so many different tools. There's github Which is is just such a great way of integrating your code into Azure using the workflows Makes sense to me. You can use pipelines if you want you can do this deployment Using pipelines if you want, but that's a different session Okay, so I think we're just about out of time I really want to say thank you. I super appreciate you all One dealing with my little mistakes because you know these things happen and Also, just thank you for being here being a part watching Talking in the chat.  This was fantastic. We did get a couple other questions I know I was dropping a bunch of links and commentary myself into the chat So it kind of pushed things around So if you want to take a few seconds to scroll through that if you have a few more minutes I'm just gonna quickly run through my two slides and then if you want it if there's anything you miss and you want to answer feel free But yeah, so The arm TTK so there's this question Bicep is looking more and more powerful each day, but arm template toolkit is already compatible Yes, it is already compatible There is a arm template toolkit and the extension now supports bicep You can go ahead. I think you need to Be the bicep extension supports files so that there are a Bunch of different things that you can use But I'm pretty sure the arm template toolkit now includes Bicep, I think specifically for Azure DevOps, but it's in there You can go to Azure slash arm dash TTK on github actions Or I saw on github We answered what a bicep file is I think There was a question related one of the streams we're on right now is for the does up DevOps channel Sure. Yeah, I just answered that You know Microsoft DevOps on Microsoft, you know period We want to just make sure that we're covering all of our bases and while Azure DevOps is a great product github and github actions is just as Viable a product to talk about and so this channel it seems appropriate because we want to talk about DevOps on Azure not just Azure DevOps Thank you so much. Sorry about that Yeah, so for our audience still tuning in I dropped a link to our survey we use that information basically to Put together future programming Let us know based on your experience and your background kind of the things you want us to be putting out free content-wise Give us some feedback there And then also if you're tuning in from one of the many channels that we are streaming to right now And you're not familiar this session is brought to you by the Microsoft reactor program Free community events for everyone. We are an international program. We have 12 physical spaces If you're not familiar with us, definitely check us out. Go to Microsoft reactor comm We have a calendar of events find their sessions around the world. So Depending on what you're tuning in from the time zone you're in there might be sessions that are better for you Also find us on Twitter. You can check us out We'll have this session on demand on our Microsoft reactor YouTube channel and also if interested you can go to aka.ms slash reactor email sign up. We don't spam you we just send one email a month To let you know what we have coming up in your local region Can I give them my Twitter account? So if if you want to find me on Twitter You can just go to Twitter comm slash at Jay Destro or a Jay Destro And and if you'd like to also check out Azure Funbytes It's a weekly show where we cover all these different subjects about Azure this week. We'll be talking about web assembly And I'm gonna be I always have a guest these guests are incredible. We always learn so much together So check that out if you'd like to thank you so much Rebekah You are a wonderful wonderful host and I really do appreciate your time as well Thanks, Jay, and I appreciate you coming on here and providing us your time as well and to our audience for participating Thank you all for tuning in until next time Chow Bye. Bye


Hi everyone, this is Gabrielle with Oxmerotic Group. We're here at Oxmer Toyota. I have Chuck Schumann here with us. Hi guys. Now, Chuck's going to be going over a couple things on the 2018 Toyota Sequoia. This is the limited platinum. So we're going to go over a couple things why this could be such an awesome family car, family vacation vehicle, right? Yes. Absolutely. Yeah, when I think of vacation, this is what I want to go in. Toyota Sequoia, a big V8 engine, lots of power, it rides fantastic. And then also we've just entered into a partnership at our dealership at Oxmer with Yakima Racks, okay? And so we now are available to get their crossbars to get their big containers like this. We can get their bike racks, their kayak racks, all of that to fit on the top. It can go on the truck bed. It can go on the back like the tailgate. They have racks that come out of, not the tailgate, the tow hitch. They actually got racks back there that they can do as well. And so we get access to all of that. And the reason you get something like this is for your luggage and your toys and all the stuff that you would take to a beach. You put all the chairs up there, all of that. And then you still got room in here for seven adults.  I mean, it's like driving a bus. These things, handles better than a bus, but it's that kind of space inside. I mean, you got a ton of room, ton of room for the passenger. The driver has a great comfortable seat.  You've got a center console right here for them as well. And then three seats in the back. And all of them, and you're guessing in the back and look at the DVD player. So they've got this entertainment center here. So if I'm going to Florida, if I'm going, you know, anywhere in the country, I want to be in this thing. Oh, yeah. Right in there with my gear on top, all my friends inside, and then me driving. I got a thing. I got to drive. Love it. Perfect. Sounds great. All right, you guys, if you have any questions on this vehicle, if you'd like to come out, take a look at it. Take it for a test drive, not a dress drive. You can give us a call. Now the best phone number reaches on its<PHONE_NUMBER>. You can also visit our website oxmortwayota.com. And I will have a link to this specific one in the comments below. So thanks you guys for watching. We'll see you soon. Bye guys. Bye.


Let me see the, where's the pointer? Oh, here. All right. Okay, I'm a one-in-show from the Fred Hutchinson Cancer Research Center. And for those, so this is Mount Rainier Lake Union, and this is Hutch, that's where I work. For people who do not know me, our lab has used engineered communities because they're very well controlled and mathematical models to understand, for example, the evolution of cooperation cheating. For example, we showed that adaptation to a new environment can allow cooperators to purge cheaters stochastically. Moreover, defectors or cheaters can paradoxically create conditions that rescue cooperation from cheaters. We also studied spatial organization that is how interacting cells, cells that affect each other's fitness, organize themselves spatially. For example, we showed that strong inter-population cooperation between green and red would cause mixing of these two populations. We further showed that spatial self-organization favors cooperation over cheating. In this case, for example, the isolation of the blue cheaters away from the two cooperating populations. But today I want to talk about something that's completely new, that's not published. And because I'm giving the last talk of the first day, and I think some of us are probably still jet lagged, so I have decided to change the style of my talk to a little bit conversational. That is no slide for a while. And I want you to interrupt me with questions because I like that far better. Okay, so I want to open the formal part of my talk by posing a question. So suppose I have a community of six, say, bacterial species. And the community does something interesting. For example, it converts cellulose, an agricultural waste to a useful product, such as an anti-cancer drug. But the activity is very low. And I want you to help me to improve the activity of this community. What would you do? Excuse me, what did you say? What's the temperature? What? Right, the temperature, well, but you can try, I mean, of course, one can try random things to see. I mean, somewhat aren't targetedly trying, right? But the combination is enormous. So one might want to ask what? Keep some culture. Very good points. So I will, that's a very good point. I'll come back to that. So the first question one might, the first step one might want to do is to figure out whether a single species has that activity. Because if a single species can't do it, then we don't need to worry about five other species. And we don't need to worry about losing that species. Just in case that species actually grows slower than five other species. We don't need to worry about losing it as when we do serial passage. So go back to lab, isolate the six species and test them one by one. And if we find that no single species has that activity, and that activity I would define as community function. So that is, so community function is a biochemical activity that is possessed by a community, but not by any member species alone. So now suppose that we find that no single species can do it, so it's community function. So we still want to see what is the minimal subset of communities that can do that, sort of like what Pete said. So you can also do standard dropout experiment, right?  And so in the end of the day, you might realize you only need two species to have this function. Then what do you do? Excuse me? Ecosystem what? Network selection. Very good, very good. So one possibility is I would come back to that point. So one possibility is to try to figure out why you need the two species to have this activity. That is how species A affects species B and or how species B affects species A. But this is no trivial task because we know for species that are relatively uncharacterized, each species can release tens if not hundreds of compounds. And then many of these compounds can affect the other species in diverse manners. And so suppose you actually, you in fact go to the laboratory and figure that out, you end up with a haystack of interactions. By interactions, I mean instances where individual autophysiology of another individual. So you have this huge list of interactions. But still you will have to figure out from this haystack the needle interactions, right? Interactions that are actually critical for community function. And then I'll give you a hint of how to genetically manipulate species or alter abiotic environment such that in the end you can modify community function. Alternatively, as that gentleman suggested, you might be able to perform artificial selection experiment. That is you grow up many copies of that community, allow cells to grow up, allow them to accumulate mutations. And then you will select among this population of communities, those communities with high activity and then only allow these to reproduce. So how would you reproduce a community, right? Community is not a cell. So you could, for example, split a community into sub, you know, into sub or baby or newborn communities and allow them to grow and repeat the cycles again and again. Conventional wisdom says you get what you select for. But is that true? I want to show you that it is often not true. But if you're smart about how to do that experiment, you could in fact probably get that to work for you. So going back, but before we dive into details, I want to actually take one step back and introduce first the selection of individual cells and trying to think about how selection on cell level different from community level, right? So I want to really ask the folks on cells and the communities, what's the difference? So by cells I hear actually in the talk I will only focus on asexual microbes. So imagine I have a population of cells, they all express JFP, right? And suppose I want the fastest growing cells. What would I do? I would grow up the culture, take out the sample and subculture them and inoculate them into fresh medium. I would propagate, that is propagate this population again and again. And by definition almost, right? The fastest growing cells will take over. And this is what I call natural selection, right? The survival of the fastest growers. Now imagine that actually what you want are the brightest cells. Because expression of JFP usually inflicts a fitness cost. So those cells, the bright cells tend to be slow growing. So how would you select them? Obviously you cannot use this anymore, right? So instead you would use artificial selection. So what we do that you would grow populations of cells up, you will select the brightest cells using for example flow of solder. And then only allow those cells to grow and that's artificial selection. In order for selection to work, you need three key elements. First is variation and you need selection and you need heredity. So variation, mutations can create variations in genotypes and sphenotypes. Selection in artificial selection experiment is done artificially by flow solder. And the heredity, it's also satisfied in this kind of experiments because bright cells tend to give birth to bright cells saving for those rare events where mutations actually break this heredity. So this kind of artificial selection experiments on cells have been done numerous times with great success. So how might that work for communities of cells from different species? So community selection has been done but not many times, only a few times. And I want to present you with example, a typical example. So in this example, for example, researchers are interested in isolating communities that were degraded industrial pollutant shown here as brown color. So what they did is they went to a pond and they isolated a bunch of microbes and mixed it up and inoculated it into 15 tubes. So these I would call newborn communities. Even though we use newborns to usually meet individuals but here I mean communities. And then after four days of maturation time, the cells would grow up and they would start degrading industrial pollutant. So then I would call the last stage adult communities. So bearing in mind that the maturation period of time was somewhat arbitrarily selected. So when I say adulthood, I don't exactly mean some special physiological states such as stationery phase. So among the 15 adult communities, those experimentalists picked three top performing communities with the lightest color and mixed them. And then allow these to reproduce by splitting them back into 15 newborn communities.  Of course, as a control, they randomly picked three adult communities and then reproduce again by splitting. So this is the control. So out of four control experiments, the pollutant degrading activity increased into and decreased into. In all the four selection experiments, the pollutant degradation activity increased in three and decreased in one. So of course the number is too small to tell, right? This experiment is very interesting but even if it had worked, we would not know the mechanisms. First, we do not know whether pollutant degradation is a community function or whether it can be done just by a single species. Second, which is actually quite key point, which they would not know, we would not know whether the selection acted on species or genotypes of species. And I would argue that this distinction is important because if a selection had worked on species like the enrichment culture kind of experiment, then you would expect probably the community function would improve very fast initially as the right number of, the right types of species are concentrated and the species that are not good for the activity function is discarded. But then because there's no influx, continuous influx of species, we would expect that community function would level off also very quickly. In contrast, if a selection worked on genotypes, we would imagine that mutations would create new genotypes and that might allow community function to continuously improve. And this kind of studies would not reveal that. And the third point, which is also a very critical point is that we do not know whether community level selection is in fact needed. Because you can imagine the microbes might use the pollutant as carbon source. So if they grow faster, they would degrade the pollutant faster. And in that sense, you don't actually need the community selection. You just natural selection would already generate exactly the same result. So we want to understand this process better. And I remember going to an evolutionary biology meeting asking three well-respected evolutionary biologists. I suppose I wanted to experiment like this. I would need to know many details. For example, I would want to know how many communities I have to start with, I have to select from to ask them that question. So the three answers are the following. The first answer was that is a great question. The second answer was tens of communities, just like this one. And the third answer was millions of communities because the more the better. Because very little is known about how to do this type of experiments. So we were sort of forced into doing some theory first, you know, after our lab is mainly experimental lab. So we want to consider this actually from theoretical point of view, hoping that what we learned in theory would help us design better or smarter experiments. By way, I mean Li-Shea, a very talented postdoc in my lab. And of course myself is also involved. So the system we are interested in, first of all, we have no experimental data yet, right? So this is just all these things I will show you are computational results. So the system we are studying is a two species community comprising helper H and the manufacturer M. The manufacturer makes a product which I call P. The helper but not manufacturer can digest cellulose on agricultural waste. And as helper grows on cellulose, it releases byproduct, such as acetate or whatsoever. And this byproduct happens to be the sole carbon source for manufacture. And the manufacturer would devote a fraction of the cellular resource to make product. And Fp here is the most important parameter here. F means the fraction of manufacturer growth. And P is subscript for standing for the product P. And the remaining one minus Fp is then used for manufacture to grow. So these two species are enclosed in artificial boundary, community boundary, such as a microtider well. And in addition, the two species would compete for a shared resource such as nitrogen. So for this community, right? So we know that the helper will just grow, right? Because it has cellulose waste, it has shared resource, it will just grow. The question is that whether two species can coexist. So manufacturer initially cannot grow, right? Because they have to wait for the byproduct. But if when the byproduct has accumulated to high enough level, manufacturer actually catches up in a sense that it actually grows faster than helper, then there's a chance that two species would coexist. And in fact, these kind of communities have been engineered. And then when these two species grow, they will depleted resource and growth will cease and the product will not be made, will cease to be made at the end. And these, in fact, in this kind of communities, the species composition can be stable in the sense that if you start the two species at different ratios, the ratios will converge to a steady state level. So now we're comforting thought that we have a community which has, as I said, has been demonstrated in the laboratory. We have two species community that can stability coexist. Then we can define community function. So here I define community function as a following. We have a newborn community with helper manufacturer and then we give it cellulose in excess always. And then we give it a fixed amount of resource. After maturation time T, the cells will grow and they will consume resource and make product shown here as magenta. So we define community function Pt as a total amount of product P at maturation time T. Of course, there's a lot of thinking going into the choice of maturation time T, right? It's experimentalist. I don't want to maturation time T to be too short, right? If it's too short, it's a waste of this resource. And also just mutate, it's very little chance for mutations to accumulate. At the same time, we also don't want maturation time to be too long. Because if it's too long, the cells will hit stationary phase and it will get into very complex physiological changes as Professor Huang just talked about. So we chose maturation time T such that the majority but not all resource has been consumed. Just because these are the considerations as I as experimentalist would entertain. And now what affects community function? Of course, initial conditions, right? The initial numbers of helpers and manufacturers in the community, the resource. And also there are parameters and by parameters for biology audience, they're just phenotypes of cells that we can actually measure in the laboratory. For example, the growth phenotype of manufacturer includes the maximum growth rate of manufacturer of helpers and helpers affinity for resource. Here we don't consider cellulose because it's present in excess. And for manufacturer, it's maximum growth rate of manufacturer, manufacturers affinity for the byproduct and for the shared resource. And then of course, the manufacturers FP and that's a very critical parameter because that is involved both in growth and in the production of the product. The other parameters that we consider not changing evolutionary, not capable of changing dramatically. For example, the release rate of byproduct as a function of growth rate. And also the conversion factor that converts the resource to cells. So then we have these six changing parameters, right? So it turns out that in our system, improving cell growth, that is you improve the maximum growth rate, you improve the affinity of cells for resources that actually improves community function. In single or in combinations. This doesn't have to be true in general, but it happens to be in our case, it is true. And the parameter range we chose for this model is based on yeast or it based on the body is saccharomycesae reese. So this turns out to be very convenient because that means that we can fix the other five parameters to the biological maximum. And only consider one parameter change FP. So now if we fix the five parameters and ask what FP would give you the maximum community function, we get this. So maximum community function is achieved at the intermediate level of FP. And that's very intuitively, it's very intuitive because if FP is zero, right? So the no product is made. They devote nothing to making product. But if FP is one, they devote all its resource, all the manufacturer devote all the resource to make product, it won't grow. Then it would be outcompeted by helper. So then how might we experimentally realize that optimal state? Bioengineer would say, well, why don't we pre-optimize the helper and the manufacturer individually in the sense that it will make helper grow as fast as it can so that it makes a lot of byproducts. We can also make the manufacturer make a lot of products. So let's try that. Let's go back to the previous slide because as I've just shown you that for helper, if you increase the cell growth, you actually improve community function. So we can just simply do a natural selection experiment on helper, that is we just grow it and do serial pathaging it in the presence of the shared resource. But for manufacturer, it's a lot more tricky, right? Because we cannot do natural selection because natural selection would favor zero FP, non-producers. So one might think, okay, why don't we do artificial selection on manufacturer based on its ability to make this product? So experimentally you can do this, right? And there's a large literature on group selection, that is you select groups of cells of the same species. There's a large literature, so I do not have time to cover it. Suffice to say, from literature, it seems like the best way of doing such experiment is that you put a single M cell, one each, into microtider wells, right? And you give it resource and give it by product. And you let it grow for mature maturation time T and look at which well has the highest amount of product. And you only allow those manufacturers to reproduce. Sure. Oh absolutely, I agree with you, yes. Yes, but in our parameter range, this happens to be the case. It happens to be, that's true, that's a very good point. It doesn't have to be. And so in this case, so we could, but then the question is how much byproduct would you add to a well, right? So you could, ideally you wanted the byproduct dynamics to be like what's happening in the community initially low and as helper goes up, it goes up. But it's very hard to do experimentally. So for simplicity, we'll just add excess amount of byproduct. So it turns out for this kind of group level selection, artificial selection or M, we get that the optimal FP also is at a curse at the intermediate level for exactly the same reason, right? For if you have zero FP, the manufacturers don't make any product. You don't have zero any product. But if FP goes one, the single cell is not dividing and might even die. So you have this low product. But we noticed that the FP, optimal for monoculture is below that's optimal for community. And that actually is not surprising in the sense that in monoculture selection experiment, we're giving it excess byproduct, which is in contrast in community where the byproduct is provided by the helper. So now comes to the first major conclusion of this talk, which is that you could pre-optimize each individual species, but the monoculture optimal may not equal to community optimal. So now the question becomes this, right? So if we start here, the monoculture optimized state, we know that natural selection would produce will decrease FP to zero. So the question is how might we do community level selection such that we will push FP up against natural selection to that which is optimal for community function. So now I will go through the selection process. So we start with newborn communities. Of course, we can start with hundreds or millions. The more communities you have, the more variations you can select from. But also the problem is that the experiment becomes much more expensive. And here we have, we choose 100 communities and each community has about 100 helper plus manufacturer. And we choose number 100 cells so that we don't accidentally lose one species. And the ratio is about one to one, but the ratio doesn't really matter because it doesn't matter which ratio you start from. They converge to the steady state ratio, which is around one to one. And then we give it excess cellulose and affix the amount of resource. And we wait for maturation time T until it's the end of that. And so we, as I told you before, the maturation time T is such that the resource, the majority of the resource is used, but not all of it is used. And we put enough resource such that during this process, the total population will increase by about 100 fold. And here during the maturation, mutations will occur. And I said because we have fixed the other five parameters to the biological maximum. So the mutations can only happen in FP, the fraction of manufacturer growth devoted to making product. So we pick the mutation rate, so mutations will occur with a probability determined by mutation rate. And the mutation rate is the highest that has been observed among the mutators. So it's still relevant, it's still realistic. We do this to speed up our computation. But we have also tried it with a lower mutation rate and the same conclusion holds. Now the phenotype, how would the mutation change the phenotype? We base our parameter choice on a recent study on extensive mutagenesis on JFP. So what they found is that the vast majority of mutations are neutral. And a small fraction of mutations would make a non-mutants that is make FP to zero. And then the rest of mutations will make small changes, right? Plus and minus a few percent of the FP. So then we can, so out of these, out of these communities with highest function, we will allow that to reproduce in a sense that we will split it into newborn communities of about, on average, about 100 total cells. And if there's not enough communities, we'll go to the second highest performer and continue this process until we recover a total of 100 communities with each with about 100 total cells. And this process repeats, the cycle repeats. So let's consider the three key elements here, right? So selection here is very similar to selection on individual cells, it's artificial selection. We pick whichever community that has highest function. So variation here, mutations will introduce variations among individuals and thus variations among communities. But there are additional sources of variations. During reproduction, each newborn community will sample a subset of the genotypes of the parent adult community. As a result, these newborn communities will look different from each other, that's variation. Moreover, even though we are targeting on average 100 total cells, some communities, some newborn communities would happen to have 80 cells and some would happen to have 130 cells. And this would make all these newborn communities look different from each other and also from the newborn of the last cycle. And furthermore, there's another element that might compromise heredity, that is due immaturation. A genotype frequency can change rather rapidly, making those ones look different from the newborn of the last cycle. And that's my definition of heredity, the similarity of newborns from one cycle to the next. So the question is that will heredity be strong enough for community-level selection to work? I'll show you some results. So first is random. Random selection, we randomly pick adult communities to reproduce. And not surprisingly, the community function declined very rapidly to zero. It's because making product has a fitness cost. And in the absence of community selection, the non-producers are favored. Now if we apply community selection, we see this. So the three blue colors are three independent expanse. We see the community functions fluctuate around the starting point marked here by the magenta cross. It's better than the control, because it doesn't go to zero. But these are nowhere close even to a theoretical optimal. Why is that? Why doesn't work? So we looked to see within one selection cycle, how does community function correlate with various properties of newborn communities? The reason we look at the newborn communities is because the mutations occur rarely, and also the frequency, because it's a small change in fitness in FP and fitness, so they actually mutants, even if they arise during maturation. They don't, the frequency does not increase that rapidly. And thus the community function at adulthood is almost completely determined by the newborn state. So first we look whether that's correlated with FP, because that's the thing we want to select on. We see very little correlation, right? So these two dots are the two newborn communities that when reach adulthood being selected, because these two dots have the highest community function. But if you look at the average FP, average among manufacturers, it's actually below average. Now if we look at, if we correlate, if we see that, we see that community function instead is highly correlated with the total population size of newborn, because these two communities, it's identical to these two, happen to have higher number of total cells in the newborn state. And these also have a higher fraction of helpers. So why would this correlation exist? If we look at the dynamics, it becomes clear. Remember I told you that we chose maturation time T such that the majority, but not all resource has been depleted to avoid the stationary phase. So during this maturation time, the cells will grow and the product will be made. And this is for average community. But by chance, some newborn communities could start with higher number of total population, of total cells. And these ones will be able to deplete the resource more thoroughly and make more products. Even though the lucky community has exactly the same Fp as the average community. And for helpers, the fraction helpers exactly the same reason. Because if you happen to sample more helpers, the manufacturers will experience less lag and then they will be able to quickly grow, more quickly grow and deplete resource more thoroughly and make more product. So a prediction from this kind of reasoning is that if we fix the number of helpers and the manufacturers in each newborn community, this will work. The community selection will work. This, in fact, can be done experimentally by sorting the helpers and the manufacturers into each newborn community. And when we try that, when we fix the number of helpers and the manufacturers in newborns, we indeed see that the community selection now works, at least in theory. A second possibility is that, going back to this, is that we could, for example, extend the maturation time just by a little bit, such that those average communities and unlucky communities would have time to catch up to those lucky communities in dashed line. And this would allow all these communities with the same Fp to have exactly the same function. And we tried that. We extended the maturation time 20% longer and that also allowed the community selection to work effectively. Although a cautionary note is that, then we will need to deal with heterogeneity introduced by different duration, different lengths of duration in stationary phase, which might also create experimental complications. So to summarize my talk, I've shown you two points. First, that we might want to pre-optimize member species before embarking on community function because that sometimes can help. Although a monoculture optimal may not equal to community optimal. And the second, we see that large non-heritable variations can arise during reproduction. For example, when newborns form, the numbers of helper's manufacturers can dramatically influence community function. And thus making the selection of Fp much harder. That is, you have much higher noise compared to signal. That is, you have much higher level of non-heritable variations compared to heritable variations, which is mediated by Fp. And these kind of large non-heritable variations should be minimized for selection of community function to work. So with this kind of theoretical framework, we want to ask the future direction to ask how numbers of communities or the total population size in newborn, the mutation rate, and the selection strength, why all these factors would actually affect one of these three aspects. How would these changes in these various experimental parameters affect the rate of improvement of community function? So with that, I want to thank the organizers for putting together this wonderful symposium. And I welcome your questions, thank you. Questions? Yes, Chris. Well, that was fantastic, both in terms of content and in terms of style. It seems, so the second one on your list, the total population size of the newborn, I'm gonna put a vote there. Have you played around with that at all? Because it seems like you've got this inherent conflict if you've got producers with different fraction going to product, those that make more product will be, that's a good group trait, but it's a bad individual trait because they grow more slowly. And so, if you dilute much smaller, and it's okay if occasionally some of your populations even go extinct because they don't have one of the two, but then you could purify those that have a high production of product and have no low product. I see your point, but it's more complex than that. Because if you manufacture, grow, you have more producers, even though each producer is producing less. That's why for the monoculture, it's also intermediate. FPC, you see what I'm saying? Because a single cell just can't do, even if you spend all your effort making product. It's not as, see, as exponential growth of manufacture and each of them spent less in making product. Sorry, I wasn't quite entirely clear. It won't monotonically select for higher and higher because obviously it can't go to 0.99 or whatever. But you should, in very few cycles, be able, whatever that intermediate optimum is, 0.5 or whatever the optimum is, I think you could really quickly purify for that number, whatever number best suits the otherwise corners. In monoculture selection. No, with group level selection, but going to smaller bottlenecks. Smaller bottlenecks, you mean model, I mean, M selection or M, group of M. Selection, but bottleneck much more strongly so that whatever intermediate level of FP is optimal for this group selective trade, I think you could get there rather quickly. More quickly than that. Yeah. That's exactly, you have exactly the right idea, right? Because I didn't have time to cover group level selection, right? Because the newborn size is critical for the rate of evolution, right? The rate of improvement. That's why we want to try total population size in newborn. That's the second item. You're exactly right. That's right. One question here. I'm not sure if this model can be generalized for any product because, you know, like if the product is obtained by a chromosomal gene or a Blasmid gene because the Blasmids are not stable, but chromosomes are stable, so. Yeah, that's a very good point. That's a very good point. Because that's a no-mutant I'm talking about, where you can lose plasmid, right? So the rate, the mutation, we actually try, you know, yeah, try different mutation rate spectrum, right? So if it's a plasmid loss, it's a much higher no-mutant set. We have tried that. That actually does affect us quite dramatically in the sense that whether you can purify away those non-producers from the community. That's a very good point. We have a question here. Can you go back to the slide when you showed P versus T plot? So this is something interesting, the second and the third one. It's like of, it shows some cutoff and in time, and after that it booms, right? That's the time where we harvest the communities and do selection. That's like arbitrary determinant, it's experiments that you have to choose a time at which you will do the selection, right? So this is the longer, sorry, I should have marked, it's the longer maturation time. You extend it by 20%, that's about 20% extension maturation time, such that the unlucky communities, the average communities would catch up with the, I didn't explain that well, most likely, right? So this is average, this is average community. I should have shown one maybe it's of a less lucky community, right? They would grow even less. So then you would have, even if these communities have identical average FP, they would actually reach very different levels. And when you harvest them, if you harvest them at this point, they will look very different. And you might pick this one, even if this FP is smaller than the other one. So that's what happened earlier. So you pick this one, even though this has very low, like a lot of non-producers, but just because it happened to have more cells, it gets picked. And the more cells is not heritable, because the next round you may not have more cells. So if we extend the maturation time just by bit, by little bit, right? So all communities, regardless of the stochastic fluctuation at the beginning, right, they will all in the end reach the same point if they have the same FP. So then if you have higher FP and a higher, you get selected. So that's why once we extended the maturation time T, or not considering the physiological changes associated with stationary phase, right? Then this really helps the community on function selection. Thank you very much. Thank you. Thank you.