Mulkudan from IAT Delhi and his talk is a reduced type in one-dimensional analytics algebra. Are you able to hear me? Okay so thank the organizers for inviting me and also ICTP for conducting this wonderful conference. I get to see quite a lot of people who I wouldn't be able to see if I were in India I'm guessing. So today's talk is going to be defining what reduced type is and how it compares to the usual type and why the word reduced comes into play. I came up as some kind of an offshoot of another problem I was working with. I'll just explain what reduced type is the setting and why it came to be defined so and how does it compare to the usual kind of Macaulay type. So the setup is the following. Of course you have one-dimensional so one I'm going to assume algebraically closed and R is S mod i which is the k joint x1 up xn modulo the ideal i and i is contained inside the square of the maximum. So I don't get to reduce the embedding dimension and it's also a prime idea so this guy is actually a prime idea so I work only with domain though I'm suspecting that you could generalize it to reduce. Of course one dimensional the dimension of the ring is actually equal to one and complete local and domain. So one of the nice consequences is that the integral closure is a nice DVR with unifying parameter T. What one can do is basically write the ring as k joint alpha 1 d bar a1 alpha n d bar a n where alpha i's are units in R bar. You can define it as one-dimensional and becomes a nice ring set. So of course my handwriting is so bad but these are capital X's and if I write small X's these are the images of Xi's in R. So basically this guy is my X1 blah blah blah this guy is my Xn and these guys these numbers are kind of very important so you want to play in and it's kind of you can define valuations on AR. So on R bar I have to follow in the valuation of t of t is summation of ci t par i of course the power series in t par i to be the minimum among all the i's that the ci is not equal to the order value standard order valuation on the pfd. So this induces a valuation on on R also induces a valuation on R so you have a valuation semi-group on R. V of R is the valuation semi-group. I'll be talking a lot more on the valuation semi-group but there's a very strong relationship between the ring and the valuation semi-group also. If the valuation semi-group exhibits some properties then the ring also exhibits some equivalent properties. I'll come back to that in a little bit and also know that the minimal reduction of the maximal ideal one of Xn is the ideal generated by X1 is precisely because if you extend the maximal ideal to the integral closure it's actually princely generated. The minimal reduction of the maximal ideal is nothing but the ideal generated by X1 itself. You can arrange it in such a way that the a's are in increasing order you have the minimal valuations in which are also the multiplicity. Okay so one quick example of that take for example k adjoint t power 4, t power 6 plus t power 7 and t power 11.  The valuation semi-group is of R, where this guy is my R, is actually generated by 4, 6, 11 and 13. It's kind of easy to just say that you just take these valuations and valuation semi-group will be generated by a1, a2, an but it's not true. You have to be a little bit more careful. The valuation semi-group may be generated by more elements than the a1, a2, a5. Okay so the next definition I want to make is about the conductor. Conductor is nothing but R adjoint R bar on the quotient field and it's the largest common ideal between the ring and the and the integral closure and there is no way that the conductor is always contained inside a principal ideal. And this guy is very special because one can define this guy to be generated by t power c, t power c plus 1, all the way up to t power c plus a1 minus 1 and this guy is special because it contains every monomial after t power c but not t power c minus 1. c minus 1 is not in the conductor but it contains every monomial after t power c. For example a quick example for that one is for example take K adjoint t power 4, t power 11 and t power 17. You can show that the conductor contains everybody after 19 and t power 18 is not in the conductor. It's not very hard to prove it. You can basically check all the valuations that appear generated by 4, 11, 17 and you can prove that everybody after 19 is present. Okay so for example this one if you want to check the conductor the conductor is going to be 10. Okay so what is this reduced type? Reduced type is basically the K dimension of the conductor plus x1 modulo x1 that's the reduced type. I'm going to call this as s throughout the talk, s of r or s. Either one of these will be called as the reduced type. Okay first I'll explain why this is important then I'll explain why it's called a type or reduced type. So one of the principal reasons why we were studying this is it actually comes up as an attempt to solve cases of burgers. So what we were able to show is that you construct an overring which is the conductor modulo x1. Conduct an overring of the ring r. What this one is essentially doing is that it will take the ring r and adjoint t power b1 up to say bs where bi is not in the valuation semi group of r but it is actually inside the interval c minus a1 comma c minus 1. So essentially what's happening is that the embedding dimension of s is actually n plus s where this guy is a reduced type and this guy is the embedding dimension of the original ring. And we are able to show that if s is quasi homogeneous among other results. This is not the complete set of cases where we can show the burgers but and the other one is also pretty nice. So m power 4 is contained inside the conductor plus x1 and there's also bound on the reduced type. The module of differential omega r has torsion. So the model of differential omega r will have torsion. So that affirming what burgers is true. The first one is nice because it's strictly better than the old result of... Sorry, sorry. Okay, okay, I'll try. Over here? No, both of them. Either one of... Okay, yeah, sorry, you're right. So either this is true or this is true then the burgers. This is not the complete set of cases but two illustrative examples where the reduced type comes into play. The first one is nice because it's strictly better than the original result of Shea where he proved that if r is quasi homogeneous then the burgers is true. But this one is strictly better. Second one is nice because the original results involved when the maximal ideal is contained inside a principal ideal. I mean the fourth power of the maximal ideal is contained in the principal ideal then the burgers is true. But this is much better. m power 4 is not contained in the principal ideal but c plus. But you do have some bound in the reduced type. Okay, so this is the reason why we ended up starting the reduced type and I'll try to write a bit more bigger for why characteristic is zero. It's always zero type. It's always zero. Okay, so why the reduced type? So where does the word reduced in the word type comes into play? It's because of the following. So c plus x1 modulo x1 is always contained inside the x1 colon m. You can see that the conductor times the maximal ideal is always contained inside the principal ideal.  Therefore, m times the conductor is nothing but x1 times. The dimension of this one is your usual coin Macaulay type, whereas the dimension of this one is the reduced type. k dimension is s. This one is the type. k dimension. That's why this is called as the reduced type. So one thing is apparent. One is less than the reduced type is always less than the type. So reduced type can either be one or it can be the type. And that's why we coined the word reduced type. Okay, so what the purpose of this talk is to understand what kind of rings exhibit extremals of these. When is it one? When is it the type? So question so far on the definition? S of r equal to one and S of r is actually equal to the type of r. Okay, when does it exhibit extremal condition? So this we call it the minimal reduced type and this we call it as the maximal reduced. When does the ring exhibit minimal reduced type and when does the ring exhibit maximal reduced type? Okay, so it's true that when r is going to change, the reduced type is actually equal to one because the type is one, then the reduced type is four should be one. But not conversely. But not, a simple example, one of the simplest examples is r is K join C to the 4, T power 11 and T power 17. One can easily check that this guy has reduced type one but it's not going to change. And the way to check going to change is pretty simple. It's not as hard as it sounds because all you have to check is that the map from Z to Z where this takes X to C minus one minus X takes elements to non-elements and non- elements to elements so you can easily check that four is not a member of the semi-group but C minus one minus four is also not a member of semi-group. So take non-element to non-element therefore it cannot be going to change. How did I say that the reduced type is one very quickly here? Ideally you would have to go through the definition but there's a simpler way to do this. All you have to do to compute the reduced type is count the number of integers in C minus A one comma C minus one but not in the valuation semi-group. The cardinality of the set of integers between C minus A one C minus one but not in a valuation semi-group that will give me the reduced type. And why does that happen? Well if you want the length of this quotient C plus X one model that is like computing the length of C model or C intersect with X one. Now if I want to compute the length all I have to do is count the valuation here and then delete the valuation coming from here that the cardinality will give me the length of the quotient. So in this case it will happen that this guy is always contained inside M times the conductor. So the relevant valuation coming from here corresponds to the valuation inside the valuation semi-group also inside the C. So if I'm deleting the valuation coming from C intersect with X one I'm looking at the valuation which are not there in B of R but it is there. So for example if I go back to this one the conductor I think it is nineteen and I just have to look at nineteen minus four and then look at the valuation which appear between nineteen minus four and eighteen and check how many of them are not there. So this is a very quick way to compute what the reduced type is. Okay so the first thing is like I said before we are trying to conclude or make some observations on when the ring is minimal reduced type or maximum reduced type. So there is a very nice containment which is C plus X one contained in X one colon M is contained inside M. And the first thing we had was this very nice containment and we were looking at can you conclude something about the minimal reduced type or the mass reduced type depending on the co-length of the conductor. And the first result we had was the following if the length of the conductor, co-length of the conductor is actually two or the co-length of the conductor is three and R has minimal reduced type, I mean minimal multiplicity then the then R has maximal reduced time. It has R has maximal reduced time. But unfortunately there could be a lot of containment in between this one and this one which kind of did not help us actually improve this result beyond the co-length of four. So we turned our attention to numerical semi-group and we thought that maybe you have a nice ring R you can always construct the numerical semi-group which is related to this one to the ring R. And we were trying to see how the type of R is related to the type of numerical semi-group and reduced type of R is related to a reduced type of numerical semi-group and you see make some conclusions on this side to get some information on this side. And there is obviously a lot of information that you have on the right hand side for numerical semi-group because that seems to be more well studied. Okay so numerical semi-group. So like I said you have a ring you construct a corresponding numerical semi-group. How do you do that? Just go ahead and take the if the numerical semi-group is actually numerical semi-group is actually generated by d1 dm just takes the corresponding numerical semi-group to be here join d power d1 d power dm. Okay so what the information that you have why is this why is this kind of important why is the numerical semi-group important? Well like I was doing there I was able to conclude that the ring was actually not Gorenstein because of a result of Kunz who says that the ring is Gorenstein if and only if the valuation semi-group is symmetric if and only if V of R is symmetric. So symmetric basically means that there's a function from Z to Z and it takes X to C minus 1 minus X where C is your conductor for the ring. It should take the elements of here to the non-element and non-element to element. So that's the kind of symmetry that you're looking for. But it has been improved by Barussi and Froberg to the R is almost Gorenstein if and only if V of R is almost symmetric. Okay this definition is a little bit more tricky I'm going to avoid the definition but remember that there is something there. Okay almost symmetric ring almost symmetric semi-group definition there's something happening there so just keep that in mind. Okay what about the type? What the type of this ring? Well it's been proved by a lot of people. Steve Froberg got lead and quiz. I'm pretty sure this word is wrong and you can correct it by yourself. But the type of the numerical semi-group is the cardinality of the set Z belongs to Z mod low the valuation semi-group. So that X plus H belongs to V of R for every H belongs to V. This is the type. The type of the numerical semi-group is a collection of all integers which is not in the valuation semi-group but when you add the numerical semi-group element to it it falls into the numerical symbol. And unfortunately the type is not but you see the type of the ring is always less than or equal to the type of the corresponding numerical semi-group. It's always less than or equal and it can be strictly less than the type of the numerical. But funny enough it doesn't happen for reduced type. The reduced type of R is always equal to the reduced type of the numerical. There's no distinction between the reduced type of the ring and the reduced type of the numerical semi-group. Okay so what the story is that the how do you translate properties now? See on how to go forth from the ring to the numerical semi-group is the following. So R is of minimal reduced type if and only if the numerical semi-group is of you can combine all these equalities up to get the one. It basically says that S of R is actually equal to the S of K join the valuation semi-group which is less than or equal to the type of R less than or equal to the type of the valuation. We have this long string of inequalities here and you should be able to prove that it's of minimal reduced type if and only if the numerical semi-group. So if you want to study numerical I mean minimal reduced type is kind of much easier because it just follows through to the new just take the corresponding numerical semi-group to be able to prove that. But the on the other hand maximal reduced type is weird. So R is of max reduced type implies that the numerical semi-group of V of R is of max reduced and the converse happens if you know that the types are equal. The converse is true if the type of the ring is actually equal to the so max reduced type of much harder to play with than the min reduced type. But either way this kind of says that if you want to know a lot of information on the max or min reduced type of the ring you better go to the numerical semi-group study when is it max or min reduced type there and put it back to the ring R. Okay so you won't it's much better when you have a minimal multiplicity is that R is a numerical semi-group is of min reduced type if and only if the maximum of all the excess that X is in the pseudo Frobenian set. I'll explain what the pseudo Frobenian set minus C minus 1 is strictly less than C minus A1 minus 1. What's the pseudo Frobenian set is this guy is the pseudo Frobenian set. So if it's a numerical semi-group you can easily check out when is the minimal reduced type just check that the maximum among the pseudo Frobenian number except for C minus 1 is strictly less than this number and when you have R is of max reduced type if and only if the minimum among all the excess in the pseudo Frobenian set of the numerical semi-group is less than equal to C minus 1. Now that you bought this study from the ring to numerical semi-group then you can do it for a lot of cases when is it guaranteeing when it's almost guaranteeing when it is far flung guaranteeing almost guaranteeing nearly guaranteeing all these cases can be brought into and you can study the I think I'll stop here thank you. So any question or thank you. My question is when you say that is of maximum reduced time that type then can you deduce something about the some properties of the associated ring in this case? Some property of the? Of the associated grid of ring. I haven't thought about it. I don't know much about it. Yeah but yeah. The minimal I don't think so. Right. The maximal could be. Thank you. Another question? The minimal or maximal reduced type will act as a sufficient condition for good properties of I mean other homological or properties of blow-up algebras. I don't know anything about the blow-up algebras but the story originated from Bergus so I was more concentrated on studying these minimal maximal radius type to solve Bergus or get more information to cases of Bergus but yeah I don't know much about the blow-up algebras. Just something related to what you said at the end we could make some connections with nearly Goronstein almost Goronstein. Do you have some ideas in your head? Sorry? Do you have some ideas to make those connections? I know the connection. I haven't shown it yet. Oh okay okay thanks. Not with a speaker again.


