Everybody and welcome to the channel. I'm actually making a video from the airport. My flight is delayed So I thought I would take this opportunity to make a video This video is going to be about requests for the flows So if you have been asked to come in to an interview with CBSA And ask to leave Canada. Typically it's usually in a few weeks CBSA will ask you to come with proof of purchase of your plane tickets in order for you to leave Canada Once you bring in your plane tickets You will receive a direction to report which will have the date and time of your scheduled flight from Canada To your country of citizenship. If you want to stay longer, what you could do is submit a request for deferral So this is an application. Essentially, it's a cover letter If you prepare it as lawyers, it's called the legal submission letter Which outlines the reasons why you believe that you should be granted more time in Canada And you can attach supporting documentation For example, if you have filed a humanitarian and compassionate application or a spousal sponsorship application And they're in process and it's been a little while You can put that as an argument to want to stay in Canada until a decision is made Other reasons can be if you have a medical condition which requires you to Stay in Canada to be followed by specialists or experts If you have children and they're in school and it's in the middle of school year That's a very strong reason to Want to stay in Canada so they could complete their schooling in order not to have negative consequences on your children's education So there could be a number of different factors So you would outline those reasons in detail in the letter and you would also include the supporting documents you could submit it by Mail to the CBSA office or you could fax it if it's less than 20 pages to the deferral officer What's going to happen is an officer is going to receive that we'll give it to the deferral unit And you will then get a decision a little while later It's approved or refused These days typically CBSA tends to give decisions a few days before sometimes even one day before This is quite inconvenient because if well, I mean you're in limbo, right? You have to leave you put in a request to stay longer if you have an apartment Do you what do you do with your rental agreement if you own a house with your house if you have a car? children are in school So it's quite difficult actually So you have to be prepared you have to be prepared for the worst, which is that you have to show up Your removal from Canada and if you don't show up if you have a direction to report and you do not show up then CBSA will issue a warrant for your arrest with the RCMP and And that's not going to be good for your immigration history and they're going to be looking for you. So Requests for deferrals are I would suggest if you're in a difficult situation To get an immigration lawyer to help you out because there's a specific way to prepare them to prepare strong argumentation The last resort if your request for the furl is denied is you can file what's called a motion for a stay at the federal court But this is really at our office. We really only do them if we feel that there's going to be Irreparable harm to the people being removed. It's not in every case that we do that. It's quite a complex application It's an urgent application at the federal court requires a lot of preparation And sometimes it's very difficult to do because CBSA doesn't give lawyers enough time to prepare properly So if you have received Instructions from CBSA to buy your plane tickets in a few months or a few weeks Or if you feel that that might be coming and you have good reasons to want to stay a little bit longer Request for deferrals are not meant to get a positive decision on an application of for you to stay forever in Canada It's really a temporary The furl of your removal. So it's typically a few months six months or a year until Some something happens that allows you to then leave or you're waiting for a decision. So if you are in that situation You can contact our office and we can schedule a consultation With you to see what's your story. What's the situation and if it's worth it to do a request for deferral Or perhaps it's not and it's best to to take the money that you have that you would maybe hire a lawyer for To go home and and build a new life for yourself. It's quite difficult situations But we're very familiar with those situations so we could give you the best best advice Thank you. And if you have any questions, don't hesitate to contact us


Higher fruit and vegetable consumption was found to be positively associated with muscle power in adolescents, but that's not who really needs it. What about the consumption of fruit and vegetables, and risk of frailty in the elderly? Higher fruit and vegetable consumption was associated with lower frailty as well, in a dose-response manner, meaning more fruit, less frailty, and more vegetables, too. But these were all observational states which can't alone prove cause and effect. What happens when you put foods to the test? Well, no positive influence suggesting chia seed oil on human running performance, but there was an effect found for spinach supplementation on exercise-induced oxidation stress. And by spinach supplementation, that meant they just gave some guys some fresh raw spinach leaves, one gram per kilo, so like a quarter of a bunch a day for two weeks, and then they had them run half-marathon. And they found that chronic daily oral supplementation of spinach, meaning like eating a salad, had alleviating effects on known markers of oxidative stress and muscle damage.  In the spinach group, the before and after two weeks of spinach doesn't seem to make much of a difference, but put the body under pressure, and then you can really see the difference. Your body is better able to deal with the stress. And if you look at the resulting muscle damage, as measured by creating kinase leakage from your muscles, that's an enzyme that should be in your muscles, not leaking out into your blood, you start out at about 100 and go up to 200 after the half-marathon right after, two hours later, but it's the next day where you really feel it, that delayed onset muscle soreness, with CK levels reaching 600 before coming back down. Okay, that's without spinach, though. On spinach, you get a similar immediate post-race bump, but it's that next day where spinach really shines. You don't get that same next-day spike. And so, for a competitive athlete, that quicker recovery may get you back training harder sooner. They attribute this to the anti-inflammatory effects of spinach. Same with black currant juice, after some hardcore weightlifting, muscle damage indicators go up and stay up, whereas the same lifting drinking berries, and it goes up but comes right back down. But these were just measures of a biomarker of muscle soreness. What about actual soreness? If you look at the effects of tart cherry juice on recovery following prolonged intermittent sprints and soccer players, you see the same kind of reduction in biomarkers of inflammation, but more importantly, less resulting muscle soreness. Here's the soreness reported in the days afterwards in the placebo group, only about half in the cherry group. Then they measured maximum voluntary isometric contractions of the leg muscles, which understandably took a hit in the days after the intense workout, but not in the cherry group. They conclude that participants supplemented with a tart cherry concentrate were able to maintain greater functional performance. But that was testing like how high you can vertically jump. They didn't actually see if they played soccer any better. But this study on purple grape juice actually showed an ergogenic effect in recreational runners by promoting increased time to exhaustion, where you ramp people up on a treadmill and see how long they can go before collapsing. After a month of drinking a grape kool-aid type placebo control drink, no real change in performance, but a whopping 15% improvement in the real grape group hung on for another 12 minutes. They used juice so they could make a matched placebo control drink, but you can buy concord grapes fresh, or tart cherries fresh, frozen, or water-packed in a can. I mix them with oatmeal, cocoa, and mint leaves for a chocolate-covered cherry type sensation. You may want to try that for a few days before participating in your next big sporting event.


