How do we erase the congenital tendency to this magic word adjust? We saw last time that the general response function phi AB of tau which is of course defined as the commutator of Poisson bracket as the case may be in the canonical ensemble. We saw that this quantity here could be written in terms of the matrix elements of the individual operators A and B. For instance, in the quantum mechanical case, we assume that there is a complete set of states given by the eigenstates of the unperturbed Hamiltonian H0 and in that basis this quantity got written as 1 over ih cross, the summation over n and m. If I recall right, it was Anm Bmn, the matrix elements of these operators multiplied by the Boltzmann factors this times the actual time dependence which was e to the minus i omega nm tau. Check if these all the factors are there. I am writing this down from memory from what we did last time but I believe it is okay as it stands. These were actual matrix elements, this quantity for instance Anm was phi n A in the Schrodinger picture if you like, phi m and likewise for B. So that immediately led to a representation for this fundamental quantity, the spectral function. So we are going to regard the spectral function, the Fourier transform of this response function to be a fundamental quantity and then everything will be expressed in terms of that spectral function. So spectral function phi AB tilde of omega is of course defined as an integral from minus infinity to infinity d tau e to the minus i omega tau phi AB of tau and this if you use the fact that this quantity here is where the tau dependence is sitting then this is equal to d tau e to the plus i omega tau that was my Fourier transform convention. So this is equal to 1 over ih cross summation n, n A nm Bmn times a set of delta functions in this fashion. So it just consists of a whole lot of delta function spikes that is what the spectral function is and we know already what the representation from here it follows, they follow a spectral resolution of the susceptibility itself. So that implies that chi AB of omega equal to minus i limit epsilon goes to 0 from above so epsilon goes to 0 an integral from minus infinity to infinity d omega prime phi AB tilde of omega prime divided by omega prime minus omega plus i epsilon. We had this relation between the Fourier transform of the response function and the generalized susceptibility. So this will imply that this quantity here is equal to the i n minus i will cancel so if I put this in then it is equal to well yes when I do this I have to be careful because I did this integral d tau e to the i tau times omega minus omega mn that is 2 pi times the delta function. 1 over 2 pi is times e to the i whatever is the delta function so there was a 2 pi there. So this fellow is minus 2 pi over h cross the i cancels out summation n, m a n m b m n e to the minus beta a n divided by omega prime minus omega n m minus i epsilon. So wherever omega appears I just replace it using the delta function I replace it by omega n m and that is it. So this is the representation for the susceptibility itself. So again everything is expressible either in terms of chi or in terms of this quantity. We will use this referentially because there are going to be various conditions put on this and it is the simplest way of expressing those conditions is to use the spectral function. Now the first question what kind of function is this chi as a function of omega? Yes of course chi is a function of omega. Thank you. Yes absolutely thank you. Absolutely it is got to be a function of omega so omega n m the minus sign can go away. So let us remove this and write it as omega minus omega n m plus i epsilon. Thank you. So it is got poles this susceptibility has poles at all the transition frequencies but this representation tells you explicitly what kind of analytic function this quantity is. You see it is a function of omega which is analytic in the upper half plane explicitly. The physical susceptibility for real frequencies is the boundary value from above because as epsilon goes to 0 you should put still put the limit equal to 2 pi over h cross limit epsilon goes to 0 of this guy. For real omega for real omega this is the representative but if I remove this i epsilon then it defines an analytic function in the upper half plane and what is happening is that the physical susceptibility in the omega plane is the boundary value of this function without the i epsilon as you come down from above. As you can see you give a small positive imaginary part to it and then let it go to 0 so it is really the boundary value from above. So what one can do is to define a function of omega for complex omega okay using this so we could define some function let me let me use some other symbol for it. I want to do it in the lower half plane as well at the same time. So I want to argue that let us let us call this k for want of a better symbol k A B of omega. Let us define this to be minus i integral d omega prime phi A B tilde of omega prime over we can write it as minus i is still there so omega prime minus omega omega complex let me define such a function. This quantity is defined for all real values of omega prime through this integral through this guy perfectly well defined after all the argument of a delta function has to be real otherwise it makes no sense. So all this is for real omega having got to this stage at this stage I say here is a function of omega real function integrate that function over all omega prime all real omega prime with the weight factor 1 over omega prime minus omega okay it makes sense as an integral for all complex values of omega but not real values because as soon as omega hits a real value there is going to be a singularity in the path of the integration along the path of integration. So it is defined as long as omega is not real there is some imaginary part. So in the omega plane this quantity defines an analytic function okay makes sense everywhere except on this so there is some kind of cut here in the omega plane no no no for every real omega there is going to be it is going to hit it right it is another matter what he says is right because ultimately phi itself has support only at these points. So even though you are integrating over all omega prime phi itself vanishes in between those delta functions if you like but you see you take a very large system with a very large number of energy levels so close to each other that is practically a continuum then practically everywhere in omega you are going to hit a singularity but now this analytic function here this master function if you like has a boundary value as you come down from above it also has a boundary value as you go down from below and there is no reason why these two should be the same at all what is happened is that chi retarded this is our retarded susceptibility chi AB of omega real real omega this quantity is real that is the physical susceptibility is equal to limit from epsilon goes to 0 from above of this guy. So instead of omega you say omega plus psi epsilon positive imaginary part and then you take the limit as you come down from above and the physical retarded susceptibility is the boundary value of that function from above this thing here defines an analytic function for all complex omega but because you cannot cross the real axis there is no guarantee that the function you get from above and the function you get from below are the same in fact they are not they are not the same. So similarly chi advanced we looked at the retarded green function but mathematically you can also talk about the advanced green function AB for omega and that is real too is the limit as epsilon goes from above K AB of omega minus I epsilon. So now you are approaching from below this guy is guaranteed to be an analytic function of omega holomorphic in the lower half plane. This follows analytic in the upper half plane the physical retarded response for real frequencies is the boundary value from above of this master function K and the other one you may want it for some applications in general you do actually there are cases when you do then it is another analytic function it comes from below here and whenever you have an integral like this you can ask what is the difference between this and that. So you really have to ask what is the discontinuity of this function as you across this cut and what would you say well the discontinuity let us do that just for fun although that is not what I am interested in right now but just as an exercise in analytic functions if you say the discontinuity K AB of omega and this is real by the way equal to limit epsilon goes to 0 from above K AB of omega plus I epsilon minus K AB of omega minus I epsilon and now the only place where this I epsilon appears is in the denominator right. So in one case you have so this thing is equal to let us write it out minus I integral minus infinity to infinity the omega prime by AB tilde of omega prime and then inside you have 1 over omega prime minus omega minus I epsilon minus 1 over omega prime minus omega plus I epsilon omega is real and omega prime of course is real as well what is this equal to this is a famous formula involving these I epsilon and so on you see if I leave out this I epsilon and on the region of integration in the omega prime plane here is the point omega in the omega prime plane if I leave out this portion of it I get the principal value and then the meaning of this omega minus I epsilon means the pole is at this point in the first term the pole is at omega prime is omega plus I epsilon in the second case the pole is out here. So as I do this having the pole here is equivalent to putting the pole on the real axis and indenting the contour from below and taking half the contribution from that pole right or equivalently close the contour or whatever and you are going to get 2 pi I times the value at this point right. So from above you are going to get principal value 1 over omega prime minus omega so 1 over omega prime minus omega minus I epsilon is equal to symbolically it is this principal value plus I pi delta plus I pi because you are going to go around clock anticlockwise direction from 0 to pi I pi delta of omega prime minus omega and if you put a plus here then it becomes a minus here. Now we want the difference of the 2 so you want P plus I pi delta minus P plus I pi delta so you get 2 pi I times the delta function. So the discontinuity is straight away equal to minus I minus infinity to infinity the omega prime pi AB tilde of omega prime times 2 pi I delta of omega prime minus omega but that integral can be done it just says replace omega prime by omega and the I cancels with minus I and you have a 2 pi. So we have a very interesting result which says that this is equal to 2 pi pi AB tilde so what you really been doing is to we have written a dispersion relation for this K not a Hilbert transform but a dispersion relation for this K with this Cauchy kernel here and the meaning of the whatever sitting up there the spectral function is that it is the discontinuity of this analytic function this is the general statement. So again even this master function it is directly related to this fellow here. A little later I will show that this fellow here the spectral function here is related to either the real or the imaginary part one of the two depending on the situation of the susceptibility itself. So what we are trying to do is to get several relations we know one relation between the susceptibility and the spectral function but you can invert this and ask what is the spectral function equal to in terms of the susceptibility will turn out to be either the real part or the imaginary part and we will see how. But for the moment this is how you show that A the physical retarded susceptibility is the boundary value from above in the omega plane of a certain analytic function of omega master function which has this spectral representation. The spectral function itself is the discontinuity of this across the real axis the retarded the advanced green function is the boundary value from below of the same master function here okay. So it actually for the price of one you solve two different kinds of problems two different boundary conditions but we are not going to get into that at the moment. Let us come back here to this and ask the following question where do these formulas what do they reduce to if you had for instance we have seen there is a temperature dependence let us see what we can do say about that. So I need to again write down expectation value of let us write this commutator down explicitly V of tau minus V of 0 A of tau sorry V of tau A of 0 in equilibrium this was equal to left hand side was the commutator was the response function and we had a representation for it and you have tell me what were the factors this is equal to i h cross I divided by h cross. So let us put that back n, m A and m B m n A to the minus beta E n E m E to the minus i omega n m tau we are writing all these representations for tau greater than 0 okay. For tau less than 0 you would have a certain symmetry property which will come to in a short while but for the moment let us keep tau positive pardon me 1 over i h cross times the commutator was the response function and that is equal to this fellow here when it is the commutator divided by i h cross that is the response function that was equal to this series here. So I just brought this across on this side what happens at absolute 0 of temperature as you go to 0 temperature what should what do you think should happen this would correspond to beta going to infinity in other words you switch off thermal fluctuations and then you should be back to quantum mechanics at 0 temperature. There is no i h bar on the right hand side yes oh both should be yeah right right right oh yeah yeah it is okay yeah because I wrote the response function as 1 over i h bar times this I multiply by that i h cross this goes here you are right absolutely dimensionally as she says it should be just a perfect okay. Now what happens to this as t goes to 0 beta goes to infinity what happens to rho equilibrium remember the density operator in the canonical ensemble was e to the minus beta h naught but normalize such that trace e to the minus beta h naught was 1 normalize to that always. So what would you say is the density operator what is the spectral representation of the density operator itself we are now assuming that the system is describable by a complete set of states in some Hilbert space so it is really not the formalism as written down here is really not the most general one because I have made a specific representation I have said that this system has a Hilbert space there are systems which where you cannot talk about them and describe them in terms of state vectors in Hilbert space there is some density matrix and that is the end of it but we have made this assumption that here we actually have a Hamiltonian system it has got a nice Hilbert space complete set of states and it is slightly perturbed from equilibrium. So what is rho equilibrium equal to as an operator as an operator it is e to the minus beta h but now I am saying let us represent that operator in terms of the ket vectors phi n in terms of basis formed by the Eigen states of h naught. So it is clear that what you must do is write e to the minus beta h divided by trace e to the minus beta h naught that is what that is what the density operator is in abstract form now trace rho equilibrium is guaranteed to be equal to 1 because I have divided by this quantity. Now let us write this out in the basis formed by the phi n so this is equal to in the denominator it is clearly equal to summation over states n states labeled by n or the collection of quantum numbers times trace so this is phi n e to the minus beta h naught phi n that is the denominator obviously. What is the numerator what is the numerator numerator has got to be an operator so if these fellow yeah if these fellows form a basis for all states in the Hilbert space there is also a basis for all operators right for instance the unit operator is just sum over n phi n ket phi n bra so every operator should be writable in that form if the operator commutes with the Hamiltonian h naught then you will have only the diagonal terms right otherwise in general if you have an abstract operator a you should be able to write this as phi n phi n and then some matrix element here what matrix element do you have here that is what you call a and m and there is a summation over n right that is what you mean by this operator okay just as when I write a 2 by 2 matrix a b c d I mean a times 1 0 0 0 plus b times etc and that is the outer product that is right so it is just the same thing over again and therefore what is this equal to it will have only these projections it will not have it will not have phi n phi m here it has got to be diagonal and then a summation over n of course and this state this projection is weighted by the corresponding energy that is of course the representation of the density matrix in the basis formed by the eigenstates of h naught. So notice these are operators this is just a number so that is what my row equilibrium is what happens to this as t goes to 0 or beta goes to infinity so let us suppose that all your n yeah so you can see yeah what does it do why should it be only the ground state but I am not assuming that the ground state energy is 0 why should I assume that it is 0 it is bounded from below so we have we have assumed here tacitly that we have a respectable system whose ground state energy is bounded from below if it is not bounded from below and goes to minus infinity then everything will sit there and take infinite energy to get it up out of there so what happens now you see notice that this thing here can be written as e to the minus beta e naught phi naught phi naught plus e to the minus beta e 1 phi 1 phi 1 plus h at time yeah divided by this fellow here and this guy they are all orthonormal so it is e to the minus beta e naught plus e to the minus beta e 1 now if e naught is less than e 1 less than e 2 less than or not which it is because it is the ground state then you pull out the factor e to the minus beta e naught all these factors are going to go to 0 as beta tends to infinity as long as e naught is greater than 0 but whatever it is you can see that you can pull out this factor it is the biggest of the lot and these fellows will have e 1 minus e naught etc which are positive quantities and therefore as beta goes to infinity they will all go away this e to the minus beta e naught will cancel against this so it is obvious that this will go to just the projection of the ground state as it should and beta goes to infinity this thing goes to just the projector of the ground state that is what is meant by saying there are 0 temperature things are in the ground state it says that all the Boltzmann factors go away and the only thing that the density matrix has left in it is the projector of the ground state there is no need to assume that e naught is 0 or anything like that e naught is just smaller than all the other ease and of course we have assumed that the system has got a spectrum bounded from below so what we have to do here in this case is precisely that go back to the calculation and this equilibrium now is just replaced by a phi naught phi naught so at t equal to 0 in the limit of t goes to 0 it goes to this they can be no reference to temperature anymore gone to 0 that is it and this is it and this quantity phi naught phi naught is normalized to 1 so that is automatically down there is gone now what you do is to insert complete set somewhere here so insert here summation n phi n phi n and ditto here insert those follows here and you are going to get the matrix element a 0 n and then a b n 0 times e to the i omega n 0 or whatever it is and you are going to get the opposite here so the first term will have a 0 n b n 0 times e to the whatever it is and then be a term which is of the form b 0 n a n 0 e to the whatever it is and the frequencies here would be just the frequencies would be omega n 0 plus and minus signs so I leave you to complete this figure out what this and just check that it goes to what you expect from ordinary quantum mechanics each time and you can write down the response function at 0 temperature alright now let us look at something more interesting which is got to do with the properties of this spectral function what I would like to do is to exploit what we have for the commutator to write out expressions for quantities which do not involve the commutator but any product of two operators arbitrary operators. So recall that we found that a of 0 b of tau minus b of tau a of 0 in equilibrium this quantity was equal to summation n, m a n m b n n times what e to the minus beta e n m times e to the minus i omega n n tau so this immediately led to the fact that phi a b tilde of omega was equal to a summation over n m a n m b n n this form there was a 1 over i h cross in the phi and then we wanted to take a Fourier transform of the response function so there was a 2 pi and then a delta function of omega minus omega n so let us take this quantity to be a known quantity and I want to write various things in terms of this various spectral representations of various time dependent quantities given this. So what should I do the 1st thing to do is to write this as equal to 2 pi over i h cross summation n, m a n m b n n e to the minus beta e n times 1 minus e to the minus beta e to the beta h cross omega n m because that puts a plus e to the beta e n minus e to the minus beta e n so that is okay times the delta of omega minus omega n now since I am always going to integrate over omega in this I have a delta function here which phi is only when omega is equal to omega n m so I can replace this omega n m by omega itself. So I end up with phi a b tilde of omega divided by and then I pull it out of the bracket to the left hand side this guy here is equal to 2 pi over h cross summation n, m a n m b m n e to the minus beta e n so what I have got is the 1st part of this fellow that is this so now I can claim pardon me the n i factor 2 pi over i h cross yeah now I want to be a little careful with the algebra here so I removed this portion if I now take its Fourier transform so I do integral from minus infinity to infinity d omega 1 over 2 pi this guy e to the power minus i omega tau phi a b tilde of omega divided by 1 minus e to the minus beta h cross omega this is equal to 1 over i h cross summation n, m a n m b m n e to the minus beta e n an integral over omega times e to the minus i omega tau times that so e to the minus but what is that equal to apart from that i h cross factor it is equal to the 1st term here came from a of 0 b of tau so a of 0 b of tau divided by i h cross is 1 over i h cross this garbage without that it is just this fellow right so it is equal to i h cross over 2 pi times this guy so it tells you that a of 0 b of tau alone equilibrium no commutator alone is equal to 1 over 2 pi i h cross over 2 pi d omega e to the minus i omega tau phi a b tilde of omega divided by 1 minus e to the beta h cross omega by sleight of hand what we have discovered I can do this much more laboriously but what we have discovered is that while we have a nice respectful representation for the commutator we can do it for each term in the commutator except that the factor the extra factor that comes is this so it is the Fourier transform not of this guy but of that divided by this factor here I am sure you can I am sure you can but I think it is a lot more laborious yeah because you know discovering this factor is a little more tricky right so what I did was I exploited the fact that inside here this thing is a function of n and m but I pull this fellow out the Boltsman factor and then I replace this by the one with omega and pulled it out of the summation altogether I think it is a shortcut now similarly for the other fellow you put the e to the minus beta in here you need this term again you pull this out but you have to kill this term so to kill this and produce em you need to multiply by e to the beta h cross omega right so it is clear that b of tau a of 0 equilibrium is ih cross over 2 pi and integral minus infinity d omega e to the minus i omega tau e to the beta h cross omega divided by 1 minus so that when you subtract the 2 this factor cancels out from top and bottom and you will be back to this guy you will be back to the representation for pi itself so we have spectral representations for both these quantities therefore we have one for the anti-commutator okay so let us see what that does so that says oh it should have erased this so it says that the anti-commutator a of 0 b of tau let me call the anti-commutator plus with a plus here I do not want to use a curly bracket as sometimes as is done sometimes because it is the Poisson bracket we use that for the Poisson bracket so this fellow in equilibrium is that plus this so is equal to i h cross by 2 pi integral minus infinity to infinity d omega e to the minus i omega tau and then 1 plus e to the beta h cross omega over 1 minus e to the beta h cross omega times the spectral function but I can pull this one out e to the half beta h cross omega then you get 2 cross and I pull the same thing out to get minus 2 cm right so this is equal to minus 2 scancel pi a b tilde of cot hyperbolic beta h cross omega over 2 so the anti-symmetric part the a of 0 b of tau the anti the commutator had representation without this guy but the commutator anti-commutator the symmetric part of the product has this representation now there is a very neat way of we will interpret these things this was just a little piece of algebra but we will interpret these things carefully does this remind you of anything does that remind you of any particular famous quantity well even simpler than that if you have a harmonic oscillator so the energy levels are n plus half h cross omega right let us ask what is the average energy of a harmonic oscillator quantum oscillator with natural frequency omega at temperature beta inverse right so let me call this average value of h oscillator is equal to h cross omega times n plus half we have to sum it is not degenerate this thing is not degenerate so you have a summation n plus half e to the minus beta h cross omega into n plus half divided by the same thing n equal to 0 to infinity now look at the e to the minus half is going to go away numerator and denominator we do not have to worry about that so this goes away and then you have n e to this fellow divided by just this fellow this is a geometric series yeah or d over d beta of minus d over d beta of this guy right so whatever way it is you can see that with an n up here you are going to get the sine hyperbolic and without it you are going to get cos hyperbolic so you are going to get this cot hyperbolic once again so the average energy of a harmonic oscillator let us call it e beta h oscillator at temperature t let me call that equal to e beta and let me put it as a function of omega for a given natural frequency of me this fellow is equal to well what is going to be the average energy at t equal to 0 half h cross omega it is a ground state energy so that is got to come out it has got to be that right what happens as beta goes to infinity to cot hyperbolic goes to 1 as beta tends to plus infinity so at absolute 0 it is h cross omega that is it okay what happens at t equal to z infinity what happens to this guy what happens to cot hyperbolic beta h cross as beta goes to 0 it diverges it diverges like what so cot hyperbolic x what does it diverge like as x goes to 0 what should it diverge like it is sine hyperbolic over cos cos has only even powers 1 plus x squared etcetera over 2 so only the sine hyperbolic is relevant what does sine hyperbolic x 2 as x goes to 0 what a sine x 2 as x goes to 0 goes to 0 like what like x goes to 0 like x so cot hyperbolic also goes to 0 like x exactly like x so cot hyperbolic therefore x goes like 1 over x so this leading term is going to be h cross omega over 2 1 over x is 2 over beta h cross omega equal to k Boltzmann t right now classically what is the average energy of an oscillator at temperature t half k t because of the kinetic energy half k t because of the potential energy so it is k t this is the du Long Petit limit or whatever classical limit so in good shape it matches so this is in fact the formula and therefore you can write this thing now this fellow down in terms of this e beta you can write this cot hyperbolic as 2 over h cross omega so this h cross goes away here and you are left with this is 1 over 2 pi i 2 goes away sometimes this is called the fluctuation dissipation here we will get back to this so this thing here is just shorthand for this thing here there is no oscillator we are talking about but it is convenient it is very convenient to use that special the crucial point is we now have spectral representations for the product of 2 operators at different time arguments all of it in equilibrium by everything is with respect to the equilibrium ensemble and from this we are now going to start extracting some physics so I will stop here now. .


