Hi, everyone. Thank you for coming, you know, almost last session on the last day, so I appreciate it. Thank you. My name is Aaron Levy, and today I'm here to talk about kubectl apply and the dark art of declarative object management. If any of you saw Brian Grant's talk earlier this morning, apparently it's kubectl is the correct way of saying it. I have a habit of saying kubectl, so I will do my best to say kubectl through this presentation. But let's get started. So why the dark art?  But also because kubectl apply may not actually behave how you expect it to. My original understanding of kubectl apply behavior was essentially, OK, it's taking configuration that I have locally, and it's applying it to the cluster. And that was about it. And if you look at the help text of the apply command, it says something similar. Apply configuration to a resource. This resource will be created if it doesn't exist yet. Perfect, talks over, there isn't a whole lot else to go there. But in actuality, there's a ton of behavior underneath kubectl apply, and I personally didn't really understand most of it. And so putting the abstract together for this talk, there was a ton of stuff that I wanted to get into. And then what I realized in putting this presentation together is that there's just actually too much to cover in 30 minutes. So I'll do my best, but there's going to be some homework at the end to dig further in. So when I started using apply more heavily, some of the things that I was seeing was inconsistent behavior across various object types. I was seeing inconsistent behavior across various fields within objects, and then kind of unexpected and somewhat vague errors. Now to be fair, most of these were my fault, because I didn't actually understand the underlying behavior of apply and how to use it correctly. And so I actually began digging into it deeper, because I wanted to be able to predict the outcome of using this command, and I clearly wasn't able to. So what I wanted to know was how are fields actually calculated? How are the patches themselves generated? And then how do I predict what the final object will actually look like? And then is this functionality client side? Is it server side? Is it a little bit of both? So what does kubectl apply actually do? This I kind of pulled and paraphrased from some other documentation. This isn't actually the help text for the command. But when invoked, it does a three-way diff between the previous configuration that you had, the input that you're providing, and the current configuration of the object itself. And then it uses those three states to determine how to modify the resource. And then it applies those changes and doesn't overwrite other changes to properties that you haven't specified. So we'll dig into this a bit more. So those three states that I just mentioned that we're calculating kind of what we're going to do, the first is the object configuration file. And you could think of this as, if you have a git checkout of your actual object manifests, that you're going to operate on locally and then run kubectl apply on those actual files. Then you have your live object configuration. This is the state of the object as it exists in your cluster. So if you were to say kubectl get a deployment, whatever you see down, that's the live object, what we're talking about. And then the last applied configuration. This is the state that the last time you invoked apply, what it looked like at that time. And between these three states, that's what you use to kind of compute what's actually going to happen when you're running this. So let's start off with, if you're going to create an object, pretty straightforward, kubectl apply, filename, my simple application object. And this does what we expect, which it creates the object in the cluster, but it also sets a special annotation on the object called the last applied configuration. And the contents of this are actually set to match what you're applying to the cluster. And this is used to later compute whether an action is going to add a field or update a field or delete a field because you're tracking what did I do before and then what am I doing now and I'm able to determine those new states. So if we look at an example of this, our base object, a pretty simple deployment. If we were to run kubectl apply on this, what would actually end up in the live object in the cluster is that it would inject that state that you're pushing into the cluster into that special annotation, into that last applied configuration. And then the rest of your object exists normally. So let's go over an example of adding a field to an object. So we have those three states that we talked about. We have the local object. This is like your get check out of your manifest. You have your last applied state. This is an annotation that we've kind of pulled out just to make it easier to describe. And this is part of the live object itself. And then the live object is just the rest of that manifest. And so between these three states, we're going to determine the actions that we're going to take. And in this case, we decided, well, we already have this object in the cluster in the live object, but we want to add a new field to it. We want to add the min ready seconds to it. And so we're going to, on our local copy of that manifest, we're going to add that field. We're going to run kubectl apply. And then it's going to determine what action we're going to take based on these other states. And so you see, well, it exists in my local configuration, but it doesn't exist the last time I tried to apply it and it doesn't exist in the live configuration. So the action that I'm actually going to take here is I want to add that field. And so we see, after we execute this, that first of all, the live object reflects what we wanted it to. We've said we want to add this field. And then last applied is now set to what we just pushed into the cluster so that the next time we do an action, we're able to compute the next state that we want. And so we can see that from an example of now we want to actually remove a field. So in this case, we see that in our live object, we still have that field that we added previously, but now we decide actually we don't want that field in it. So what we do is we modify our local object, our checkout of our manifest, and we say, all right, actually, let's delete that field from it. And now when we run kubectl apply, what it's going to do is it's going to look and say, well, it doesn't exist in my local state, but it does exist in the live state and the last time I ran apply, it existed there as well. And so this is actually a deletion event. It used to exist, now it doesn't, let's get rid of it. And so we can see after running it, all that happens is the live object that field is removed. The last applied annotation is updated to just match what we just pushed into the cluster. So we can create objects with apply, we can add and remove fields, what else? Why do we want to use apply? So another really powerful aspect of using apply is the ability to kind of preserve and enforce different fields. And so when I say enforce, that means that your local object configuration, the fields that you're putting in there, the things that you're populating, you're essentially saying, these are things that I want to enforce when I run apply. I want to set them to these values. But you can also emit certain fields from that and not have them controlled. So you could apply the object and not update what's on your live object. And so that allows those other fields to potentially be controlled by other aspects of the system. A really good example of this is autoscaling components. So an example would be, I want to be able to update things about my object. I want to change labels on it. I want to change the containers that are inside of it. But I want an autoscaler based on some metrics to be scaling this up and down. So when I run apply, I don't want to know how many copies of it are running. I just want something else to be managing that. And so that's an example of how we would say, I want to enforce certain fields, but I actually want to ignore and preserve others. So let's go over an example of this. So what we see is in our live object, replicas actually exists within the object. And we say we have three replicas of this, but that same field doesn't exist in our local object and it doesn't exist in the last applied annotation. So whenever we've pushed updates to this object, we've said nothing about replicas because we don't want to manage it as part of this piece of object management. We want something else to deal with it. So then let's say that the autoscaler is just running kube control scale commands separately from us. And so we say, scale my app deployment up to replicas, the count to five. So we just went from three to five. Still our local object and the last applied annotation don't actually change because this is just something that we're essentially preserving and ignoring on the live object when we're calculating any kind of patches. So then let's say later, I want to deploy a new version of my application. And so I check out my copy of these objects and I say, well, I want to deploy version two of this. So I update my local copy and I'm gonna run kube control apply. And what ends up happening is that in my live object, that field is updated and I don't touch the replicas. I don't need to know about them. It doesn't matter to me in this workflow. I want the autoscaler to be dealing with that. So we've seen how kube control apply can add, update and remove and also preserve fields, enforce fields. So how is this stuff being calculated? How are we deciding that some fields should be left alone and others should be updated? Some should be cleared. There's several ways the merge actually takes place. So for primitive values, things like strings, integers, booleans, example fields of this would be like the image field as a string or the replicas as an integer. The actions that we can take on that are essentially either clear or replace it. For things like maps and objects, examples of these would be like labels or metadata or maybe the deployment spec. The action on this is actually to merge the elements or to merge the subfields of the objects themselves. And then lastly, we have lists. And in this case, you might have in a pod a list of containers or you might have a list of ports or you might have a list of arguments provided to a container. And the action here actually depends quite a bit. So the other two are decently well understood but I want to jump into lists because this can get a bit more complex. So several strategies. One is just that the list gets replaced, the entire list just gets replaced. And another is that you can actually merge the elements of a list of objects and we'll go into both of these. So another example, this is a list of primitive values. Just the args that we're passing to a container. And in this case, all three of our states are slightly different. Our local object, our desired state that we're going to be pushing into the cluster says the argument should be a and c. But the live object actually has a, b and d and the last time we applied this, it was a and b. When we run kubectl apply, what's going to happen is we're going to take our desired state, that local config and it's actually just going to replace args wholesale. There is no merging, it's not we're going to take the live state and mix them together, it just replaces it completely. So that's an example of just that one option. Now what about if we have a list of more complex objects and how do we can merge them together? An example of this would be a list of containers. So containers being a more complex object. And our goal in this case, in this local object we can see is that we want to be able to add a sidecar container to our existing application. So initially we just had just the app itself as one container and we can see that by the last time we applied this configuration, this last applied, the only container that's listed as app. The live object, but we see that same thing. App exists there. We also see another field has been added kind of out of band. This is one of those fields where we're not managing it in our object configuration, but it exists there in live. And now we're updating to a new desired state. So our local object, we said, all right, we want this new sidecar container to exist. So when we apply that, what we actually see is that the sidecar container is added to our live object as we intended, but also args is preserved, which didn't exist in our local config. And so what you see there is we're not simply taking the entire list of containers and then applying it and then replacing it on the live object. We're actually walking into each of those objects and updating the individual elements and updating the individual fields and merging them together. So let's take a little bit more complex example. So we just saw that happen with containers, but let's look at that for a list of tolerations. So again, a list of complex objects we should expect that we would be able to merge these as an action. So we're gonna step through this kind of piece by piece into what are the expected actions that we would take by evaluating these three different states. So the first state being the local object. This is, we are going to try and push some desired state into the cluster and what's going to happen there. So we see there's a toleration with a key of Baz. And if we look at the last time we applied this configuration to the object, it didn't exist there. And if we look at the live object, it also doesn't exist there. So my expected outcome from this is we should add that toleration. That's the action that should come out of this. Then next, if we look at the last applied, the last time we ran this, we actually told it that we wanted a toleration with a key of foo. And we also see that that still does exist in the live configuration, but that no longer exists in our desired local object configuration. So that translates to me as, okay, actually we should be deleting this. It used to exist, we used to apply it, we no longer do, let's get rid of it. And then lastly, we have this key of bar that exists in the live object. And this isn't specified in our local config. So again, it's not something that we want to manage or enforce. And so essentially we're just going to ignore that value and it should just still exist. So my expected outcome of this would be that we have two tolerations. We have a toleration for a key of bar and a toleration of Baz. We saw this with containers, this should be my expected outcome of merging more complex objects. But instead what happens is when we run apply, it actually just sets the live state to exactly what we had in our local config. So it actually does a replacement, it's not merging the objects. And then our last applied is also updated as well.  We saw the exact, completely different behavior on something similar. So I wanna briefly go over the ways that patches are calculated here. So the two that apply actually makes use of our JSON merge patch, which is an actual spec you can go read about the exact behavior of it. But in this case, it's something called strategic merge patch, which is custom to Kubernetes and it deals with handling how to merge lists of complex objects when you're running apply. So with a strategic merge patch, you can treat a list much like a map and you can merge specific elements of that list based on a predefined patch merge key. And then based on that key, you can individual elements can either be added or update or removed. And this key itself is actually defined on a per field basis and this exists in the Kubernetes source code. So generally you have to look this up directly. You can look in the source code itself to find it or in the API reference, this is also bubbled up, you'll see these patch merge keys and I'll show an example of this. So if we were to dig into the code and we were to look at, this is just a stub of what the pod spec looks like. We would see that as part of the pod spec, we have a list of containers and there's this metadata associated with it that says the patch merge key is name. And so what we saw before was that we had these two containers. One of the containers had a name of app and one of the containers had a name of sidecar. And so we were able to enter the list and merge and look at the states and say, well the live object has a container with name app and my local configuration has a name of app. Let's merge those objects because they're the same one even though they're a list. But if we look at tolerations, it doesn't have that metadata. And so we know that, well it doesn't know how to inspect the complex object, it's just going to replace the entire list wholesale. But if we look at another one like volumes, we also again see that metadata added. So we would know, well, if we wanted to update volumes, we know they would be merged together, it wouldn't just be replaced. And this is important to know because it's changing the behavior of what your local configuration should be. In one case, you're going to always need to specify every toleration that you want and it has to be managed wholesale. But in other cases, you could have some containers be managed yourself and some containers managed maybe by a different component in the system. And same with volumes. And it takes a little bit of digging because you have to either go into the code or you have to dig through the API reference docs. So a little bit of complexity here in like the actual behaviors not super consistent in some cases. And there's more complexity underneath this. So another one that I want to mention is actually defaulting fields of objects. So an example of this is a deployment object, for example, even though you might have a very simple manifest itself, when you apply that object to the cluster, the API server is actually going to default certain fields for you. And so if you don't specify replicas, then it's going to default to a count of one. If you don't specify an update strategy, it's going to default to a rolling update strategy. And in some cases, these defaulting values can actually cause some problems when you're interacting with that object with apply. So an example of this is the local objects, pretty simple, we don't define a replica, we don't define a update strategy, but when we actually apply this into the cluster, those fields are created, so they're defaulted. So we actually will see in the live object, if we were to just say, who control get replicas of one, and then the strategy is going to be rolling update. And then as part of rolling update, there's more subfields that are defaulted like max surge and max unavailable. This becomes problematic because let's say that at some point in time, you say, well, I want to change what the update strategy is. I want to change it to recreate instead of rolling update. So the process would be, well, I can just add that field to my local configuration, say that's my desired state, apply it to the cluster, and we should be good. The problem here is actually that there's other fields that are incompatible that still exist within the manifest. So even though we're changing the type, there's other subfields like max surge and max unavailable and the rolling update key itself that haven't changed. And so you would actually, this would fail if you were to try and apply this configuration. So it can kind of cause some problems and it takes them a little bit of foresight and thinking to be like, well, if I might want to manage these fields, I should probably explicitly define them rather than relying on defaulted fields. So at this point, we should have a pretty good understanding of the basic apply behavior, but there's some other considerations of mixing apply behavior with other object management styles. So coming back to this example of the MyApp deployment, in this case, we're gonna have two users that are interacting with this object. And one thing I just want to note is that we're not gonna specify the replicas in this. Again, we're gonna say an autoscaler is gonna manage that. We don't want it as part of our local configuration. So the first user, they're going to initially create this application, kubectl apply creates it. Over time, it might be scaled up manually. It might be scaled up by an autoscaler kubectl scale MyApp, set the replicas to three. Later, we want to bump it to a new version and so we get our checkout, we change the image from 010 to 020 and then we push that into the cluster. Workflow works fine, everything's great. Later, a second user needs to add a volume, but for whatever reason they don't have the same local checkout. And they're just like, well, it's a quick change. I just need to make this right now. I'm just gonna get a live copy of the object itself. It's what the current state is, I may as well just grab it. So you say kubectl get deployment, we output it to a local file and then we edit that file directly. And we add the volumes and then user two things, Aaron said use apply. So I'm gonna apply that manifest to the cluster. Everything works fine. It has a new volume, nothing changed. Later, let's say a week from then, user ones needs to bump the image version again. They check out their manifest, they change the image version, they commit it, they apply it to the cluster. What just happened is that user one inadvertently reset the replicas back down to one and they removed the volume and they removed other fields as well. So if we look at how that actually happened, what we're looking at is this last applied, this middle column, is essentially the outcome of what user two did. And what they did is they pulled a live copy of the object which contained all fields, whether they were originally specified or not. So it contained replicas, it contained the volumes, it contained the update strategy, everything. They pulled that local, they made their edits and then they set apply, which means that all of those fields now exist in the last applied annotation. So now they're managed, now they're enforced. So now when user one comes back and this is their view, essentially, their local object doesn't have any of those fields. It doesn't specify replicas, it doesn't specify the volume and they just say apply. And so these all turn into deletion events because they say, well, the last time you applied this, a volume was present, a rolling update was present, a replica count was present and now they're not, so we should delete all those fields. When you delete the replica field, it defaults back to one, we delete the volumes that were added by user two and none of this was intended. So the important thing to note here is user one's workflow didn't change at all. They did the exact same thing every single time. They had a source config, they modified it and they used apply. And what happened though is even though their workflow didn't change, they didn't get the expected outcome. And you could think of user one as actually being a CI CD system. There is no behavior change. It is told this is the tag that you should check out and then you should apply those manifests to the cluster. But inadvertently another user has actually changed that workflow. So it's pretty important to kind of consider that mixing these styles of object management can lead to these unintended outcomes. So, brief list of recommendations based on some of these things. One, in general, you probably don't wanna actually define replicas as part of your objects because it's probably better managed separately. When you're making updates to your object, you probably don't want it to know how many replicas are actually running in the cluster. There's times where maybe it's gonna be three copies, it's never going to change, that's fine. But think about this from the perspective of like a CI CD system. You want it to be pushing out image updates or label updates or something like that. The manifest as a whole. You don't want it having to ask the cluster, well, how many replicas do you have right now so that I can update this local manifest so that when I push it back to the cluster, that's preserved. And this also goes to other fields that you might want externally managed. There's some other ones where it's like the load balancer IP, for example, on a load balancer type service. This isn't something that you are managing. This is something that Cloud Provider Code is managing. Another thing would be explicitly defining the defaulting fields or some of them. And so if you think that at a later time you might want to change the update strategy, then put that in the manifest that you're managing so that when you do want to change it, you can change all of the fields at once. And then lastly, using apply consistently and using it from the same source configs. And so this is that kind of user one, user two model where you had two different users that were applying two different base configs with two different views of the world which change each other's workflows. And just in general mixing kind of imperative commands like create and edit and set, these can lead to unintended consequences unless you're really sure of what you're doing. So looking into the actual behavior and knowing it's okay that I set this particular field because I know it's not going to be managed declaratively in this configuration that I have locally. And then I know time-wise, which actually I talked way faster this time, but things we didn't get to cover but I do want to briefly go over is that there's also kubectl apply prune. And this gets into declarative object deletion itself. So what we're talking about here is managing objects themselves, but you may also want to manage sets of objects. And what this allows you to do is you could have, let's say a directory that contained object A and object B and object C, and you could say kubectl apply prune all of those. And as part of the process, it's going to create and also try and delete, but first it'll create all A, B and C, those objects. Later you decide, well, object C is deprecated, I want it removed from the cluster.  You just say kubectl apply prune and it looks at the state of the cluster and the live state of the cluster and it says, well, I see this object C and I don't see it in the local configuration. So that's a deletion event. But this is something that you should be careful about using. Definitely look deeply into its behavior because you could inadvertently delete a whole bunch of objects that you actually don't want to. Another really interesting one is you can set the overwrite flag to false when you're running kubectl apply. So the typical behavior is to set this to true and that means that your generally desired outcome is that your local configuration state, the local file, is what you want to end up in your live object. But you can actually have it calculate whether this might have been a conflict, that the live changed underneath you from the state of the last time that you applied from the state that you have locally and it can report back. In some cases that's nice because it's kind of a signal that, hey wait, someone should go look at this because this changed in an unknown way. And then also another one is actually interacting with this last applied configuration annotation. Because it's an annotation on an object and it's just a serialized blob interacting with it can kind of be a pain. So there's some helper commands, sub commands of apply so that you can view, set, or edit that annotation. Again, be aware that when you're changing this annotation you're changing behavior the next time you apply to this. And then similarly the patch command itself, the underlying functionality of apply is that it's calculating patches and applying them against objects in the cluster. You can also do that yourself. You can actually formulate a patch and apply it against the object itself outside of apply as well. So I did have a pop quiz to see if we actually understood the three different states and how they'd go through but instead I'll just give homework. The first link is the most important. This goes into everything that I just talked about plus a lot more depth plus different styles of object management. So the imperative style object management. Big shout out to Phillip Whitrock who led the documentation effort on this and everyone who worked on it. It's incredibly helpful. Before this existed it was kind of a guessing game at least for me. I didn't really know what was going on. Also the kubectl patch documentation goes more into the different patch styles and then you can understand what are the patches that are being calculated locally and being sent to the API. There's a discussion about an apply v2 refactor. So this is getting into some of the implementation details of how apply functions and how it's communicating with the API server and how you can extend the kind of patch strategies that are implemented but really interesting information and read into that to kind of see where the future of this stuff is going. And then another really interesting document is Brian Grant's declarative application management. So again how we're talking here about objects it's taking these kinds of concepts in expanding it into how could we generically manage generically and declaratively manage applications. So it would be multiple objects and services and control config maps and deployments taking these same kind of concepts of these patches and these overlays on objects and then just using all native Kubernetes to manage applications themselves. Really long, really really interesting. And then as part of that there's another document about the issues that are related to that effort. But a lot of these issues have to do with behaviors of kubectl apply and so they're applicable if you're kind of digging into the behavior and you wanna know some of the nuances or some of the edge cases of the problems. This is discussing those states so that they can kind of be put on the roadmap and addressed. Anyway, that's all I have, thank you so much. So can you please move to the slide with the pod spec with the notations about merge key and merge strategy? Yeah, and I do have to say I modified this slightly for brevity, but yeah. So the question is like basically about the mechanics how kubectl works. So the question is whether it supports custom types like CRD types or custom API server like service catalog types for example. Or if I build my own, whether API server or CRD controller with defining my own types, will I be able to annotate my types this way or are they built into the kubectl? I mean basically like whether there is a metadata API in Kubernetes API which passes this metadata back to kubectl. Right, so is anyone from API machinery and or CIG CLI in the room? So I'm not sure if those mechanics are exposed to things like if you would be able to import that into your own objects. You could, I mean essentially all that's happening underneath is like patch is being calculated and then being communicated to the server. So as long as it matched those same semantics, I believe so, but I'm not positive on that. Yeah, so the question is just because I have seen with the some changes like there is a stream of changes to make it less core specific in kubectl to move it back to the API server to pass the metadata from service. So that with API aggregator and other things kubectl would support like generically such things like that. But I've seen the cases where when kubectl aggregator for example or some API machinery stuff edit the support for that but because kubectl haven't been changed to use that meta information we still can't really use this feature I guess. Yeah, so from some discussions that I've had it sounds like the near term direction, one option is that start with moving all of the calculation logic into the client side so that you would actually calculate the final state of the object and instead of using a patch request you actually just use a put request and so it would be okay let's do all calculation locally get the final state of the object and push that to the cluster versus calculate the patch object locally and then communicate that with the patch style to the API server so that would be a first step and if that was the case then on your own custom types you would just do the same kind of thing like you would put the end state that you desired then pass that point another thing that I've heard discussed is implementing this logic on the API server side except all you as a user are doing are providing those three states explicitly to the API so you're saying this is the local object this is the last applied and then the server obviously has the live and then all it does is it calculates all of it on server side and it doesn't know any, there is no patch communication at all it's just calculating it locally but that's part of that kind of v2 discussion there's a couple people I can try and connect you with that would probably be able to answer your question a bit better, yeah. Thank you. Yeah. All right. So if I understand this correctly if you're running on the slide where you have the replicas that were not previously defined and you're getting an error I believe it's what it is you're changing the update strategy if it is. So could you work around this error by somehow updating last applied whether by patch or apply or the sub-command to include the update strategy in the last applied and then change it? Absolutely, that would be the exact way that you would get yourself out of this situation and so that apply sub-command of kubectl apply, edit, last applied you could then it would pull it up in an editor and you could add those fields into the last applied so that next when you went and applied this it would know that it was actually deleting all of those sub-fields so that would be exactly how you get yourself out of that situation. And then minor related question is the error message that you get back in any way helpful to try and figure this out? It's changed over time I don't know if it's more helpful now once upon a time it was kind of confusing but I think now it actually says like that it's, you know, this field is incompatible I think it says something along the lines of like strategy type recreate isn't compatible with rolling update or something of that sort but it's still not immediately clear you're like okay cool I'm trying to change it so how do I get out of that state which it's not immediately clear oh you need to go modify that you need to add fields to an annotation on the object to get yourself out of this situation that's the kind of like behavior that it's not immediately apparent that that's what you need to do. Thank you. Yeah. So two questions one is there a mechanism to do like a dry run or a preview to see what it would change before applying the patch? And second question given what Kelsey said about like you know maybe we shouldn't be giving developers cubecuddle to run in the first place is it a good idea to use this given all the semantics in your opinion? Well so to answer your second question first if you think of like from Kelsey's presentation that that was actually a CI CD system underneath it I'm pretty sure he's probably running apply so you know you have your manifest and it's tweaking the image field and then a CI CD system is going to apply that or it's going to patch it the concern is what if that user two comes along and then does it your CI CD system is completely correct and it's doing the right thing over and it's repeatable and yeah the user shouldn't probably be doing anything else. It's that like okay well being knowledgeable that there's real reasons why you shouldn't be you know doing that directly or you need to have very like clear understanding of it so I actually agree like in that approach it's just also worrying that someone with the best intentions could still mess up that system and then repeat your first question sorry? Is there a way to do like a dry run or preview and see what changes it would make with an apply? Not truly to my knowledge because of things like the defaulting values and that kind of thing and there's also you never know if it's passing through the API there could be like initializers or other things that are going to modify the object in transit. To my knowledge it would take a couple round trips for it to actually like say this would be what we would have done but I think that if either the code moved all the way to the client and the only thing that it was doing was a put that would be much easier to do dryer runs on or conversely if it was an implemented server side but that code at least of how it takes those three states and computes a final state that at least would get us closer I think yeah. Thanks. I think somewhat related to the previous question so the default fields that get applied are they also annotated in source code so you would know beforehand what would happen so you don't have to do this round tripping? I believe I don't know explicitly I know that there's optional metadata on some of the fields but I don't know where the actual defaulting logic lives again if there's anyone from API machinery in here. Okay there's registered functions that apply all of the all of the defaulted fields apparently yeah so probably not the most clear thing to just understand from. Yeah it would be nice if it was annotated just like the patch behavior is well documented in source code it lives right there. Yeah. It would be easier to understand that. Yeah. Anyway thank you so much.