Hussain ibn Ali, master of the youth of Paradise, the master of all martyrs. We all love Imam Hussain alayhi salam and his courageous stand against the tyrant of his aim, Yazid l-Mathullah alayh. But why do we limit him to Ashura? Why do we limit this great man to just one day? When all the qualities that Imam al-Hussain alayhi salam displayed in Kandahar, bravery, justice, generosity, humility, patience, all of these qualities he displayed before the temple. Imam al-Hussain alayhi salam had the most beautiful man. As a young boy, he and his brother Imam al-Hassan alayhi salam saw an elderly man performing wudu incorrectly. And instead of him arrogantly embarrassing the man, they went over to him and asked him to watch them perform wudu and to tell them if they were doing it correctly. The man was honoured to be asked this, and when he saw them perform wudu, he realised it was actually him who was doing it incorrectly. Imam al-Hussain alayhi salam was a mercy to all those around him. He loved and adored his family, especially his young daughter Ruqya alayhi salam. But not only that, but even those who had wronged him could turn to him for help. When Osama ibn Zayn, a man who had rejected the leadership of Imam alayhi salam, lay on his deathbed with a huge debt unpaid, it was Imam al-Hussain alayhi salam who paid the debt on his behalf. Imam al-Hussain alayhi salam also taught us the most beautiful of du'as, including du'a mashul and du'a ala fa. So when you sit and recite, oh Allah, what has he lost? He who loses you. But oh Allah, what can he lose? He who finds you. Remember to thank Imam al-Hussain alayhi salam for sharing these precious words with you, these words that bring so much comfort to our hearts. The patience and bravery he showed throughout his life exceeds all words. At the battle of Nahrawan, one of the prisoners of war asked the Imam alayhi salam to loosen the ropes around his hands. Imam al-Hussain alayhi salam went to his father, Imam alayhi salam, and said, please let me loosen the ropes. If someone asks something of me, I cannot bear to refuse them. That day Imam al-Hussain alayhi salam loosened the ropes around the hands of Shimmer al-Lanitullah alayhi.  This is Hussain alayhi salam, master of the youth of Paradise. Let us never forget his legacy. He famously said that many people are loyal to the religion during good times, but turn their backs when things get tough. On this day, the 3rd of Shaban, let us do our master proud and stay steadfast as he did. This is Hussain alayhi salam, master of the youth of Paradise.


Scotland prize itself is a welcoming country, but the committee heard that employers still don't value diversity in the workplace or see it as a positive goal.