Alrighty, welcome to our Wednesday briefing, which is usually always operator centric Diane Mueller and the director of community development here at red hat. And this is another openshift commons briefing and today we have Rashmi Gopati and Varsha Prasad and a few other members of the operator SDK group and we're going to run through an update on the operator SDK. And if you're following along in the series upcoming on September 1st, we'll have one specifically on the Java operator SDK. So this will be sort of the overview one. And then we're going to let a few other folks come in on September 1st and do one on the Java operator SDK. So, without any further ado, Rashmi and Varsha, please take it away. We will leave time at the end for live Q and A in the conversation with some of the members of the team. And I'm looking forward to this update. So thanks guys for volunteering to do this. Thanks, Diane, for introducing us. Hi, everyone. I'm Rashmi Gopati senior software engineer in operator SDK. I'm here with Joe Lanford and Varsha Prasad and Mark O'Brien and Fabian. I'll be giving a quick overview of operator SDK and cube builder plugins with a focus on phase 2 plugins and Varsha will be taking over to talk about the Helm go hybrid operators. Varsha, would you like to quickly introduce yourself? Hello, everyone. I'm Varsha here, a software engineer with the operator SDK team. I'll be talking about the hybrid Helm plugin and also about the migrate command, which we have to move from package manifest to bundle format. Awesome. Before I delve into plugins, I'd like to give a quick background of operator SDK and cube builder and share some common goals of both the projects. Both operator SDK and cube builder aim to simplify building a Kubernetes operator and they allow you to quickly create and manage an operator project. So both these projects extensively use upstream controller runtime and controller tools to scaffold go source files and package structures. And in general, they're similar in the sense that they have the same basic layout and share project structure and scaffolding for go based operators. So the operator SDK moves some of its features and functionalities upstream into cube builder, wherever it's necessary and appropriate. And SDK will use cube builder under the hood so that SDK CLI tool will work with the project that's been created by the cube builder CLI. So the phase 2 plugins effort that I'll be talking about today will first make it to upstream and cube builder and then operator SDK will be able to use it. So operator SDK also offers additional features on top of basic project scaffolding that cube builder provides. So for example, operator SDK in it by default it generates a project integrated with operator lifecycle manager, which is an installation and runtime management system for operators. And also operator hub for publishing operators and comes with a scorecard tool for ensuring operator best practices and developing cluster tests. And the SDK also supports other operator types other than go such as Ansible and Helm. So another important goal of both these projects is extensible CLI and scaffolding. So what does it mean to have an extensible CLI and scaffolding? It means that cube builder needs to be more extensible for it to be imported and used as a library in other projects. For example, being able to provide customizations that operator SDK and other projects can use cube builder workflow with non-go operators such as Ansible or Helm. So in order for the project to have customized content, we need to have these extensions that will basically modify cube builders face scaffolding before any of the files are written to the disk. And one thing that helps achieve these extensions are plugins. So let's look at what plugins are. So operator SDK and cube builder both provides scaffolding options via plugins. They are responsible for configuring execution of the sub commands like init, which is used for project initialization and create API for scaffolding Kubernetes API definitions and create webhook for scaffolding Kubernetes webhooks. So when any of these sub commands are called, basically plugins are responsible for implementing the code that should be run. Now let's look at extending cube builder and operator SDK CLI through various phases of plugin implementation. These are the different phases of achieving extensible CLI and scaffolding. Phase one enabled cube builder to be more extensible and paved the way for it to be a library that can be imported in other operator projects. And it also defined a new plugin interfaces to drive the sub command functionality and provided a new CLI, which has been instrumental in laying a foundation for integrating external plugins with the cube builder CLI in their own projects. So if phase one achieved extensibility of cube builder, why did we need phase 1.5? Well, there were several cases of plugins that want to maintain most of the go functionality and add certain features on top of it, both inside and outside cube builder repository. That's the main reason why phase 1.5 was implemented, which was to chain plugins, meaning more than one plugin can be executed along with the cube builder CLI. And it also introduced a concept of plugin bundle for improved user experience. And phase 1.5 was crucial because it provided the ability to chain these internal plugins that currently exist in SDK and cube builder, which is very beneficial for third party developers that are using cube builder as a library. There were several challenges in phase 1.5, which is to run some post scaffold logic after all the plugins have scaffolded their part. So to tackle this new plugin API had to be designed for chaining these internal plugins. So both plugin phase 1 and 1.5 have been successfully implemented and achieved some desired goals. However, we wanted to extend it further by supporting external plugins in both SDK and cube builder. And that's where phase 2 comes to picture. It's an ongoing effort right now and it poses several challenging goals. It is supposed to tackle discovery of external plugin executables and these executables are not compiled with the SDK or operator SDK CLI, which means that when phase 2 is implemented, the source code of the plugins is not compelled to live inside the cube builder or SDK repository. So phase 2 handles chaining and running of these external plugins once they're discovered and once phase 2 is completed, cube builder library consumers will be able to support discovery and chaining of external plugins just by importing cube builder. Now let's look at why phase 2 is important and some of its use cases. So the first thing that comes to mind is out of tree. As these plugins are going to be external and not in tree of operator SDK or cube builder, it provides a lot of flexibility because the source code of the plugin is no longer required to live inside either SDK or cube builder. And that in fact eliminates the need to have all the plugins on the same version of go dependencies. Another use case is being able to support language scaffolds like Java or Python or Rust and so on and actually be able to write the plugin in that language. So plugin authors don't have to know go if phase 2 is implemented. So that way there's a lot of potential to significantly grow the number of languages available to operator SDK and cube builder. And writing a plugin API that allows for plugins to be written in a variety of languages and supporting other language scaffolds using standard and then standard out allows the API to be more language agnostic and it also allows for independent release cadence. So let's say right now the latest support currently in active development is the Java SDK plugin. Once phase 2 lands, the Java SDK plugin will jump on the bind wagon as well. So currently it has to be compiled with the SDK binary during releases, but with phase 2 it can have its own release cycles. Another important reason for doing this is as the external plugins since they're out of tree, they will have to be discovered at runtime. So that provides easy extensibility. Just being able to extend cube builder or after SDK without having to rebuild or re-release either of them. That's a huge plus. So to quickly summarize goals of phase 2 plugins, it is to discover and run the external plugin executables. And for discovery of plugin executables, we have considered quite a few approaches like group version kind scheme similar to how customize does it and also user specified file parts and another approach to add plugin executables with the prefix. After considering pros and cons of each, we are defaulting to using a name and version scheme which is pretty similar to how customize a handles plugin discovery. And as most plugins have group name and version, every external plugin gets its own directory constructed with the plugin name and version for the binary to be for the executable to be placed in. And cube builder will search for the executable with the name of the plugin and version of the plugin. And the other goal is for cube builder to be able to display plugin specific information when help flag is passed. Let's look at some of the examples and of how these external plugins can be specified in the CLI. On the left are some examples of the CLI request. The first example is init command with two external plugins. So in this case, cube builder scaffolds files are using the external plugins as defined in the implementation of init functionality by respecting the plugin chaining order, which is the order of init of my external plugin first and then my external plugin v2 second. And second example is create API sub command and it specifies plugins go v3 and my external plugin v2. So cube builder will scaffold files using go v3 plugin, which is a base plugin and pass those files to my external plugin v2 as defined in its implementation of the create API method. Of course, by respecting the plugin chaining order. And third example is taking in dash dash help flag. So cube builder should be able to display help information of the plugin, which is basically not shipped with the CLI binary. On the right is an example project file. In this project file, there are two fields to store plugin specific information. One is layout field. So the order of plugins can be specified in the layout field other than the CLI as well. And this ordering will be used for the plugin resolution on projects that are already initialized. And the other field for plugins is the plugins field, which is used to store any configuration information of any plugin. And it's an optional field. So in order to achieve these goals, we talked about there has to be communication and data passing between cube builder and the external plugins. The internal plugins do not need any inter process communication because they are a part of the same process. So direct calls are made to the respective functions based on the sub command in the CLI request. And as phase two is tackling out of tree or external plugins, there's a need for IPC between cube builder and the external plugin as they're both two separate processes. So what plugin system can we use? We've evaluated a few plugin libraries. One is the built-in plugin goal library and the other is Hashi Cards goal plugin. Based on the evaluation, the built-in goal library is more suitable for internal plugins as it doesn't offer any cross-language support. And as external plugins can be implemented in any language, it basically makes the goal library a non-starter. And Hashi Cards goal plugin system is more suitable than the goal library, but it's more suited for long running plugins and if you're handling quite a lot of deserializations. So for now, we are going with our own plugin system that can pass JSON blobs from cube builder to the external plugin over standard and standard out. And one of the nice things about sub-process is that we also get a built-in channel for errors, which is standard error. So like all the warnings and errors can be written and communicated to standard error in a structured format. So what exactly do we need to pass between cube builder and the external plugins? So message passing will occur through a request and response mechanism. Plugin request is, it contains information that cube builder wants to send to the external plugin through a standard in. And plugin response will contain information that cube builder receives from the external plugin. And let's see how this works with an example. Okay, so let's say user runs an init command in cube builder CLI passing in some flags and providing two external plugin names and versions. So what happens next? Cube builder basically discovers those plugin executables in their respective name slash version directories. And once they're discovered, cube builder sends plugin request as a JSON over standard into both these external plugins. And the external plugin constructs plugin response that contains information on updated file contents that should be scaffolded by cube builder. And external plugin basically writes back the plugin response to standard out in adjacent format as well. And if any plugin fails in the chain, the plugin chain should be halted because one plugin may be dependent on the other. And the plugin that failed will write back all the warnings and errors in a structured format back to cube builder. But what's going to happen with all the files that were scaffolded already? So ideally it's all operations on a virtual file system and not a physical file system. Cube builder would write all the files that it received in the response to disk only after it receives plugin response JSON from all the plugins in the chain. So if any plugin fails, all the files that were present in the context of scaffolding will just be discarded to prevent half committed state. This is the current design for our external plugin API using standard in and standard out. The actual implementation is in progress and will be demoed in another session when it's ready. For now I can show a prototype outside of cube builder, which is a go program that calls a Python plugin that's up standard and standard out and receives plugin request and response. So basically think of the go program as cube builder. And then there's the external Python plugin. So let me quickly share that. Can you see my screen? Yes, we can see. Can you make the font just a tiny bit? There you go. Bit bigger. Yeah, there you go. Is that better? Yes. Okay. Awesome. So wrote a like go program that handles setting up a standard and standard out and that calls a Python program. I'm just going to run that here. So this program is basically running a Python plugin shell script, which is just a wrapper script that calls are the actual Python plugin program, which is test.py. And with the sub command in it and dash dash domain and example.com. These are the raw flags that will be passed to the plugin. So the raw flags, whatever come as a part of the CLR request, they are passed directly to the plugin, all of the raw flags will be passed to every single plugin. And this is the response that comes back. So think of it as a plugin response. And there's a concept of universe, which contains all the files that are scaffolded. So initially, this universe starts out as empty for the first plugin. And once the first plugin receives a plugin request, it processes the command that was received, which was in it in this case and like perform some basic scaffolding. Since this is a prototype, it's just scaffolding a couple of files, which is license and main dot py. Both of those should be here. This file has been scaffolded and also the license header. Yeah, this was just an example to show how the standard and standard out works across a go program to a Python plugin. So let me quickly share the spec for phase two plugins by showing the plugin request and plugin response. Plugin request contains all the information that Cubelder receives from the CLI and and what it sends to the plugins, what it sends to the external plugins. So it contains the command that is supposed that the plugin is supposed to execute, which is in it or create API or create webhook. And API version defines the version schema of the plugin request that is being sent. This is important because there could be different versions of plugin request and response and for it to have a compatible version. We need to include this in both request and response. And initially this will be marked as V1 alpha and ARVs holds all the plugins specific arguments and this will be passed directly to the plugin and universe as I mentioned it represents the modified file contents that gets updated over a series of plugin runs across the chain. And plugin response contains the command that the plugin ran and it contains the help in case the plugin has any specific help text that the plugin wants to return to Cubelder upon Cubelder sending dash dash help argument. That's when the plugin attaches help and the API version to have a compatible version schema and universe representing the updated file contents and error information to indicate any errors and specific error messages. So that's for the basic prototype that I have so far and let me switch back to my presentation. So what's the future vision for Operator SDK and Cubelder plugins? We discussed phase two plugin so far. So when phase two implementation lands in Cubelder, it opens up a plethora of opportunities. So currently there's limitation of how scaffolding works. It's sort of one scaffolding fits all situation. So with phase two, we can potentially find novel ways of supporting customized scaffolding so that users can get a more tailored project scaffolding that fits their needs and purposes better. Another important thing on the roadmap for this is the library go plugin for the open shift platform. Some of our internal operator teams have some requirements to build their operators using library go and not control runtime. So a library go plugin that will init the operator project and creates APIs and webhooks and helps integrate with OLM will eventually enable OLM to manage some of those operators on the clusters. So several common operator patterns have emerged because of use cases like for example cluster add on and control plane and drivers and Kubernetes automation and so on and so forth. So we are looking to have custom scaffoldings for those operator types and patterns so that operator authors can easily develop the operators in these patterns by just staying focused on their use case and following the best practices. Powered by this plugin system and there are a lot of other exciting things that are planned other than the phase two effort to name a few the Java Quarkus operator plugin. Our team lead Jesus and Christopher from middleware will be doing a name session next week to go through more about Java operators. So that's one thing to look out for if you're interested in it and the hybrid plus go operator which is to make help us go SDK as the official helm operator. This will help our partners using helm operators to easily increase and elevate their operator capability level and overall improve the maturity of the operator ecosystem as a whole. And some other initiatives are config gen. Currently this is provided as an alpha option in the cubicle the CLI. But the idea of this option is to simplify the config scaffold. Yeah, so there are a few initiatives for the future. So if you're interested in contributing to any of these you're most welcome to. But before we look at how to contribute, I'd like to ask Joe if he would like to talk about the coming changes in this. Sure. So this is not so much of a fun update, but there's a lot of removals coming in Kubernetes 122, which, which will be part of the OpenShift 4.9 release. So if you're not aware already, the custom resource definition v1, beta 1 and the validating and mutating webhook configurations in the v1, beta 1 API versions are being removed. There is a v1 version of those things. So the upshot basically is that any operator that delivers CRDs that you or webhook configurations that use those removed APIs will basically no longer work and be able to be deployed starting with OpenShift 4.9. So Red Hat has started an initiative to try to spread the word that operator developers need to look at upgrading all of their resources used by their operator to make sure that they're still available in the Kubernetes 122 API server. And ideally have those operators available in an earlier version of Kubernetes such that users of those operators can upgrade to them and then have a smooth upgrade experience from their current version of Kubernetes or OpenShift to 122 or 4.9. So take a look at that link. There's more than just custom resource definitions and mutating and validating webhooks that are removed in 122. So take a look and make sure that as you're upgrading your operators that you are fair in mind those removals and keep those basically make sure that you're updating the resources that your operator uses to things that will still be available in 122. I think that's all I have on that. Thanks, Rashmi. If there's any questions there, ask them in the chat or ping us in our operator SDK channels or on the mailing list. Awesome. Thank you, Joe. Yeah. So as we mentioned contributed contributions are very much appreciated. So if you're interested in contributing here are some links of please feel free to try out the project file any feature requests or bugs that you would like to see or fix and submit PRs to collaborate with us. There are also community meetings that happen. We have operator SDK working group meeting and issue trash and backlog grooming meeting. The links can be found in the operator SDK working group. I mean, sorry, the operator framework community repository. So feel free to check that out as well. So, yeah, that's it for the overview. Any questions, comments, thoughts. I think you did a pretty good overview and introduction to as well. It's been a it's been a while since we've had an operator update SDK update on the Co-op and ship commons. So I'm really grateful for you guys taking the time today to walk through what's going on. I think the last time we did this to builder was just getting integrated into the operator. So it's been quite some time. So if people haven't been paying attention, there's a lot going on in the operator world and we would love to have you get more involved in the project. So please do reach out and attend some of these operator SDK community meetings. If there's a number of people from the team on the call right now, if anyone has anything else they'd like to add that we missed and didn't cover, please just speak up. Otherwise, that I think Varsha still has some slides to go over as well. Yeah, otherwise we'll move on to Varsha side of the fence here. So thanks for that bit. Take it away. So let me share my screen. So hope the presentation is visible. Okay, so I'm Varsha here and I'll be talking about the hybrid health plugin and also about the operator SDK migrate command, which we have to go from package manifest to bundle format. So let me first start with the hybrid health plugin, which is a very simple project and it helps us to argument the capabilities of a normal operator. So before getting into what hybrid health plugin is and what it does, let's have a quick overview of what a helm operator is. So this will give us a brief idea on why we actually ventured into the hybrid health world. So Helm operator, as we all know, uses Helm, which is a package manager for Kubernetes resources, and it also uses a specialized packaging format, which is known as Helm chat. Now, we all know what an operator does and operator looks at a customer resource, which is an instance of a user application. And it also makes sure that the current state of the customer source matches the desired state which is specified by the user. So Helm operator is no different, except for the fact that consider the customer source to be the Helm chart. So Helm chart is going to take care of the individual resources present inside the cluster and the operator takes care of the Helm chart itself. So Helm operator is perfect for stateless applications. And hence it was like by many of the users because it was very much easy to automate the existing Helm charts. So you don't even have to write a single line of code code. And there's no need to understand the Helm commands which are used here are to even install interfaces like tiller to interact with him. So things become very much easy. And out of the Helm operator, the user gets to have a stable, repeatable and auditable application. And by this, I mean that a user can deploy the same application across various nodes or various clusters as they want. And the operator will take care of all the other processes which happen. So this about the Helm operator and Helm operator does work well. But there are a few shortcomings which the Helm operator has. So on the right side, I have the operator capability model, which many of you would have seen pretty much often. So here we can see that the Ansible and Go operator have already reached level five and Helm is still hanging on level two. So the reason, the most important reason for this was that the users were not exposed to the Helm reconciler logic. That's the reason users were not able to add capabilities like they would be able to do so with Ansible and Go. So users cannot do a backup and restore process or have metrics set up or modify the logs to get more alerts or to have a deeper insight and so on and so forth. So if I am a Helm operator user, I would literally have to throw away the existing code which I have if I want to add additional capabilities. And I would have to start a fresh with either Go or Ansible based on my use case. So this is where hybrid operators come in, because hybrid operator is an amalgamation of the Helm and the Go API together. So let me quickly go through the project structure of the Hybrid Helm project so that when the demo comes, we have a better understanding of what this project brings into the table. So like any other project, we'll use an init command. And with the operatoristic init command, we'll have a bunch of files scaffolded. But the difference here is that the bunch of files which are scaffolded are compatible with both Helm chat and also the Helm API and also the Go API. So each of these APIs will have their respective reconcilers. So you can think of this as the Helm reconciler which is working in foreground which is having a Helm chart which is doing its own action. And we have a Go API to argument it. So we can have Go API to have the metrics collected out of it. We can have that to do a backup and restore process and many other things. So we all know that the Go reconcilers completely customizable. We can use controller runtime, have a custom logic return for the Go reconciler and it's very much easy to implement that. But in case of Helm reconciler, currently it is not so transparent to the user. So here is where we provide hybrid library helpers because with hybrid library helpers users will be able to interact with the Helm reconciler. So in simple terms, they would be able to add something like pre and post install hooks which can basically interrupt the release process of the chart and make changes to the Kubernetes objects. So this is the timeline which we had for the hybrid Helm operator project. So the phase one of the project involved creating and providing a library which has all the helper logic for interacting with the Helm reconciler and introducing the aspects of controller runtime. This is similar to how we would do with either Go. And the second part of the phase one was to scaffold the code required for the operator to work with both the Helm and Go APIs, which I'll show in the demo. And the second phase of the project which we are right now working on was to migrate the Helm operator code out of the operator SDK repository which is right now the case and move it to a separate repository which is known as Helm operator plugins. So on a long term, the idea is that when I scaffold a hybrid operator, and if I don't make any customizations to the reconciler, it should work as a normal Helm operator which is present currently. So on a longer term, there won't be any specific demarcation with a hybrid Helm operator and the Helm operator. So both of them will become kind of the same. And the third and the interesting aspect is to have a tutorial which basically showcases the interpretation and the usefulness of having Go and Helm APIs and the use of us bring the Helm operator and argumenting the capabilities of the current Helm reconciler. So the outcome of this is to release the hybrid Helm operator as a phase one plugin. As Rashmi had explained, we have phase one and phase two plugins. And the phase one plugin will here refer to the fact that similar to how we scaffold a normal Go, V2, or V3 project or even an Ansible project, we'll be able to do so with the hybrid Helm plugin. So we could use the operator STDA command and Helm operator, hybrid Helm plugin would be integrated with that. And definitely we will, we are welcoming contributions and will develop the hybrid Helm operator mode. So I have a quick demo on the functioning of the hybrid Helm, the scaffolding of the hybrid Helm plugin. So I hope my terminal is visible. So here I have an empty repository and I'll be scaffolding a hybrid Helm project. Right now the project, the plugin is not integrated with operator SDK. So I'm making a few modifications to the operator SDK building it locally. And in the init command, we would be providing the hybrid.helm.stk as the plugin name. This is the plugin name which is used to scaffold the hybrid operator project. And it also accepts the project version which is default version is three and will use a repo flag to describe the path of the repository. Now let me go through the project structure here. So as we can all see that we have a few placeholder repositories, we have API and controller repository, which will, which will use for Go APIs. And we also have a Helm chart repository which will have the Helm chart when we create a Helm API. In addition to this we have a Docker file which is basically used to build a Docker image of the operator which we can then use to deploy. And then we have a make file which is going to help us with the project on creating bundles, testing out the operator installing the CRDs, testing out the operator locally and so on and so forth. Our main dot goes interesting. I'll come to it a bit later after having both the API scaffolded. And then we have the project file which contains the metadata for the project like the layout, the plugins which are present and the project name. And then we have watches.yaml and this will be used in the Helm API because this will contain the path to the location of the Helm chart. Now let me go back and start creating a Helm API. So here I'm going to provide the plugin flag to be the Helm dot SDK operator dot operator framework which is the generic Helm plugin which we use. Now here, if we see, we do have the Helm chart present inside the Helm chart repository. So this is the default chart which gets scaffolded with operator SDK, but we definitely can use an existing chart which we have locally or use a chart which is present remotely. So in addition to this, what I'm going to do now is I'm going to scaffold a Go API in the same project. And this is what I meant when I said that the scaffolding is compatible with both Go and Helm together. So in the Go API, I'm going to scaffold the same resource, similar resource, but it belongs to the same group. So here I have provided the plugin version to be Go v3. This should be done soon. Yeah. Now let's have a look at the scaffolding. So we have the API folder filled with the scaffolding for defining the specific type which we have created. And we have the controller folder where similar to a normal Go project, we can define the custom reconciler logic of which we have using controller and tag. Now the most important part here is main.go file, which we have scaffolded, which was not done before in Helm operator. So this has the reconciler part for the Go API and also the reconciler part for the Helm API. So here, since the Helm reconciler is exposed, users can use the library functionality, the helpers which are provided in the library to actually make modifications. And add additional capabilities to the reconciler. So this is the library which I was talking about earlier.  So in simple terms, we could have, as I explained before, a Helm chart running doing its work. And we can have a Go API implemented with a custom reconciler logic, which provides all the metric collection. We can use it for backup and restore process. So now this project is similar to a normal Go project, where we can implement our own custom logic and then deploy, create an image of the operator and then deploy it locally on a cluster on a production environment. So this was about the current state of the hybrid Helm operator. We also have the operator project is currently in a recent stage, but it is available in the Helm plugins repository. So we do encourage anyone who are interested in the project to definitely try this out and provide us feedback on how we could improve this. And please feel free to file any issues or any features which you think would be useful in the Helm, which you would like to see in the hybrid Helm repository. And we are always welcome for contributions. So please do submit a PR directly in the Helm operator plugin repository. And we also have an enhancement proposal up, which explains about the hybrid Helm project and why did we venture into this. So this was about the hybrid Helm. I can move on to the migrating of package manifests to bundles. So this is a different topic. And to explain a bit more about this is that operator framework has moved from using package manifest format to bundle format. And the reason for this was mainly related to the performance issues. But before going in more into that, I would like to give a brief overview about operator lifecycle manager because both the formats revolve around what operator lifecycle manager does. So OLM as the name suggests is a place is what manages the lifecycle of an operator. And by lifecycle of an operator, I mean that it can install it starts from installation to having the dependencies resort to having the operator upgraded to different versions. So how does OLM know how to handle our manager operator. So for this to happen, we would the operator authors would have to package their operator manifests and submit it to OLM so that OLM knows how to manage and make changes to the operator which is deployed in the cluster. And to do this, we use two formats. One was known as the package manifest format, and the other is the bundle format which is being used currently. The package manifest format is being deprecated and it would soon be removed in future releases. So this is difference between the package manifest and the bundle format. I'll go into the bundle format a little bit deeper in the next slide. But on the package manifest format, we can see that all the different YAML manifests, including the CSV and CRD, which belong to a particular version are present inside a single version directory. So each directory represents a similar version and all the manifest related to that version are present in that directory. And this was the format which was used earlier. Now we have moved on to the bundle format. And in the most important part of the bundle format is that it contains two directories. One is the manifest directory, which contains the cluster service version, the custom resource definitions, and all the other supported Kubernetes YAML manifest, which are required by the operator. And it contains the metadata folder, which has annotations.yaml, which basically annotate the bundle.docker file, which annotate the bundle image. And it contains data like having the package name or having which version of SDK was used or the channel, which needs to be subscribed to and other details. And then we also have bundle.docker file, which contains the data, which is helpful to build the bundle image. Now let's go into the package manifest to bundle command. So the operator SDK package manifest to bundle command accepts a required argument, which is the package manifest folder. It accepts an output directory where the bundles are created. And it also accepts the image tag name, because it creates an image out of it, which can then be used with operator SDK, run bundle command to run the bundle. And we also have a build command, which I'll explain in short with the demo. So here I have a normal memcache project, a sample project. And let me show you the structure of package manifest, which we have here. So we have all the manifests, including the CRDCSVs present inside a particular directory. And when we convert this to bundle, we will have two bundles, each of the bundle will represent the particular version of the manifest. So let me go ahead and use the operator SDK package manifest to bundle command here. So I'm providing the base tag, the image name, and it will be tagged with respect to the version of the directory which is provided. Now an additional and interesting fact here is that we also provide an option of the build command. So the default build command is Docker, but users can also provide a podman command to build their image. Oh, sorry. I would have to remove the bundles. Now we will have to ensure the bundles which were created. So these are the two bundles which are created out of the package manifests, which contain the manifest folder, metadata folder, and also the bundle.docker file. And we also have images built for these two, and these images can then be used with operator SDK run bundle command to test your operator locally on an OLM cluster. So this was about the operator SDK migrate command. And also a quick demo on the hybrid term. So any questions related to either hybrid hand project are the migrate command which we have. Not a question, but a comment on the helm operator stuff. There is a team within Red Hat already working with the hybrid helm operator libraries. The Stack Rocks team is building their operator with those libraries. They're already contributing to it and using it. It's out there. It's ready to basically start being consumed. So just want to reiterate what Varsha was saying earlier that we're really looking for contributors there. And we think it's like at a point now where you can actually start using it in your products. So it's not really like it's alpha in terms of it could change still, but from a stability standpoint, maturity standpoint, it's definitely usable. So we're definitely interested in getting folks out there using it and giving us some feedback on it. And what is the best way to get feedback back to the team? Is it through the community meetings or the mailing list or the dev, the channel in Slack? Users can actually file requests through feature requests through GitHub. We definitely triage those in community meetings, but we are always available in the Slack. So I can ping the operator SDK Slack team, operator SDK team on Slack and then will anytime be ready to answer questions or clear any doubts related to the current work which we are great. Well, I'm not seeing any questions in the chat and you have covered a lot of territory today, probably a lot more than I expected. So thank you very much for making the time to put this all together. I think we're going to post the slides if you can share all the slides with me after this, the slides and the video up on the OpenShift.com blog. So take a look for that if you're looking for the slides or any of the resource links will be in that blog post as well. So thanks. And again, the next session we have on operators will be on September 1 and it will be covering the Java operator SDK. So looking forward to that one as well. So keep an eye out for all of this. I'm sure if you're heading for KubeCon in the fall, there'll be some operator content there as well. And we'll keep you up to date and hopefully a little bit more frequently than we have been. So thanks guys. Rashmi, is any last words you want to add in? I think we covered all of this. You've covered a lot. So thank you guys for the time and much appreciated. Joe, thanks for coming on board and everybody for all the work and effort that you've been putting into the operator SDK and the entire operator framework. It shows in the maturity of the project and all of the adoption that's been happening. Thank you guys. Thanks a lot, Diane, for organizing this. All right, take care. Thanks so much, Diane. Thanks everybody.