What artificial intelligence means is, accumulation of information, analyzing it and projecting it the way you want at a given moment, will no more be considered as a valuable thing in human faculty. Many of you will be out of your vocation unless you do something that a damn machine cannot do. You must be able to do something beyond your intellect. Human being has many layers of intellect, intelligence. Intellect is only a small part of it. So in today's technological world, we know that artificial intelligence and robotics are taking over. Those are the cutting edge technologies. So what is your take on the interaction of such technologies with the intersection of such technologies and ancient practices such as meditations and yoga? Are you sure I'm real? Because last year and a half they've been inviting me to speak in all sorts of artificial intelligence conferences in the world. I was just surprised, why are they asking me to come and speak about artificial intelligence because I'm not an expert in the field nor am I an artificial intelligence. So I asked them in one of the conferences, it was in St. Petersburg, I said, why are you guys inviting me to all these artificial intelligence conferences? I'm a natural intelligence, not an artificial intelligence. They said, the problem is what are we going to do? We're going to lose our jobs. These are all professors in big universities in MIT and in Harvard and these kind of places. They're asking me, what are we going to do in another ten years' time? Because everything that we know, everything that was sacred till now suddenly is going to be there on a little gadget. You must understand this, what artificial intelligence means is, accumulation of information, analyzing it and projecting it the way you want at a given moment will no more be considered as a valuable thing in human faculty. Because a simple gadget will do it much better than any human being. Already that Google lady is looking smarter than any of you, isn't it? She looks smarter than me, it's okay, I'm not educated but you guys, she's looking smarter than any of us or no. Anything you ask without batting an eyelid, she tells us.  This happened to me when I was about thirteen years of age, I think, thirteen or fourteen, thirteen I think. For the first time I saw a flatbed calculator. This Panasonic Calculate, you know, at that time it was 100, 110 rupees, very expensive. You drink a coffee for more than that today. But 110 rupees Panasonic Sony was 125, so we buy the cheaper one, 110 rupees Panasonic. And they show me this, I didn't, I never bought them. Somebody brought one and they showed me, took, took, took. Results? Then first thought that came to me is, why the hell am I wasting my life in the mathematics classes? I said, all I need is this, I don't have to go to the math class. Whatever question you ask, took, took, took. A hundred rupee thing can tell you why this torture for ten years going through these arithmetic and mathematics and all kinds of things.  Then only I thought we must make a big machine which does all this rubbish so that I don't have to go to school. At last the dream is coming true. In the next ten, fifteen years the education as you know it, professions as you know it today will become meaningless because right now they've created these machines. Right now we're still kind of obsessed with creating machines which look like us, which is unnecessarily complicating. It can be a square box which walks everywhere and does everything we do. It's too insulting for human intelligence. So we're still making it look like a human being. If something is intelligent, it must look human in our mind. But slowly for the sake of economics, somebody will make one tall box which does everything that you do. Okay? Time is coming for that. So once this happens, many, many things that we are spending years on learning will be meaningless. Now they built a thing, I was meeting this one top real estate guy in Russia. They're designing something that if a customer comes and says, what kind of house I want, what is my aesthetics, what is my culture, what I like, how it should be and what's my budget. A machine designs a complete house, ten different alternatives that you want, including paintings, hangings in the wall, the furniture, the works. Now they're saying in another five to seven years they're saying it can even print the house and build it. So just imagine the design guys. So many of you will be out of your occasion unless you do something that a damn machine cannot do. All of you should gear yourself for this now. You must be able to do something beyond your intellect. Human being has many layers of intellect, intelligence. Intellect is only a small part of it. Right now our education system is completely dedicated to intellectual development of the human being and we think that's the grandest way to live. No, it is not. We can explore that if we have the time. But in the yogic way of looking at things, we look at human intelligence as sixteen parts. If you explore other dimensions of intelligence, only then you will be relevant. When everything intellectual, intellectual means your intellect cannot function without accumulated data. Yes or no? Hello? Your intellect cannot function without accumulated data, is that so? Now whatever is data assimilation, analysis and execution of that analysis, a machine will do better than you. A human being can always make mistakes, can always forge information. But a machine is clear cut, it will simply do those things. So everything that you can do intellectually will be meaningless in another ten to fifteen years time. Maybe in India it will take twenty to twenty-five years time but inevitably it's going to happen. So you must be equipped with something beyond your intellect. When I say beyond your intellect, there are many ways to look at it. I will make a simplistic example, simplistic because if we go into more sophisticated examples, we'll have to do a lot of exploration. We don't have that kind of time today. For example, what did you eat for lunch?  Can't you somebody take care of his nourishment? He's a Maggie?   It's become part of the system. So you are manufacturing such a complex machine with Maggie noodles. This is like a 3D printer. You put Maggie noodles into it. No, I'm not made of Maggie noodles, okay? I eat better than that. But you put such a pati into this, this becomes a human body. This is the most sophisticated machine on the planet. You're manufacturing this with whatever food that you eat. And the food that you eat is just the soil that you walk upon. Yes or no? And it stands up. Isn't this a 3D printer? Hello? Does that intelligence exist within you or not? Not even in your brain, in your gut? It does. So if only you found conscious access to this dimension of intelligence, you would live magically, isn't it? Then artificial intelligence won't disturb you. You will be very happy because all the manual jobs if the machines do, what a wonderful world. I'm looking forward to that.