Item Number SCP-004-J Object Class, Euclid Correction, Tharmiel Special Containment Procedures The entity is currently housed in the Site-08 North Wing, Accounts Payable Office, from Monday to Friday between the hours of 0800 to 1700 hours local, with one hour from 1200 to 1300 hours local spent in the North cafeteria, or traversing from there back to his desk. The entity may occasionally need to use the restroom, take breaks by walking the North Wing corridor, or receive water from the water fountain. In the long term, the entity can be contained by bi-annual performance reviews indicating that we are pleased but think the entity is capable of more, and annual raises equivalent to the rate of inflation plus 4 percentage points. The entity may also be enticed to remain in containment by pointing out the low cost of living, easy commute, and quality public parks. Description, SCP-004-J is Stanley Nichols, a certified public accountant, graduate University of Michigan 1978, and former chief financial officer for currently employed by the Foundation. SCP-004-J is roughly 180 centimeters tall and weighs roughly 75 kilograms, Caucasian, with thinning brown hair and brown eyes. The entity has been in foundation containment since July 1991, obsessively in reply to a job posting. The anomalous properties of the entity manifested after the job was awarded during mandatory psych and low-level amnestic administration. The staffer assigned to the task flatly refused to administer amnestics to the entity, claiming that SCP-004-J was quote, a real visionary, end quote, and that, quote, it would be a waste of drugs and a needless capex hit, end quote. After a brief convention by the hiring department, the compulsion and cognitive hazard unit, and Site-04 subject matter expert on hazardous humanoids, the agreement was made to contain SCP-004-J under the premise of hiring them for the determined position in accounts payable. SCP-004-J appears to be a very capable accountant, and has made commendable efforts in both lowering our annual capital expenditures budget while streamlining our vendor and purchase process for operating expenditures. Furthermore, their holistic approach to purchasing and leveraging the growing internationalization of the supply chain has caused a sea change in our view of the synergistic possibilities to creating a budget-conscious deliverable, leading to a paradigm shift to crowdsourced. It appears the entity was in my vicinity briefly. To summarize, SCP-004-J has a distinct cognitive hazardous field that will interfere with thought processes, overriding thought patterns with new ones that encourage growing a business through a large set of jargon commonly used by sea-level executives known as buzzwords, while also impairing the ability to think critically. CT scans a foundation employees in the field of SCP-004-J show a lowered neuron excitement state in the occipital cortex and the hippocampus. SCP-004-J was classed as Euclid in August of 1991. SCP-004-J was reclassed as Tharmiel in October of 1992 following a near-total containment breach in August of 1992, caused by structural damage suffered during Hurricane Andrew at site B. During which SCP-004-J was exposed to SCP-106, which is classed Keter and invariably hostile to human life. Rather than panic or hide, SCP-004-J began discussing the importance of residual income and annuities when structuring a quarterly budget. SCP-106 appeared wrapped with attention, materialized a business card, and agreed to join SCP-004-J for a, quote, lunch-end learn and, quote, at his soonest convenience. Further testing has shown that the cognitohazard surrounding SCP-004-J affects not only humanoids, but every sentient lifeform that has been exposed. In furtherance of a hypothesis posed by doctors McGinley and White, SCP-004-J was stationed outside the containment cell of SCP-682 at a safe distance but close enough to have the notorious creature in his cognitohazardous field. Audio follows. Kill...killing... SCP-682, could you repeat that? Kill the bottom line. I'm sorry? Sortization. Buying in this economy. Sucker bet. SCP-682, do you own property here? Cinergize assets. Leverage intellectual capital for flag ship product. Note from researcher. At this point, three common white mice are introduced into SCP-682's containment cell. SCP-682 normally devours prey on sight. Ah, a conference call. I sense redundancies. We must smart-size to better push the envelope. In our core competencies. SCP-682 then dismembers and eats two of the three mice. I hope they find their severance suitable.


Hi everyone, Sean with jaspyscasebreaks.com here doing 2020 Bowman Chrome HTA Choice four box break random division number eight wear all card ship and it's all autographs four boxes three autographs of per box 12 autographs total here is our list of customers Matthew Shira down to Luke Tagarook and our divisions AL East down to the NL West dice world randomized both lists and pair them up three and a one four times speaking of Mike trout anybody see the uh the stuff that nick bought from the Wisconsin Dell show of trout oh my god four times on the randomizer and four times on the divisions four times AL East down to the NL East four times on the divisions four times on the names and four times on the dice so Brad Newman with the AL East Matthew Shira with NL West Luke Tagarook with the NL Central Matthew Shira with AL Central Will Driggers with AL West and Dylan Brinson with the NL East uh trade window is open for you guys if you want so we're gonna figure out which four boxes we're gonna do while you guys contemplate trades one two three on the dice for the left boxes four five six for the right boxes so we're gonna go boxes on the right box on the left r4 uh break number nine which is in the store now our last four boxes uh no talks of trades so let's print I mean PJ that's strictly that's strictly for Mike trout though we're not just gonna let anybody walk in here in part willy nilly and stuff but if you are Mike trout the greatest baseball player of all time eventually uh yeah fart it up fart it are you are you eating a gogurt is that a gogurt pouch I thought Teddy was eating a gogurt I see some purple right on top that's nice where's the top that's the top first up is Tyler Ivy prospect auto purple for the Houston Astros that is 28 out of 250 Houston Astros AL West and Will Driggers we've got Graham Stinson for the Tampa Bay Rays that is the AL East and Brad Newman Newman and Paul Rashawn Bowman first auto for the Detroit Tigers and the AL Central Luke Tagaroop we've got Austin Hansen Bowman first auto for the Astros part of the AL West Will Driggers Tyler Dyson Bowman first auto for the Washington Nationals that goes to the NL East Dylan Brinson blue mojo of Von Grissom out of 150 for the Atlanta Braves those blue mojos on these looking really nice Atlanta Braves is the NL East and Dylan Brinson that is 85 out of 150 you can see some red or some some Super Fractor gold first up is Zach Collins rookie refractor out of 499 for the Chicago White Sox that is the AL Central Matthew Shearer you got Ethan Lindow Bowman first auto for the Phillies the NL East Dylan Brinson Austin Shenton Bowman first auto for the Seattle Mariners and the AL West Will Driggers and our last box Michael Massey prospect auto for the Kansas City Royals that is AL Central Matthew Shearer mm Kevin Smith Bowman first auto for the New York Mets and the NL East Dylan Brinson Kauffman is our final auto for the Colorado Rockies and the NL West and Matthew Shearer to finalize it there you go that is the break last four boxes are in the store that was 2020 Bowman Chrome HTA Choice four box break random division number eight from jaspyscasebricks.com last four boxes from this case random division number nine in the store now jaspyscasebricks.com I'm Sean jaspyscasebricks.com thanks for hanging out see you next time