I think the alliance between men and women is a very important one across the board, not just in Saudi. I mean, Anel Sharif had her father and her brother's support, and so many other women who were breaking the ban on driving had their male-relative support, too. But when you look at Egypt and what's happening in Egypt and Tunisia and other countries, I mean, there was a story in the New York Times that drove me absolutely nuts, and I was telling Catherine about this. Because on its surface, the story seems to be good, which is that they feature a young woman called Samira Ibrahim who was subjected, along with 17 other activists, to so-called virginity tests by Egyptian soldiers in March of last year. These so-called virginity tests are basically sexual assaults that the military used because they claimed that they wanted to ensure that these female activists that detained were virgins so that they didn't accuse the military of raping them while in detention, as if only virgins could be raped. So then this story, I mean, we could have a panel alone on these so-called virginity tests, but two of the women spoke out. One of them gave an interview from the very beginning and was chastised across the board and called a liar by everybody because the military denied it had happened at the time. It was a very sensitive time for Egypt because the military was still portraying itself as the safeguards of the revolution. But a young woman called Sadwal Hosseini spoke out and broke that taboo of speaking about the military. Samira Ibrahim who was featured in the New York Times story today has actually raised, is suing the military. There's this woman from a very conservative part of Egypt who was suing the military and standing up and saying, you can't do this to me. And the reason the other woman isn't because she doesn't have identification papers and you need ID to raise a lawsuit in Egypt. But what really, really enraged me about this story in the New York Times is that it said, you know, I gave all these statistics about women and sexual assault that I quoted 100 women being sexually assaulted. It quoted one of my favorite feminists in Egypt, a woman called Muzna Hassan who's the executive director of a feminist movement called Nazra, which means vision. And she's fantastic and she was saying, you know, we don't want men to be the only guarantors of our safety and security on the streets. Because if we have to wait for men to protect us against the sexual violence and the physical violence of the army, it will mean that men will set basically the guidelines for us. It will be, I will protect you as long as you do this. I will protect you as long as you behave in that way. So here's an Egyptian feminist saying this and she's saying it clearly and openly, and she's encouraging other Egyptian women to go out there and protect ourselves. And yet the story says that Egyptian women, and they mentioned that woman who was dragged across Sahih Square and stripped down to her bra. And if anybody calls a blue bra girl, I swear I will kick you where it hurts because she's not a blue bra girl. She's a woman and she must not be reduced to the color of her underwear. But anyway, so they use this woman and they say Egyptian women, basically female revolutionaries are mostly silent victims who risk becoming these icons of the male dominated uprising. And that enrages me. Where is the silence? Where is the silence when you hear women like Ebtahal and myself? Where is the silence when Mohsen Hassan is telling the New York Times we will not wait for Egyptian men to protect us? Where is the silence? And so it looks like the New York Times is doing us a favor by showing us, look, we're writing about women now. They never interview women when it comes to political stories in the Middle East. I mean, obviously, everything is political, but when it comes to, you know, they never pick up a phone and speak to female experts about what's happening in the region. But the one time when they focus on women is women as victims. So look at the irony here. We're talking about men and women on the ground fighting together. And yet the New York Times is portraying women only in this context of being victims, but yet they have these feminists and these women who are standing up to the military. A 26-year-old Egyptian is suing the military. And the New York Times is telling me that Egyptian women are mostly silent victims of a revolution and icons of these men. It enrages me. So you've got to ask how you look at women in that part of the world. What is the lens through which you look at women in that part of the world because they have far outstripped you. They're not waiting for you to look at them in the diversity that they come under because as Isabel mentioned and Ibtahal mentioned, there are men and women and the support goes across both camps. So I think part of trying to understand what's happening in the region with these uprisings and revolutions is understanding that for too long you have looked at that part of the world through a very narrow lens that portrays women there as victims, that portrays Muslims there as barbarians, that portrays the dictators there as these benign men who get all of these givens that have very surely been dismantled by the various uprisings that you've seen because that's the least you can do to honor the courage of the people there.