It can be done when it needs to be dead It doesn't need to be dead You feel me?  Yeah, we get it done when it's fuckin' come up with somethin' He say, it's spaghetti over the... I told ya, it's spaghetti in there You're not right You ain't gonna get something It is spaghetti in there Who made this spaghetti? She know this You cook? Come on now


the game awards is having a massive controversy at the moment that we need to dive deep into and explain what the heck is going on. Oh we have more going on because you know some days I forget who I am but what I don't forget is that Nintendo is updating f0.99 that's right we have a update for f0.99 for a lot of you classic f0 fans out there. Oh we're not done though because you know what's also racist right into the news how about a Nintendo Switch mini? I kid you not we have some actual documentation for a Nintendo Switch mini that might be landing as soon as next year and what does that have to do with Nintendo Switch 2 some fun facts around that. Beyond all of that you know how there's a lot of debate over the game awards and how who's gonna win game of the year will it be paulers gate 3 will it be tears of the kingdom a lot of people thinking it's going to be paulers gate 3 but what if I were to tell you that tears of the kingdom was just given an award for literally being the greatest video game of all time no this isn't the nintendo prime awards I'm not like handing it hold on hold on trophy here here you go that's that's no no that's that's not what happened in here an actual major company gave this award to tears of the kingdom don't know nintendo accepted anything but hey it is something that we get to talk about today so first up let's talk about the dorito pope himself mr jeff kealy because he finds himself in some hot water due to one of the categories at the game awards now there's a few little updates he did give in a q and a that he did recently an interview where he talked about different aspects like how they're gonna get rid of the world premiere stuff which okay they're not actually changing the content of the show they're just not gonna have the world premiere title card so even though we're totally used to seeing that title card and then occasionally hearing world premiere now we're not gonna be hearing that anymore okay cool whatever fine I guess you can get rid of that also he talks about the security at the show and how they're upping it but he doesn't really go into specific details because of course you don't want to give away the actual security details of the event to allow any you know people who want to get up on stage and do crazy things and talk about bill clinton hey martin you know real quick I want to thank everybody and say that I think I want to nominate this award to my reformed orthodox rabbi bill clinton thank you everybody I don't you don't want that to happen so given our security details publicly would actually allow for them to find loopholes in the security so again I understand him not going into details of it but I also understand the line of questioning because they've had people invade the stage now twice in back-to-back years now setting all that aside that's not actually the controversy believe it or not the controversy is with the awards themselves which often are the least talked about thing heading into the game awards besides game of the year and that is due to one category that category being best indie game now look this is an amazing category and an important award category to recognize independent game studios and yes independent game studios are exactly what the word means they're independent they're not owned by a major corporation they don't always self publish their games but they self create they self fund yada yada yada right so it's pretty obvious what an independent game company is well except to everyone but jeff kealy and that is because a little game that you might have heard of Dave the diver is up for best indie game the problem is not the studio that made it it is a small studio and it's at the studio is owned by a 15 billion dollar company actually a 15 billion publisher yes that would mean the studio is not an independent studio because they are owned by a mega corporation kind of crazy that that means the game is up for best indie game just because it's a smaller game with a smaller budget but it's owned by a massive 15 billion dollar company so what are we talking about well jeff kealy was asked about this and he said the following look it's a great question independent can mean different things to different people and it's sort of a broad term you can argue does independent mean the budget of the game does independent mean where the source of the financing was doesn't mean the team size is it the kind of independent spirit the game meaning a smaller game that's sort of different I think everyone has their own opinion about this and will really defer to our jury of 120 global media outlets who vote on these awards to make that determination of is something independent or not you know in other industries some things are well I think a film industry the budget can't be above this amount of dollars or it's not independent so I don't know some people have said larion with boulders gate 3 that's an independent game kojima productions with death stranding some people say that's an independent game and even though that's an independent studio of course it was funded by playstation he then later pointed out that some are questioning that if indie studio has a publisher are they still independent or not now I don't really know where the confusion is here and jeff kealy kind of created this controversy on his own he could have just passed us off as hey I don't get to make these decisions they're decided by a panel of 120 people this is what they decided should be included we've never had a situation come up like this before where a game was maybe nominated in a category that it doesn't belong in and we're gonna have to look into maybe tightening the ship on future events because it's too late to do anything about it this time around that would have been probably the correct corporate response but that's not what he did instead he just sort of defended the choice and basically said hey who am I to say what an independent game is well let me tell you what an independent game is jeff kealy since you seem a little bit confused on what qualifies an independent game is a game made by an independent studio that is not owned by a bigger corporation and guys this isn't rocket science they've the diver in hindsight should not be allowed to be up for this award and it's going to be extremely awkward if it actually wins the award now the end the diver by the way is a very good game we're not knocking the game it's just if it wins this award it'll be the first non independent studio to win an independent studio award now I know what you're thinking the Dorito Pope is full of controversy and I'm over here rocking an award from the game awards that uh Eric actually won yeah this is Eric's trophy he beat me in the game awards last year we'll talk about that it's a bit of a betting special but here's the thing I actually don't care about that what I care is that you subscribe to the channel and drop a like and uh thank you for helping us get closer to our goal of 150 000 subscribers now what if I were to tell you that Nintendo may be releasing a Nintendo switch mini next year would you believe me would you call me a liar would you say I'm just making this up and believing the rumor train out there what if I were to tell you it's actually not a rumor at all and Nintendo has done this before in fact they did it with the we and they did it with the Game Boy Advance and they might be doing it again and this time all the information we have on it comes directly from Nintendo now this is basically just do a bunch of patent hunting Nintendo has released a ton of patents I believe it's five total patents surrounding a device that looks like a miniature Nintendo switch it has a cartridge slot it has some similar internal designs to the Nintendo switch including this fan style blower it's got a lot of things that look very very similar to a Nintendo switch except the characteristic that mentioned it's a miniaturized version and look Nintendo has done these mini consoles in the past but there's some interesting parts about it the Game Boy Micro when it came out uh came out in 2005 after the Nintendo DS had already launched in 2004 but it gets better because Nintendo's done these micro consoles before like the Wii mini the Wii mini came out in December of 2012 a few weeks after the launch of the Wii U that's right Nintendo tends to launch these miniaturized versions of systems after the next system gets here now look one big thing here is because these patents exist it's highly unlikely that this particular device the way it's described is going to release Nintendo said that themselves when these patents go public these are like things we're not going to do and that's fine or at least it's not going to come out in the way the patents suggest now this could have just been a prototype and they have a separate prototype that patents haven't come up before yet and maybe that version of the Nintendo switch mini is what's going to release next year why do they do these miniaturized things well they're cheaper and you might go well we already have the switch light yeah it would be even smaller than the switch light it would probably be a pocketable version of the Nintendo switch it will take cartridges and it'll probably be like a hundred bucks it's a way to have a super cheap option out there once the new system launches so there is a possibility we get the Nintendo switch to next year and then shortly after they still launch a new version of the Nintendo switch again because these patents are out there this is probably a canceled product but it doesn't mean a similar product with different patents that aren't public yet doesn't exist so Nintendo was at least playing around with the idea of a Nintendo switch mini and we'll just have to wait and see if they decided to do anything with it there's some interesting parts of these patents too like a magnetic cover that also attaches to the back kind of interesting maybe that would be because it's meant to be put in your pocket to help protect the control sticks and stuff sort of interesting some of the design choices Nintendo was looking into this prototype system next up did you know Tears of the Kingdom is apparently the greatest video game ever made now look if you've been following my channel for any length of time you'll know that Tears of the Kingdom is literally my favorite game of all time so you could argue that this is me grabbing Eric's award and handing it to Tears of the Kingdom hey man you're the greatest game ever made well except it's not my award and I'm not the one that called the game that in this instance actually you know what company decided that it is the greatest game ever made Pringles I kid you not Pringles has awarded Tears of the Kingdom with the grand gesture of being the greatest video game ever made I don't even what do you even say what what does Pringles I mean look gamers eat Pringles I'm sure people eat Pringles so like we eat chips we eat snacks like I guess I get the connection uh don't know between the Dorito Pope today Pringles handing out greatest game of all time awards look Tears of the Kingdom should just be a shoe in for game of the year right Pringles is saying it's the greatest video game ever made has to win game of the year then be ironic if Pringles gave game of the year to bowlers get three what calling this I like I don't know they're at this is just look Pringles handed out an award whether Nintendo accepted it or not beats me could have just been for internet cloud or attention I don't know now lastly we got a zoom zoom in because f0.99 got an update today and I believe it drops tomorrow in Europe update 1.1.0 now this is a classic mode and it's interesting because they did announce back in October they were done adding tracks to the game so a lot of people thought oh we're gonna be done updating it well they never said they were done adding modes this classic mode literally brings the aspect ratio down to four three because that's how we played back on the Super Nintendo and also limits it to only 20 players like the original game did when there was only 20 racers they disabled the spin attack and they also disabled the skyway also you're completely limited to only one boost move per lap so yeah this is just like the original game it's basically just bringing it back down to the classic style of what f0 this version of it used to be and I think this will help obviously increase player bases today it has been a bit hard to get a full 99 racers in a game at any time unless you were playing on weekends or certain nights and now it this is probably gonna pack the lobbies again here for the next two to week or so I'm just glad to see f0 down again continue to get some support I won't suspect we're gonna get any more updates to the game then again we didn't anticipate this update so who knows maybe there will be more modes added to the game in the future I just hope they don't press delete on it the way they did with Super Mario 35 I'm kind of tired of these limited time additions to NSO that we're just gonna remove and act like that's still adding value like why don't we still have Super Mario 35 again I'm confused why would you remove value from NSO that's not really how you keep subscribers just say it I mean I know they have 38 million of them but whatever anyways guys I'm just glad that I'm still here yes it's true if you saw our last episode uh grandpa prime over there did save me from the Nintendo ninjas for today we'll see if grandpa prime has to step in on another episode but today we're doing all right folks thank you so much for being here and I'll catch you in the next episode