OK. And so if D is an nm-tangle diagram, there's going to be CkH of D is a chain complex over a certain category that I'll call, say, CBN. So this is Barnathan's category. And I'll, again, write the n and the m here. OK. I'm not going to be able to take the homology of this chain complex. OK, this category isn't an abelian category, so there is no homology. But I can still talk about chain homotopy equivalents. And so if D and D prime both represent t, then they're related by right of Meister moves. And CkH of D is chain homotopy equivalent to CkH of D prime. OK, so how are we going to build this chain complex? So to build this chain complex, I have to talk about co-bordisms. So let's suppose I have p0 and p1 are planar tangles. So say they're in p nm. So definition of co-bordism, it's called sigma going from p0 to p1, is an embedded, let's say, sigma inside of r times i. This is the planar tangles space times another i, sort of in the t direction. So I'll call this i coordinate s and this one t, such that the boundary of this sigma, what does it look like? Well, it has a piece that looks like p0 times 0. It has a piece that looks like p1 times 1, but it also has pieces in this boundary coming from the x's. So union, let's say, xn times 0 times i, union xm times 1 times i. And if I have a co-bordism like this, there are actually two kinds of compositions that I can do. Now, I have two ways to compose. So there's what's called horizontal composition. So if I give you, say, if p is in pnm, p0 and p1 are in pnm. And p0 prime and p1 prime are in pnml. And I have co-bordisms sigma going from p0 to p1 and sigma prime going from p0 prime to p1 prime. Then I can stack in the s direction, the direction that I've been drawing when I compose tangles, and get sigma sigma prime. That's a co-bordism from p0, p0 prime to p1, p1 prime. So I also have vertical composition. So if p0, p1, and p2 are all in pnm, and I give you sigma0 from p0 to p1, sigma1 from p1 to p2, then I can stack in the t direction and get sigma1 composed with sigma0. That's a co-bordism from p0 to p2. Here I stack in the t direction. So the fancy way to say this, I have these two different sorts of composition is to say that I have a two-category p where the objects are the xn's. The one morphisms are tangles, and the two morphisms are co-bordisms. And I'm not going to try and write down the axioms for a two-category, but the sort of model thing that you should think of when you think of a two-category is this category of tangles. Yes, these are, sorry, yeah, these are, of course, there's another tang, since this is p. There's another category where I didn't take planar tangles, but let's stick with this one here. OK, and in particular, so for example, the set p and m is itself a category where the morphisms are co-bordisms. All right, so now I'm going to do something totally unmotivated, which turns out to be really handy. And I'm going to enhance this category just a little bit. So I'm going to define a category, let's call it cob, n comma m has objects, again, sort of tnm, just like in this, oops, pnm. And morphisms are pairs, s comma a, where, so if this is in the morphisms from p0 to p1, where what, s is just an ordinary co-bordism from p0 to p1, and a subset of the interior of s is a finite subset. So if d is a tangled diagram, so the cube of resolutions assigns to a vertex v an object, oops, this is a nm tangled diagram. Let's say dv in the objects cob nm, and it sends to an edge e going from v0 to v1, se, that's a morphism, se, the empty set, so no empty finite set going from dv0 to dv1. OK, so I have my cube of resolutions as decorated with objects and morphisms of this category. So the objects are, let's say, in pnm, so the objects are planar tangles. Now, I'd like to build a chain complex out of this cube, and I'd also like to be able to put in those factors of q, I sort of multiplied by q. And I can't do either of these things in this category, so I'm going to have to do a few general category things to make a big enough category that I can do those things in. So let me just say a few general words about category theory. So let's call this a definition. So a category c is pre-graded if there's some function that we'll call q, the grading. What does this do? It takes the set of all morphism spaces in the category to the integers, such that if I take a composition q of alpha composed with beta, that's q of alpha plus q of beta. So as an example, I'll leave this for you to check. Cobb nm is pre-graded, where q of s, a is chi of s minus m plus n over 2 minus 2 times the number of elements in this set a. OK. Now, if c is pre-graded, I can form what can I form? I can form, let's call it CGR, is objects xn. x is an object of the original category, and n is an integer. And I'll say that the set of morphisms from xn to ym, that's the same thing as the set of morphisms from x to y. But the grading is different. So q of alpha in here is q of alpha, where I think of it in here, plus m minus n. So in this category, I can multiply by powers of q. So another way that I could write this thing is I'll call it q to the nx. OK. So now, I need to think about what's a chain complex. So side definition, c is additive if x and y in objects of c. Two things. One is that the set of morphisms, which in an additive category I'll typically write as the set of hams, is a z-module. So it's in a billion group. And two, x direct sum y is an object. So if c is an additive category, I can consider chain complexes that look like, say, ci goes to ci minus 1, goes to ci minus 2, where each of these are objects of the category. And then I have morphisms, di and di minus 1, et cetera, where di minus 1, composed with di, is 0. And that makes sense, because this lives inside an abelian group. We really needed this property. OK. So of course, this category Cobb isn't an additive category either. So hams and seager are the same. That's right. But I have to keep track. The only thing that's different is that I write down the grading changes. This is n and m. Yeah, there are two different letters here, and this is m and this is n. Well, given c, I can form an additive category. Let's call it adc. Objects are formal direct sums, objects of c. And of a direct sum, i equals 1 to n xi direct sum i equals 1 to m, yj is the set of m by n matrices. Let's say fij, where fij is in the z module generated by morphisms from xi to xj. So I just build myself an additive category. All right, and so now we've got two minutes left. So let's make a statement. So if d is a Tangle diagram, I can form c of d. This is a complex over ad of nm gr. At the level of object, this c of d is, again, the direct sum of, let's say, q to the norm of v dv. And let me just say d, as in Kovanov. OK. All right, so at this point, we built a chain complex. But we've sort of done, and I apologize for making you sit through this, right? We've done nothing but formality all lecture, right? And in particular, this chain complex has, the way c of d has no hope of being invariant under the right of Meister moves. So the key step here that we'll do in the next lecture is that we pass to a quotient category, which is this category C, B, N, N, M, OK? And this is not a formal thing. This category C, B, N, N, M is a genuinely interesting category in which you can compute things. And what we'll do is we'll compute and we'll see that in this quotient category, the complex that we get is invariant up to homotopy under the right of Meister moves. OK, so I'll stop here.


Today we are going to have a very very short video. We're gonna look at the values of certain variables if you want in Bash scripting or shell scripting in general here. We have a dollar sign zero dollar sign one two asterisk at sign Dollar sign dollar sign dollar sign question mark. So what are they that you know? Dollar sign zero is the name of the current script or program running Dollar sign one would be your first argument dollar sign two is your second argument so forth so on dollar sign at our asterisk that would be all of your arguments But as a string dollar sign at symbol is the same thing but instead of a string It's an array and then dollar sign dollar sign is the PID or the process ID of the current running script Which is useful if you want to kill the current script Make sure it's completely killed or if you want maybe have a watchdog application to make sure the script keeps running And then dollar sign question mark is the exit status usually either zero or one whether it was successful or failed Of the last command. Let's go ahead and see these in action I'm going to run this script and I got to give it a couple of arguments, right? So I'm gonna say arg one arg two arg three and then we will go like this and that's the name of our script That is the first argument second argument all three arguments as a string as an array the process ID of the script And the exit status of the last command, which was successful. Anyway, this is films by chris.com It's chris with a k. There's a link in the description I'll put this Link to these notes the script in the description as well. And as always, I hope that you have a great day