On one scoop, I gotta say, I always enjoyed this stuff, guys. Hey, what's up guys? It's Josh here. Today, I want to do a little review on this Alpha Yo, Alpha Yo Himbine. Now, actually, I had seen this supplement in quite a bit of pre-workouts slash energy blends. Every single time that I've used a pre-workout or an energy blend that featured this product, it's always had just this next level focus, next level feel. It would be very specific and it would be only in the products that contain this. So, I was really, really excited to try this on its own. Now, I think there is something called Yo-Himbine or Yo-Hem-B, one of the two. I know they kind of are used interchangeably. Bookstermans just started carrying just the normal Yo-Hem-B or Yo-Himbine and this one as well. So, this one is actually supposed to be more concentrated. However, the active ingredient here is Alpha Yo-Himbine and it's in something called Roskaline. They have 25 milligrams of Roskaline in this product, but only 8% of that is Alpha Yo-Himbine. So, if it were to be 100% all Alpha Yo-Himbine, you'd have to get a very, very, very small scoop. I'm really happy that they did this because this is one of those supplements that you do and absolutely do not want to overdose under any circumstances. And when you're dealing with something like 2 milligrams, 4 milligrams, I mean, it's almost too hard to put on the scale. It's something you don't even want to worry about if you're going to have issues taking even 8 milligrams. That's just so much. So, I'm really glad that they kind of put a bigger scoop in here. Now, they actually have the normal Yo-Hem-Bine or Yo-Hem-B and I think that one is 3 milligrams. Now, that one is 100% concentrated. I think they only send you 3 grams of that pack, but you only need 3 grams if 3 milligrams is the dosage. I almost wish they did a little bit of something like this where they didn't make it 3 milligrams. They kind of diluted it a little bit, so it's a little bit easier to get a safe dose because again, 2 and 3 milligrams is just so, so tiny. This is also the only bulk stimulant that it's not white. All the other ones are like white powders or like white in some shape or form, but this is like a dark kind of powder. So, it almost seems a little bit more natural. And again, it's not really the extract here. This is more of just like the natural, a little bit more natural and a little bit less of the extract. But again, like I was saying, I really like that because the milligrams are so low. And a lot of people actually use this for apparently erectile dysfunction, but that wasn't something I had a problem with before. And it's not something that I overly noticed on this one, but everything worked fine. Everything was good as far as blood flow. But that's actually good to know that it's supposed to increase blood flow because from my understanding, I think most stimulants kind of constrict it. What did I feel on it? Did I like it? To be honest, guys, it was pretty much exactly what I remember from the original pre-workouts. So most of the time that I would try this, I would try this kind of in a mix of something else. I would kind of watch the excess stimulants that I would be putting into it just because this is a stimulant and I'm trying it out. So, you know, I wouldn't do a max dose of some other stimulant and then this one. I kind of always left a little threshold just in case there were some overstimulation. But on one scoop, I got to say, I always enjoyed this stuff, guys. It's one of those things you take. I'm enjoying it the whole time. And then I think about it later. And I'm like, oh, yeah, I had a great, everything felt great. Everything felt smooth, no anxiety. I would say there's got to be a little bit of dopamine stimulation because I really find this to be pleasant. But only one time that I decided to do the double dose and I was taking a few other things at the time. So I don't know if it was everything that I was taking or just the double dose of this, but I really, really, really did not like the stimulation off of two scoops of this. But for me, there's almost little to no anxiety. It's actually just a mood boost off of one scoop. Most of the products I've tried that contain this product used it at about two to three milligrams. I think two is the go-to. So I really, really, really enjoyed this product. It's something I could throw in almost every day. I would watch out about that overstimulation. And again, I'm so happy that they kind of diluted this because I've tried this product, including the other pre-workouts probably around a hundred times. And I have had no problems whatsoever if I'm my end. The second that I take two scoops, I just hate it. And I've kind of wanted to almost take a little bit of a break from it from that point. It was kind of crazy that it's so, it's so easy to overdose. So I'm so glad that they made this a little more concentrated. And this is a product that I really, really enjoy. I've always really, really enjoyed it. And I do recommend it to you guys. I don't know if this is one that they offer on Amazon. I think some they offer on Amazon, some they put on their website. But I got to say, guys, I really, really enjoyed it. But in my experience, please only try one scoop. And if you want to try more, please inch up from there because it is a very, very potent product. But anyways, guys, we're on the road of 50,000 subscribers and I couldn't do without any of you guys. I hope you guys are the best. Having a great day out here. Hopefully having a great day at home. See you all in the next video. Peace.