We had S was a projective algebraic surface over the complex numbers and we were considering the modular space of each stable rank 2 coherent sheets on S with Schoen classes C1 and C2 coherent torsion fissures with these Schoen classes and we also I also had introduced the Hilbert scheme of points Sn equal to Hilbert S which parameterizes two dimensional sub schemes and I had ended by talking a little bit about obstruction theory and virtual invariance so for the moment I just want to record that this means we have a complex so just 2 E minus 1 to E0 complex of vector bundles which somehow capture information both about the tangent space of say M and the obstructions to lifting tangent vectors to actual curves so to deforming points in the modular space so and if I so I have the virtual tangent bundle which would be E0 minus E1 where EI is equal to the dual E upper I and we had wanted to compute something like the Euler number of these modular spaces and this was supposed to be replaced by the virtual Euler number which would be the evaluation so if one has such an obstruction theory with these properties it leads to the existence of a virtual fundamental class which will lie in the homology corresponding to the virtual dimension of the modular space and so we can integrate any homology class over this homology class particularly we can take the top trend class of the virtual tangent bundle and we'll get some number which is the virtual Euler and now we want to see how this a little slightly more explicitly how this plays out for the modular space of sheaves so I don't need it but for simplicity I will assume that we have a universal sheave on the modular space so let E over S times the modular space the universal sheave so that would be sheave so that any family of such sheaves can be obtained by pullback from this by a map to this modular space but you know for us it's maybe enough to say that if we take the universal sheave and restrict it to S times this thing parameterizes the sheaves so every point in this would correspond to a sheave so if we restrict it to S times the sheave parameterized this will be just the sheave parameterized for E and M okay so this is this universal sheave and then I would just write down so what the dual of the obstructions theory is can be written as an element in the derived category so we have so we look at the projection from S times the modular space so the modular space and then the dual of the obstruction theory is R the lower star of R home E E 0 shifted by 1 in the derived category of M so this means so this is we have so an element here would be a basically a complex of vector bundles on M and this one means we have shifted it by one to exchange have all the signs the opposite if we look at the alternating sum and here what this basically means is that the tangent so this means trace free so the tangent to the modular space at the point corresponding to E will be X 1 E E trace free and the obstructions will be X 2 E E trace free and this is basically what is encoded in this and and so here I've said there's an element in the derived category but one can resolve this so we can write this so can represent this as a complex of vector bundles on M which would be E 0 goes to E 1 which is just a dual of this so it corresponds to the tangent bundle so the virtual tangent bundle will be indeed easier minus E 1 in the K group of vector bundles on the modular space so this is and so this gives us the following by this what I told you about this general thing about virtual smooth varieties and absorption theories this gives us a certain package of things namely so this gives us so we have first that M has a virtual fundamental class in the correct dimension and then we can integrate we have the virtual tangent bundle as we have seen so the virtual Euler number of M is the integral over the virtual fundamental class of this thing so the top churn class so let me write C V D of M of the virtual tangent bundle and we also have as I said a virtual as I said the other time a virtual structure C so M has a virtual structure sheath so this is O M here which is just an element in the Grotendie group of sheaves of coherent sheaves on the modular space and this allows us for any vector bundle so our complex of vector bundles on M we can compute we can define the virtual holomorphic Euler characteristic so this would be chi here of M V this is just the holomorphic Euler characteristic the usual one so the alternating sum of the sheave homologies over M of V tensor the virtual structure sheath and one nice property that this has which one is to use for these things is that we have the analog of the usual Rho theorem virtual Rho namely that the virtual homomorphic Euler characteristic will be equal to the adoration on the virtual fundamental class of the churn character of V times the taut genus of the virtual tangent I mean I expect you are familiar with these so churn so these are certain expressions in the churn classes of these things which are kind of standard so one can compute this by this formula in terms of homology of just churn classes of the tangent the virtual tangent bundle and and V this is the analog as the of the usual Rho if one just gets rid of the two ways here one gets the usual Rho I mean the three ways these as long as you cancel this this and this we have the usual Kirchhoch Rho form okay now in this context our conjecture is that this Waffa Witten formula holds for these virtual invariants so the for the virtual Euler number so I should say I should remind you that our assumption for this was that the first pattern number of s was supposed to be zero and we were assuming that the geometric genus of s was bigger than zero so that means there there are holomorphic two forms I mean there are global holomorphic two forms on s and I will also assume that h stable is equal to h semi-stable so that the modelized space only consists of stable sheaves and for simplicity of the formulation I also assume that the canonical linear system contains an irreducible curve so that means there is a curve C which is irreducible so in just one piece which is a zero set of a holomorphic two form and in this case the assumption for the statement was that this virtual Euler characteristic of m so I may be right out m s h c1 c2 is equal to the coefficient of x to the virtual dimension of m of 8 times 1 over this eta bar of x squared to the 12 2 times this is total holomorphic Euler characteristic of s times 2 times eta of x to the 4 squared divided by the standard theta function to ks squared where maybe I should remind you that eta bar of x was product 1 minus x to the n over all positive integers and this theta function was just the sum over all n in the integers of x to the n squared so a standard the kobi-teta function and just to remind you also the virtual dimension of this modelized space was just the number 4 c2 minus c1 squared minus 3 times the holomorphic Euler characteristic okay so this is the statement so we will want to kind of check the conjecture in many cases but we are not going to prove it we will just be able to make computations that confirm it and so we want to check this conjecture and refine it maybe I can first look at the refinement so what would be a refinement so the Euler number is kind of the more or less the causes topological invariant that you can assign to a topological space so you can look at finite invariant and so one particular nice one one can look at is the chi-y genus so let me do for the chi-y genus so if you want to so refinement replace the Euler number by the chi-y genus so the chi-y genus is usually so if x is a smooth projective variety then the chi-y genus can be expressed in terms of hodge numbers so so we have these hodge numbers hpq of x which are say the dimension of hp of x and the holomorph the sheaf of holomorphic q forms and then the chi-y genus of x will be just the sum over p and q we have partially an alternating sum of these hodge numbers and I can also write this as this is the homology of this this it means we are looking at the holomorphic Euler characteristics of these sheaves and summing them up so this is the same as the sum over all q of the holomorphic minus y to the q the holomorphic Euler characteristic of x omega q of x so it's easy to check that if I put y equal to 1 then then I get the Euler characteristic and now we want to consider a virtual version of this and this is just by done by putting the letters here at the correct places maybe okay so just in case well no so just as an example if I take the chi-y genus of a k3 surface then this is 2 plus 20 y plus 2y squared and the Euler number as everybody knows is 24 which fits this so let's look at the virtual chi-y genus so this is just as follows and so assume that we are now dealing with our modelized place okay hope it's still alive it still works okay so we put it's clear in some sense clear about the holomorphic the virtual holomorphic p form should be this should be just the omega p there on m should be just the p exterior product of the dual of the virtual tension part and so we just replace this in our formulas and so then I get the virtual chi-y genus and I renormalize to make the formulas nicer so I divide by y to the virtual dimension divided by 2 times the sum over all p minus y to the p then I take the virtual holomorphic Euler characteristic of our modelized space with these holomorphic p-forms okay so this is the direct analog of this formula except that I have normalized it here and again it's easy to see for instance by this Riemann Roth formula that if I take this virtual holomorphic Euler characteristic and put y equal to 1 this is the virtual Euler and so now for the virtual chi-y genus we will write a very similar formula so we put now okay so it is surprisingly it is a finite sum that's not obvious from the definition so obviously by definition the sum is infinite because as it's the difference of two classes in the in the or in of two vector bundles there are infinitely many terms it's symmetric powers and alternating terms but you can prove that this beyond the virtual dimension it will actually be zero I mean this number will be zero it just follows from the computing with join numbers I mean from the Riemann Roth theorem but you know yeah it's not obvious from this no you it's actually somewhat surprising okay so anyway we put now we look again at this theta function theta uh now we before we had the the theta function as well as the theta zero value now we have the Jacobi theta function which also has elliptic variable and so this would be now some n in z x to the n squared y to the n and we have still our eta bar of before and then the formula where we actually okay and then we put psi s to have enough room of x y to be we take this power 3 minus kao for s plus ks squared times 1 over the product over all n bigger than zero 1 minus x to the 2n to the 10 1 minus x to the 2n y 1 minus x to the 2n y to the minus 1 we take this to the power kao for s through the holomorphic order characteristic and we multiply this by we have again this eta of x to the 4 squared divided by this theta function I hope I have enough room and then I take this to the power the power ks squared okay this was a square so this is this formula as you see it's the same formula as before if we put y equal to 1 we get our previous I mean let me first write out the statement which is the same as before namely then the conjecture is that the high y genus of this modular space is the coefficient of x to the virtual dimension of m of this expression okay so this now will be an expression so it will be polynomial in y if I take the coefficient of x to the vb and so this is the same formula as before if we put y equal to 1 this will just be eta of x squared to the 12 as we had before and this theta and and this theta function here will also just become the theta zero value when y is equal put equal to 1 and so this generalizes the previous formula okay there will be there are further refinements one can just see where am I there would be so this is there would be further refinements of so just one example where we know that this conjecture is true so if s is the kc surface then it is known that and under our assumptions that stable is equal to semi stable and so on it's known that this modular space is a non-singular of the expected dimension and it is actually for instance by Yoshioca and others one knows that its deformation in equivalent to the Hilbert scheme of points on the surface of the same dimension so in particular the k y genus of this thing will be equal to that of the Hilbert scheme of points of the virtual dimension but by two because we know that the dimension of the Hilbert scheme is twice number of points and then ks squared is equal to zero and this formula here is a standard formula for the ah actually that's not true so yeah I should maybe have shouldn't have given this example so this is this is an example of the formula in the case when the formula doesn't apply because we had assumed that we had an irreducible canonical curve so therefore here kf is equal to two and here ks squared is equal to zero so we get a factor two here so we're actually wrong by a factor of two but still this is precisely what the formula the general formula predicts okay yeah yeah I mean so we have worked it out in rank three what the statement is I will maybe if I have time explain later I mean there's a somewhat more complicated formula there's some formula by some physicists in arbitrary rank but that contradicts our formula in rank three so therefore as far you know as far as we are concerned there's a formula only after rank three and okay well I mean yeah no no but that that's an arbitrary rank and and so the formula is always done in such a way that it contains such a factor which accounts for the Hilbert scheme for the kc surface okay yeah um so they're also further generalizations which I think will not speak about so one can also generalize this elliptic genus and to some extent to the cupordism class but um so there's a formula for the elliptic genus which is in expresses it the which is very similar to the dichrof more well in the well in the formula for the elliptic general for Hilbert schemes of points on kc surface but it's a bit complicated rather long to write so I will maybe not do that okay now maybe I want to try to explain how we try to verify these conjectures and so this is based on watch its formula so this is our principle tool so this computes intersection numbers on modelized basis of sheaves in terms of intersection numbers on Hilbert schemes of points and cyberquitney invariance so it should maybe set it computes virtual intersection so the integral over the virtual fundamental class of some homology class okay so maybe I can briefly recall the cyberquitney invariance just not much but just some make some statements about them so these are some c infinity invariance of four many folds of differential four many folds but in if the four many fold is an algebraic surface they're actually quite simple so in particular if s is a smooth projective surface and we make our assumption that the geometric genus of s is bigger than zero and the first petty number of s is zero they are rather easy to compute and I mean at least in many examples one can directly they are well known so anyway so the cyberquitney invariance can be viewed as a map as w from the second homology to the integers so class a is sent to the cyberquitney invariant of a I should maybe say that in gauge theory it's a bit different you associate a cyberquitney invariant to a spin c structure spin c structure would be a characteristic homology class so one which is say congruent model or two to the canonical class and so the relation of this to the standard ones is that our cyberquitney invariance are equal to the standard ones for two a minus case anyway in gauge theory but anyway this is just for simplicity of notation and so we have this map most of the time most of class the classes are mapped to zero and so if the cyberquitney invariant of a is non-zero then a is called the cyberquitney class and I just give some examples so so first if s is a k3 surface then there's only one cyberquitney class only cyberquitney class and this is actually the class zero in the second homology is the cyberquitney is one if this is if we have an irreducible canonical curve then we have only two cyberquitney classes there's zero and the canonical class and the cyberquitney invariant of zero is again one and the cyberquitney invariant of ks is minus one to the homomorphic order characteristic of s so everything is known and there are other statements for instance if we blow up a surface in a point we have a simple relation between the cyberquitney invariant so if s hat is the blow up of s in a point then the cyberquitney invariant of s hat are the cyberquitney classes of s hat so these are a set of all a and a plus e where e is the exceptional divisor of this blow up and a is the cyberquitney class on s so for this I mean a is the pullback from s of a on s okay there are other examples for instance they have a simple description for elliptic surfaces but maybe I will not so you can see at least it's very they are quite simply described in a quite simple way in particular if I assume that ks contains an irreducible curve then I know explicitly what the cyberquitney invariants are and this is the reason why I restrict in this presentation my attention to the case that it contains an irreducible curve otherwise we also have a formula but it will be more complicated some formula in terms of the cyberquitney invariant okay so this is the first part and now we have to kind of the mojizuki formula is unfortunately rather complicated so first yeah first we have to remember all these tautological chiefs that also were mentioned in noah arbilsfeld talk so we have a s a projective surface with our assumption so we look at this diagram assume we have here s and one times s and two so the Hilbert scheme of n one points and two points times s we can project it to s and we can project it to these Hilbert schemes so this I call p so then we have several things we have universal chiefs refer you have several universal chiefs so the first thing is the ideal chiefs so if we have c and s so the universal subscheme which is just can be described as the inside s times the Hilbert scheme of n points this pairs of a point in s and the subscheme such that the point flies in the subscheme so this incidence variety this is a maps this n and the fiber over every point here will be the subscheme parametrized this is the universal family and so we can look at its ideal sheaf is the ns which is so the ideal sheaf in s times sn so the functions in this ambient space which vanish on it this is the universal ideal sheaf and so we can use this to make some sheaves some ideal sheaves on this product here so if l is a line bundle on s we can put for the ii of l to be so and now I don't so in this case I actually I take this ideal sheaf so assuming the situation of the n i ideal sheaf so the factor I take here the projection to s times s and i for i is equal to one or two the pullback by that of the ideal sheaf of n i the of the universal subscheme and I tensorize this with the pullback of the line bundle so this will be some sheaf on so I pulled it back so this is some sheaf on this product and what is the property so this is a sheaf on s times sn1 times sn2 with the property that if I restrict it to the point corresponding to so so restricted to s times the point corresponding to two subschemes this will be the ideal sheaf of the ith subs of these two subschemes tensorized with f okay so this is one thing we can look at and we can also look at the tautological sheaves which were considered in our stock so we have here this universal family it maps to s though it lies after all in the product of s times sn1 can look at this this map was called pi now and I can look tautological sheaf on this thing would be the push forward with p the pullback of l in this diagram to first pull back this line bundle here to this thing we push it forward becomes a vector bundle of rank n and so so this is a vector bundle of rank n on this Hilbert scheme such that if I look at the fiber of this thing over the point corresponding to a subschemes z this will be h0 of this line bundle restricted to z or tensor oz is a vector span and we define then in the same way o1 of l and o2 of l to be the pullbacks to the product so these are vector bundles on sn1 times sn2 by pulling back from the two factors so oi of l is equal to p say sni up a star of this sheaf okay so we have all these sheaves on it we have the tautological sheaves pulled back from the two factors and same for the ideal sheaves and we want to express things in terms of all of them maybe we I should we first should talk about what kind of classes so I said that the mutual formula will compute intersection numbers on the on the moduli space in terms of intersection numbers on Hilbert scheme so let's first see what classes we want to compute so I assume again that we have a universal sheave then we can look at the two projection to s and to m and if you have a class in the homology of s we can pull it back to the product we can multiply it by a churn class of the universal sheave and we can push it forward so we put so for we put tau i of alpha equal to the push forward to m by m of say the ith churn class of the universal sheave times this class alpha so the pullback of the class alpha so this will be a homology class in the two i because of the churn class minus four because of the dimension of s plus k of the moduli space and now we take any polynomial in these classes so i z because zero and alpha in the homology of s and for any such class we can compute the corresponding virtual intersection number Mochizuki's formula compute so this virtual intersection number for any such polynomial so on Hilbert schemes of points okay now the formula is a little bit complicated so and in fact in terms of you know these churn classes of these tautological sheaves and universal ideal sheaves that you have introduced explicitly we have the following so if we again look at this pi from s times sn1 times sn2 to sn1 times sn2 I'm sure that I actually should write the formula so then first if we have two sheaves e1 e2 sheaves on this product on this triple product and we can redefine this object q of e1 e2 which is the Euler class of minus the r pi push forward of the r home of e1 e2 okay so this is a certain homology class that one gets for any two sheaves like this and we also okay then yeah maybe should also introduce this although it will maybe so for us we also have a variable in this thing if e is a vector bundle say of a certain rank so then you could say that ck of e of s would be kind of for the moment defined as of this expression okay so how you think of this so in fact you treat this variable s as if it was a line bundle and e of s means you tensor by the line bundle and this gives a formula for so for the churn class of this if this is also the first churn class of the line bundle and this makes actually complete sense because actually s is a line bundle namely we are looking at a trivial line an equivalent line bundle whose which is trivial as a line bundle but is non non trivial equivalently and this s is actually its equivalent first churn class and this actually means we tensorize e with this equivalent line bundle and this is the formula for the equivalent churn classes so anyway but if one doesn't know what this is it's just this formula and so with this what with this we have four line bundles a1 a2 on s we can write psi a1 a2 n1 n2 s to be some internal expression remember that we had this p of e that we wanted to compute the integral over m of p of e and so we take this p of e so and replace the e by taking this first ideal sheaf tensorizing it by the line by the a1 minus s plus the second so basically we have replaced e by this thing we divide it by this q thing with the same contents and then we multiply by the Euler class of o1 of a1 so this was a tautological bundle times the Euler class of o2 of a2 plus 2s and then as a normalization we divide by some power of 2s so this will be some expression it will turn out so this lives according to our definition somehow we are in the homology of the this part of these two Hilbert scheme of points with q coefficients and so we have all these s's that we get a Laurent series in s okay so this is this expression and then we can as is like this we can integrate it over these Hilbert schemes of points so we put a of a1 a2 say n is that what I want yeah s to be the sum over all numbers such that in 1 and in 2 add up to n of the integral over the Hilbert scheme is the product of these two Hilbert schemes of this expression so this is just something we've written down so this will be according to what we have here this is some powers in each series in some Laurent series in s and so then the statement of Moffitt-Bietz's formula is that in terms of this we can compute our integral namely we assume again that all sheaves in ms h c1 c2 are stable we assume that the holomorphic order characteristic of every sheave in in the modellized space is positive and so this can always be achieved by the modellized if we twist the sheave if we twist every sheave in the modellized space by a line bundle this gives me an isomorphism of the modellized space to itself and so we can always twist in such a way that every sheave has positive homomorphic order characteristic and then for then for polynomial p as above we have that if we want to evaluate this over the virtual fundamental class this is equal to the sum over all ways how I can split up the first germ class here as a sum of two classes where a1 h so h is our ample class is smaller than a2 h and I multiply by the Zabek Wittner of a1 and I take the coefficient of s to the zero of this a thing here a a1 a2 and then n is replaced by the second germ class we have here minus a1 times a2 so which is a number because this is a class in second homology okay so this is the answer so one can for one thing so my time is essentially up so in particular we will be able to see that we can have this for instance the top germ class of the virtual tangent bundle can be expressed in this way and so one can apply to compute the virtual Euler number and so what we have achieved here is that we have a reasonably we started with a reasonably nice formula on this modular space of sheaves so of an intersection number on a modular space of sheaves and we have replaced it by a terrible formula on the Hilbert scheme of points and so that doesn't really seem like a big improvement but we will see next time that one can actually work with it okay thank you very much