Hi everyone. Yeah, I'd like today to talk to you about trial and how it maybe can save your soul when you are working with asynchronous programming. As you may know, asynchronous programming is really not a new thing in Python. It's been there basically forever, like thanks to Twisted, but since some years it has been something really bigger with this new Async.io library and especially is the introduction of this Async.io keyword. The thing is how bad was it just before this Async.io keyword was a thing. So let's see something. So just in the beginning it was like that. This is something that you no longer write in Python, so I had to find another language that still use it sometime. So it's really horrible because you have to handle error by yourself. You cannot use the exception. If you use a debugger on this, basically you don't know your own. You never know a callback how it has been created by who or something. So after some time people come up with a better idea. So it's called a promise on JavaScript. It's called differ on Twisted or future on Async.io, but it's always the same idea. So now it's a bit better because you can combine promise together to do a synchronization between callbacks. It's kind of callbacks on steroids, but you still you cannot use the exception, right? And you know your debugger is still totally useless because it's still callbacks. So after some time you've got the real revolution, which is Async.io keyword. So now we have this concept of Async.io function, right? So it's much better because now you have the regular function and you have just a new kind of color of function, the Async.io one, and you can just use this Awake keyword and you stop the execution of this function for some time and you give a chance for another coroutine to just write a bit. So yeah, it's much better. I think we can just improve it a bit more like this and yeah, it will be perfect, right? We're using this new Async.io library. We're using the Async.io keyword. Everything's fine. So this is the end, right? But yeah, maybe not. I mean, if you've been to the talk of Yuri this morning, you know that there is still kind of some trouble with Async.io. For instance, let's see this code. It's really simple like you see there is this scheduler function which acts as a little server. So it's a long running and from time to time it will schedule a new coroutine which does some job. The thing is this job is broken. It will raise an exception. So if we run this, let's see what happens. Yeah, I got the code right there. You can see? Yeah, big enough. So yeah, if you're used to Async.io programming, maybe you don't feel it's that weird, but if you're not, it seems really wrong there because there is an exception occurring here. It's really obvious, but and we never try to catch the exception, right? In your code base, there is no except anything. But anyway, the code was still running. I mean, we got an exception. We just print it on the standard output and we go on like, okay, nothing occurs. So yeah, it feels wrong. And the other thing is if we look at the stack trace, it's not, the stack trace is not complete. If we see this function raise the exception, then it was this function which called the other one and we cannot go up. So it's like here, we created this new coroutine and in Async.io when you create a coroutine, you go like it's fire and forget. You just create the new coroutine and then there is no connection between the creator and the creation. And so it's really bad because it means when a one coroutine raise an exception, it bubbles up, up, up until it goes to the event loop and then the event loop doesn't know what to do with this exception. It cannot give it to anyone. So it just does the least worst thing it can do which would be printing it on the standard output and just go finger crossed and say, okay, maybe this thing was not too important and maybe we will be able to go on. Let's see another example. So here it's a bit more complicated. I call it the recursive Russian roulette. So it's basically we are playing Russian roulette, but we have with program. So this morning we were killing threads. Now we're just killing coroutines. So it's okay. The idea is we have this function. We, let's say, try all luck and if we get lucky the coroutine doesn't blow off and what it does it just create two new coroutines that will just continue this same function. And now we use this asyncio gather. So if you don't know what asyncio gather does, it basically just wait for the coroutine to finish. So if we run this code, what will happen? I got it here. I think something wrong. So if I if I just try it a bit to stop a bit faster. Yeah, so we can see just we try our luck one time. Then we create new coroutine that we'll try. Eventually we run out of luck here and here there is the exception which is handled. We can see it's here and here it's getting crazy because even if we are out of our recursive Russian roulette function, there is anyway new coroutine which which are created and which execute some code and create new coroutine is getting crazy. So what's happening there? If we think about the coroutine, we have just our main coroutine first and then this coroutine will call the recursive Russian roulette function. So let's say it gets lucky and it just has to create two new coroutines that themselves get lucky and so create two new coroutines. So we're like this. If we consider this async.io gather function, it's something like that. So you have the main coroutine which is listening on coroutine one and coroutine two and we have coroutine one waiting on its children and coroutine two waiting on its children. So now let's say this coroutine blowed off. What's happening? And I saw it was what happening until I saw a eurus talk and no I'm not sure of anything which means async.io is really hard. Even if we want to do a talk slightly about this. So I saw that when a coroutine blow up and the coroutine is watched by async.io gather, async.io gather will cancel the other coroutine. It is tasked to watch and will make the exception bubbles up. So it bubbles up to the coroutine two and this coroutine two is also watched by async.io gather by the coroutine one, sorry, the coroutine main. So we cancel coroutine one two and we end up like this. So now it seems a bit wrong because in fact the async.io gather from coroutine one couldn't kick in. So it was just killed. It couldn't destroy the sub coroutine it was tasked to watch. And now we end up like this and given we just catch the exception in the main and just sitting around for some time, then the existing coroutine can just spawn new coroutines and go crazy. So what's the problem here? I see three things that could be improved. The first thing is it will be much better to have complex stack trace. If we take one coroutine, we should be able to read all the part of the coroutine and to be able to go up until we see, OK, this coroutine has been creating there and if we go up enough, we should go to see the main of the function of the root of our program, sorry. The other thing, which is a bit related to this, if we get an exception from our coroutine, it should bubbles up and never get silenced by something like, OK, we're just printing on STD out and we'll be enough. It should, if nobody catches the exception, it should go up until we blow off our program. I mean, that's how it works on the synchronous program, right? So it should be the same on asynchronous. And finally, something a bit slightly more abstract is we should be able to have our coroutine, which we should have an easy way to connect our coroutine together in order to express the lifetime of one coroutine according to another one. For example, we say, OK, we have a parent, we have a child. If the parent died, we want the child to die too. So yeah, it's time to talk to you about trial. And you know this guy, I mean, his name is Nathaniel Smith. And he had this idea, this great idea. He said, OK, there is new feature in Python, like the Async await. And so what if we just drop all the other deprecated way of doing asynchronous function like a promise and callback and we just focus on this Async await thing? And what if we go a bit further? What if we invent new way, new abstraction, new building blocks to do asynchronous function, asynchronous programming and let's see how far we can go with this. And so we end up with trial like this. So what's about trial? There is three main concept about trial. The first thing is the Async await keyword. We already talk about it. We already know why there are so great. The two more exotic thing are the nursery and the Cancel scope. So first, the nursery. Here is a slightly modified version of the recursive Russian roulette. This way it was written for trial. And basically the only thing that changes the red rectangle. The idea in trial is if you want to spawn new keratin, you cannot do it fire and forget style like you would do with Async. You must use a nursery object. So putting that another way, you have to say that every keratin in your program will be connected to a nursery. And the good thing about nursery is there are asynchronous context manager. So you use them with Async with when you do Async with a nursery, you start when you enter, it does nothing. But when you want to leave this block, it will be blocking. It will block until all the keratin that are connected to this nursery will end. So how does it solve our problem? Let's see the keratin we have before. Now we said there are bundled inside the nursery, right? So it looks a bit something like that. In fact, there is a tool in in trial, which is called the monitor. And this tool allows you to plug inside a trailer application to just watch in real time the keratins. And so if you use this on our program, you will see something like that. So the idea is now what we have is a tree of keratin. It's really a graph. And so it's much simpler, I think, to visualize how trial works when you see this. If you take our example back with the exception from here, I think it's really simple to see that every time though your exception bubbles up into one keratin up, it's really easy for trial to know which keratin it should close. So it goes like this. And so it just works. It's really simple to see that you have a tree, everything that under the tree and under the node that you are working on should be destroyed because this node is going to to be destroyed too. So you end up like this, you end up clean. Something else about trial is the cancel scope. So the idea is if we are doing an asynchronous if we are using an asynchronous framework, it means that we are doing IO, right? The trouble with IO is it's basically you are waiting from someone else and this someone else can crash. You can have the router and the other end of the internet which die or something like that. So you always have to deal with timeouts. So it will be really great if we could really easily say, OK, I want to have this part of the program which has this kind of timeout and to put it really easily. But as we saw, we already have this tree of coroutine, this graph. So it's really easy with trial to just say, OK, I want this part of the graph to run, say, in 0.3 seconds, for example. So to do that, you just use a context manager. So you put a context manager with this console scope and you say, OK, this block of code I wanted to run for at most this time. And if it goes more than that, then we will just leave this block. And every node that has been created, remember, we are like this. So everything that has been created under our coroutine, you can destroy it. So you have the guarantee that no matter what, if the timeout occurs, you won't leak any coroutine. Everything will be clean. Oh, sorry, I go too far. So yeah, one good thing about our recursive version right now is we got this timeout. So now maybe the game is a bit more fair.  So I just written a trial version of this recursive regression red. And yeah, we run out of luck this way. Yeah, we're really unlucky.  So that's nice. Maybe you're not bought yet to this concept. But maybe you just have to think how you would have done to implement this timeout feature if you would have to do this with just Async.io with the previous example. OK, so that's it. And that's one of the features of Traio, actually. It's there is really, really few concepts. It's like an extremely simple asynchronous library. And that's something which is, I think, really strange from asynchronous library because, you know, you know, twisted, you know, Async.io, they're all with lots of documentation, a lot of concept, a lot of things. And so it seems really complicated. And with Traio, you just read something and in half a day you're ready to work. And you have those really small and simple building blocks. But you can put them together to create really complex things the easy way. I mean, it's easy to get things right. So I think it's a really great feature. OK, so maybe you're wondering, it looks great on the paper, but what about real life? So there is this use case. Let's say you want to connect to dbn.org. The thing is, so you have this domain name. You want to resolve it.  So it's never simple. So when you resolve your domain name, you will end up with multiple IP address. And so now you have a new trouble, which IP address should I connect to? So the first idea you could have is, you well, just try to connect to the first one. And after some time, if it fails, we try the next one and so on and so forth. The trouble is, yeah, this is really slow. So there is maybe a better way. So the other way to do it is just to go a bit more violently. So we just try everything in concurrency. And we take whichever is the fastest. But it takes a lot more resources, right? So there may be a middle ground. And so an attempt of this middle ground is this thing called happy eyeball. So the idea is you start by connecting to the first IP address you have. And if after some time you didn't, I mean, you're still waiting for this connection to succeed, then you try another address. And if this other address just failed faster than the time outs, then you try the next one. And eventually one of them will succeed. And then you can cancel all the other coroutines because you have a new connection, which is correct now. So how complicated is it to implement? There is no implementation of this in Asyncio, but there is one in Twisted. So this is the code. I didn't read it myself. But according to Nathaniel, it's a quite complicated code. There is a lot of nested function inside them. So it's hard to read. It's hard to understand. It's hard to manage. So the Twisted guy, they are aware of this. And so they come up with a new version of this, which is much better, which is much simpler. So OK, they said it's less crazy, it's easier to work with, but they are still not happy about it. But the thing important here is the people working on this are like top guy. I mean, the guy who written this implementation, the second one, is the creator of Twisted himself. So it's basically the guy which has the more experience in asynchronous programming of the whole Python community. So the problem is not the people. The problem is the language. The language, I mean, we don't speak the right word. It was really easy talking human language to say, OK, that's how Happy Ible works. But when you want to write it in Python, it gets really hard. And this is not what Python is about. Python is about being able to write a complex thing easily. So maybe it would be better in trial. Who knows? This is a skeleton of our function. So we call it open TCP socket. It takes our hostname. And at the maximum time, we want to wait between two attempts of connection. So the first thing is really simple. We just do the DNS resolution. And then we got multiple targets we could try to connect to. Here we use this trial socket module, which is just the same thing than the regular socket module. The standard one, it's just an asynchronous version of it. After that, we define this winning socket. So this will be the variable which eventually will get which socket one, which socket is ready to be used. And if we have no one, well, we just raise an exception, right? Now what do we want to do? We want to do multiple things at a time. We want to start a connection and then another one and this kind of thing. So to do this in trials, there is not two ways. There's only one way, which is we just have to create a nursery. So yeah, that's what we do. We create a nursery. We just use it as an asynchronous context manager. And we create this attend function. So every time we try a new attempt against a new IP address, we will call this attend function. And so we start by calling it for the first attempt. So yeah, what are we going to write inside this attempt? What we can see here is except for the first attempt, we are always waiting. The first thing we do is we're just waiting. We're waiting for two things, in fact. The first thing is if the previous attempt is taking more than the time-out time. And the second thing we are waiting for is if the previous attempt just failed fast. So to do this in trial, what we can do is we can create multiple events. Each attempt will have a failed event. So every time it failed, it will set up this event. So now we can wait on this event. And we use CancelScope to say, OK, I want to wait on this event. But I don't want to wait on this event no longer than this time. So if we reach the time-out, we'll just leave this context manager and continue our code. So now we are almost down to do the actual job. But just before that, we have to spawn the next attempt. Because before doing our own attempt, we have to spawn the next one because it will watch to see if we are taking too long. So to do that, we just use the nursery. So we just take the nursery and ask the nursery to create a new coroutine and to execute this next attempt on the next IP address. And now we're all set. We can just do our socket connection, socket trial connection. So again, it's just like the regular socket module library. So now there is only two possible outcomes, which are first the connection failed. So what we do is just we update this event about, OK, we couldn't do anything. So now it's up to the next attempt to try to succeed. And the other outcome is, well, we got the winning socket. So we just have to update this. And now we can cancel the nursery. So the idea about canceling the nursery is like we cancel all the coroutines which are connecting to this nursery. And given we have to cancel all those coroutines, it means the nursery is now free. And so these blocks we had there with this asynchronous context manager, we will just leave it automatically and continue the code. So yeah, now we're done. Maybe you're not sure if it works. So I have the code here, thinking this one. So it's just the same I show you. Just I added this main function to just say, OK, we'll try some debion.org. Obviously, it would be much more impressive if I have done live coding. But no, it's not my kind of style. So let's just pretend it works. Anyway, yeah, thank you. I'm doing a plus two because it's not my code. It's not any other ones. I stole most of my talk from his zone. So yeah. Anyway, so what does TRIO offers you? There is basically everything that you can expect from an asynchronous library, like all the standard stuff. You can use asynchronous file system access. You can use networking. There is all those synchronous tools, like we use event. You have queue, you have logs, et cetera. There is a really good testing helper. If you love a pie test, there is a great pie test module. If you love a hypothesis, there is a great hypothesis module. If you don't love hypothesis, you should try hypothesis. And then you will love it. There is this control C working. I mean, it's feel like, yeah, what is this? I use control C. It works. But no, control C is really hard to get it right. And nobody knows about it until you have read this article that Nathaniel wrote on his blog. You should definitely go to read the blog. Everything is really interesting. So yeah, this is working. And finally, there is one of my favorite features, is this compatibility layer. Async.io is really great, because it makes the entire asynchronous world in Python compatible with each other. So with Async.io, you have compatibility with Twisted. You have compatibility with Tornado. Everything is compatible. So now, with TRIO, you just have to write an Async.io loop that you write inside in TRIO. And now, you get compatibility with the entire rest of the ecosystem, of the asynchronous ecosystem, just this way. So it's really great, because it means that your own code base, the code you just want to type fast and want to do the thing, you can use it in trial. So you will get safety. But for the third-party library, the thing that, like, say, you want to connect to Postgre. You want to use Async.pg, because it's really great. But this code is already well-tested, so you know there won't be any trouble. And you can really easily plug this asynchronous library with your code, which is written in TRIO. So yeah, it's really great. And yeah, I'm not the only one who thinks this code is really great, as there is plenty of famous people, like even rock stars. Yeah, so anyway, I guess this is about right. One more thing, I just told on maybe half of my conference is from a Nathaniel conference from last Python. And the link, which is here, is on. So you should definitely check this out, because there is a lot of things, if you're interested, in this topic. It's like, OK, you should watch this conference. You should read this blog post, and this one, and this one. So if you want to become better at this, and you don't know already this guy, Nathaniel, you should definitely go to this link. Yeah, and that's it. This great talk, if anyone has any questions, just line up at the mic right there on the site. Hi, that was excellent. Could you say a little bit more about hypertest, and indeed, whether unit test is also available with this thing? Yeah, so what do you want to know about hypertest? You already know this thing, or no? OK, so it's basically the greatest thing if you want to test code. If you want to test code, anything, anything. The idea is, normally, what you do is you create use cases. So you just say, OK, I want to test this function. I will put this input, and I want to get this output. But the thing is, most of the time, when you do this, you forget things. For instance, let's say you want to have a function that works on the strings. You will try a simple case, like you use ASCII strings. But you will forget that there is Unicode strings, and there is Unicode string with Unicode code points, which are not printable, this kind of thing. So it gets really tricky, really complicated. And so with hypothesis, what you can say is... Hypothesis? Yeah, sorry, it's by accent, which is... Sorry, I'm French. Sorry. Yeah, so now you can just turn around and say to people how great hypothesis is, and pronounce it right. Hypothesis, yeah, I don't like it, but it's really good. Shame. Property-based testing. Yeah, that's it. So anyone who wants to talk about Trio and not hypothesis and French accent? Yeah, you have to come here. Have you encountered any bugs with the Trio asyncio compatibility layer, does it? No, I didn't encounter any bugs yet. There is little kind of, let's say, quirks sometimes, because yeah, obviously you're using one asynchronous library with another one, so obviously you have to be careful. But yeah, if you're careful enough, it's really straightforward. And yeah, by the way, Trio code base is crazy good. I mean, when you read the code base, there is like two time more comments than the code. And every time it's like the guy is writing all the state of the art about just this line of code. This kind of thing we are doing is this, this, this. And if you want to know more about this, you should go there, there, there, there. So just, if you don't want to use Trio, at least read the code. With async.io, they all implement their own async.io event loop. So it means you can interact with Trio but not necessarily with Trio and all of the other async libraries. Is there a way to stop the madness and everyone use the async.io event loop instead? No, you should see it a bit like, you're writing some code in async.io and you say, okay, I want to go faster. So now I will don't use the async.io normal implementation. Now I will use UV loop. So it's still async.io but it's just another implementation of async.io, right? So now it's just the same thing with Trio. With Trio, you got an implementation of async.io which is made with Trio. So you can run totally just async.io code with this but it wouldn't be really interesting. And so the good thing is you can have a part of your code which is in Trio and the rest which is in async.io and you use this implementation of the async.io event loop to make the both be able to talk to each other. Yeah, but Twisted and Tornado, I mean, I'm not 100% sure about this because I never tried it but what they say it, Twisted is now compatible with the async.io event loop. So you have no trouble now. Yeah, jeven. Yeah, sorry, you cannot have compatibility with PHP too. No, you're right.