Ladies and gentlemen our ceremony will begin momentarily. We also ask that you please silence all cell phones and other electronic devices at this time Thank you Good morning, and welcome to historic joint base Meyer Henderson Hall Originally established as Fort Whipple in 1863 and changed to joint base Meyer Henderson Hall in 2009 Its main purpose was the fortification and the defense of Washington since its inception Joint base Meyer Henderson Hall has been the home of horse Calvary artillery and infantry Today it is home to the Old Guard the United States Army Band and the United States Army garrison Before today's review begins the United States Army Band Pershing Zone presents a pre-ceramino concert featuring the following musical selections dogface soldier and army medics Ladies and gentlemen your United States Army Band once again. Good morning, and welcome Today the United States Army military district of Washington Represented by the soldiers of the third United States infantry regiment the Old Guard and the United States Army Band Pershing Zone Pay special tribute to Major General George N. Appenzeller who's retiring after 29 years of distinguished service to the United States Army and our nation Participating in today's review from left to right is the United States Army Band Pershing Zone Formed in 1922 by then Army Chief of Staff General John J. Pershing the United States Army Band is the premier band of our senior service Pershing Zone provides musical support for ceremonies and special events in our nation's capital and throughout the United States The United States Army Band is only the direction of Captain Bonnie Alger and led by drum major Rob Moore Elements of the Old Guard include honor guard company commanded by 1st Lieutenant John King and led by Sergeant 1st Class Alfonso Roman Next online is Bravo Company commanded by Captain Frank Lozames and led by 1st Sergeant Cody Marthailer Next online is Charlie Company commanded by 1st Lieutenant Nicholas Christensen and led by Sergeant 1st Class Stephen Massey Following is the Commander in Chief's Guard pattern after the unit created by General George Washington in 1776 to be his personal guard The Commander in Chief's Guard is commanded by 1st Lieutenant John Harvey and led by Staff Sergeant Tyler McKay The last element online dressed in a continental musicians uniform is the United States Army Old Guard Fife and Drum Corps During the American Revolution musicians wore the reverse colors of their parent infantry unit The men and women of the United States Army Old Guard Fife and Drum Corps maintained a tradition by wearing red coats instead of the infantry blue Decor is led today by drum major John Parks Ladies and gentlemen moving into position is the commander of troops for today's ceremony Lieutenant Colonel Derek Draper Deputy Commander 3rd United States infantry regiment the Old Guard Since the days of the American Revolution the colors have won one of the most important elements of a military unit Therefore taking the center of our formation in just a moment and bringing the national color is the nation's foremost color team The 3rd infantry's continental color guard led by Sergeant Alexis Gaslam Ladies and gentlemen, please stand for the advancing of the colors. Please be seated The history of the 3rd United States infantry regiment reflects the growth and development of our nation 55 well-earned battle streamers to valorous unit awards three meritorious unit Commodations and five superior unit awards attest the old guards record of bravery in action and achievements during peacetime In 1922 the War Department granted permission for the old guard to pass and review with bayonets fixed The old guard will now fix bayonets to the traditional beat of the drum Ladies and gentlemen taking the reviewing stand is the reviewing official for today's ceremony major general George in Appenzeller accompanied by the host major general Trevor J. Braiding Camp commanding general joint task force national capital region and United States Army military district of Washington Ladies and gentlemen, please stand as honors are rendered. Please be seated Ladies and gentlemen, please stand for the advancing of the colors and remain standing for the United States national anthem Please be seated major general Braiding Camp is now moving into position to honor the retiree Headquarters department of the army special orders by order of the secretary of the army the following general officer is retired Major general George in appenzeller We are proud to recognize major general appenzellers devotion to our country and we wish him happiness and prosperity in his well-earned retirement Ladies and gentlemen, please stand for the posting of the colors. Please be seated United States Army is honored to have presented today's special ceremony. Thank you for attending and enjoy the rest of your day