Welcome. So after my bonus talk earlier today about CEC, now I can talk a little bit about video flinux, roughly what happened in the past year. I don't have a lot of time, so I am sticking to two main pieces that in my biased opinion has been the most interesting and most important, and that's hardware codec support and testing. Let me first start. There are two types of hardware codecs. We call them stateful and stateless. Stateful codecs have been supported for quite some time now, and basically you just feed them and say A264 bitstream, and they do everything, and outcome the decoded frames. So they keep track, the hardware will keep track of the reference frames, they will keep track of the state, and they are really simple to implement because all the complexity is in the hardware. Problem with that is that takes a lot of, that moves the complexity towards the hardware, and of course hardware designers don't like that, so they've been pushing back, and what they basically did was more like accelerators. So you give the frame to decode, you give the reference frame associated with it, or frames, whatever. You basically give the whole state together with what you want to decode, and the hardware no longer just takes that, processes it, returns it, and it no longer remembers any state. Those have not been supported until very recently. But first stateful codecs, as I said, we support quite a very big range of them already. What was missing was a precise specification how to use the Video Phoenix API for that, particularly in corner cases like what should happen when you do a seek in the middle of a stream, or you have a midstream resolution change, and Google, specifically the Chromium and Chrome OS team, they have been working on writing all those details down. Incredibly useful, it is not yet merged. We are going through hopefully at least one more version, I think. But the good chance that we'll get into the 5.1 kernel, we said 5.2 by now, 5.1, where are we? In order to test these things, so testing with actual hardware codecs is difficult because you need the hardware. It would be nice if you had a hardware emulator. We have that for various other devices, types of devices as well. I come to that in the next section. But we also have a Vi codec. It's a virtual codec driver. It implements in software a codec, not any of the standard ones due to IP issues. It's a very simple codec that actually was used decades ago by NASA in some of the space probes. It was a student who did a project on that, who made the codec itself and I turned it into a driver. But it is not compliant to the specification that we're working on. And Outreachy is an organization that provides money for people who want to get involved into kernel programming for projects of three, three months to work on particular issues. Not just kernel, it can be any open source project. I'm co-mentoring together with Helen Coyker from Collabora, Daphna Hirschfeldt, who is working on making the virtual codec compliant to the spec. It's a moving target since the spec is not fully specified yet. So that makes it a bit interesting. And I've started work, so this is slightly out of date. By a few days I started to work on adding compliance tests as well for stateless codecs, stateful codecs. I already, while doing that, I already saw some issues with the specification that are, there are certain exceptions and they're already difficult to program, so it will probably change a little bit. But this is great to have this combination of documentation, compliance tests, and basically an emulator for codec to figure out these issues before you make them available in MadeLine. The other big one is stateless codecs. So these, there was no hard for support in the kernel for these devices. It was, however, used already for three, four years by Chrome OS because they had an early version of what is now called request API that I made many years ago and they've been using that on Chromebooks. So one thing that they're also doing is writing documentation on how to use it. That's a bit earlier, not stateful codec, the documentation is further advanced than this one. Daphna is also working on turning the vi codec driver into a stateless codec. So we can test all this. She just started on that this month or last week actually. That needs to be compliance tested as well. But the big thing here is request API. It was merged in 4.20 together with the first stateless decoder driver. It's in staging. The request API is in MadeLine, but the driver is in staging because there are still a few things that are being developed. Work is actually being done already by various people to adapt it to the Rockchip codecs. And I don't know what the state is, but someone started on work for the Tegra decoder. That's also both stateless codecs. There's also work on the way for H264 and HEVC. And some people are already looking at VP8 and VP9 or at least thinking about it. So there's a lot of interest in these because the hardware that uses these codecs, they have been blocked for being MadeLine for quite some time. You couldn't get the drivers in because the request API was missing. What the request API basically does is that it creates the name request actually comes, I believe, from Android Camera Hall. You make an opaque object. You put a buffer into it and all sorts of formatting data configuration. And you give it to the hardware. So you have basically shorthand for per frame configuration. The hardware processes it and at some point the request is completed. You can dequeue the buffer and get any updated state information out of it. This is needed not just for stateless codecs, although they are the first one that start to use it, but also by complex video pipelines. The co-post talk earlier today about Lip Camera, it mentioned that they want to use it for Android as well and then you need this. This is basically per frame configuration, which is a requirement from Android. The current request API framework is, it probably gives between 80 and 85% of what is necessary for that type of application. So more work will be done in order to support it. It's not quite there yet, but a very large chunk is finished. So how do we use it for stateless codec? We have two video nodes or two device nodes, the video nodes that was always there, but now you also need to use a media controller node. Media controller, very quickly it basically shows the internal topology of your hardware. It is primarily meant for complex video pipelines, but we also use it for stateless codecs. The reason we use this instead of just the video node is exactly because the request API will also be used for the complex video, complex camera pipelines. So this keeps it consistent. You have the same method for both. If you have a stateless codec, that means that user space is responsible for parsing the bitstream, no longer the hardware. So it parses out the headers, it figures out the states of what the preferred to be decoded. I'm primarily talking about decoders. Encoders is very similar, just the order direction, but make it easy. I'll just talk about decoders here. So what you need to do is, first of all, you need to create request objects. And usually you make one for every buffer that you allocate it, but it's really up to you. Depends a little bit on the codec that you're using and other factors. So you use the media file descriptor of the media device node. You allocate a request and you get the file descriptor back. It's just an opaque handle to the request object. You always refer to request objects using that. So it's a decoder, right? So you have a buffer with a to be decoded frame. And you decoders are implemented as a memory to memory device. So you have things that you put into the hardware and you get buffers back. So you actually have two buffer cues. One is called output, one is capture. This is very confusing. The point of view is the software. So an output cue means that you give memory to the hardware. The capture cue means that the hardware fills in the buffer and gives it back. So for the decoder, the compressed buffers go as an output cue and decompressed buffers come in in a capture cue. For the output buffer, so it's a codec. So you always start with the output. You say it's a video output buffer. You have a request file descriptor. So that means that you don't queue it directly to the driver. You queue it in a request. So it doesn't go to the driver yet. It's it's stored in the request. You have to set a flag to indicate that as well. And there's a timestamp that you can set. Now for memory to memory devices, timestamps are not used by the hardware. They're copied from the output buffer into the capture buffer. That's all that is done. Timestamps, basically you're completely free to stick in whatever data you want. And in the case of codecs, they are used to basically name buffers. It's used as a tag. So the problem is you have reference frames for a decoder. The decoder, you have iframes. They are decoded all by themselves. And then you have P and B frames. And they are basically the difference between a reference frame, an earlier iframe, and what it should be. So they are a lot smaller because of that. That means that a stateless decoder needs to basically get two buffers. There's more complicated with ACE264 and more complicated codecs. You can have multiple references. Let's keep it simple. You have the buffer that contains the P frame, the difference, and you have another buffer somewhere that has already been decoded that contains the iframe, the reference frame. The decoder needs both. And the tag is what you use to later after this frame has been decoded. The decoded frame that you get back has that tag as well. It's copied from the output to the capture once it's decoded. So it gives you a unique identifier in the future of this decoded buffer. I'll get back to that in the next slide. But the last bit is that you queued the buffer into the request. So that's just the buffer is now in the request. The next step is to contain, to add a configuration, the state to that request. For MPEG-2, there is a slice params control. There's basically a fancy structure with data that you can set in your application and it can be stored in the request and read out by the driver. There are actually two controls related to MPEG-2, but no room on the slides to complicate it. So I just addressed that one. We're using the control API. Again, you need to specify where do I do that. Oh, yeah, here. This is the request file descriptor. This is a parameter that tells you that the control shouldn't be applied directly, but should be stored in a request. Here you set it. And the critical bit is actually, there are a lot more parameters, but I'm trying to concentrate on the important part. The backwards reference timestamp, so that is the one, the field that refers to the reference frame that this buffer is the difference of, that you have to refer to. And that's been the earlier timestamp of an already decoded buffer. So you reuse the timestamps in order to refer to it. So this is the output part. Then you queue up capture buffers because the result has to go somewhere. Capture buffers are not parts of a request. They're just independent buffer queue. You put buffers in, the decoded results gets put in there and you get them back. And final one is that you queue the request. So now the request object is queued to the buffer. The buffer has all the information. The driver, sorry, is queued to the driver. The driver has the buffer, has a configuration to state, and it can start to decode. You can wait using select for an event from the request object. And when an event arrives, that means that the request has been completed. All the data, the buffer is in a validated state. The parameters, configuration is validated and updated and you can read it out. And finally you need to dequeue the buffers. The output buffer, that's not what you, that's now, can be recycled. And the capture buffer containing the decoded frame. So when you dequeue this buffer, the timestamp in that buffer was a copy of the timestamp that you set in the output buffer. And this timestamp can always be used to refer to that buffer. If you need to do that in a, in a following p-frame you can refer to that capture buffer through the timestamp. I concentrate on this because it's relatively complicated and easy to mess up. Not to mention that it took a very long discussion on the main list to come to a way that works and that everybody agreed with. Testing. So video is complicated. Just like in the DRM system, you had several talks about continuous integration and testing. The same thing is true for video input and for hardware codecs. We have already quite a few visual drivers. VIFIT, that's the oldest one. It emulates a webcam, HDMI receiver, SVDO, even a TV tuner. Also radio, software defined receiver. Even CEC is being emulated there. VIM2M, that emulates the simple memory-to-memory processing device. There are some upcoming patches being made by Mauro that improve it quite a bit. It basically emulates a scalar or a pixel format converter. VIMC emulates a complex camera pipeline. There too there are improvements planned. And then there's the latest one, that's the VI codec, the virtual codec driver to emulate the codec and encoder, encoder and decoder, both stateful and stateless. We had recently several, let's say, embarrassing regressions when we made some patches, pushed some patches to the kernel. That could have been easily called if we had some regression tests. We have a compliance test that is continuously improved. And what we basically wanted to do is to create a media script that would just run the compliance test for all these virtual quality drivers. Again, because of the complexity, it's difficult to test your driver. And these compliance tests, they test all these corner cases. Make sure that all the fields that you are supposed to return in structures that are actually properly filled in and you didn't forget anything. And it's actually more strict than the specification itself, because it checks what should be done. And sometimes the specification is more relaxed due to legacy drivers. But this is really meant for new drivers. So new drivers should really do the best quality that you want, that you can do. It's also very useful, as I mentioned, for when you're developing documentation and making a new API. You also write a compliance test, because it's everything, anything is not quite right. You will very quickly figure it out. Our fairly new is that there is a fuzzing checker from Google and several drivers have been added. These virtual drivers have been added there. In the beginning we got a whole pile of book reports out of it, but most 80 percent around, about 80 percent have been fixed. For the remaining 15 percent we have patches that need some more attention. And occasionally there's, I think there's one or two new ones that appear. I haven't looked at that yet. So this has been very useful. I'll do the resources then. I have a very quick demo of the test scripts. API documentation, there is a version that I maintain that contains the Google specification for codecs. Since it's not mainline yet, I build it myself. For easier reading, easier to read than the patches themselves. Git repository, for the Cedrus staging driver, there is a test utility to test it from bootlin. P4Utils, that contains compliance test. Oh, mailing list, the RSE. We're always looking for volunteers to improve the virtual drivers. Since they're virtual you don't need special hardware, so you can run it on any PC or virtual machine or whatever. It's quite an extensive list of projects from just a few days to a few weeks. If you're interested, let me know. So I have a little script. You have to run it as root. This tests all the media drivers. So first is it unloads all the existing media modules and then loads the virtual drivers. Hopefully I can avoid that in the future. The main reason is that the video numbering, video zero, always has to be the same device at this moment. That's why I need to clean it. And then it's running with VFRAC compliance. It's testing all the very extreme modes. It's testing it with blocking mode, with unblocked mode select, testing DMA buff as well, single planar, multi-planar. It's doing about 1700, so it's pretty quick actually. It doesn't take too long. So there's 1700 plus tests. And this is not yet including VI codec. It is currently, there are no failures at the moment. This is the latest kernel master branch from us.  I know what they are. Someone is working on at least a few of them. So this should really be zero as well. It will be, I promise. And I've done this earlier. So this is the full test. This includes CEC. You see that up there? CEC tests. But CEC tests, as I mentioned in my talk earlier today, CEC bus is 40 bytes per second. It's extremely slow. And if it emulates CEC, including the speed, or lack of it, so doing the CEC tests take a fairly large, I think this whole test probably takes about five to ten minutes. I haven't timed it. But you can see that this is close to 2000 tests. I hope that this will either be included in kernel CI and or I'm doing a daily build of our latest master, making sure that it compiles for a large set of architectures. I would really like to, at the end, do a run on the virtual machine to test whether everything is okay. But I need some time to figure out how to do that. So with that, questions. That's one year of eofilinux development, at least part of it in 20 minutes. No questions. Everything clear? Ah, look, thank God. I'm using the time-stamping for referencing the reference, but how do you manage the memory for the reference when you're free then? It's right. So memory, usually you allocate memory beforehand. No, let me rephrase it. You have a request buffer step that the buffers are created. The actual memory for a buffer can come from outside, but internal structures for the buffers are created. They basically, those buffers, they mapped once they acute. It checks if it knows about the buffer already, the buffer memory. If not, it will map it. If that's it stays mapped the memory until you explicitly free all the buffers. So internally, you always know that given a time-stamp, it belongs to that memory and you also are guaranteed that that memory stays. The only exception would be if you completely free all the buffers, but then you stop streaming anyway. Or if, and that would be the case for, for example, a DMA buff, the same buffer, internal buffer structure gets a new DMA buff file script. And in that case, you, you actually release the internal information. You disconnect it. So we, we keep track of that internally. Yes, Vivid and VIM2M and Vycodec is being worked on. No more questions? Okay, thank you.


