Okay, so today we have to finish it at 1 o'clock on the dot, so what I propose to do is to start immediately and just keep talking through for an hour and a half without a break. So I'll begin with some geometric background. So the main space we're going to work on is M11, the modular stack of an elliptic curve. So there will be two different main ways of thinking about this. First is over the complex numbers. And so over C we will think of M11, or sometimes I'll write M11 and simply as the orbit fold quotient of the upper half plane by gamma, so H is the upper half plane and gamma throughout this lecture will be SL2Z and nothing else. Okay, so we have the orbit fold quotient and this is very easy to work with roughly speaking geometric objects on M11 and such as local systems, vector bundles and so on, can be viewed as objects upstairs on H, which are gamma-equivariant. So we'll see examples of these. Then we have the universal elliptic curve. So really it's the analytic universal elliptic curve and it is described again as a quotient as an orbit fold C cross H over gamma, that's great, semi-direct Z2. So gamma is going to act on the right on Z2 and let me give the actions on C cross H. So if gamma is ABCD matrix in SL2Z, then gamma of Z tau is Z over C tau plus D and then gamma acts on tau in the usual way, A tau plus B over C tau plus D. And then for Mn in Z squared, we have Mn Z tau equals Z plus M tau plus N and tau stays put. Okay, so that defines the universal elliptic curve over C and concretely a point in M1 N is an isomorphism class of elliptic curves E and the fiber over that point is the elliptic curve itself. So that's one way to think about M11, which is very classical, and the second way will be much more algebraic and I'll only need to work over Q but we can do better, we can work over the field, sorry the ring K of the integers with 12 inverted and to do this it's convenient to work with a slightly different space, which I learned about from Decayne. So M1 vector 1 is rather nice, it's the moduli not stacked but it's a scheme of elliptic curves E with the data, so over C at least, with the data of a nonzero tangent vector V in the tangent space of the elliptic curve at the identity. So over C it's a picture like this, you have some nonzero tangent vector sticking out of the tangent space at the identity. Now a more algebraic way to think about this, an elliptic curve with the data of such a tangent vector is equivalent to the data of the elliptic curve with an abelian differential. So omega is in H0, is a section of its chief of holomorphic differentials and such that its pairing with V is 1 for example. So another way to say that is that V defines what the tangent bundle is trivial and so the data of a nonzero tangent vector here duly gives a nonzero holomorphic differential all over the whole curve. Okay so this has now a very algebraic description, such a curve E we could represent it by an equation y squared equals 4x cubed minus ux minus V and the abelian differential we write as dx over y. And so the point is that if you scale this in the usual manner then this, that will define an isomorphic elliptic curve but this differential will also get scaled. And more importantly that when y goes to minus y, so this involution then you don't detect it here but you do detect it on this differential omega because it will change sign and that's the reason that this is a scheme and not a stack. So very explicitly we can write this as m1 vector 1 is simply the affine. So this elliptic, this is smooth so this equation has to have vanishing discriminant. So the space of such, these equations are parameterized by a2 with coordinates u and v minus the locus where the discriminant vanishes. So d here and from now on will be u cubed minus 27 v squared which is actually 1 sixteenth of the discriminant of this equation. We don't care about the 16, especially since we're inverting 2. So m1, 1 is very explicitly this complement in two dimensional affine space and it's just spec of k, u, v, 1 over delta. So here a is coordinates u, v. Okay, so this defines a very explicit scheme and it's affine ring which is this thing here, m1, 1 vector 1 has a gm action, it's a grading, I think of this as a gm action, actually a multiplicative group and it's the usual one, it's the one that gives u weight 4 and v weight 6, so u, v, by the action of a point lambda in gm of q for example becomes lambda to the minus 4u, lambda to the minus 6v and then with this description, so this is a very nice scheme, we can think of m1, 1 as the stat quotient m1, vector 1 by the action of gm, so that means that objects on m1, 1 will be viewed as gm equivalent objects on this very concrete scheme and in this language the Dean Mumford compactification which we won't need today is just gm quotient of a2 minus the origin. Okay and in this language the universal elliptic curve is very explicit, I'll just write it up here, so the universal elliptic curve over m, 1 vector 1, so it comes with this tangent vector or this non-ambient differential, it's just explicitly the spectrum of om11 which is just this ring over here, a joint xy modulo the equation y squared equals 4x cubed minus ux minus v or the ideal generated by that equation, so this is all very concrete, so now I want to describe some local system, first a local system on the on m11 and then secondly an algebraic vector bundle with integral connection on m11, so this is all very classical, so we're going to give ourselves a family of canonical local systems on m11 and out of these I'll define the better version of relative completion that will be built out of these, so these are if you like sort of the basic simple building blocks out of which we're going to construct iterated extensions which are going to be very complex, so this is what you think it is h is going to be r1 pi lower star q, so I forgot to say what pi was, pi is this map and q is the constant sheaf on the elliptic curve and then therefore this describes a rank two local system of q vector spaces and it can be described very concretely, its fiber over e is simply the co-homology group h1 of e with coefficients in q, which is a two-dimensional q vector space and now defining the usual manner vnbb for betty because this is really betty co-homology working with, so this will be the nth symmetric power of h and therefore it is a rank n plus one local system on m11n, so we think of that well we can think of that very concretely by the principle described earlier a local system on m11n is the same thing as a q vector space of the same dimension plus the data of an action of gamma, right now let me briefly describe the dual local system to this, so this local system has a dual and its fibers are h or homology, so this can be described very explicitly, so if our elliptic curve of this is that we're working over c here of course is c modulo the lattice tau z plus z then we have the the usual picture for a fundamental domain for this action with zero here tau is enough for half plane so it's up here one we call this a and call this b then then a and b generate the homology this homology group so a and b are a basis of this and now to fit with the start the modular forms community notation I'm going to switch notation and I'm going to write x equals minus b and y equals minus a and I'm not 100 percent sure about the signs here it could be plus you can take it plus if you like but it makes no difference whatsoever because there are no modular forms of odd weight in this context so it's impossible to say and then so this local system then can simply be viewed as as the vector space q x direct sum q y so this is the absolutely standard notation in in this business where v has a right action of gamma where if we have gamma equals abcd um x y maps to x plus by cx plus dy and this notation this is this is denoted by a slash so v the action of gamma is denoted by slash on the right so this is unfortunate because some people work with the left action the modular forms community works with the right action at some point you can't have your cake and eat it and so I'm going to use right actions from now on but at some point this is going to come back and and and cause some trouble you can't get away with having left actions everywhere in this business and there comes a point where you have to make a decision um this is absolutely standard in the modular forms community people who do period polynomials and so on so I adopted this the problem with right actions is that we we we write uh in in english from left to right and there comes a point where it just becomes unworkable but this is very good for now so later on I will I will probably have to switch to a left action I'm afraid anyway so I leave you to to struggle with these with these irritating difficulties um but then so modulo this this question of switching between left and right actions that I don't want to get into um we can think of this vector bundle as uh simply there was this this asymmetric power of this vector space is simply um the space of polynomials or homogeneous polynomials in two variables of degree n plus right action of gamma and so this is the this is the convention that I'm going to adopt right so that's um that's those are local systems and now um we want some um algebraic vector bundles so now we um define um so these are going to be the the building blocks for the diram relative completion which is going to be built out of iterated extensions of these building blocks in the same way that betty relative completion will be built out of these building blocks so in a consistent way I'm going to call v diram h um we can put a one here if you like is going to be um h one of the universe elliptic curve relative to m one vector one which is scheme plus the gas mining connection as as defined by cats and odor so this can be written down very explicitly as follows so now we're working on m one vector one of this very explicit scheme without the defining equation over that um so what it is it's a trip it's actually a trivial the underlying vector bundle is trivial so it's a trivial rank to coherent chief which is just the the affine ring m one vector one um and then some generator s and another generator t so using blackboard letters because later on s and t you're going to denote the standard elements in s l 2 z that i'm going to call s and t so this is just to avoid confusion with elements in the group um and um so what it's going to be gm at convention there's going to be a gm action if you prefer ever s and t have some some weight so lambda of s uh is lambda times s and lambda acting on t is lambda inverse of t and what s and t correspond to so s corresponds to so well t corresponds to the holomorphic differential dx over y and s corresponds to x dx over y in uh on on this uh in this uh notation here so we have um you can show this this this defines a um a trivial bundle these two forms are always linearly independent and um to compute the gas mining connection you differentiate so these two one forms are closed on each five on each elliptic curve but on the family they're not closed so you differentiate them to get two forms and you rewrite the two forms as one forms on the base times something that you re-express in terms of this basis of one forms s and t you can always do that and when you do it you get a certain formula which is very elementary but um a bit of a chore to compute and it can be written so the connection on on this is given by d plus um s t times a certain matrix of one forms psi omega minus u over 12 omega minus psi d by d s d by d t and I should explain what these forms are I thought it's nice to give this complete it's completely explicit so it's nice to write it down I think that the first person to write this down was was uh uh cats uh in an appendix to to a paper and in a volume um in some Antwerp proceedings in in the early 70s I think so these these forms are very explicit psi equals um d delta the discriminant with one over 12 um and omega equals three over two two d u d v minus three v d u over delta and I mind you that delta is this thing over there okay so this is this um connection is is is g m equivariant you can check that and therefore um therefore it defines a um defines an algebraic vector bundle plus integral connection on m downstairs on m sorry on on m one one not m one vector on so a priori this is defined on m one vector one on the scheme and we view a an algebraic vector bundle with integral connection on the stat quotient as being a g m equivariant such objects upstairs on m one m one vector one and I've got to say that actually this this um this has regular singularities at infinity it's very easy to compute the residue at at the point q equals zero um and and check it's nilpotent and so on and so forth um so then we finally redefine v and duram is the nth symmetric power uh plus its connection which is given by uh exactly that formula right and um what I wanted to say that one of these forms I think omega essentially this thing looks a bit complicated but it really corresponds to d q over q morally so there's a map an analytic map from the upper half plane to this and and if you work it out so you you should should think of you as as eisenstein series and v is eisenstein series of weights uh four and six respectively and if you compute this you get exactly d q over q coming out so this looks complicated but it's it's something very familiar um and then there's the the reman helbert correspondence gives um an isomorphism between this petty local system and this algebraic vector bundle so v and b tensor o am I working m one one an it's isomorphic to the end ram tensor o well this means that you're already working upstairs in some sense and briefly so to the the element t here because it t corresponds to d dx over y if you integrate dx over y along a and b um you get one and tor and you can check that this corresponds to after some possible path to pi i it corresponds to x minus tor y with possibly some sign and some two pi i here okay so this is very um classical before proceeding for and these are the basic building blocks that we're going to use sorry no i don't want to compute s i don't want to be as they evolve it it's it's more complicated i don't want to say what s is um so cohomology so um so by an extension of of god and x them on uh from 1964 on the algebraic diram cohomology in which you define algebraic diram cohomology so this is you have to extend this because we're working with um vector bundles that's no problem and we're also working over stack so you have to say some words but it's it's it's really um no big deal this has just gotten x them it shows that there is a canonical isomorphism um which is called a comparison isomorphism from the algebraic diram cohomology of m one one with coefficients in this algebraic vector bundle tensed with c and that's isomorphic to um what should i call it well i think of this as betty co-a betty cohomology so you can put a b here if you like it's just singular cohomology m one one analytic with coefficients in the betty vector bundle tensed with c and and when you do this isomorphism this is essentially given by integration and it produces numbers it produces periods so i'm now going to explain in more detail what these things are and say some words about these periods because uh it's astonishing but a lot of this didn't seem to be anywhere in the literature until very very recently so let's first describe uh this space um so because of the orbital description of m one one analytic it was just simply connected space quotiented by sl2z then this right hand side is simply computable in terms of the group cohomology of its fundamental group so it's h1 gamma um in this vector space vn vn was the this this vector space uh up here of dimension n plus one so this is just group cohomology and i gave the definition last time explicitly in terms of uh cos cycles and modular boundaries and then the question is then what what is this what is um h1 diram what is this left hand side and so this should have some description in terms of modular forms so now let me describe the diram cohomology so um let's uh let's write m so m this is not a non-caligraphic m to distinguish from a modulite space this is just a roman m m factorial m plus two is defined to be the space of what are known as weakly holomorphic modular forms of weight m plus two with rational Fourier coefficients so this is a vector space over q rational Fourier coefficients it's an infinite dimensional vector space over q um so what is it it's the set of functions f from the upper half plane to c which are holomorphic holomorphic on on h such that they are modular so f of a tau plus b over c tau plus d equal c tau plus d to the n plus two f tau so they're modular of weight n plus two um and furthermore that um on the q disk oops i've got to say um so here q q equals of course e to the two pi i tau so um because the the translation variant they have a free expansion and the point is that they have a they need to have a Laurent expansion at the disk so we suppose that they have a long expansion um of this form they can but it's it's the point here is weak weakly means that you're allowed to have poles uh at q equals zero um and and the other condition is that um the Fourier coefficients are all rational numbers so this is a a vector space um and yeah so what i wanted to say though so weakly here means that you're allowed a pole at q equals zero but nowhere else it's the only pole you're allowed so the pole poles at the cusp and but you're holomorphic everywhere else on h um so now let's we have so the the the usual space more familiar space of holomorphic modular forms is contained in the weakly holomorphic modular forms and inside the holomorphic modular forms you have cusp forms so these are the subspace of functions which are holomorphic at the cusp so in this definition it means that um n equals zero so there's no no pole at q equals zero and this is a cusp form it's holomorphic at the cusp and the first Fourier coefficient a naught the constant term vanishes um so now on this space of weakly holomorphic modular forms there's an operator q d by dq uh which is often called the bowl operator and so you can certainly take such a long expansion and differentiate it term by term but that in general will not be a modular form it will it will destroy this um this this property so it does not respect or preserve modularity but what bowl showed was uh i think in the 1950s bowl showed that if you take uh apply this operator many times if you take to the the n plus one power of this operator then it in fact does preserve modularity if you restrict to the the space of the correct modular weight so if you look at modular forms of weight minus n then the n plus one power by some coincident was some accident some miracle uh gives you modular forms of weight n plus two so that's uh bowls a constant of bowls theorem so but this sort of does and what i've got to mention here is that that of course there are no holomorphic modular forms of negative weights but there are many um weakly holomorphic modular forms of negative weights in fact there's an infinite dimensional vector space okay so the the theorem then um is that you can describe this commodity explicitly in terms of these uh weakly holomorphic modular forms um what are the properties well i'm not sure i have anything particularly interesting to say i mean yeah i mean clearly the properties that follow from the fact that it's this explicit differential operator um i mean the only thing i can add to this it lands in the space of cusp forms so there's a there's a notion s factorial which is the subspace where a zero vanishes that's a useful property that i won't need but that's the only thing that i can add really i mean there's another way you can factorize this this um the best way to see this is to factorize this in terms of holomorphic and anti-holomorphic differential operators each of which does preserve modularity and um it's a better way to think about it okay so theorem is that there exists a canonical isomorphism um from weakly holomorphic modular forms modulo the image of the bowl operator so you want to think of sort of n plus one-fold derivatives of forms of weight minus n is trivial in some sense is isomorphic to the algebraic Dirac homology um and the map is uh two f you assign f omega t which is a section of um of this so that's wrong it must be f t to the n i'm just taking my notes f omega t to the n so that's that's a a a section of v n diram and you have to check that it's closed under the it's annihilated by uh nabla and that this in fact um zero on this and and defines a nice morphism homology um so a remark um mark is that this space m factorial has has a very natural description we can think of it as the piece of weight n plus two in q tensor um um one vector one which is nothing other than this the piece of graded weight n plus two in the ring q u v one of a delta so here u has weight four and v has weight six maybe and delta has weight 12 and so every weakly holomorphic modular form is a polynomial in eisenstein series g4 and g6 divided by some power of the ramanujan cast form that's what it's saying um so this theorem so i'm a bit embarrassed to say but that um it was clear from reading the modern literature on one of the forms that this theorem was not known and so i suggested to my collaborator richard hane that we we we write it up um and then later on it was pointed out to us that that it kind of was known um so the history sort of complicated it was proved most recently by shoal and well i think the first proof explicitly in the literature is kazaliski in 2016 somewhat surprisingly um a lot of this is implicit already in shoal's work in the 90s um but also there's a similar statement in the pietic setting um for uh but we have to move this to singular locals it's slightly different statement due to colman in 96 i think then uh this was redone very recently by candelori um in in 2014 and uh the study of this left hand space is where i learned about it was um in a paper by gershoy in 2008 so gershoy showed in fact that you can that this space here that this quotient splits in some sense that you can always represent elements here in this quotient as simply weakly holomorphic modular forms whose pole in q is bounded above by the space of cusp forms so this has quite an explicit description i'll come to that in a minute um so the these uh these proofs are essentially the same and they use the fact that you work on a scheme so you work on a on a on a higher level uh modular curve and then you deduce this um um from that and but my proof with richard hane is just a direct direct proof on on the stack straight off so myself and and hane uh did this in 2017 and i tried to give a fair account of the history which is somewhat complicated okay so this um this space here has a hodge filtration so um the hodge filtration so this would be a roman m so this is a holomorphic modular forms under this isomorphism the subspace of holomorphic modular forms corresponds exactly to f n plus one so um so here we have a dirham thing and a betty thing that are that are compared via some canonical comparison isomorphism in fact you can go much further and show that um either the left hand side or the right hand side is is the dirham realization of an actual motive of a pure motive and this was done by shawl um in the mid 80s and uh much later there's another construction of this due to consani and fava uh on the modular space of elliptic curves okay so um this actually comes from a motive let me describe it quickly depending on how much time um so let me describe it um so as probably we all know um let me just write the dirham realization decomposes um into cusp forms an isonstante part and a cuspital part and this decomposition is actually motivic it's actually true on the level of of the motives so it splits and then let me tell you what each piece looks like um so what are the hodge numbers so the hodge types of of the cuspital stuff what it's of type n plus one zero and zero n plus one and the eisenstein part is of type has hodge numbers n plus one n plus one so in fact um as a as as a motive it's it's just a q of it's going to be one dimensional or at most one dimensional and it's going to be as a hodge structure it's going to be q of minus n minus one i'm not going to say much about hodge structures today but i will next time so then so what is this this is generated so this eisenstein part is generated by um by eisenstein series um so g n plus two of weight n plus two for all n big and equal to two it vanishes otherwise and so i mind you that g um the eisenstein series g k is um a modular form of weight k whose constant Fourier coefficient is a Bernoulli number plus the sum sigma k minus one m q g d m so this is the normalization that we are going to take for eisenstein series and of course it has rational Fourier coefficients um in fact integral Fourier coefficients um from here onwards as indeed you expect so now so that's the that's the description of the eisenstein part it's it's very concrete um on the cuspital part um it's a little bit more tricky but if we extend scalars so if we tensor this this is a a motive of a q this is diram is a it's a q vector space but if we tensor with q bar you can you can get away with a lot less but let's tensor over q bar for simplicity then this thing um admits an action well it it admits an action of Hecker operators anyway but over q bar it will decompose into eigenspaces so over q bar it decomposes as a motive into um as a direct sum of um pure motives v i realize i've massive i'm over using the the letter v um but let me well let me not make a a dangerous change at this stage so v lambda will be so this will be the sum of um cuspital Hecker eigenspaces and each v lambda is a rank two so it's a two-dimensional q bar it's dramatization is a two-dimensional q bar vector space and with with these uh hodge numbers it's actually a motive over q a pure motive over q bar okay good so now let's um just do an example in weight 12 to get a feel for it so in in weight 12 is the first interesting case so n equals 10 then this this this space of of weekly holomorphic modular forms here modulo this quotient can every can be represented by the following three modular forms we have g12 the eisenstein series which is holomorphic modular form in m12 then we have the ramanujan cusp form delta which is q minus 24 q squared plus 252 q cube dot dot dot which is a cusp form weight 12 and then something else because the motive of the cusp form is rank two so there should be another diram class it's given by something called the the we call delta prime and as goes I showed that you can represent classes in this quotient uniquely if you decide that if you you impose the condition that the pole is at most that it has poles of order at most the dimension of the space of cusp forms so here the space of cusp forms is one-dimensional so if we we can force it to we can we can choose a representative that begins q to the minus one plus something and here's what it looks like dot dot dot dot and this is in m12 factorial so this you can write down explicitly as some weight 24 modular form divided by divided by delta and in fact it determines it uniquely and so the the diram realization of the motive associated to delta is the two-dimensional vector space spanned by delta and delta prime all right so you've got a holomorphic modular form and a weekly holomorphic modular form yeah they do so that's the that's the point so this is what I learned from Gozoy's paper so the Hecker operators preserve this subspace so that's a property of the pole operator the the Hecker operators preserve this subspace and therefore the Hecker operators act on this quotient but that's the subtle thing because if you if you take a weekly holomorphic modular form like delta prime you apply the Hecker what the Hecker operators do is they increase the order of the pole so if you apply the Hecker operator to delta prime you get some something and then you have to subtract off some something in in this guy some differential and then you'll get back a multiple of delta prime and it'll have the same Hecker eigenvalues as delta so that's a subtlety so delta satisfies a Hecker eigenvalue equation it's a genuine eigenfunction but delta prime is an eigenfunction with an inhomogeneous term you get something like I know tp of delta prime equals lambda p delta prime plus pole operator whatever it is 11 of psi p and p is going to depend on on the prime so that's what it means to be a Hecker eigen eigenfunction in this in this setting yes it's very interesting and and I don't know people who really studied very much the well there are some papers studying the arithmetic properties of these coefficients but they've not they're not completely mainstream and but I think they're extremely interesting and clearly absolutely central to this story they don't they rightfully deserve a central place in the theory okay so now periods which was my motivation with with with Hain for for proving this theorem because we wanted to know that this was the correct Q structure in which to define the periods of the motives of it was known so the corollary of Grottendeek's result over on that board is that that this quotient here is canonically isomorphic to by the comparison isomorphism to h1 gamma vn tends to c and the map if you work it all out is f goes to the co-cycle which to an element of sl2z assigns the integral from gamma inverse tau 0 to tau 0 2 pi i to the n plus 1 f of tau times x minus tau y to the n d tau and this this too for for any this whole if you pick any point on the upper half plane do you integrate along the geodesic from the the gamma inverse action on tau 0 there's a unique geodesic given by gamma between gamma inverse t0 and t0 and this gives you some polynomial in x and y this defines a co-cycle and if you modify your choice of tau 0 then that modifies that by co-boundary and so the co-homology class of this is well defined and it's the canonical comparison isomorphism so there's a i could talk for a long time about this but let me just make a couple of brief words but this is not the the eichler-schimura isomorphism is a is a weaker statement than this so what the eichler-schimura isomorphism theorem says so this is stronger than the classical eichler-schimura theorem which states well which we we often write in the following way it's the same thing it's the same map but applied only to holomorphic modular forms and to complex conjugates of cusp forms and it is true that this gives an isomorphism so i'm being a little bit sloppy you have to take positive invariant and anti-invariant parts but let me just sort of give the punchline that the point is that if you do this the eichler-schimura isomorphism then it only produces this will only produce for you two periods for each motive of a modular form for each v lambda but the theorem here actually gives the the theorem actually generates so this corolli actually generates all all the periods all four periods so for the theorem generates and the quasi-periods and the example to think of is for example if you have an elliptic curve you you have the periods where you integrate over the a and b cycles of dx over y these are the periods and they're two of them and the eichler-schimura theorem gives you exactly the two periods in the modular analog but as we know from elliptic curve to get the full matrix of periods you have to consider differential forms of the second kind and these are called quasi-periods and the eichler-schimura theorem so this is the period matrix if you like in a certain basis the eichler-schimura theorem is only giving you this column whereas this the the full compressor isomorphism is a full period matrix and it and it gives this column as well so and that was the reason for for doing this this work was to sort this out so in fact it seems to me to be the case that even for the case of this motive here that the Ramanujan cost function I don't think that the quasi-periods were known or hadn't been computed at least I couldn't find it in the literature and they're very useful they turn up in physics and in all sorts of other places right so that's that's all quite classical in principle now now I want to talk about relative completion so so far everything is pure motives it's all abelian we're talking about cohomology we're not talking about fundamental groups and so now we're going to make it all non-ambelian and the first technical point that we need is the notion of tangential base point and this notion is due to Deline well do you want to know how to get the full periods from this we have delta so you do you apply this to delta and delta prime this gives you some some thing and then h1 gamma has an action of epsilon which is the Fabinius so you have epsilon is something like x y maps to x minus y for example and then you have h1 gamma vn plus or minus so you take p plus so so in in in this weight in weight 10 you've got an eisenstein co-cycle an eisenstein class and you've got a positive cast 1 and negative 1 and the image under s is is you can find a representative as a co-cycle which is the well-known and it's x to the 10 minus y to the 10 36 over 6 9 6 9 1 over 36 plus 3 I don't know I'm making this up x squared minus y escape yeah whatever you get a 2 by 2 matrix here but already also for the eisenstein case I mean to um you actually get a canonical co-cycle in the eisenstein case I'll talk about that next time and to make to get it canonical you need a tangential base point so there are a lot of very basic things here that's sort of not in the literature but that um that can be made canonical and very explicit and we'll need them so that if you look at the period of the eisenstein series you're going to get a zeta value which is the period of a mixed motive that's very interesting and but if you look at the periods of the cast forms we're going to get exactly um these four numbers the periods and the quasi periods so if the eisenstein says we get two powers of 2 pi i and is an odd zeta value I'm sorry how do you mean no there's there's one there's one integral because because the eisenstein part is is either plus or minus invariant are coming with it there's only one eigen space it's one by one so this this splits into cusp and then there's h1 eisenstein gamma vn which I think is is anti-invariant or something this is one dimensional there's a two dimensional and and a lot of things in written in the literature about these eisenstein classes that are not that are very confusing so maybe next time I'll I'll say some more about these periods and then explain how you get the normal brilliant periods often yeah exactly you're taking you're taking this column and the complex and the complex conjugate of this column here you're getting two copies of the same thing you're just taking the complex conjugate so it's absolutely I mean we do write this all the time but it's absolutely not the it's not the the right it's not the not the statement that we want okay so I have half an hour ten initial base points so I may have to abbreviate a little bit but the idea is the following if we take c bar a smooth complex curve and we take a point p and c bar and what we're really interested in is the complement so we've got a curve in which we remove a point and the whole idea of this is that you want to take a base point at the point p which you're not allowed to do because you removed it so the idea for getting around that is so how do you define a base point at a point that's not in the space well you don't you you take a tangential base point at p is simply a non-zero vector so it's convenient to write it with an arrow to emphasize it's a vector in the tangent space of the compact the sort of the filled in curve c bar which is non-zero so we think if we have the point p that we've removed and we have some tangent vector sticking out of it and the point is that this this perfectly well plays the role of a base point in in every setting that we care to think about and it will define fiber functors on various categories of local systems or algebraic vector models and so on so since I'm slightly short of time I'll just explain how you can define a notion of fundamental group and then and then explain the tangential base point that we're using and the rest of the discussion I will postpone till when I look at periods so what is a path a path from this tangent vector to another point in the curve is the data of a continuous map into the curve which is continuous but also differentiable at zero such that almost the entirety of the the the interval except the initial point is actually contained in the open in the complement c bar minus p so let's call this c and the initial point is p and we specify that the initial velocity of this path should be given by the tangent vector v and the end point is y so you think of this in the obvious way you've got point p here with a vector sticking out and point here y and so a path from this tangent vector to y is a path that goes from p and goes to y such that the initial velocity of this path is is given by the vector v and that's defined so out of this you can define a notion of a homotopy between paths and you can define fundamental group so there's nothing to stop us in this definition we can we can even take y to be a tangential base point and the definition is the same except that you you enter with minus the final velocity is minus the vector at y so it's the obvious definition and so there is a notion of homotopy homotopy of such paths so homotopy is a continuous deformation but which preserves the the the condition of the derivative at the initial and possibly end points and so then there's a notion of pi one the topological pi one of c so this is the space of paths from the tangent from the tangential base point to y and likewise there's a notion of even fundamental group of paths based at vp so a loop based at this tangent vector is what I said it's a loop that does something and then comes back with a negative and the and the with a final velocity minus v bar okay so you can do everything that you normally do with base points with tangential base points let me just explain what the tangential base point that will play a role for us will be so we have the disc the unit disc is the set of points q and c such that zero less than q sorry that's the disc in the open disc open puncture disc of radius one um and then there's a um an orbifold isomorphism of the upper half plane modulo stabilizer of the cuspid infinity is isomorphic rather map q equal e to the two pi i tour to the disc stack quotient by um z mod 2z so this is not the same thing as the actual quotient of d star by z mod 2z and from this then so this um this this uh group is a sub group of s l 2z so this orbifold has a map to m 1 1 and therefore we get a map from the disc the actual disc to the orbifold quotient and then onto m 1 1 so um what is our tangent vector so d by d q is which is going to be our base point is the unit tangent vector at zero on the punctured disc so we have our picture of the punctured disc with zero removed and it's a tangent vector sticking out of zero like this so of course we're here working with a stack to um to work with tangent tangential base points it's the same as usual we work to the we can pass to some covering and and view the tangential base points on the covering so um with that said another way to think about this or equivalently um on the upper half plane what does this tangent vector d by d q correspond to it corresponds to so if i draw a picture of the upper half plane here with the real axis and the imaginary axis here and then that sort of let's put the cusp infinity up here then um this tangent vector corresponds to a tangent vector sticking down like this and so sometimes i call this um one at infinity so it's a unit tangent vector in in in the coordinate q at infinity and um some people write this d by d q so um either way we have there's a canonical tangent vector which is going to give us our tangential base point and there are two different notations for it so this also defines this fiber function on various categories of geometric objects on m one one um so let me write um v n is it's the same v n as before is the betty local system we defined earlier we can take its fiber at d by d q at this tangent vector and it's the vector space i wrote down earlier and likewise with diram i'm going to call this v n diram so in in the betty case i don't i don't put a superscript just drop it right so at long last now we can talk about um relative completion on the space m one one so of course a lot of what i say is completely general but we're really only interested in this particular space so um the category of local systems of finite dimensional q vector spaces on m one one an is equivalent via the functor d by d q so we take the fiber at d by d q i didn't completely explain how to do that but i'll do that next time um and that gives you a finite dimensional um q vector space plus a gamma action that's an equivalence of categories and so what we're getting then is a map so if we apply this to um v one betty so this is just the the the local system of the cohomology of the universal elliptic curve a fundamental building block then what this is going to get is a it's going to give us a vector space with a gamma action in other words we get a map from m one one fundamental group with respect to the this tangential base point and it's going to act on um that act on the fiber of the at d by d q and um so this is a map row and what we get then is a map row from gamma which is sl2z into sl2q we get an explicit representation of sl2z with respect to this basis x and y okay so that's the if you recall from last time relative completion involved a homomorphism from a group into the rational points of an algebraic group and that's what it is oh i've got a board here sorry so so this is the initial data for taking relative completion now to define the betty relative completion we're going to define a category um and we call it just curly c um whose objects are more general local systems and one one an equipped with a filtration so finite exhaustive increasing filtration of sub local systems so zero equals l zero containing l one up to the whole space such that the successive quotients are the ones that we that we know and love so the each successes quotient is just a direct sum of the um canonical ones that we define at the beginning so these are the mth symmetric power i mind you is the mth symmetric power of essentially h1 of a uh i call the h i think um right so these local systems are are iterated extensions of uh these building blocks so the semi simplification odd is a direct sum of these symmetric powers but we're gonna look at successive non-trivial extensions between these local systems so this is a tenacian category um and it has a fiber functor um omega d by dq which is take the fiber of such a local system at our base point and that gives a map to um an exact tensor functor to vector spaces over q and then therefore from this we define um g the betty relative completion so now the notation is going to be g one one because it this this one one means that we're looking at looking at m one one and this is defined to be the automorphisms of this fiber functor so this is um the betty relative completion um and it's an affine group scheme over q so very concretely it means that it's it's it's affine ring is just a commutative topf algebra over q and and by the the tenaka theorem this category c is exactly equivalent to the category of representations of this group um so it's extremely clear in fact it's it's the same group as the one i defined last time um so we can see that because we have a functor in fact that we have this equivalence of categories from local systems to representations so there's a functor from this category c to um gamma representations which is take the fiber at d by dq but by contrast with the previous functor we don't forget the gamma action so before we had a fiber functor that just gave a vector space that factors through this functor which to see the category c associates the cross bonding representation of the fundamental group while it's action at the fibered infinity and that what that induces in fact is completely obvious from the definition if you translate everything back into representations you get exactly the definition i gave last time and hence we get a map from gamma rho so this was the the relative completion of sl2z relative to the representation rho that i defined last time and it's going to be canonically isomorphic to this beti relative completion so this is just another way to say that the beti relative completion is simply for group theoretic relative completion exactly the same thing but what we've gained is we've this geometric interpretation gives us more more information and therefore as i explained last time the action of gamma here acts on the fiber functor back there and therefore gives an automorphism and so we have a canonical map from sl2z into this group into the rational points and it's a risky dense so we've got some huge affine group scheme some huge projective limit of algebraic groups and sitting inside it densely is the group sl2z itself and that's this is the main tool we we have for understanding the the beti side of things is that it's some some algebraic whole of sl2z so now for the dirham relative completion of 10 minutes okay so now we define in the analogous way a category a of algebraic vector bundles on m11 so i remind you that we can think of this as gm uh sort of graded or algebraic vector bundles on m1 vector one scheme with a gm action with integrable connection and regular singularities at infinity high at the cusp equipped with a filtration so it's the same definition really zero v0 v1 vnv so this is v so the filtration by by sub by sub algebraic sub bundles equipped with an integrable connection etc etc etc etc don't want to repeat everything such that the successive quotients are isomorphic to a direct sum of the um the the em symmetric powers of the gauss-manien connection on the cohomology of the universal elliptic curve again so these are basic building blocks and we're looking at connections which are iterated extensions of such things or possible iterated extensions and this has a fiber functor and uh given by the time-dimensional base point at the cusp and we define the Duran relative completion to be the automorph for automorphisms the tensor automorphisms of this category with respect to the fiber functor fiber at d by dq so this is called the Duran relative completion and again it's a group it's an affine group scheme over q so um actually we must keep that so as i mentioned last time these these groups have um unipotent radicals which are pro-unipotent algebraic groups so sometimes it's convenient to write so we write the unipotent radicals as u and these sl2s are not the same i mean there's nice morphism between them but it's non-trivial so it's convenient to denote these copies of sl2 with different superscripts sl2 betty and sl2 Duran it saves a lot of confusion um so now our proposition is that there is a canonical isomorphism between these two group schemes so comparison so over when you when you extend skaters to the complex numbers these groups become isomorphic canonically and this comparison involves integration so it will produce lots of periods and these periods are very interesting and they will be what i like to call multiple modular values so the proof of this um i'm out of time so i'll just say it's it's it's kind of clear it's just the Riemann-Hilbert correspondence between local systems um or Delene's version of the Riemann-Hilbert correspondence and algebraic vector bundles and you just need to check something on the x groups so use the fact that x1 c vn betty is h1 m1 analytic vn betty and in the category in the DRAM category a the extensions of the trivial object by DRAM again by the DRAM and and clearly this Riemann-Hilbert correspondence induces the comparison isomorphism here which is isomorphism that was the the theorem that was um I wrote down earlier and you can check that um this is actually enough because um this this group is actually the underlying Lie algebra is free so if you have a map between unipotent groups whose Lie algebras are free Lie algebra and who's which is an isomorphism on generators and it's an isomorphism so that's very easy to show that so there was a very heavy handed proof but um so what is the structure of these groups well I mentioned this briefly at the end of the last lecture so we can compute the cohomology of the unipotent radicals so the cohomology of the unipotent radical and the betty thing is the direct sum h1 gamma vn tensor vn dual where I mind you that vn is this this vector space of the imaginary n plus one it should be thought of as the fiber at d by dq of this local system and similarly for the DRAM it's h1 it's the algebraic DRAM cohomology tensed with vn DRAM dual where vn DRAM is is the fiber d by d2 okay and and there's no higher h2 no higher cohomology so as we've seen these by Eichler-Schimmerer whatever the compressed nice morphism these things are built out of group co-cycles these things are built out of modular forms essentially so what this relative completion is it's sl2 some sort of trivial piece and some huge pro algebraic pro unipotent part that is built out of modular forms so let me um and so then therefore we should think of this comparison nice morphism is we should think of it as a non-Abelian generalization of the generalization of the Eichler-Schimmerer isomorphism right so another way to set is that the Abelianization of this group gives back exactly so the if you restrict this to unipotent radicals and pass to the Abelian just the Abelianization which is very small then you get back exactly with the comparison nice morphism I wrote down earlier so in the very last minute then let me write down the Lie algebra then so u11 deram is something very concrete it's the the Lie algebra of this unipotent group and pro unipotent group is always isomorphic as a vector space to its Lie algebra so from this description we know that it's homology in other words it's generators is isomorphic to the product of this algebraic deram homology dual tensor vn deram so what it is therefore because the higher homology vanishes this is a freely algebra and so it's it's the completion of a free Lie algebra on generators given by classes here let me just write them down and stop and next time explain how you can put a mix hot structure on this so the Lie algebra is has the following generators it has we can denote them by symbols you're going to get an Eisenstein up here you're going to get an Eisenstein part of the algebraic deram homology and it's going to come with a copy of this vector space vn so this is an sl2 representation sl2 is the quotient sl2 this is we get an sl2 representation indexed by an Eisenstein series so e is some symbol which represents Eisenstein series g2n plus 2 of weight sorry g so n is going to be even 2n plus 2 so we get Eisenstein series give us generators but we also get generators from cusp forms and because the cusp forms occur with multiplicity 2 we're going to get we're going to we can take a basis like I had this basis delta and delta prime earlier we can choose a basis e f prime and a f double prime so for every hecker sort of hospital hecker eigenspace if you like I should know let me take that back for every cusp form we get we get we get two I don't want to talk about hecker eigenspaces because I'm not I'm working over q for now but for every cusp forms we get two generators in correspondence with a choice of q basis of cusp forms of weights 2n plus 2 so that's it so in this in this Lie algebra you have the simple generators correspond exactly to the classical theory of modular forms and then the next thing interesting thing that's going to happen is that you're going to get Lie brackets of two of two such guys and they're going to give periods and they're going to give objects and that's what I mean by the non-abelian theory of modular forms I'll stop there