This is stock number 10160. We are here at Summit Automotive in Fond du Lac, Wisconsin, your new and used car and Chrysler headquarters. Today we are checking out this super clean 2015 Chrysler 200 S package. This vehicle has a 2.4 liter four-cylinder motor from this HD video. You will be able to tell that this car is extremely clean all the way around inside and out. Black is the color we shoot all of our videos in 1080p. So if you have HD capabilities on your computer tablet or a smartphone device, turn them on right now because it is like you're right here looking at the car with me. And definitely your best way to check out the vehicle before seeing it in person. This one comes with the 18 inch painted alloy rims. No scuffs or scrapes on there and it has Falcon Singer 235 45 R18 tires. These tires are pretty much like new I'd say 90% of the tread left 80 to 90% so lots of good tread left on those tires. No denser dings on that front fender. Comes with the projector lamp headlamps LED running lights. No dense dings or cracks on that front bumper and it does come with the projector lamp fog lamps as well. Passengers side fender absolutely perfect. On the passenger side rim no scuffs or scrapes on that. As you go down this side of the car you can see just how clean the body is, how reflective and mirror like that paint is, how clean the body is. We take these HD videos so if you are far away or even if you're close by and just can't make the trip down you can still see the car here the car and have confidence in the vehicle that you're looking at before you even get here so that when you do get here there's absolutely no surprises and you'll be 100% ready to go. No scuffs or scrapes on this back rim and the back tires have just as much tread as all the other tires and in fact these tires look almost brand new you can still see the little wear knobs on them so very very new tires on this car. As you come around to the back no really major dents or dings or cracks back here. Very nice and clean. It does come with the dual tipped exhaust. Deck lid is in nice shape as well I didn't see any dents or dings on that. What's nice about these two hundreds is that trunk opens up without having to press a button inside. It does have a spare tire. It does have a pass through as well but it's got a little button underneath the Chrysler symbol to open up that trunk and as you go down this side of the car just as clean as that passenger side. Rear rim is an excellent condition and on the rest of the side of the car no dents no dings very very nice. It does have power mirrors as the enter-and-go system.  Seats are in really nice condition no rips or tears. Power driver seat with factory lumbar. Floor mats are nice and clean auto headlamps and power windows power locks power mirrors. As we hop inside the car here you can see that this one has 48,154 miles. You get the digital speedometer as well as the outside temperature and compass display. You got the nice blue accents around the instrument cluster has a leather rat steering wheel cruise controls on the right bluetooth and information center controls on the left paddle shifters you got your thumb pads on the steering wheel as well. Comes with the touchscreen radio the 5.0 touchscreen AM FM and Sirius XM radio capabilities and you can do your climate control up here as well and you can do your climate control down here. So it's kind of a dual climate control system there has the nine-speed automatic turned-out transmission, passenger seat and floor mat are in excellent condition this car smells very clean inside I don't think it's ever been smoked in and the headliner is in really nice shape as well. You do get map lights up there and we'll take a quick look under the hood and we'll check out the back seats.  It does have the two-tone leather back here as well and factory floor mats these seats do fold down for extra storage like so and it does have that pass through in the center there and we'll take a quick look under the hood. I would personally like to thank you for checking out the video today hopefully from this HD video you'll have been able to tell just how clean this car is all the way around inside and out so you can make a smart buying decision. Under the hood we have the 2.4 liter multi-air motor engine base very clean runs very smooth this car has been fully safety then inspected by our service shop has a fresh oil and filter change all the fluids have been checked and tapped off and this car is 100% ready to go. To see more pictures of this car or one of our other 450 new and used cars trucks SUVs minivans Wranglers you name it we got it go to our website www.summitauto.com full pictures and descriptions of every single vehicle from two locations all at summitauto.com and if you'd like to check out more HD videos you can go to youtube.com slash summit auto remember to like subscribe and share on this video and all the videos that you see there in fact in a second you will see a link to subscribe to our YouTube channel on your left it links more used car and SUV videos and inventory on your right if you've not been on our website on the bottom link to this vehicle on our website click those check us out and we really look forward to helping with this super clean 2015 Chrysler 200 s package thanks again