Bester, obviously the Blue Jays a tough lineup, 83 pitches through four innings. What made them such a tough matchup for you today? I just thought I was throwing up strikes. As you guys saw, I walked a handful of guys and you know just it was the the command was in there today and I felt like that's what ran my pitch count up. You were able to grind in that third inning to limit damage. What was your approach there to keep them to two runs? Yeah, I mean like I said just trying to limit them to score more. I know obviously with our offense and our bullpen I knew we always have a shot and if I could limit that damage and navigate through them then I knew we had a chance like we had in the ninth. To see an 11 game winning streak end, you knew you were going to lose one eventually. How do you look back on these 11 games and how special that run has been? Yeah, it was really special. I felt like every time we came in here we knew we were going to win. And I feel like that's the mindset this year. I think we have the guys to do it and we have the staff and everybody's with the same game plan so I think it's going to be special. Boone wasn't happy with the strike zone. Josh just said it was kind of inconsistent for both teams. Was that affecting you at all with some of the walks and some of your pitch? No, I thought it was pretty even for me. Obviously, like I said my command was near today. It was tough on me just because I couldn't command the pitch but I thought he was pretty fair for me.  Definitely. I think the fact that he went out there and obviously showed his face for us probably lit up some fire and we were able to have guys on in the ninth and we just couldn't get it done. What's it like to navigate that Blue Jays lineup even though they don't have Teo Oscar is still pretty tough out there? What is it like like especially even if you don't have command they also were very patient on those missions too? Yeah, I mean I feel like the headland has been like to have a great lineup but as you guys saw you know I gave four walks four hits and I managed to give up too you know so at the end of the day I think if you just make pitches and you know keep keeping the same game plan that we do before the game you know we could be alright and turn it over to the bullpen.