Every Invader's Infant knows about the image called Bloody Gear. You've probably heard that he was a joke, right? Put there to get back at Nickelodeon Studios for censoring them so much. The image was slipped into a couple frames of a few episodes, and was so faint he couldn't even be seen, unless you paused the show at a certain frame. This image is no joke, though. I was there at Nickelodeon Studios when Bloody Gear was made. It was the final episode, called Final Doom. John and the crew knew the show was going to be cancelled and were working on that bad rubber piggy when they found out. They had about 14 more episodes to go, so they made the final episode early and thought it would flip off the network to have this grotesque image in it. I don't know how they thought this final episode would get aired though, because people like myself view the episodes first, before they ever air. I kind of wish I hadn't, because I'm still a bit rattled by the experience. The episode started as normal as any. The intro had no audio and was really choppy. Which I expected that, because episodes tend to come back a little glitchy and need some fixes before actually airing. It opened with a shot of the sky and the title appeared on screen, Final Doom. Then the camera lowered down to look down on Zim's house and zoom in. The next scene showed Gare holding a taco as usual, while Zim was staring at him across the room. He stared for an uncomfortable amount of time. Like the same shot was being shown, but it was actually zooming in on Zim, but so slow that it was hardly noticeable. After a couple of minutes, Zim walked over and slapped the taco out of his hand and announced he didn't want stinky human food in the house anymore. I thought Gare would ignore him as usual and go about his merry way or maybe have a comical tantrum. But I was wrong. Gare stared at the taco on the floor for a long time. I began to see a theme in this episode. However during this staring, I could hear something in the background. It was screaming. It sounded like a man being tortured. It was too real to be a voice actor. And even though it was barely audible, I felt like the sound was coming from right next to me. Gare's eyes turned red like he was in duty mode, and sinister music started playing. He reached back and slapped Zim out of the way before taking off and busting through the front of the house. At this point, I looked around at the other people watching this. Because all this seemed...off. Really off. Just the whole atmosphere of the episode was wrong. Everyone else looked as puzzled as I was. The episode cut to dip, sitting on the ground outside, crying about something. He had his hands over his eyes and was sobbing loudly. Like it was so loud we had to turn down the speakers to save our ears. You can probably guess what happened. This episode had a habit of letting things go on for uncomfortable amounts of time. This went on for a while before the scene just cut to a few seconds of static. When it returned, Gare was there in front of Dip. There was no audio now. Gare said something to Dip and Dip turned away. It now showed Dip and Gare standing behind him while Dip talked.  Just empty black sockets behind his glasses. He flucked down on the ground wailing. Gare looked and moved by whatever Dip was saying. This was about the time we started hearing that man screaming again. And since there was no audio this time, I was perfectly clear that what it was. This was clearly a man in true excruciating pain. We didn't have a lot of time to think about it because the audio was back and the scene abruptly changed, now quite full of static. It was in Professor Membrane's lab. The animation was really choppy again. The lines and color was there but it was all still looked like an animatic. The music was disturbingly out of tune. When Gare busted through the ceiling of the lab, holding a bloody Dip in his claw, in trails hanging out of his stomach and leading up to, in Gare's other claw, a taco shell. Membrane looked up, looking and bothered. But the scene froze there as the audio continued. Membrane said, Well at least it wasn't Gare's.  However we got a quick flash of the aftermath when it was over. We had to pause it on the frame because it was so fast. It was a single frame of Professor Membrane laying on the lab floor, blood trickling from his head and making a small pool on the floor. His goggles had been ripped off revealing his eyes for the very first time frozen in a look of shock and horror. His arms had been ripped from his body and stripped of all their flesh. His chest had been opened up and it was stuffed inside. A couple people in the viewing booth threw up and asked to lead. A couple of others and I stayed. When we played it again, the animation was back to normal. It was clear again. The view was on Gare flying out of the ceiling of the lab at full speed, blowing up in the background. Then there was a sharp static sound before it cut to Gare's bedroom. Gare was standing there with a very unsettling look on his face. Gare looked just as pissed as ever. She said, What are you doing here? Gare's hand turned into a buzz saw blade and he made an evil grin. He took a swipe and for the first time, mass seemed...weep. Her usual demeanor was gone. Like she wasn't instilling fear in the universe anymore. This wasn't like Baz.  He took another swipe and cocked her neck. She gasped for breath which turned into gurgling quickly. Blood sprayed out of her throat and onto Gare, covering his form in blood. He let it drip onto his taco which was now showing its head strips of what we amused to be pieces of membrane's army. It now showed a full body shot of Gare, completely covered in blood up and down. There was a lone moan coming from the speakers and a disturbing gradient background behind him that kept changing through the whole shot. The shot lasted what seemed like hours but it was probably only a couple of minutes. The most disturbing part was that this didn't even seem like the part of the show at all. Like the whole episode was meant just to show this one shot. The screen faded to black and it appeared to be over. We started to get up and leave to go vomit. But then there was a loud screeching coming from the speakers. We turned down the sound but it did no good. We just had to sit it out until it was over. The screen came back showing a loop of Gare flying through a night sky, blue eyes, completely clean, bobbing up and down as he flew. This went on about 30 seconds before it cut to bare busting another hole in Zim's wall right next to the one he made earlier. Zim was frightened at Gare's appearance, now covered in blood and gore again. Gare, what is this? You're covered in human juices. Gare replied and said his first line in the whole episode, still in duty mode. Yes, my master. I stuck getting human food and started making human food. I improve entity human food in either sense of the term. It was now showing Gare's point of view with the head display and targeting system. He was targeting on Zim. Zim was wearing his human disguise. The target spawned a dialogue that said... Gare, I accuse you. Equals human. Equals master. Equals food. Likes wearing gents. It cut to showing the outside of the house right by one of the windows. You can hear the buzz saw blades again and Zim screaming. What are you doing? Gare! Gare! Before he silent, green liquid splatters the window and it fades to black again. It was black for a very long time, so we assumed it was over. But there was one last thing before the tape actually ended.  Nick will perish.