Okay, we've talked a little bit about the chords you would use in playing a blues piece. Now we're going to talk about the scale you might use initially when you are improvising over a blues piece. And we would use what's called a blues scale, and in this case the B-flat blues scale sounds like this. Okay, the notes I just played are the notes for a B-flat blues scale, and you'll notice we started on B-flat. We played the minor third of the B-flat scale, which is D-flat. We played the fourth note of the scale is E-flat. We played a flat five, which is F-flat. Yes, on the keyboard it looks like I'm playing the E-key, because I am, but it's still, in theory we're going to call it the flat five, so it's F-flat, then the fifth of the scale, which is F, a flat seven, which is the A-flat, and that brings us back to the B-flat. Now if you use that pattern, one, flat three, four, flat five, five, flat seven, and one again or eight, starting on any key you can play a blues scale on any key, but in this case blues and B-flat scale are those pitches. Now in the piece blues by five we can use those notes in any combination to play an improvised solo over the chord changes of blues by five. So take a listen to this. I've got an accompaniment track that we're going to play with that, and I'll play a solo for you just using the blues scale. Courage you to experiment with that, and the neat thing about the blues scale is really there's not a wrong note. You can use any of those notes in any combination when you're playing a blues piece and you can solo over it and feel pretty confident about it. Now we're not going to always do that when we're playing blues pieces, but that's a great place to start, so I'd encourage you to experiment with improvising using the blues scale on blues by five.