What is going on guys welcome back to the channel, and I appreciate you being here today I bring this top five destiny to power weapon plays of The week but before we get into the video guys if you'd like to win some epic loot in the form of Exclusive emblem and sparrow colds gift cards and much more simply drop a like on this video Leave a comment down below and join my discord server linked within the video Description well, let's get straight into this top five in that number five. We have a clip sent by Xander six I say this time and time again This thing is a literally an animal stay out of its way although that's kind of hard to do In number four we have a clip sent in by RMG 05 25 it isn't just a war cliff Which is capable of team or wiping either. I can't wait to see what you do with that In at number three, we have a clip sent in by Hilly and crewed 55 showing off some great sniping skill in this great great sniping In at number two we'll have a clip sent in by Delta 6168 So this guy's huge rifle definitely works amazing amazing clutch In at number one we have a clip sent in by 1432 Not actually having this myself yet you to be in a lazy I can however understand what people mean by saying it's one of the best PVP exotics in Destiny since the start watch this if you haven't used it yet, and you'll understand what I mean Now show them the true meaning of war three minutes remaining I says and this top five power weapon plays of the week if you enjoyed the video leaving a like really does help me out If you're new around here and enjoy daily destiny videos be sure to subscribe If you have any amazing clips to send in send them into the email address links within that video description But guys thanks as always for stopping by and hopefully I will see you on that next one