The huddle with paperplusoffice.co.nz, your local office supplies specialist, now open for business. I'm the huddleist Monday evening, David Farrah from KiwiBlog.co.nz, hello David. And Cameron Slater from wileoil.co.nz and editor of The Truth, hello Cam. Hey Larry. David, first to you, the Prince of Wales, should I say Charles and the Duchess of Cornwall, Kimmilla in the country for a brief visit, I think it's just under a week. Some focus has been on the hairdresser tagging along, the tax pass paying for all of this. The visit will not be cheap, Papua New Guinea I think was near enough to five million for three days. What do you make of these visits, do you support these royal visits, I mean the cost, that's just part of the deal isn't it? Well, if you keep with the monarchy it is part of the deal when you have to accept they come over from time to time, but I think really it just shows how ridiculous it is that we are part of the monarchy, we have a perfectly good Governor-General, lovely man who I think is widely respected, we don't have to pay for a hairdresser to follow him about everywhere, so effectively the Governor-General is a head of state, we just have this sort of attachment that we haven't yet shaken. Right, and whether it's of any relevance to this country in 2012 at all right now, what do you see in it Cameron? Well, I'm a Republican but I've always said to David privately that I'll only support a Republic when two people have passed on, the first is Helen Clark and the second is Jim Bolger, because both of them would want to line up and want to be the president and you know you think that it's expensive paying for a hairdresser, I can tell you that having an office of a president will be a whole lot more expensive. Yeah, but if it wasn't Helen Clark or Jim Bolger would be somebody else Cameron, there will always be somebody else coming along. You see that's the thing though David, isn't it? It becomes political, that's the problem. Yeah, my solution to that is if we move to Republic one day is you require not just a majority in Parliament but what they call a supermajority, say three quarters, which means that you won't get politicians because there has to be someone who would be susceptible to at least the two major parties. So I agree with Cam's worry about certain people becoming president, but I think you can look at other countries around the world and see that you can avoid that. I reckon we've got a cheap deal as it is. Paying for hairdressers is nothing. The more worrying thing is like the World Cup, Len Brown couldn't organise the trains, this time he couldn't organise the weather. OK, yeah I look at them and look I don't dislike the Royals at all, I'm more of a Republican I think, but you know I look at that lifestyle. Would you want that seriously? Would you want to have to do that, the smile and wave, the endless functions that you've got to be polite? I think it's about being miserable. On a personal level, they're very hardworking, very dedicated to their jobs. Yeah. Queen especially, you cannot criticise her performance. I think the debate is about what's best in New Zealand, which can be very different to what's best for the United Kingdom. And we do have to have our own Royal Family though, maybe Pippa Middleton could come down and become Queen. We'll come back in just a moment. David Farah, Cameron Slater, it's coming up 15 to 6. Drive with the Business Banking Specialists at Westpac. Back on the huddle with David Farah and Cameron Slater. Issue number two, Cameron, pressure appears to be mounting on David Shearer ahead of the Labour Party's conference this weekend. Looks like his days are numbered. What do you think? I think his days are numbered. My Labour sources have been whispering for a little while yet. I know David Shearer has denied that he's had the delegation for want of a better term, having a little chat about his future. I know that that actually did happen. I know when that happened. The only thing that's disappointing for me is that they don't seem to have the courage to actually want to get into the blood and guts. And they seem to be a bit squeamish and they should just get on with it, because politics is all about blood and guts and we want to see some. Right, they want him to step down rather than... Yeah, I think they're trying to... Or be rolled. An easy way out, something... What I've heard is an offer of education portfolio. He was a former teacher himself, and he did that. I think David will probably correct me. I think he was an education spokesman at one stage. It's a gracious way to exit, but very definitely there's two factions that are angling. The thinking is that they've got to get him gone, basically, before the conference, because after the conference, the membership will be locking in behind Cunliffe and they'll have a larger say in who chooses the leader. So... What are you seeing then, David? What are your sources telling you? Well, not what I'm seeing is a quite extraordinary destabilisation campaign for their annual conferences this weekend. This is normally your best chance for a great weekend of publicity, because it's all your MPs talking about what the government's done wrong, what their policy's been released, et cetera. And people have chosen to go out there and not see how he does at conference, and then if he doesn't do well, say, maybe we need a change. But you've seen half a dozen people come out over the last two days, all saying, he must go, he must go now. That is a destabilisation campaign, as Kim said. I think they want him.  But Labor knows, don't they, Cam, that they would have a better chance with somebody else, either Robertson or Cunnliffe, or whoever? I'm not sure that they do. If you have a look at Robertson, if he takes over the leadership, then very clearly the Labor Party, and the caucus is signalling that the Labor Party has come now to represent the fact that they're the party workers' party, rather than the workers' party. If you have Cunnliffe, then you have, again, you've got a major problem there, in most of the caucus, just like David Cunnliffe, although the activists out there, the more rabid left-wing activists out there, would see that as a massive lurch to the left and the increase in union power. And the sad reality of what we're seeing here is that the Labor Party is just so far out of touch with middle New Zealand that even in their leadership battles, they're stuck. Thank you. Got to go. Cameron Slater and David Farah on the huddle. And these talks, it'd be, it's now 10 to 6.