I apologize for the, they're not very graphically good slides, but hopefully they have good and meaningful content that everyone finds useful. Is English okay? Yes, awesome. So as you said, I have 20 years of experience in business operations and customer success. I've worked for companies like American Express, for Samsung, for Philip Morris International, and I spearheaded the launch of Uber in Lahore and in Karachi as well. For the past six years, I've been working at Automatic. Who here is familiar with Automatic? Who knows a little bit about it? So what we do primarily is we provide services for hosted WordPress websites, among other things as well. So we have Jetpack, we have Commerc, so there's a whole range of products that Automatic currently offers. So I've been working as a happiness engineer there. And interestingly, the trend with AI is that if you don't adapt, that you're going to be left behind. So I'm also part of the company's inaugural AI squad, and what we're looking to do is to leverage AI and really enhance the effectiveness of our product so we can get better services delivered for our customers. So just a quick introduction, and if we have the mic. So just a quick show of hands. How many of you have used AI in the past week? Put your hands up high. Let's see. OK, there is very good percentage of people. Awesome, awesome. If so, what are you using it for? Let's just pick five people at random. What are you using AI for? So who wants to share what they're using AI for with the rest of the group? We have one here, one here, one here. So please. Actually, one of my proposals is helping more. OK, awesome. Thank you. I'm using AI for to understand the group, and I have also developed some Chrome extensions that have objectivity and AI. OK, you've developed a Chrome extension. I have zero knowledge of coding, especially in Chrome extension, and I have published two Chrome extensions, which I totally remember that have objectivity, and I'm publishing the next one. Very good. Let me explain what actually does that. I'm using that extension to actually fetch images from unsplash.com. I have named the extension images everywhere. When someone is using the extension, we have just to click the icon, and there is a search box for that. So if you need any sort of image, just type in it, and here is a list of images. You can download it and send it to you. Thank you. Very good. OK, let's get two more. The first is using AI. What are you using it for? Let's go to that side. So one person is using it for coding. Another person is using it to build content and proposals. I have used open AI to create emails for clients. Emails for clients. OK. There is a portal on the worker's website.  They have to give the scientists, and then they have to give it to them. OK, awesome. So you are using it basically to write copy. Yeah. OK, awesome. Let's have two more. Who else wants to share what they are using AI for? I have a solution. OK, as a coding assistant. Perfect. Proposals can be created in the unit, especially as a coding assistant. Awesome. Most of the time. Awesome, great. I have a question. We have one more. I think he wants to share as well. Thank you, sir. I had the opportunity to teach prompt engineering to MS master's class. And I would like to say two examples. I have designed a collection of prompts in which a student can write the question that is in kind of a faculty question. And this program, this is her program. And Chair GPT will identify step by step what mistake he did in the program. And will also write the program for the question that was even by the instructor. So the problem that I want to solve is in the class, if I do not have time to guide each and every student, he can himself or herself get the knowledge where he committed the mistake and learn by himself. OK, in image generation, I am using control lines where they can control image generation. So these are the two scenarios. Awesome. Thank you so much. I was really impressed with how well aware everyone already is with AI. So now I have a question for someone who is not using AI. Is there anyone in the room who is not using AI right now? And if you are not, why are you not using it? Do you want to share or you are not using it? Anyone else who is not using it? OK, good. So then where do you fall in? I asked if you are using it. We have about 70% raised their hands. Now we have one person say they are not using it. So what about the rest? Are you using AI or are you not using AI? And if you are not using it, OK. Well, the next slide then is for you. So how many of you are familiar with Oxford University? Everyone knows Oxford is great. So they have an institute called the Future of Humanity. In 2016, they got machine learning experts from all around the world together. They surveyed 352 machine learning experts. And based on the survey that they did and all of the investigative reporting that they did, when they studied what was already available in the market, what they assume, again, this is in 2016, what they assume is that by 2026, AI will be capable of writing school essays. By 2027, self-driving trucks will render drivers unnecessary. By 2031, AI is going to outperform humans in the retail sector. 2049, AI is going to be the next Stephen King. So who knows Stephen King if you've read any of his books? And 2053, the next Charlie Teal. The reason I mentioned Charlie Teal, you may not be aware of him yet. He's a world-renowned neurosurgeon. So the best and most prominent machine learning experts in the entire world, they got together and they predicted that by 2053, again, 30 years from now, not that far away, that we'll be able to perform neurosurgery with AI. Just imagine where AI is going already. By 2137, this is 114 years away. It seems like a long time, but if you think about it, just in the generation of you, your kids, and then their kids, you're probably already there at 114 years. By 2137, AI will be able to automate all of human jobs. The purpose of this isn't to scare you. The purpose of this isn't to say that the world is over or if you watch Terminator 2, that Skynet is coming. The purpose of this is for you to understand that you need to develop AI as a skill and in every field it has an application. It has an application in WordPress. And what you need to do today is start adopting that skill in your day-to-day. Someone is using it already. I'm sure, you know, this says by 2026 and they predicted this 10 years ago. But 2023, I'm sure you could write majority of your school and essays today using chat GPT. If any of you are students, have you used AI for your assignments? It's okay, your teachers won't mind. I'm sure they use AI to grade your assignments as well. So in terms of what AI is capable of doing today, they're three years behind on what they predicted in 2016. Just imagine how fast AI is developing. And that's what really the crux of my presentation is today, that I'm not a developer by profession. I don't know any PHP code. I don't know JavaScript. I do know HTML and CSS. But I was never able to create a plugin myself. I'm not a developer. So what I think was, I started with a problem. Whenever you generally work on developing something, you start with one problem and then you figure out, how do I fix that? So everyone, I'm sure, must use some form of task management in their life. You have some application that you use, whether it's iPhones, Reminders app, whether it's Google Tasks, whether it's Asana, whatever you use. So what I use is a WordPress website. What I did was I created a custom post type for myself called it tasks. And then I started entering tasks. And these are just some test tasks that I've entered for today. I threw them into four columns. I put them into query loop blocks, which are part of the new full site editing in Gutenberg experience. And I created what essentially is known in the development industry as a Kanban board. So you start off with your statuses. These are my to-do tasks, my in-progress, my on-hold and my completed tasks. One of the biggest challenges that I had, you'll see the due date field is empty. Because this was something I was developing from scratch, the query loop block doesn't have a date field that I can enter, and then the date field doesn't turn red when the date is passed. Because it's not a proper task management system. I'm adapting it for something that wasn't actually built for it. So I created the query loop block. I wrote about four, five hundred lines of CSS to style this the way that I wanted. But now I needed to get the due date. So here's the solution that I proposed to myself. Again, this is all without speaking to a developer. This is what I assumed I needed. I wanted to be able to add a custom due date field. And I wanted to turn the text red if the due date has passed. So if the due date was yesterday, the task isn't complete, I want the due date to turn red so I know immediately this task has passed due. Then I want to show the custom due date in a query loop block. This is more of a technical point. Whenever you add a custom field in WordPress, it doesn't automatically show up in other blocks. You actually have to write some code to make it available to the default blocks that are there in WordPress. And then the third thing, let's say you're lazy one day. You don't get up, you don't log in and check your website. You don't go in and actually see what tasks are due. So I wanted an email reminder to be sent to me that all of these tasks are passed due and you want to be able to remind yourself, click on a link and open it up. So this was the solution that when I sat down, I figured, okay, this is what I need to make my Kanban board effective for me. So what I did was I started writing prompts. So who's familiar with what prompts are? If you're using AI, you should be familiar with what a prompt is. Was there, do you want to share a little bit about prompts with us? Absolutely, awesome. It's an instruction, as was said, that you're giving to the language model, which is AI, and what output you expect from it. What's amazing, and I really appreciate the presentation we just had, if you look in the Western world, if you look in America today, universities are already actually starting to create courses for prompt engineering. So we've had software engineering, we've had different types of classes. Now in America, you'll actually see for AI, they're creating classes called prompt engineering. So what you input into the AI model is essentially going to dictate what you get out of it. So what I told AI was to use the ACF plug-in. It's the advanced custom field plug-in. I added a field called do-date, and I assigned it the tasks post-type that I had already created. So I'm telling this to the AI model that I'm now putting in the prompt for it. I told AI that I want to display this ACF shortcode, but I want the text to turn red when the date has passed. So there's a date check that it needs to perform. I want to be able to style the field with custom CSS. So what that essentially means is I'm asking AI, I want you to assign specific classes to those values that you add. So then I can style it later. I can choose whatever style options I want. Again, I'm not a developer. There's no way I could have done this myself. So here's what AI gave me. And again, this is, you perhaps can't see the code, you can't see the slide, but it shot out about 26 lines of code in maybe roughly 5, 10 seconds. So what I did was I inputted what I wanted. It's checking the do-date here at the top. Then it's assigning the do-date a particular format. And now it's assigning classes based on what I told it, that I wanted to have a specific class if the date has passed, and I wanted to have a specific class in general so I could style the difference. The next thing in my prompt was, again, this is a technical point that when you create a custom field in ACF, you have to tell AI or you have to tell the code to show this field in other blocks because that native support isn't there yet. So I said to AI, now I want to enable, again, I'm just in a trend from that first prompt, I got the code, now I'm entering another prompt. I want to enable the use of ACF within the native query block in Gutenberg. So it gave me just, again, a few lines of code here. I did quite three or four lines of code. And essentially all I did is it made that field that I added available. So this is the result now. Again, with no development experience whatsoever, I was able to create custom code out of plug-in, to do dates for each one of these tasks. And you'll see that the three dates that have passed are red. This is something that, again, from a task management standpoint was really important to me that when I look at my Canman board, I want to see dates, I want to see red dates to know that these tasks are pass-due. So not being a developer, I was able to create this plug-in, implement this functionality today for my daily task management. The third thing is, so everyone sees the dates here, this is coming from custom code that I added using AI. Nothing, I didn't reach out to a developer, I didn't copy anything online. Simply went to the chat GPT model, this is the free model. The chat GPT4, if you're paying for it, it offers even better functionality, even better responsiveness. This is something that I did today with a free model. A developer today. Just think about the possibility of you as a copywriter today what you can get as output for your WordPress website. You can write blog posts, you can write plug-ins, you can write CSS. There was one member here who mentioned that they're using it to review their code already. That's fantastic. Because AI understands the semantics better than a lot of times which is quickly for you, which is the real advantage. Again, this whole process of creating a plug-in, which just six months ago, maybe a year ago, I wouldn't have been able to do, took me about 30 minutes. I was able to develop a plug-in in 30 minutes, and that's something I hadn't been able to do for five years. So this is the power of AI for someone like me who doesn't have that skill set that you have already. Further you can take your skill set, how much further you can enhance your functionality. Now we have one more functionality left here. The last part is, again, a reminder that I wanted that email. I wanted an email to be sent to me whenever the tasks had passed through. Whenever the tasks were read, I want a list email to be sent out to me. So this is the prompt I went. It's a little bit longer, again, in that same chain conversation about open API, I'm saying that I want you to trigger an email with a list of posts where the date has passed. I'm telling you that the title should link to the actual post on the website. I'm telling you I want you to number the post so that there's some basic formatting there. The custom taxonomies that I've added, the categories, the statuses, the priorities, they should be there as well. I want you to maintain a hierarchical structure. So if there's a parent and child category, I want you to maintain that structure in the email as well and schedule the email to be sent to me at 9am every single day. So this is, again, the prompt I'm putting into a chat dbt. So it shoots out this code. So this is a little bit longer in terms of the code. It's actually meant every single day at 9am or 9.05am the way that our phone jobs on WordPress.com work, sometimes trigger at different times based on who actually visits websites. It shot out this email today. And again, by no stretch of the imagination am I saying that this is a well formatted email or it looks really nice. You can do all of that with CSS and HTML later yourself. You can always style it the way you want. But the functionality is there. Every single day now I get an email that tells me what tasks are do, I'm able to click on them, open it up on my website, and then engage with that task however I need to. And again, I was able to do this in a matter of maybe half an hour. Just imagine if you now today focus your efforts on creating business processes.  You're able to now actually start developing. Think of that business process yourself. No one knows the business process better than you for your business or for your website or for your specific requirement. So you're able to tell chat GPT or whatever language model you're using exactly what code you want. And one of the greatest things that I've seen about the GPT model is that when the code generated, isn't what you want. You don't even have to feedback. You tell it, know this code that you sent me, it didn't make the text red or it made it too big. I want you to make it smaller. I want you to format the email a different way. You know, that conversation in a software house can sometimes be very complicated because you're going back and forth between developers, between QA, but now with chat GPT you tell it exactly, you know, I don't like this. I want you to change the output, and in a couple of seconds you get a new set of code. That's it. I just wanted to show you real real quickly, in half an hour how I was able to develop a plugin and do it without any development experience. So just really imagine the power of AI today. AI is a reality that's coming and we can't put our head in the sand, we can't avoid it. It's going to shape the future of all of the industries that we're currently working in. So this is the time for us to really grasp that skill, understand that skill, and figure out how we can leverage that skill to make ourselves more effective, more efficient, and produce better results and deliver value. Any questions about AI, about WordPress? Awesome. Keep in touch. It was a pleasure being able to speak with you that if nothing today you go home and you open up a PI, or chat DPP, open a PI and you start asking it what it can do for you. I think all of you will be pleasantly surprised. Thank you so much. Yes. Okay. With AI, we need to start using our own tools. We need to use our own tools or we need to start using AI or we need to start using AI. So what he's asking is you know, is the only way to learn AI start using it. And my answer to that initially right now would be yes. The reason is because AI is very new and it's rapidly changing. If anyone watched Open API their day just like a month ago, they completely changed the game with the new box that they introduced. And their new box and their amazing functionality so if someone tells you they're an AI expert today I wouldn't believe them. Because Open API has made the advancements in AI so quickly it's hard to become an expert in three months. So the best way to learn what you can do with AI is to just play around with it. Ask it to write you a book. Ask it to write you a blog post about the latest political situation in Pakistan. I'm sure you'll get a very fun answer. So ask AI to just start doing tasks for you but you'll really see the power of what it's able to do. So I would say the best way to learn it today absolutely start using it. It doesn't have to be for anything specific. This task that I've created, this is not for anyone, this is something I use personally myself. But it made my life easier now because I can identify those tasks that are right. I think we have another question. Yes? My question is right now we're talking about an AI so you have a number that you don't use in your task management. So I don't use an AI in your task management so if we want to use it commercially for our clients I have two suggestions that we can use AI to establish a work-press for our clients based on AI. Absolutely wonderful question. So I know what a lot of companies are doing work-press hosting companies are doing whether it's GoDaddy whether it's automatic we're all looking at ways to leverage AI to provide support to customers so let's say you build a product today for example you have a plugin and you want to provide level 1 support for your plugin but you don't want to hire 5 people. So you can leverage OpenAPI's assistance bot which they just launched a month ago and you can leverage that technology to provide support to your paying customers and what you'll find is that when you train the bot you have questions to ask you tell it what questions to expect it provides you with amazing answers and you have to train it though so in terms of how you can use it in a commercial setting that's the same way you would use it in a commercial setting provide support to your customers and your software developers can use it as an assistant to improve their code they can use it to write code more quickly I know QA departments across the software landscape what another one of our attendees mentioned they're using AI to already review code so instead of having a QA team what people are already doing is they're using AI to start reviewing codes where are the lapses are the semantics wrong is there a critical error that's going to be thrown with this code so there's so many possibilities and something I know we don't have time now but we can certainly talk once we're great and we can talk about that in more detail another question I think the last one could be just the easiest to chime I think okay, okay two more questions is that okay? sir, from there we're working at we're working at like I say that I am I'm from from UCP awesome yes sir, I'm working on user-generated AI so I have great and learned that yet no AI modernized and here I can see that there are a lot of people also there are a lot of professionals so you have discussed in a very good way about the use of AI in WordPress yes, it is new but as you know that AI don't have 100% accuracy even I would say there are a lot of models they don't have even 60% accuracy so if you recommend the new AI in WordPress like that then if they range their concepts of coding am I right? I think it's a good question as you have discussed about the amount these are AI the new concept of AI otherwise if they range the concepts of their coding they can't enhance their coding skills by using AI I think it's a great question and one more thing actually for this time we should not neglect AI we should work on it I would say we should use AI AI it may help us to make a safety check but at the same time there is a point that a lot of people will do the same like me very good I would say I can do this in one day but very skillful wonderful question and I think and I appreciate that you have the courage to ask this question because it's a difficult question and it's a question that's everywhere in the software industry right now that you have developers who are concerned that AI is going to take my job AI is going to take my skill I'm going to tomorrow not be able to use my brains and I'm just going to simply go to openAPI chat, dpq or any language model and say do my work for me I think there's two ways you look at this the first thing is in order for me to even build this plugin I needed to have a very basic understanding of what WordPress is I needed to know that I needed classes I needed to know what functionality I wanted so there's a certain amount of understanding you still have to develop in my mind I think you're right today as AI is currently available it's not 100% accurate I absolutely agree with you but right now openAPI just made AI available to all of us within the last 12 months really it's very very new and what I'm encouraging everyone to think about what I'm encouraging everyone to think about is that AI is going to develop as fast as we develop if you know anything about what happened with the openAPI CEO because he was moving so fast in development the board removed him but then Microsoft said we'll hire you and then his entire development team at openAPI said we're going to resign if you don't bring him back so openAPI right now they're valued at 90 billion dollars openAPI again 12 months ago people even knew what chatGPZ was so in 12 months they've gotten the valuation their CEO came back their entire team knows that we're going to shape the direction so what this talk really is about is what is the possibility of what AI is going to become I absolutely agree with you right now as it stands today AI cannot replace anyone in this room but and I think this is the really important thing that you and everyone else has to understand if I close my eyes and say AI is not going to replace me I promise you it's going to be a matter of 6 months 6 years it might be 10 years it might be 15 years but eventually AI will be able to do everything I can do better and faster than me so what I have to do is I have to figure out today how can I use AI to do my job even better so if there's another developer who has your same skill set he's able to build a plugin in one hour for example but you're able to leverage your same skill set and use AI to create a comparable plugin in 30 minutes eventually again I'm not saying this is happening tomorrow but 15 years later which developer would you hire they both have the same skill set but one is able to leverage an API and do their work faster more effective you're able to get that product to your customer faster it's more effective you're going to deliver more value wonderful question I keep getting the watch so we can certainly talk about this afterwards it's a wonderful question and I think it's a question we all need to think about open API AI, this is all a reality we're going to have to adjust to that reality in every industry it's in support, it's in retail it's in software development we have to adjust to it one more, do we have time for one more? yes we don't have time but okay sorry Hello, my name is Shidoz Khan and I am working as an HR manager at Negative Tech.org and I have a similar experience like you one day I asked why didn't you hire a salaried salesman I researched and of course told you so he gave me some suggestions to increase salary he had a suggestion he should also suggest to the HR so he helped me he also suggested to the HR so he gave me a solution and for that I had a promotion and for the second thing I had a BBA course visual basic programming because I was not able to get a visual I was a non-technical person and he generated me and also I had to insert as he was going to be a module he would have created me so I have a question what do you think how much salary do you have do you have a tax amount or do you have enough money or do you have enough money so how much salary do you have do you have enough money do you have enough money do you have enough money it's a really hard question for me to answer I don't know when AI was able to replace what work we were doing right but the point of really what I was talking about even if you look at that future future of the university institute study what they're mentioning is that AI is coming it might take us five years to get there it might take us 50 years to get there but it's coming it's a reality so I don't know when we're going to be able to replace the Monday task of filling out Excel sheets hopefully one day it takes everyone's salary and just multiplies it by two we can all hope for that day that one day AI just helps us get more earn more but I think what you can do is write what I know of myself is that Excel even today Google Sheets even today they have AI plugins that you can add to Sheets or help me write it down so those plugins help you use AI to start creating Sheets even today so that's already a possibility right now how you further automate that is something that we could I'm sorry there everyone keeps holding their watch in front of me so I think it's time for me to leave but I think that's already happening today maybe we can discuss it a little bit after the session thank you so much it was a pleasure