After using some quack-tastic quack-foo on the local Waffle House gang, he's then greeted to the heroine of the picture. Heroine, heroine, heroine. And that's punk rock singer Beverly Switzler, played by Leah Thompson, very much in her prime in this film.  She is stunning. And it's the only thing that kept me invested. That, in the fact, I'm pretty sure she was gonna bone this duck at some point because from day fun, she looked at Howard and said, yeah, I think I'm into ducks now. I might be transgender.


So by now it's been a couple of days since the absolutely horrific Atlanta spa massacre and There's not really any words that I could offer you that will make you feel any better or make the situation any less heartbreaking and When I think about this story, I can't shake the comments from the Cherokee County police captain Basically defended the actions of this mass murderer investigators they interviewed him this morning and I they got that impression that yes He he understood the gravity of it and he was pretty much fed up at it Then kind of at the end of his rope and and yesterday was a really bad day for him and this is what he did I'm not gonna go to I don't know if he's remorseful or not Imagine being deranged enough to downplay the actions of a mass murderer by saying he was just having a bad day Would we be saying this if the perpetrator wasn't white? I Don't think so and I love how there's this fake debate going on about whether or not this was a hate crime Well, he says it's not a hate crime. So we're a little bit perplexed here We don't know if this was a hate crime or not Of course, it was are we really having this conversation? Are they really this clueless? You know how racist people oftentimes will say I'm not racist But and then they proceed to make a really racist comment This is the mass murder version of that where he literally deliberately targeted Asians and then says look, I'm not racist Unbelievable I don't want to take the time here to complain because I think that You're feeling the same way that I'm feeling but what really matters now more than ever is to elevate the voices of Members of the Asian community because there has absolutely been an uptick in anti-Asian violence and hatred and harassment ever since Donald Trump has used words like China virus and kung flu to describe COVID-19 and it's not like there is This new phenomenon of anti-Asian bigotry and violence because of Trump, but did he make matters worse? Absolutely, but with regard to this particular story I do think it's important that we be nuanced and we look at all the issues. This isn't just an issue of anti-Asian Racism, it's also an issue that relates to sexism as well These issues are interrelated and this is what an MSNBC news reporter very eloquently pointed out I know that the Suspect mentioned he he claimed that there was no racial motivation involved The issue here is that experts and activists all stress that given the way in which Asian women have been seen in this country Historically fetishized hyper sexualized. It's made them particularly Susceptible to sexual and physical violence and so therefore it's impossible to divorce race from this conversation And she is exactly right in the United States. There's this history of hypersexualizing and fetishizing and dehumanizing Asian women So when we see this uptick in violence against Asians in America, it doesn't apply to all Asians equally and certainly women have Disproportionately bared the brunt of that and I want to read an op-ed from NBC News where author Nancy Wang Yuan Shares her experience and she talks about how violence against Asian women in particular Has been an issue and not enough people are talking about it Presumably because they're ignorant to these experiences. So she writes the only time I was ever in Atlanta where six Asian women were shot dead on Tuesday A young white man shouted me so horny to me at the airport and as the only Asian woman in the space I knew he was talking to me I locked eyes with him for a second and then rushed off to catch my flight back to Los Angeles I was in Atlanta to attend the annual meeting of the Association of Asian American Studies Presenting a paper there for the first time. It was a big deal for me professionally But what I remember most about that trip were a white man's racist sexist words Tuesday's killings occurred at three spas in the Atlanta area two other victims a white man and a white woman Were also killed Investigators said the white male suspect told them that he has a sex addiction and targeted the spas to take out that Temptation he was fed up at the end of his rope Cherokee County Sheriff Captain Jay Baker said he had a bad day And this is what he did Based on the reported statement Investigators have so far concluded that the attacks did not appear to have been motivated by race as an Asian American woman Who has endured sexualized racism all of my life such ignorance enrages me Asian women along with black and indigenous women and other women of color endure racism and sexism in Intersectional ways constantly and they have throughout history as lawyer Jiman Kim argued in 2009 Prosecutors and police may be even less likely to add hate crime charges in cases of rapes and sexual assaults targeting Asian women in 1875 Chinese women were targeted by a federal immigration law called the Page Act This law effectively banned the immigration of Chinese women to the United States based on a morals clause that considered all of them Prostitutes at the time there were apparently specific racist and sexist concerns that Chinese prostitutes would bring in especially very lint strains of Venereal diseases and entice young white boys to a life of sin sound familiar furthermore the multiple wars with and various occupations of Asian countries have long contributed to the exploitation and Fetishization of Asian women in World War two the unknown numbers of so-called Asian comfort women Kidnapped by Japanese soldiers from China Korea and the Philippines were transferred not to freedom But to the US military to this day sex work in camp towns around US military bases throughout Asia Gives US GI's the illusion of access and perennial permission to Asian women's bodies Jane Hong an associate professor of history at Occidental College told me many Asian American women have endured strangers Yelling me so horny and love you long time at them. Thanks to American pop culture Perhaps the worst offender is the 1987 film full metal jacket Which imagines a vietnamese prostitute approaching two white American soldiers and saying me so horny me love you long time Me sucky sucky the casual racism of this scene has haunted Asian American women for decades as writer and musician Christine LeWang Dixon noted in response to the Atlanta shootings the Hypersexualization of Asian women plays a huge part in the violence we face I've been cornered on the street as men say me love you long time. I've been offered money for a happy ending massage I've been hit on because I'm Asian and told it's a compliment indeed contrary to the insinuations and assumptions Made by Georgia law enforcement officials I can't remember ever having experienced racism separate from sexism when I turn into a lane too slowly on the streets of Los Angeles I am not surprised if someone rolls down the window to call me a C slur B When I reject or ignore sexual propositions from white men some come back at me with racial slurs and even threats Even the perception that I will not fight back if I am attacked Racially is a form of racism intersecting with sexism This is the lived reality for too many Asian American women since the pandemic began Asian American women are 2.3 times more likely to report hate incidents than men according to data compiled by the reporting forum stop a API hate in total the organization received nearly 3800 reports of anti-Asian hate incidents from March 19th of 2020 to February 28th The mass shootings in Georgia seem to be part of a nationwide pattern of Asian women being disproportionately targeted and hate incidents We are more vulnerable to attack precisely because of the intersection of racism and sexism And to immediately remove racism from the equation neglects how racism has always intersected with sexism For Asian American women in this country So this is really important to hear these experiences. It really is important because I'm sure that there will be people who revisit full metal jacket for example and That scene and you know Conservatives will just chalk this up to cancel culture and you know, they'll denounce the woke mob Who's coming for you know our our beloved films, but it's not just jokes To everyone these jokes lead to real-world Consequences that actually affect people till this day that old movie still affects the lives of Asian women So we have to look at racism and Sexism and how it uniquely impacts Asians here in this instance But I mean, of course, it's not just Asian women who have dealt with anti-Asian hatred and violence It's also Asian men, of course, there's the viral video of the Asian man being assaulted This is basically a call for all Americans this article here to understand be mindful of The things that other people are going through and experiencing even if you can't necessarily relate to them We all have these subjective experiences as human beings and we have to talk to each other We have to listen to marginalized communities and women Because we don't know what they're going through and it is important that we learn from them by listening Listen to their experiences and don't be so quick to judge and dismiss it as cancel culture or huh They're just complaining. This is the oppression Olympics. This is people's lives and as a humanist I want to make sure that people's lives are as Good as they possibly can be and that means we have to look at look out for more disadvantaged people And that's where we will leave this. I think this was a great op-ed and I really really feel terrible for the families of the victims and We'll leave that there because there's nothing else that you can really say about this It's just tragical all around But what we all need to do is inform ourselves about the experiences of the Asian American community