In Wales we have ambitious plans to create a national forest which will run the length and breadth of the country through a connected ecosystem of ancient and new woodlands. The national forest for Wales will belong to and benefit us all. It will be hours to create, it will be hours to cultivate, it will be hours to cherish for years to come, it will protect our country and provide a more sustainable way of life for our future generations. This is your national forest, be part of it.


Okay. Yeah, now we're online. Okay. Hi everyone. Welcome at this Moved Jcast Coffee Sours meeting. I started minutes of meeting for that one. The meeting we have now, I just forgot to change the date, is 29. Sorry. We have Oleg, Nikola, Su and Ion or John. I'm sorry, I don't know how to pronounce it and what's your surname. So if you can edit your name, I will put the link to minutes of meeting in the chat. Let's start with the follow up of the previous meeting. We were talking about the detaching configuration. Oh, no, that's the previous meeting follow up. Let's move to action items. Oleg, to add Jcast to the next Cloud Native Seek meeting agenda. Well, then I misunderstood the decision. So I started creating mailing lists, guitar chat rooms and everything. Then Oleg made me aware of the fact that it's not what we've decided. So I have a better internet connection now. So maybe we can make sure that we all understand each other this time. So what you're suggesting and I assume what others agreed on is that we stay at the Cloud Native Seek. We don't create separate, the configuration is called Seek. We can mention that we have office hours on the Cloud Native Seek page and maybe reports at the Cloud Native Seek if we are discussing something interesting during Jcast hours. Is that correct now? For me, whatever works. So yeah, that's what we agreed at the previous meeting. And the main reason for that was to avoid creating new entities. But if your preference is to go with configuration as code Seek, I'm also fine with that. Though it seems that Pipeline team doesn't want to be a part of the same Seek and they would prefer something separate. But even without Pipeline, system configuration there should be a lot of topics. We have this meeting and we can maybe include staff if we, like regarding group looks for example, if we need. But I prefer your idea, especially now with upcoming months. I'm going to be busy. We are all quite busy. So let's stay with Cloud Native Seek. I will just update the PPR. I created updates on Cloud Native Seek instead of creating the new one. All the people that I have created in your mailing list. Sorry for the spam, I will get you. So they will be Cloud Native Seek meeting next week. It's my plan. So if you're interested, you could just do a status update there. I'm going to make most probably I will send a mail with the update because if everything goes according to the plan, I'm going to be somewhere deep in Swedish woods, Swedish forest without the Internet. Okay. So yeah. So I'm going to fix the mess and send... Sorry and send the update to the Cloud Native Seek. Okay. The next section point was, yeah, Alexandra was working on two issues in one PR. One was regarding introducing text fields under configuration as code subpage in managed Jenkins so we can provide a new configuration source. And that was my request. I was having trouble when I was using Jenkins installed locally, like just an app, not a Docker container. And since I want to work on a blog post where I describe two use cases for running Jenkins as code and I want to make it as easy as possible for people that are not very fluent with terminal yet. They are just starting. Then I really wanted to have a possibility to manage the location of configuration source via UI. And it's done. The other one was dry run and I don't think that one is finished. We will hopefully discuss that today. Then I was supposed to release new alpha or that was a long time ago. We in Pragma had messed up something with our release mechanism. So Nicola released a couple of times alpha and then release candidate one. And last week, mess released, release candidate two because we wanted to have this thing implemented that Alexandra, the UI text field for configuration source location. So that one is done. And then, oh, yeah, I did not discuss merging to master. Maybe there is enough of us now at the meeting so we can talk about that. And somebody to fix the master branch while master branch was fixed. So we're more or less good. Oleg, you were attending the previous meeting. Is there anything else you want to mention regarding that one or should we move on? Nothing specific from me. Okay. Very good. So, well, the next finding in the agenda is release status, but it's basically the jcask status. We had planned to release official one zero sometime in the middle of August. It didn't happen. And that's not a huge problem. But we definitely want to have it before Jenkins world sometime next week or the beginning of the following week. That's my opinion. So I'm looking at the release one zero milestone. And I hope you can see that. We only have one must have issue. And actually, when I looked at the issue, there was a discussion about it. And then Nicola lowers the priority and Oleg put it back to must have. So I think since both of you are present, maybe we can discuss if we really must have it in the release one dot zero. Well, if you don't have it one dot zero, then potentially you start breaking plugins dependent on your plugin when it goes beyond one dot zero. Removing a library is a backward and compatible change in Jenkins terms because there is no plugin installation. So if you do it after one dot zero, you potentially break something dependent on jcask. And it's hard to predict what exactly you break because they maybe just rely on snake Yamal and taken it from your plugin. Nicola, any comment? Yeah, I agree with Oleg on the general principle that actually we don't have any pros and any mechanism in Jenkins to isolate plugins bundle dependencies. Yes, so I was thinking that his main concern was that once we shed snake YAML, if we have reference in the API, then it will change the API. That's the reason I was lowering priority because we don't have any more reference to snake YAML in the public API. It's just a bundle dependency. So for sure if we have some other plugins that rely on configure code to get this dependency in class path, which is probably the worst way to manage dependencies, then there is some compatibility risk. Yeah, right. So my preference would be to either shade snake YAML or maybe to detach it to a separate API plugin. The detaching to API plugin doesn't help much because the only reason why we do that is compatibility. Yeah, snake YAML doesn't use to be backward compatible so we can use this API plugin approach. Yes, so my preference would be to shade it anyway. Alternative option would be to just add section about that to developer documentation so that it's explicit that snake YAML shouldn't be used from the plugin. It won't help much because people will be still implementing that. They will be potentially getting into upper bound dependency issues if the YAML plugins try to implement jcasc and also have their own YAML functionality. So yeah, shading before the release looks like the most safe approach to me. And are you able to estimate how big is the issue? How much time it can take to solve it? Hard to say. So if you are lucky it's just five minutes. Okay. If you are not lucky maybe five years because it really depends on how snake YAML is implemented internally. If it does a lot of reflection, calls to its own classes then you won't be able to really shade it. Okay, so if we added this must have then we may end up releasing in five years. Well, five years, yeah of course it was a joke but yeah the idea that it's hard to estimate what this task would take. So do you have time to have a look at least to be able to estimate or it doesn't really make sense? Not before Jenkins World. Okay. So let me have a look at it. I mean I'm not saying I'm going to do this but let me have a look at it and let's... Yeah, I will talk with Mass maybe with some of you on guitar. So I understand that's the most safe approach and... Yeah, so there are several examples of shading libraries in Jenkins. So for example in Docker 3 stability and yet another Docker plugin etc. The main problem that currently you cannot shade libraries in plugin form. So you need to create another model which just does library shading and then to add it as a dependency. It's a bit weird but we haven't fixed the agenda yet. So that was my question because I tried to use this approach and doing so. I just can't have all modules open in my IDE. Because the path to shade the package isn't included in GenBrain IDE so that's a bit confusing. Yeah, I'll paste an example to the chat. Okay, so it's a problem for IDE of course but mostly it's a problem for maybe in tooling. But yeah, at least in the case of JCASC you don't need to change the project structure because you already have multi-model project. Okay, so as I said I will try to have a look at it and continue the discussion at Gitter and we'll see where it takes us. So that was the only one that we had this must have in release 100. Does any of you see any other issue that or maybe we don't even have an issue for that but something that we need before release 100. We have some issues that are bugs. I think we need to scrap issues because this list we mostly created a few months ago. So it may be just obsolete. Yeah, you mean the Milestone one? Okay, so let's maybe start with what we have here. That one, we had a workaround for that. Yeah, am I still assigned to it? No. Okay, just to make sure. So this is still an issue and it should be solved before 100, right? Yeah, it should be solved before... No, actually it doesn't. It's just a developer issue. So it doesn't really block any kind of release. Okay. Yeah, and I guess that once you go to 100 release you will remove beta notations from your APIs so that this issue will be likely solved anyway. Okay. But what's the solution for that? This is the workaround we're using now, right? Yeah, so the workaround effectively means that you run with a new agent to score a version. That's it. That's okay. This is documentation that one we just discussed. This getting started documentation. It is kind of what I will have in my blog post. So once I work at the blog post I will improve the documentation. At least the part I want to work on. That one I guess here you are still assigned. Yes. So I contributed some pull requests to error propagation. API was all reviewed and improved. We could close that. One point that I believe that the configurator API is a must for the plugin. So yeah, I consider it as a part of that. Since there is a decision to not do that, I think it can be just closed. The issue. Yeah. So main things have been done. Nice. Thanks. Support configuring Guillermo part in manage Jenkins. Oh well, this is what Alexandra was doing. And then preparation description. That's also documentation and it will be part of what I was working on. And this is just a cosmetic change in the configuration code text in manage Jenkins. So that's a piece of cake. And then let's see what we have here Jenkins down after installing planning. Yeah. But it may be not related. Is that what you meant Nicola by this comment? All right. Was this one I know I'm missing context to get more information on what's going on. Plus one. We need more information here. Yeah. So that one is just from two people. Yeah. So currently all custom configurators should provide schema jelly rate. And it's missing. Is that what you think or? It's my guess. Yeah. Anyway, that's something that should be solved before the release one zero. Great. Cannot install. Can you scroll down? I'll just open the tracker in parallel. So cannot install one concurrent modification exception in the reactor. It looks type and not present exception proxy. So this is an issue with class loading. Most likely binary conflict. I think we should at least invested. I mean, we should invest. Maybe we'll end up from the milestone. But for now it sounds like a ban. Yeah. Maybe we should discuss a wide efficient topic. So we have a plug-in installation support in jcasc. It's announced as a better feature. So if we keep it as a better feature in one zero, then this issue is probably not a problem. I'm sorry. If we keep plug-in installation as beta in one zero, then what? I did not get the last one. All issues called by attempts to install plugins with jcasc won't be a priority for us. Okay. And it is possible to keep them. Okay. But the inside configuration is called plugin management. That's not plugin management in our plugin site. Maybe for me it seems to be related. But maybe I'm wrong. What we will do is that this person was trying to install configuration as code and got an error. So yeah, there was a failure installing configuration as code support. Well, from what you may see in the log, there is a plugin which needs to be updated. Objects authorization. So yeah, the real problem that he gets into issues when there is a restart. So it's not a problem that such thing happens during the installation. It happens when you update the dependencies. But concurrent modification in the reactor. Yeah, this is something weird. I understand why it may happen. But whatever happens here is a Jenkins bug. Okay. So I suggest resubmitting a grtk to Jenkins code first. Because yeah, we've been doing something for a task reactor to prevent concurrent modifications. But yeah, then there was a decision that they cannot happen there. Okay. Maybe they can. And then you said that we can keep plugin installation as beta and then just down prioritize or plugin management related issues, right? Yeah. And is anyone objecting? Because I want to release one zero and I'm happy to release it without some features. I'm not happy to release it without features that don't really work. So I'm okay with the plugin management in the first release. It's another question to Nicola. Right. So the main issue here is that we hardly can have unit tests for this feature. So the reason we had bias regressions to happen here. So that's something I can invest some time to test. But I hardly can guarantee that there is no later impacts if we have something else to fix. But we don't have to rush. I honestly think it won't be the end of the world if we have it as it does. We just develop it when we have more time. Crazy conference period. And just added this functionality. Well, as soon as we have it, but without rushing. And then as John commented on the guitar, as soon as the plugin is stable, we should release it in his opinion. I mean, I'm not going to stop you from working on it if you want. But I just want to know if you're okay with down prioritizing. I'm fine with that. I'm pretty sure that we will discover some other bugs in other places. So we know this one might be broken at some point. And we probably will discover there is some other cases in other places on this plugin. So the fact that we release 1.0 doesn't mean it's just perfect. And we won't discover any issue. Okay. And there were some issues with exporting tools installation. Yeah, this specific one is a bit confusing. Because once a cloud plugin has created nodes to absorb load, those nodes are registered on Jenkins. And we can't distinguish with standard nodes. So we will try to export them as legitimate nodes. And in the case of the specific EC2 plugin, there is some blocker for it. But we would have to exclude them. And I don't know yet how we can do. Okay, but when this error happens, does it stop Jenkins? No, no, it just blocks the export. It just blocks the export. Okay. So for me, if it's not breaking Jenkins, I would have it in release 1.0 as it should have maybe. Okay. Unless someone, any of you have a strong opinion about that we should do something else. But I'm just trying to be reasonable. We won't make it perfect. As long as it was mentioned, it's stable enough, I would say we may try to. And then there's another field to export. Yeah, so it generates YAML. There is just an error. Yeah. So this one is for artifactory plugins. And there is some of them comparable ones with just badly designed plugins. So the solution should be on the plugin site. Okay. And then we have, yes, we just have to wait and see. Tool installation fails to load every other restart. That's some strange. That's good. So if I remember correctly, there is a fix for this one. It's the same one. Yeah, exactly. It's already pushed. It's on master. So rather a test, not to the fix itself, right? Test, yeah. There is a fixed part. Okay. Yeah. Okay. So I guess we have to do and I'm okay doing that. I just want to make sure that it's fixed. And the rest of the issues below, we've already been through them because I can see those are the ones that we already had in milestone 1.0. Any of you misses anything before the release 1.0? Maybe it makes sense to review Jenkins Jitter as well. Because some people start reporting in Jenkins Jitter. Of course. Yeah. And I hope that it eventually becomes an official way to report issues. Okay. Remember the link to Jenkins Jitter? Issues. Jenkins. There's ci.org. Okay. There's this very trigger plugin compatibility, but. Yeah. So whatever plugin compatibility is on the blocker for the release. Yeah. It's something really precious. I mean, for me, that's something that should be solved on Garrett's trigger plugin site. Right. Right. So when you see such issues, you can just remove configuration as code component. Okay. There is jcask compatibility label if LinkedIn is needed. So you keep it here, but you remove configuration as code from the components list. And then you can change the assignee. So currently you are assigned to this ticket. Yeah. But you can change it to automatic assignee and then it will be assigned to Garrett to get maintained. Yeah. Automatic. Okay. Okay. Thanks. A proxy authentication work when it's from Jenkins YAML. What is proxy authentication? Plugins proxy. I mean, that's a proxy for update center or. Why would it? Yeah. It's in plugins because effectively it's in a plugin manager. Yeah. So that's something that we can. We want to, there's a stopper for 1.0. Well, it looks important and it looks to be a part of jcask plugin itself. Yeah. Yeah. Yeah. Yeah. Yeah. Yeah. Yeah. Yeah. Yeah. Yeah. Yeah. Yeah. Yeah. Yeah. Yeah. Yeah. Yeah. Yeah. Yeah. Yeah. Yeah. Yeah. Yeah. And the Next version result. Resolved. Resolved. Yeah. To open. So extension point for marking generated items. Well, it's much more ticket than just the jcask plugin. So effectively, it comes from the read-only WebUI story. then you see which parts are configured by configuration as code and hence not editable and others. So it's not related to Jcast really. It's rather a bigger engine in Jenkins somewhere. And this sector is on global configuration tool. Instance missing single tone. Well, when I see this errors, yeah. It's the most likely Java nine or above. And since there is no response from the report that I suggest just closing it. Okay. So resolve and complete. Okay, L we just closed it. Yeah. 49 and nine are three. Thanks Alec. So yeah, Jira doesn't look that bad. Yeah. So let's go back to the mic stone. As I said, I'm gonna be on vacation. So hopefully it won't be available from next week, upcoming weekends to the next weekends. So the potential release date for me would be Monday eight. Oh, let's do it nine so I can have a time. No, no, no, it's not October, the 19th. So you're talking about one to zero release. Yes. Is it okay to release right before Jenkins vault when everybody will be traveling? I mean, something really wrong goes is one to zero. Yeah, that's why I wanted to do it here and we're traveling like around here. Yeah. I mean, I'm not saying we can't release it earlier. I'm just saying I won't be able to release it this week if we have issues solved. I can probably answer a mail every now and then, but that's it. And I think we really wanted to have it before Jenkins rules. So if we don't introduce something really big, then if we solve the issues, then I don't know, maybe I'm too hopeful, but. No, it should be fine. And the worst case, we're gonna hack it on the weekend before Jenkins vault, don't we? Oh, yeah. Okay, so I'm gonna pretend and I will try to keep my eye on the status every now and then when I have access to the internet and we'll see where we are. Okay, we have some time left. Anything else any of you would like to discuss? Nothing from me. Right, nothing on my side. Oh, no, just not. So for Jenkins world, I've ordered some stickers with the configs called logo, the new one. So for those of us who will join the contributors to meet, both in San Francisco and Nice, you can come back with a nice sticker on your laptop. I just got a new laptop and it's stickers free, so that would be a nice start. Yeah, right. Oh, good, thanks. Yeah. So we were having this meeting every second week and we shifted because last week almost no one was available. So I suggest let's have another meeting two weeks after that one. So it will be like 12th of September unless there is an urgent issue to have a meeting earlier than let's just guitar and see. Yeah, I agree. Maybe it makes sense to add one more item to our agenda just to talk about events related to JCASC. So yeah, there is Jenkins world, of course. Yeah, but you mean to talk about it now? Oh, why not? Yeah, then what else we have, for example, today they will be a Jenkins area meetup in Helsinki. So yeah, there will be a JCASC presentation as well here. And yeah, and actually there is a number of other meetups which present a JCASC now. So it looks like it's pretty popular in the community. Yes, there will be a meetup in Stockholm. I don't know if you have a link somewhere and I will try to find it. Yeah. So I will be probably presenting JCASC in the end of September 11, I guess. Yeah, by the way, there is a full agenda for the day of Jenkins, right? Yes. So the last one we added was a Baptiste about Evergreen. Thanks for pointing out the problem with my bio on the page. So I think we'll try to organize a meetup the day before the day of Jenkins' code in Copenhagen too. It's just not announced yet and fully decided, but it's on my agenda for today to discuss that. Right, so I'm arriving at something like 2 p.m. So I'm available for the meetup if needed. Super nice. Yes, we are considering different formats. So as soon as we have some more clarified idea, I will contact you. Okay. And the meetup will be, so at this meetup before the day of Jenkins' code, well, we don't want to repeat the same material we'll have at the conference the day after and it will be open for anyone, so you don't have to attend the conference. So probably it's not even a code, maybe something else. Yeah, yeah, whatever Jenkins related, just kind of warm up. It's allowed to be a code, of course, but we're not limited. Okay. Yeah. And I think that's all I have. Okay, nothing specific from me as well. So yeah, I just think that the listing events and talking about updates for them would be useful. Yeah, like now you offered to be involved in the meetup, so I find it very useful. That was the idea, thanks. Okay, anything else? Not from me. Into Adon. Yeah, so I guess we can close the meeting. I will stop sharing. Okay, then I stop the broadcast.