I'd like to thank everyone who's joining us today. Welcome to today's CNCF webinar, continuous profiling, go applications running on Kubernetes. I'm Christian Jans, cloud consultant at level 25 and CNCF ambassador. I'll be moderating today's webinar and we would like to welcome our presenter today, John Luca Arbezaros, SRE at InfluxDB. A few house items before we get started during the webinar, you are not able to talk as an attendee. There is a QA box at the bottom of your screen. Please feel free to drop your questions in there and we will get to as many as we can, either during or at the end. So bear in mind, we can't do it all at once. This is an official webinar of the CNCF and as such is subject to the CNCF Code of Conduct. Please do not add anything to the chat or questions that would be in violation of that Code of Conduct. Basically, please be respectful to all your four participants and present us. Please also note that the recording and slides will be posted later today to the CNCF webinar page at cncf.io forward slash webinars. And with that, I'll hand it over to John Luca to kick off today's presentation. Hello everyone, and thank you, Christian, for your kind introduction. And yeah, thank you for being here. I will share my journey with continuous profiling in Go. So everything that we share is open source and I mean, we will see how I set up the continuous profiling infrastructure at Influx Data. And why?  If you are not, you can think about that like a profile. So almost every programming languages has one. And in Go, you can look into the HTTP endpoint. So it would be easy to scrape or easy to interact with from the outside. And speaking with like having the ability to take a snapshot from a running application is very important and even more when you have containers or when you have pods because they tend to go and come very quickly. So you have to take a picture of the runtime to figure out what's going on or to troubleshoot what broke or what didn't work, I suppose, yesterday or last month or also to do easy comparison. So a profile usually exposed like the number of allocation that your runtime is doing, the number of Go teams, the heap, the mutex and you can also do tracing in the runtime as well. So Pprof is the format that Go use and it's very, very powerful.  So for example, in InfluxDB that is the time series database open source that we develop at Influx data, we also place inside the profile the last like 10 queries that you run or the last, you know, a buffer of the logs that the InfluxDB demon shipped because this helps us a lot when doing troubleshooting. So when there are performance degradation or issues we just ask the community to send to share their profiles. And in there we have everything that we need to look at to reproduce or to figure out what's going on in runtime. So Go has runtime, there is a binary that runs and this is a very good way to introspect the runtime itself. And it's easy because it is a tool that it shipped with Go itself. So you don't have to install anything, it just work when you install the language. So as I told you, it can be an HTP endpoint. So in this example, I am using a Go tool binary it's called PIPROF and I assign a URL to it. And this URL is my Go application that is running. And as you can see, you see the profiles because that command fetches the profile, it stores it locally as you can see and that you can read it in various format. This is the textual format, so it's a string but you can also print like a graph like this one. So profiles are very good because you can introspect the chain of functions that your runtime runs. So you can see how many CPUs they are using and you have a very, very deep visibility like function based on who is blocking the mutex or who has the Go routines and so on. So it's very, very powerful. And not only to figure out what's going on now, but also to figure out what I was gonna do like post-mortem promotion. So as I told you, it can be an HTP endpoint. It doesn't need to be one, but it's very common to have it exposed over the port like 6060. And from the Go documentation, this is how you do it. So you import the net-http-proff package and you start a server. By default, it use the global mutex. So it is in the main HTTP server when you started. So you don't have to do any routing or something like that. You can do that, but you can also use the full one. So now that we are all on the same page, let's say something about myself. I'm John Luca. I'm a CLCF ambassador as well. And I work as a software engineer, social reliability, let's say at InfoStata. So I'm an S3 officially. And you can find me on the internet like Janar. And I have a website where I try to blog like with a good cadence and a good schedule. And you can find me on Twitter when I am, when you can, it's the best way to follow my rambles and like them. And now that we are all at home, it's good to have some chat. So see you there. When I'm not, I mean, I like to make mutex. So I like to do scripts. I like to do whatever that makes like automation easy for everybody. And when I'm not hacking, I grow my vegetables. So in Italy, I'm basically, and it's actually like very cold now since like a week. So, but I'm very, I can't wait to get back to my garden. And I like to travel for final work, but as I said, no, we got all quite here. So it's good to talk with you. So I'm used to have a look at chat and the Q and A as well. So if you have any question that shows your mind, just share there. If it's the case, I will try to answer as soon as possible or later if it's better. So yeah, I mean, profiles and the way we look at applications changed because now we have clouds mainly because our environment is way more dynamic. Like VMs come and go, containers come and go, even more dynamically. So it's very hard to call stuff with their name because their host name changes, the container name changes, the pod name change. It's very hard. And you have to in some way freeze the, take a screenshot of your application time to time and in order for you to have a look at what's going on. So that's why we use to centralize logs or pull metrics with Prometheus and things like that because we don't have the time actually to go as a sage and see what's going on. Everything moves too quickly. So you have to take snapshots and look at them on time. Thank you, clouds. And yeah, usually application makes trouble in production. That's also important to remember. So everything locally may run smoothly but as soon as it gets to production that's where the trouble starts. And that's where like troubles matters even more. So how a developer takes a profile from a local application, it's kind of easy. We saw it already.  You have the file locally in your laptop and you can use it, you can compare it as well and so on. But how developers do that in production is a mystery and usually changed company by company. And that's a problem because usually what's happened is that a developer asks for somebody that knows where the IPs are or how to get like QBCTL working to connect to the pod and get the profiles. And that's not usually what the person that does that is happy to do. So we are not babysitters for software engineer but I have to say something that it's very important if your developers ask you has an SRE or has a hopes person to do something that they are supposed to do. It's helpful because it's on us to create same workshop workflow that developers can use to achieve their goal in a very effective way. So if you get pinged by engineers because they don't know how to get profiles or how to get logs or how to get a trace that's a big like ring. It's a big others that you should change what you're doing and improve the workflow to bring the developer closer to where they can find useful information. So yeah, another very crucial aspect of a profile is that you never know when you're gonna need one and you never know like how to, you will use the information that are there. So it's, they really behaves a lot like metrics. You may have a ton of them that you never use but as soon as you remove them or delete them you will look for them. So it's a lot of information that we have to figure out the way to use as best as we can because it's pricey to store all those profiles or those metrics or those logs. So let's summarize the issue. So developers are the stakeholders for profiles because they are usually the person that use them because they have to figure out because it's their language because it's their application. They know the function names and they don't know what they're going to use. Production is not as comfortable as it should be usually. And there are good reasons for that like there is security, there is compliance. So it's all that those are all good reasons to be secure but also you should be friendly with the developers. Otherwise you will get a lot of noise to yourself and that's not fun. And you, as I say for files you never know when you're gonna need them just has metrics and logs. So you may pass like two weeks not looking at them but at some point you wish, somebody will tell you that your application is running high on CPU and you will have to look at them at some point. Even back in time. So they're very good for post-mortem. Cloud and Kubernetes increase a lot of the amount of noise. We have the complexity that the dynamicity of our environment. So it means that taking the snapshot of our application is crucial but also very hard. And yeah, we have way more binaries because we do microservices. We are way more pods. So even if we have a micros, one service that is like a monolith it's still way more redundant than what it used and replicated it was used to be a few years ago. So all this movement like increased complexity. Yeah, as I said, we have exactly the same problem with logs and metrics and that's why we collect them with time series database, we store them and we try to get value out of them when we need to troubleshoot an issue. And to be fair profiles are just a different way to aggregate point in time but the point comes from runtime and usually they are grouped by function name but profiles are just a bunch of time series data aggregating in a way that will look like a profile. So how are we gonna solve all those issues and how are we gonna make our life easier making developer happy that is usually happier that is usually like how my life goes. So spoiler alert, the solution is part of the title of the talk. Yeah. For this log that we collect them every like 10 seconds, every seconds and we push them to a centralized place with our Cinch or Flannel or whatever we can do the same for profiles. That's it. So follow me. You have all your applications that are running they do amazing stuff, they sell a lot they get a lot of money from your customers and you have a collector that gets information from the application itself. It will make pool slash metrics so it would maybe a primitive instances or it would be another exporter or it would be another collector like telegraph, whatever but with some cadence like some interval they will take the snapshot of the application in form of metrics and they will push it into a central repository. For logs we may be elastic search we may be cloud trade or whatever for time series would be in Bixby would be Prometheus or would be like Honeycomb or New Relic, whatever you have for profiles, we have a tool open source it's called Profefe that does like that just that. And also you interact with those outcome via API and that's very crucial and super important because it makes, as you can see developers don't need to go and look for the application anymore. So there is not an arrow that goes from the smiley face to the application because there is an API and everything is centralized. So nobody cares about where how the network looks like nobody cares about how to SSH anymore nobody cares about the QCCN anymore they just go to the API and they take the profile via HTTP endpoint and they are very good with that so they can write whatever automation they like, do it. So you can find like the code that I'm speaking about the Profefe code in a GitHub organization it's called github.com slash Profefe and the way I set up the infrastructure looks like this one. So there is all the application in the left running girl code and they are running as a pod in Kubernetes there are a lot of them running and they expose the HTTP problem as I showed you before. And there is a current job that is another pod that runs every once in a while my case every 10 seconds and it gets all the list of pods and it will ping the pod IP and it will grab the profile in form of a tar archive and it will push the tar archive into the Profefe collector and the Profefe collector will store it in the NDB. We use, we are on AWS and we use S3 but Profefe has an abstraction layer so you can store them even in other objects store or locale or whatever you like. We probably do the Google Cloud integration very soon because we are moving cloud as well. So right now we use this infrastructure on AWS. And as I said, just to be clear as a like influx data does a lot of open source and that's why I'm contributing to Profefe but this is not a tool that comes from inclusive. Like I got asked to implement a continuous profile integration and I started looking around in the open source land and I thought this and I discovered this time project that I liked since day one and that's why I'm here. So that's it. And the developer like interacts with the Profefe collector to get what they need because it's an API. There is another way you can use that you can set up the infrastructure and as you can see, there is no cron job here because actually you can embed a library that inside your application and the application itself will take a profile from itself and it will push the outcome to the Profefe collector. This, you have to choose the one that you like most. I think, I will tell you why we used the other one so we are using the one with the cron job, not this one but this one is very flexible because you are inside your application so you can take a profile the best time you think it has to be taken. So I think at some point it will be good to use both so you will take a profile every once in a while because you need one and maybe at some particular stage in your application maybe during the shutdown, you will take a profile because it's a good information to have. Usually when you crash, if it gets a panic, you just recover from the panic, get the profile and push the profile before die. So you will be sure to have one that matters. But yeah, but the flow is the same. So your application has a collector and push to the Profefe API and you push it into storage. That's it. Your developers always use the Profefe collector because they have a nice API. So yeah, the pull base for the solution is the one that we are currently using because for our environment, it was the easiest one to start with. All our application, all our services already exposed Pprof internally. So for us, it was just a matter of like having a collector smart enough to leverage the Kubernetes API. And yeah, that's it. So Kubernetes, I have to say, made like this process very easy. When I started to use Profefe, the Kubernetes integration wasn't there. So that's the biggest contribution we made to the project. We brought a bridge between Profefe and Kubernetes itself. So yeah, I see Kubernetes has a bit of tasks. So it makes a lot of noise and a lot of troubles and it manages all those applications. And as you can see, the application are not well organized because they just wouldn't go as Kubernetes usually does. And yeah, the Kubernetes has APIs and APIs can be used to discover applications and you can get the APIs of the application. So if you have the API and you know the port, you can get the profile and you don't need to do crazy stuff to have them. You can just go and scrape them periodically. So yeah, that was an easy summary to do. Just use the Kubernetes API and to create a bridge that will collect profiles and we'll push them to influx it in. Like the profiles are continuous gathered from all the application that we run. The way we communicate to the collector what has to be scraped is via annotation. So if you use Kubernetes, you know annotation for sure. They are very well known concepts. So you can label and annotate almost everything in your every resources in Kubernetes and labels are very commonly used to do filtering. Annotation usually change the behavior of what you can do with the resource. So that's why I'm using annotation for that. And the annotations are very similar from the Prometheus one. And so you can see that all the pods that has the pprof.com slash enables equals true has an annotation. They are the target for the collector, for the Chrome job. Prometheus comes by default it looks for the port 6060. So the IP, we don't need the IP address because we get the list of pods that has the annotation and enables equals true. We get the IP from the response. And by default it looks for the port 6060 and the root slash the bug slash prof. Because that's how it usually works. You can override those configuration using the pprof.com slash prof.com slash port equals 8085. So you can specify a different port in this case 85 and you can specify a different path with prof.com slash path. This service is like a first citizen in the in, in profile file, so you can group, it's like the application name. Because obviously you have to know the application when you are taking the profile to otherwise you will lose context. You can, by default, the collector will use the pod name as a service. But my suggestion is to use the annotation because as you know, the pod name changes every time that a new pod gets rescheduled from the wrapping cassette. So you will end up having a lot of noise and a lot of service name that won't tell you a lot. You can, the pod name will be placed as a label because every profile has the service, the instance and tags. All those information can be used to group and filter by when you look up for profiles later. So service has to be there. Usually it's the name of the application that identifies the application. And as a label, you will have other stuff like the, all the labels of your pod plus the pod name and things like that. So this is how you tell the collector how to scrape and what to scrape. So this is the actual, like, we, that's the infrastructure we have. So there is the Kubernetes API on the left. And in the middle, there is our Chrome job that is called kprofefe. And kprofefe runs heavy 10 minutes. It goes and asks for the Kubernetes API, the list of pods, death, you, that it has to scrape. So it gets the list of pods and it starts to collect profiles from each one of them directly, like just bringing them via the IP of the pod. When it gets the profiles, it push them to the profile of the collector. So the collector, either the central repository will organize them, order them and store them in the database, in our case, as they say, S3. And from there, they are available for developers to make query on them. So, yeah, as I say, like developers now don't have to care about what they, where the network looks like or how to log in the QCTR or whatever, they have an API that they can call. And they will always know that they will have profiles available at the interval that they choose or that you choose for them based on the cron job or on the schedule of the cron job. This is super important because you are giving to them the possibility to do what they are looking for without bothering you. That it's a very effective way to simplify life for everybody. So yeah, I mean, I lie because I say that they don't have to care about the QCTR anymore, but that's not particularly true. I mean, other than the cron job, that the application that runs inside the cron job, QBPROF also expose or provides a binary that is a QCTR plugin. So you can, if you want, install the QCTR Profefe plugin and it is the entry point for Profefe from your QCTR. You can do stuff like QCTR Profefe capture. And as you can see, if you use the same flavor of the QCTR, like traditional native command, you have dash N to filter by namespace and you can place one or more pod name or you can also use the dash L to do label filtering. So this is very important because I'm very... When I develop, I really try to be as friendly as I can. So in Go, you can be that friendly because we have a lot of memories that we can get from Kubernetes itself.  So yeah, this is the way that you can capture profile. And when you do that, your profiles get stored locally, but you can also... So it's a very good way, even if you don't use Profefe to have a way to get profiles. Because what this command will do, it will make API request to Kubernetes and it will ask for the pod called InfluxDB V2 inside the ops namespace and it will transparently for you to do what the QCTL does with the port forwarding. So it will open a port forwarding. So your QCTL locally will be able to reach the container and it will download a profile. That's easy like that. You can, as I said, even get it down locally or push it to profile. So you will get that. You will get that. You are now that you can share with your colleagues. So, and I told you about URL. So this is an example. This is the same like command we know, like go to pprof, the same one we saw before, but we are not reaching our application. We are asking, we are making a query to the pprof repository. And as you can see, there is an endpoint that is called, the most useful one is the one that I'm showing you here and it's the API slash zero slash profiles slash merge.  But it will be a merge in time from all the profiles that you collected for a particular service while there is a service equals out. In the, as a query pattern, you can, you have to specify the type of the profile. So CBU, mutex, go to teams, otherwise it won't be able to do an effective merge because merge can be done only for profiles that comes from the same type. And you have to specify a from and to as well. So it will know when to range from. And obviously you can use label selector to, you know, even filter deeply the profiles you're looking for. So you will make, if you are labeling your application with your path with the go runtime that the application is compiled to, you can filter by go versions and make a comparison between how the same application works with two different runtimes, for example. And yeah, other than the merge one, you can also like do what the REST API usually allow you to do. So you can, you know, list all the profiles by service or you can disturb by service and type or you can get only one. So you will have an IP, an ID and you can just get the profile for one specific ID. So it's very flexible. And this is the reason why I got in love with the project because the, you know, the API was already done and it was working. So I just had to hook it up in my environment. And I was sure that making all this stuff from zero internally, usually you end up with a crafted like pipeline that is not like as good as this one that is made from a community. So yeah, I mean, the number of pods can become like King Crow like usually because, you know, if you have 150 containers running and you take a profile like every 10 minutes, you get a lot of profiles per hours. And so, be careful about where you store them and for how long you store them. So that's why we use S3 because it has TTL as well. So the resources, we keep them for a month. And the good part is that we didn't do that yet but we will do it at some point. You can also, you know, we delete them after TTL but what you can do, you can actually merge them and keep less of them with less functionality. So you are kind of down-sampling them. Another like consequences about having so many profiles is that you have really a lot of information. And like those informations are crucial for devs but also for us because you have CPU memory and so on. And you can correlate them across binaries. So all those profiles like contains like information about the amount of CPU used by the functions. So you can ask, potentially you can ask across all the profiles, the top 10 CPU intensive function. So if somebody comes, if your managers come to USA we spend too much money on Amazon or Google Cloud we have to be more conscious about how we deploy in terms of what we deploy in terms of performance. You have a way to say, okay, those are the 10 top intensive function across the board. So across all my microservices. And you can start from the most offending one and save some money and cut some costs. So yeah, it's a very effective way to build bridges between dev and hops. As I say, hops deeply care about like CPU memory those kinds of stuff because they have to keep the infrastructure healthy for everybody. So you usually end up like opening, when does the CPU spike as an ops spike? You start to look at the servers and you start to figure out what's going on. At some point, if you can fix that you call the developer, the developer, maybe the developer will join on board like two hours later because that's how it usually works. And maybe the outages will be already over. How do you fix that? So you get, in this case, you get a profile from two hours later because you have one and you can troubleshoot that. Or you can actually analyze the profile itself and simplify it like sample it and push it in a time series. And that's what we actually do. We started to do it recently. So we don't have a lot of like graphs or like analysis that we did. So what I'm sharing here for now is the infrastructure. What we do with the data, it's still something that we are figuring out. But I mean, this is the idea as soon as the profiles lens to the collector to profile that is the logo on the left, we store them to infuse the data through S3, as I say. And S3 can be observed by Lambda functions. So we created a trigger that calls a Lambda function every time there is a new job on the S3 bucket. So what the Lambda function does, it downloads the profile, it will sample it and it will push a sample to impact the data. What I mean with sample, the sample for us at the moment is what you get when you do top 10 in the in a pre-prof profiles. So it's the top 10 of the most heavy UZ function for the profiles that you're looking at. So if you have a CPU profile or a memory profile, we sample the top 10 functions that are using most memory or CPU. So we have the, from that point in time, we have them as, we have them as a, crealable data from inside InfuxDB. So we can build graphs or we can compare or we can do aggregation or we can answer the kind of questions I had in the previous slide. So give me the top 10 function across the board so across all my binaries that are using more memory. We can do that because we have the ability to sample and we have the data in a shape that is actually crealable. So I placed some link here, the GitHub repository for Profefe. As I saw on the line, there is a collector that is the centralized repository. Like we call it collector, I think we should change name to repository, but so that's why maybe I confused the terms a little bit. And there is also a profefe slash kubedash profefe that is the bridge between Kubernetes and profefe. So that's repository, the second repository contains the cron job and the QCTL plugin. But there are also a bunch of, like the second one is our research about Google because they also have a continuous profiling infrastructure and you can use it in Google Cloud in Stackdriver. And so it's a very good paper to understand why and how it's useful if it's not clear from this presentation. And, or if you want to go deeper, the third link is a very nice post about how to profiling go. So if you, if for you, those concepts are new, the PIPROF concept is our news, just have a look at that link is super useful and well done. The third library, the first link is a repository that come from Google and it is actually the one that I'm using to do the sampling from PIPROF to in flexibility. So it's a library that allows you to read a profile, disassemble it and do whatever you want with it. And yeah, the last one is my work. So thank you. That's the end of my presentation. I didn't have the opportunity to see the question. So let me see. Well, let me say thank you for the representation, John Luca. Again, there is time for questions now. So if you haven't already put them into the Q&A box, feel free to ask them now. The Q&A tab is just on the bottom of the screen. So as far as you've already found it, maybe let's start with the first one from David who's asking if Q-Control port forward, doesn't it always work to connect to a pod in order to receive a profile? Yeah, I mean, I decided to implement the QCTL capture in that way because it usually runs from your local laptop and Q-Port forwarding from my understanding and from my experience is the way that usually works. So it's the most common that to find open and workable. If internally from the Chrome job doesn't use port forwarding because it would be too heavy and useless because you can't configure your network and your Kubernetes network to allow the pod runnings inside to reach the others. So now this is how it is implemented now. I presume that as more people will onboard the project as more like we will have to implement different ways based on other common access point. Awesome. So let's continue with Abel Karim. Abdel Karim, sorry. Does the profiling affect the performance in a production environment? I mean, I don't have a strong answer for that, but the community, you will find almost like all the applications like exposing it internally and it doesn't affect the runtime in a way that there are stuff that will slow it more sooner. Oh, yeah, cool. So Alejandro is asking if this applies to other programming languages as well or if it's just calling? That's a very nice question. And I saw that Google has a repository that is called Pprof non-JS. So I think it's supporting other language and I think that it's also a C, Pprof like exposition, but I only have experience with Go. Awesome. Kidd is asking if there is a way to dynamically disable and enable pro-feffer metrics for push? Yeah, it really depends how you, which infrastructure you choose to adopt. If you are, if you will go with the same one we use, the Pprof is usually always enabled and if you don't want to collect profiles anymore, you will stop the cron job and it will stop connecting metrics. The cron job, I didn't show it, but it also, it is very dynamic. So it's support, do not imagine like that you have only one cron job that will scrape all the old profiles. We have one because it's enough for us, but it supports labeled selection and namespace selection filtering like the QCT added pro-feffer capture command. So you can actually run as many cron job you want. You can also, you can, you know, and they can connect, they can target a subset of points. So you can also do stuff like, okay, this cron job will look like for, will profile the front end namespace and it will run every 10 minutes because maybe you need that cadence and you have another cron job that will look for all the other namespace that will run every day because you don't need that granularity for all the rest. So it's very dynamic and scalable in this way and it's also very easy to implement because you just have to deploy more cron jobs.  So you have code, so you can enable and disable it as you wish. Cool, Marianne, please put it into the Q&A box that we can take it off. Also please do think about other questions as we have some minutes left, but until then someone anonymous asked, what is the performance overhead of profiling and production? Yeah, I'm not aware of like, as I said, like numbers around that. So from my experience, we keep it running all the time in all our applications and we don't see degradation in any way or stuff that we can point to the profiling. And from my experience, it is a well, I mean, it's not something that we do alone. Awesome, so there is Barri's question in the Q&A button as well. Thank you for that. Is there any tool support enabling to correlate profiles with results from distributed tracing? Well, the problem is that they have a very different grouping techniques, because usually distributed tracing, if I understand it in a good way, like open tracing, open telemetry and stuff like that, Yager, they are grouped by recast. With profiles, you are measuring the runtime. So you can do tracing inside the runtime, but I like to end exposing them with the P-prof as well, but I'm not, I don't have experience, I don't know, I don't know the answer. Cool, thank you so much. Oh, just in time, another one. What are the benefits over other CNCF-graduated tracing projects? Yeah, I mean, this is not a tracing project at all. So it's, as I say, like profiles are, they give you information about how your runtime is performing overall. So usually, like if you are speaking about like distributed tracing, like as I said, Yager, Zipkin, open tracing, they usually are by recast. This is for the runtime of the, like how your binary runtime is working. Okay, maybe to pronounce something of the question again, it's the last one, what are the benefits over other projects in general? Like are there other profiling projects, maybe even what's the benefit?  They gives you a different picture of how your application is performing. Profiles are very like lightweight in terms of how it costs to enable them. It's just a line, as I showed. And with this infrastructure, you can connect them very easily. So I think you can have both. We have both, we have traces and profiles and metrics and logs we have. Because as I said, like the very effective way to do, to understand how an application or a system, entire system works is to have snapshots of it. And as more information you can get, you can have in that snapshots has most you can understand from the application. And our snapshots are made from logs, events like Prometheus events, traces like open tracing, open telemetry and Bpro profiles. So those are the languages that our application speaks and we collect them and analyze them to figure out what's going on in production. Very good. Any last questions? Awesome, great. Thank you so much, Landauka, for the great presentation. All right, that's all the questions we have for today. Thank you for joining us. The webinar recording and slides will be online later today. So keep an eye for that. We are looking forward to seeing you at a future CNCF webinar. Have a great day. Thank you. Bye-bye.