At the end of the last lecture, I tried to motivate why in a realistic material context we have to deal with dynamically screened interactions. So today I would like to explain how we can do dynamical mean field simulations for models with dynamically screened interactions. And in the next lecture, we will then introduce some extension of the dynamical mean field formalism which also requires us to solve problems with dynamically screened interactions. So let us consider a Hubbard model which has a dynamically screened interaction. This is our model, like this model with hopping T and the interaction is frequency dependent. So in a Hamiltonian formulation this means we have a coupling to bosonic modes with characteristic frequency omega and this produces this frequency dependence in an action formulation. It just means we have a retarded Coulomb interaction. So if we map this now to the impurity problem in the interaction formulation, we just have an impurity system which has a retarded onsite interaction. So basically one correlated site in a non-interacting bath which is represented by this hybridization function and the interaction is now itself retarded.  U of tau is just the Fourier transform of U of omega. So the impurity action now has the following form, usual hybridization term, usual chemical potential term and then we have a retarded interaction which is of the following form, times U. So the screening does not distinguish between spins. So the long range interaction, the retarded Coulomb interaction also acts between the same spins. So we can write the interaction term in this form where the total density is just n up plus n down. And as I sketched yesterday, the typical interaction in the frequency space looks something like this. At high frequency we have a high value U bare and then at some frequency called the plasmon frequency there is a strong reduction of the interaction to some screened value U screened. So this is the real part of U of omega. And so we can separate this into a sort of static frequency independent contribution U bare and sort of screening contribution which is the rest.  And this U tilde of omega now goes to zero at high frequency.   And this one goes to zero at high frequencies.  So U, that's just a shift. And then if we go to the time domain we will find that this constant value in frequency will give us a delta function contribution in time. So an instantaneous repulsive interaction corresponding to the bare value.  So U of tau is then of the following form, U bare delta tau plus U tilde of tau where this is sort of the repulsive bare Coulomb interaction.  So then the interaction we have to treat as the following form in the time domain. So it's a beta periodic function here zero minus beta plus beta. This is the time axis. So we have a delta function contribution with strength U bare. It's this one.  And that is this contribution. And that should be compared to a simulation where we just take the screened static value. Very often up to now people have just said, okay maybe these are very high energies. We don't care what happens at these high energies. We just take the static value here. And then the description would be one which has the following interaction. It just has a delta function like interaction with the reduced screened interaction like this. So that would be the conventional sort of static description in terms of the screened interaction. But now we want to treat the full problem where we have a very strong instantaneous repulsion from the high frequency component or high frequency limit and then a reduction of this interaction from an attractive retarded component which describes the screening effect of the environment. And so in the following we will also use spectral representation of this retarded interaction. So this is a kind of bosonic function. It is beta periodic. So we can write it as follows. You can write U tilde of tau in terms of the imaginary part of the frequency dependent U as minus 1 over pi is infinity to infinity d omega. And then imaginary part of U tilde of omega. That's a spectral density and then this bosonic kernel e to the minus omega tau e to the minus beta omega plus 1, minus 1. Then we can also use the symmetry of imaginary part of U to split this integral into two parts. And then we can combine these two and just write integral from zero to infinity d omega.  So that's the relation between the imaginary part of U of omega and U of tau. And we will use this expression in the following. Yes? Here? Yes. You are wondering what this is? Yes. So if you would study a Holstein model where it just has one bosonic mode coupling to the electrons, your frequency dependent interaction would look as follows. You would have basically a pole at the boson frequency. And then if this is your U bare, it would have basically a pole structure like this. So that would be the effective retarding frequency dependent interaction from a boson with energy omega zero coupling to your electrons. And so now in reality you have sort of a continuum of bosonic modes in a certain energy range and then it smears out this pole and you get sort of a smeared out version of this pole structure. So for what you are saying in the following, it doesn't matter how... I mean, this function can be anything, just an input of the calculation. You put in this in a basically tabulated form and use it. So now I would like to explain how we can easily extend this algorithm on the color algorithm which I introduced yesterday to these types of retarded interactions. So I showed you these segment configurations and the only thing we now have to understand is how we can compute the interaction contribution for this type of frequency dependent or retarded interaction. So let me write the interaction term once again.  So this we now have to evaluate for some given segment configuration where the total density is an up, plus and down.  All right, and now we just plug this in and evaluate this formula. Then we get the following from this delta function.  We also have contributions and up squared and then down squared. And then we use the thermionic property that n squared is n. And again, the delta function then gives us a second contribution U of half integral d tau n up plus n down. So basically these are the contributions from n up squared and then down squared.  We have the contributions from opposite spins and we have contributions from the same spins. Yes, sorry. So let's draw our segment configuration. This is the time interval. We have up and down. And suppose we have some segment here and here. Okay, this term corresponds to this overlap contribution which we introduced last time with the bare interaction. Okay, so this is this U bare times the length of the overlap. That's this first term here. This term here is basically a shift of the chemical potential by U bare half. So this is like a chemical potential contribution and this we can absorb into a shift of mu that takes care of this term. And now we have a retarded interaction between up and down electrons. So that would be something like this. So we have say tau 1 here interacts with some tau 2 here. That would be this term. And finally, we also have sort of intra-segment interactions of electrons in the same segment like this. So that's this contribution. Okay, so this one would be, for example, n up tau 1 U tilde tau 1 minus tau 2 and down. And now we have to integrate over all times in these segments. So let us split up this contribution into the contribution of all pairs of segments for all sort of intra-segment contributions for each segment. So to write this in a general way, we now introduce a name for each segment. We call it say the segment number i is denoted by i. Then we can, for this inter-segment contribution, we can just sum over all pairs of segments in our configurations. So this is the sum over all k1 different from k2. And then the integral over segment k1, the integral over segment k2.   And that is one half sum over all segments k. And then the integral of both times over the same segment like this. So this would, what we call the kind of inter-segment contribution, that would be the red guy here, would be the intra-segment contribution. And now we have to evaluate these double integrals. And that is easy if we know the twice integrated function u tilde. Then we can easily evaluate the double integral. So let's assume for the moment that we know it, and that it has specific symmetries, which we can assume by properly choosing the integration constants if we do this double integrals.  This basically means that we want a function which has the same properties as the retarded interaction. It's beta periodic and symmetric.  And then we can easily express these double integrals in terms of this function. For example, let's do this double integral here. I define the start and end point of segment number one. And so we want to evaluate this double integral. And with the help of our function h, we can express these as follows as minus h of tau one end minus tau two end plus h tau one end minus tau two end plus h tau one end minus tau two start plus h tau two tau one start minus tau two end minus h tau one start minus tau two start. So that's very elementary. And if we draw again our segment configuration, the one which I just erased, we now see that this contribution can be sort of considered as an interaction between the end points of these segments. For example, this would be tau one start, tau one end, tau two start, tau two end. So we have an interaction tau one end minus tau two end. That's something like this. And then tau one end minus tau two start. That's something like this. And we have also this kind of interaction. And this would be minus h of tau one end minus tau two end. So these are the input segment contributions. Now let's look at the intra-segment contribution. This we can also evaluate in a similar manner, tau just from tau start to tau end. And then the same tau start, tau end that we can then write as follows as minus two h of zero plus h of tau end minus tau start plus h of tau start minus tau end. And if we use the symmetry property of this function, we can write this as two times h of tau end minus tau start because h is even. And so then we obtain the following. We obtain h of tau end minus tau start minus one half h of zero minus one half h of zero. And this we can graphically represent as follows. This is tau end minus tau start. And then we also have sort of a loop here, which is minus one half h zero. And similarly for this segment, we would have an interaction line like this and a loop. So that's the evaluation of these double integrals. Then if we combine the contributions, basically these lines from all segments, we get the following interaction energy from the retarded interaction.  So this s is a sine factor, s i is plus one, if the operator at position i is a creation operator and it's minus one if it's an annihilation operator. For example, here I probably just made a mistake because I don't know, it's okay. Yeah, for example here you see that this line connects a creation operator and an annihilation operator and it has the opposite sign from this line, which connects an annihilation operator to an annihilation operator. So depending on what type of operators we connect by these lines, we have a different sign here. So that's the interaction contribution and we can rewrite it a little bit if we want as follows as minus sum over all pairs and these sine factors and then h of tau i minus tau j minus h of zero. And you can check that basically because of cancellation effects from these signs, only each segment contributes in the end one factor h of zero and that gives them n times h of zero in the end.  We just have to figure out now what is h for some retarded interaction and so we have h, the second derivative of h is the retarded interaction u tilde and this we can represent or write in the spectral representation as this integral over omega from zero to infinity of the imaginary part of u tilde of omega and then this cosine hyperbolic function omega times tau minus beta half divided by sine hyperbolic omega beta half and now we just have to basically integrate this function twice and since it's written here as a kind of in Fourier space it just means divide twice by the frequency so each integral gives a division by omega so we basically have to now divide here by omega squared and that gives us the final formula which is that h tau minus h of zero which appears here in this weight is one over pi integral from zero to infinity d omega then imaginary part of u of omega divided by omega squared and then the difference between two cosine hyperbolic functions is like this so that's the explicit form of this function and this we can in principle just read in and tabulate in our program and then this determines these contributions to our weight which is then easily evaluated so in the end we can basically treat arbitrary frequency dependent interactions at almost the same computational cost because evaluating these lines is very cheap compared to for example manipulating the determinants of the hybridization matrices so it's basically for free we can treat these retardation effects so here I should say that this formula is valid for tau between zero and beta and then it is an even function of beta and the beta period it can even function and so this brings us to one slight subtlety which we still have to properly take into account namely this function h minus h of zero has a slope discontinuity at zero because of this symmetry so it looks like this here zero beta minus beta it's basically a function which looks like this and so the formula h double prime is u is only valid sort of between zero and beta but not at this point the first derivative has a discontinuity and the second derivative will give us a delta function because of this symmetry so at this point this relation is violated and now we have to correct for this violation of this relation so basically now the first derivative of h at this point has a jump and the second derivative has a delta function of zero whose weight we can compute from here the weight of this delta function is basically two times the first derivative at zero for two times h prime at zero plus that's the weight of the delta function and so let's calculate two times h prime of zero plus from this formula that will give us two times one over pi an integral from zero to infinity e omega imaginary part of u tilde omega over omega times minus one so that's the weight of this delta function and now if you look at this formula maybe it reminds you of the Kramos-Kronig formula which relates the real and imaginary parts of a complex function so then you can recognize that this is nothing else than the real part of u tilde at omega equals zero so the static part of u tilde that's basically by using the Kramos-Kronig formula so what this means is that if we use this h function we have to subtract the delta function contribution with weight real part of the static value of u tilde and so what was this static limit of u tilde so if we remember the picture so we had this shift by u bar so the static value is u screened minus u bar so that is minus u screened minus u bar delta of tau so the total instantaneous interaction therefore becomes the following so previously we have just the u bar term but now we have u bar plus this u tilde this real part of u tilde at omega equals zero and that if we use this relationship just gives us u screened times delta tau so basically what this does if we properly take into account this slope discontinuity contribution it just means that if we calculate the overlap here we have to calculate it with the screened interaction rather than with the bear one and that takes care of this so this now becomes u screened times the length of the overlap okay so then we are basically done and we know how to calculate the local interaction of a given segment configuration so the weight is exponential then we have the overlap contribution now with the screened interaction instead of the bear one then we have the shifted chemical potential also actually with the screened interaction times the length of the segments and then from the retarded part of the interaction we have this sum over all operator pairs the sign, a sign to each operator whether it's a creation or an annihilation operator and then this h function h of tau i minus tau j minus h of zero where we have the explicit expression for this h function this is basically the imaginary part of u divided by omega squared times this cosine hyperbolic function so the Monte Carlo sampling proceeds in exactly the same way as before except that we replace the bear interaction by the screened one shift the chemical potential and we have to add these sort of non-local interaction lines between all pairs of operators which we can explicitly evaluate with this formula and which is quite cheap so meaning if we insert the new segment here like this then basically whatever operators are around we have to compute all possible non-local interactions with these new operators like this but that's as I said is actually a cheap thing to do it's not really slowing down the simulation in any significant way so that's all I wanted to say about the algorithm so if you have questions about the algorithm you should ask it now how it would look like yes so if you want to represent this in a Hamiltonian form it would look like as follows so the local part of the Hamiltonian would be u times n up and down minus mu n up plus and down and then you would have a coupling to an infinite set of bosonic modes of the type say g lambda n up plus and down times v dagger lambda plus v lambda plus some lambda, omega lambda so this is an oscillator with frequency omega lambda and then you couple the electrons to these bosons via this type of coupling and basically the g lambda would be related to the imaginary part of u so this is more or less your imaginary part of u at the frequency omega lambda because now if you have such an electron boson system and you integrate out the bosons you will precisely get this kind of retarded or frequency dependent interaction but it's relatively complicated to think about it in terms of Hamiltonian so it's much nicer to work with the action where all these bosons are integrated out and you just have a retarded interaction in the imaginary time but physically this is really where it comes from I mean yesterday I sketched a little bit this constrained random phase approximation where you do the down folding and these bosons more or less the particle hole excitations of electrons into higher bands which produce these sort of bosonic modes which couple with a specific coupling strength and have associated energy which is related to the separation between the bands basically if you have this is your low energy theory which you are interested in now you have some high energy band and you can do this kind of transition that will produce some bosonic excitation with an energy say omega lambda like this that produces your screening of the Coulomb interaction of this particular energy the P-lambda the P-lambda should there be an extension of the electron of the band you are considering some modes you are not considering having? Yeah that sort of this separation into low energy and high energy screening modes which I discussed yesterday so in principle both right so for the fully screened interaction you would have also the low energy excitations within the band like this but in the if you want to compute for this low energy theory you should actually exclude these processes otherwise you double count these processes because in the solution of the impurity problem you explicitly create this kind of screening contributions but if you compute the fully screened interaction you also have to add these okay so then I would like to move on to the next topic which is how to define a dynamical mean field formalism for problems with long range Coulomb interactions yes or you want to stop now so maybe I can more or less get started and then we so the next topic is trying to devise a dynamical mean field formalism for models with long range interactions and as we will see is that this also leads to a formalism with dynamically screened interactions and the formalism is called extended DMFT and has been developed actually in various different contexts for spin systems for various types of systems by different groups and this is a DMFT formalism for models with especially non-local long-ranged interactions and then as an example we will discuss the so-called u v Hubbard model u is the onsite interaction v is whatever intersite interaction the Hamiltonian is the following we have the usual kinetic term the usual chemical potential term and then the onsite interaction as in the Hubbard model and now also an interaction between different sites where this n here is the total charge n i is n i up plus n i down and these angular brackets we denote the nearest neighbor pair so we take here just as an example the nearest neighbor interactions but this can in principle be anything so the new term is this non-local Coulomb interaction so it will be interesting to see how we can treat such a term in a DMFT approximation which is based on a local impurity problem but the first step is to rewrite this in an action formulation we will work with the action that's easier and first let's write the action for the lattice just this lattice model so we use a Grasman variables and then the action can be written as follows integral over the imaginary time of well some kinetic term that's the kinetic term written in the action formalism and then the interaction term plus u i n i up of tau and now i down and the interaction which we can write as a general v ij and n i tau nj of tau and now for this specific model with nearest neighbor now hopping and nearest neighbor interaction we would have that t ij is minus t times delta ij so only nearest neighbor hopping and this v ij would be v times delta ij so interaction v only between nearest neighbor sites but in principle it can be anything, it doesn't matter now the first thing is to slightly rewrite the interaction term so we write this term here as follows as u half sum over all sites and then n e up plus n e down squared minus u half sum over i n e up plus n e down so that is again using this property that n squared is n for fermions we can rewrite the interaction term like this and so this becomes again a shift of the chemical potential and here we have the total n this is n i squared and so we can now combine it with this long range part which is also written in terms of the total density on a given site so that's the reason why we rewrite it like this then we find the following expression we call mu tilde if we want this shifted chemical potential and here I have now written a v tilde and this v tilde in our case of the nearest neighbor interaction nearest neighbor hopping is just u times delta ij that's the on-site interaction plus v times delta for nearest neighbor interactions and so if we are on a square like this we can write down the Fourier transforms of the hopping and this interaction matrix easily so if we only have nearest neighbor hopings the Fourier transform of the hopping matrix gives us a epsilon of k which is minus 2t cos kx plus cos ky and similarly if we only have nearest neighbor interactions we can Fourier transform this v ij tilde and this gives us a v tilde of k which is u from the on-site interaction and then plus 2v also the same cosine okay now the interesting part starts and maybe we will then really go through this in detail after the break but now we want to map this to a single-site problem and in order to do this we have to first decouple somehow the long-range interactions and that we do by Hubbard-Stratonovich transformations and this transformation now replaces the inter-site coupling by the local coupling to the Hubbard-Stratonovich field and then if we have only local couplings we can sort of map the problem to a single-site effective model which has also a coupling to such a Hubbard-Stratonovich field and then we are back to a single-site description with coupling to a Hubbard-Stratonovich field and that is more or less a bosonic field and then we have a dynamically screened interaction and the screening now comes from this Hubbard-Stratonovich field and that's more or less the extended DMFT formalism and I think we probably make a break now and then after the break I will explain in detail how this decoupling works I don't know if I should repeat the break now Yes, okay, thank you


Can everyone hear me Yeah, great. I think there was supposed to be one of the organizers here to announce me But I don't see anyone and it's time. So I guess I'll just start Yeah, so when I started looking into the sync IO I noticed that a lot of people thought it was quite Complicated to use and especially to get started with it So I gave this talk the soft title do you need to be a wizard to use it and the answer is a little bit It's not that hard, but when you're just getting started there are quite a few problems that you'll run into and Well concurrency is intrinsically complicated. So it's not anyone's fault, but there are a lot of new concepts there are things you need to learn that are not just standard Python and It has a very long history all the way from the back porch to 2.7 to the new keywords in 3.5 the syntax has changed a lot and the things you do have changed a lot So when you try to figure out how to do something and there's not one Way to do it. There are different ways in different versions and they will change quite a lot and sometimes the documented best best practice you will find is maybe deprecated now so Yeah, that can be a problem and if you don't know the internals some things will just be weird but you get used to those quite quickly and Fortunately, the code is quite easy the async.io code and did have a squad easy to read so you can look at the internals and figure those out and There's a lot of incompatible terminologies like Core routines are generators except when they're not generators and not all generators are core routines and You know, you have API's like future that Implements the same API, but it's not you cannot really use them interchangeably and you'll run into trouble with those things and Since it's so new there's this bottom-up approach to learning async.io. So you want to It's very common that you start Understanding first core routines that were first generators core routines and have to understand all the internals before you actually start writing code with Async.io So my idea was try to simplify this and try to go through how I've learned async.io and how I started writing things and the errors I Run into and see how other people can start writing code with the sync.io from this and I work at a web agency and I came to async.io because sometimes the things we have to do are Concurrent in nature and I've noticed that some of my co-workers just started going to other languages mainly go and say Well, this is too complicated to do in Python I'll just write it and go create a service and then we can call the service to do To solve this problem, but I Realize that Python just added this whole thing to do Concurrency that has changed the way concurrency is supposed to be done in Python And we were not really using that so I tried to see well Can we do this with the sync.io instead and some of the problems? We're trying to solve our things like creating a back-end service for a server for real-time with server scent events or web sockets and That would look something like this. This is a very simple echo server But it's not very far from something you could actually use to run a web socket server We could for example try to fetch data from several APIs concurrently Which I think is something that is very common Especially when you're doing service-oriented architecture You may have tons of APIs that you want to get data from and if each one of these takes about a hundred milliseconds And you want to query five to ten you might end up spending a whole second just waiting for IO Well, you could do this concurrently So this is quite easy to do with a sync.io. It would look something like this You don't have to pay too much attention to this example. So I look at them in more detail later You can do some sort of pipeline processing which is very similar to before Instead of just fetching the URLs you may want to process them afterwards. Maybe you want to put them in Redis Maybe you want to parse them as JSON and all these things you can do asynchronously and You could copy a site into disk again fetch a bunch of URLs then lock a file and write to that file or You may want to have a complex data structure that you want to have in memory and you want to access but you wanted every now and then this gets loaded from a store somewhere and And that would look something like this. This is just a sample code, but Yeah, it would work kind of in the same way and So as you can see all of these examples follow kind of the same pattern and that pattern is the concurrency model that we're going to be using and There are several models that you could use and different languages implement Different ones and they're normally a combination of different concurrency models and So I think I always basically a formalization of how we should do concurrency in Python Now I think there are two parts to concurrency models The first one is how we write and understand our code and I think this is the most important one this is the one that we should focus on and You can see that as an API if you wanted to write an API for concurrency You could come up with something like this. You could execute something in the foregrounds execute something in the background wait for a result or Schedule execution for things later and you can write some functions to do this And this is just like a pseudo code of something We may want to do if we wanted to have this concurrency model And if we did that concurrency model that would yield programs that look a certain way now a sink I will give us programs that look in the async IO way and that will be Unified model of how we do concurrency in Python so the other part of a concurrency model is when the code runs and It can run traditionally in threads and processes who can run in different machines if you use something like MPI Or you can run it on event loop and event loop is a big part of what the Async IO model builds upon and I'm not gonna look too much into this part of things because I don't think it matters that much I'm gonna look into the other one that is how is the code gonna look and how we're gonna understand that that code is correct And that's what we want from the point of view of concurrency and then these things might be interchangeable later so Let's start looking a little bit to Python's answers to these questions but before we do that I want to tell you what a sync programming in Python is not and That is just one thing and it's a solution to your guild problems. So if you Are writing code that runs a lot of Python spends a lot of time in the CPython interpreter You're still gonna run into the global interpreter lock and this is not gonna save you from it There are some projects like the galectomy and pi pi STM that uses software transactional memory That are trying to fix this in different ways, but you know, we'll have to see what they come up with but for now if you're gonna do something that is in That the guild is getting in the way then you'll just have to go and Run them in different processes like we've been doing for years So, okay, let's get started. Let's write some code But before we do that I wanted to Discuss this one just to get it out of the way and we said the things can run and threads and processes and That's fine. We can create thread pools and with thread pools We can then tell them to execute a process and it will look something like this But we can also run things on an event loop and this is the one that is new if we want to run something an event loop we first need to know what an event loop is and Anybody that's worked with JavaScript probably knows this and many of you probably do but in case you don't it looks something like this It's just a loop that will run essentially forever and it will pick a task and based on some policy and ask that Ask that task to be executed and that task will execute it until it decides to suspend execution and As you can see there's nothing here that is preemptive like with threads the task will execute and eventually that task will have to tell The loop that it has returned from function so that it can continue running. Otherwise, the loop will be blocked right there Once the task suspends execution, then it can reschedule that task decide if the task has a result and he wants to do something with that Result, maybe we want to store it. Otherwise, we just put that task back in our queue and select it again when we look back and If we want to use an event loop in Python, it looks kind of like this You have a function and you can define the function with the same keyword in Python 3.5 and when you Define a function that is supposed to run asynchronously that is The sync keyword tells the function that it's supposed to run asynchronously So that function will not execute unless a loop calls it and then we have the await keyword to tell the loop when it's supposed to suspend execution So then we get an event loop and we tell it to run that function until it completes and that actually works and If we wanted to specify we want to run these things on threads instead We don't write a synchronous functions and we take a normal blocking function that we want to run on a thread and We have this utility called running executor that will actually allow us to just run that function And it will return something that is a synchronous and that the loop knows how to handle So this gives us a flexibility of being able to write our code write code That will look the same way and then choose whether it's gonna run in threads processes or in an event loop and have everything Control through this event loop abstraction Now let's start writing some a sync code. What do we need to know? We need to know at the a sync and await syntax Which if we want to have a function that is Not a synchronous that just blocks then that's fine We just write a regular function and we call it whenever we need it if we want to have a function that runs an event loop And the can suspend execution then instead we use the async keyword and that function will not run by itself Inside that function we can use a wait and a wait will just it's very similar to a return Except when the function comes back it will continue execution from there So we tell the loop that we will suspend execution until some other Function or awaitable has finished and in this case it will be suspend execution or that executor where we're running the blocking function and What one of the advantages of this is that this way we can specify Explicitly when our code will suspend when it will execute So if we were to run this with threads the operating system will tell us when the function can Stop or when it can't so we have to be a lot more careful in terms of synchronization Whether here the function will continue to run until that function decides by itself that it will stop The other building block that we will need with this is futures. So a future is basically a wrapper That can you can check it has three methods you can check if it's done You can check if it has a result or you can add a result to it So when you have a future and you check if it's done It normally isn't unless you have added a result to it then if You ask for a result and it doesn't have it it will yield an exception. Otherwise, it will you can set a result and then you will get a result and Now we now we know this background information. So let's try to get a loop and start running things So we have a loop we want to create it run it stop it and schedule things on it so to create a loop we use a sink.io get event loop and that's it now we have a loop and It's not doing anything, but we have one Now if you want to run it you can just call run forever on it and it will do as it says It will run forever unless there's an exception inside the loop in which case you would just throw the exception Now if we wanted to stop a loop and I think this is a little bit confusing a Loop can only be stopped if it's running. So if you have a loop and you want to tell it to stop you will have to Ask it after you ask it to be marked to stop you need to ask it to run once Otherwise the loop will not be considered stop So if you want to stop a loop that is not currently running you have to ask it to run forever and it will Run once and then stop Which is confusing is the type of things that you have to look at the internals to understand how it works, but Most of the times you don't have to do this Instead what you do is something like this you want to run things on a loop instead of managing it manually So let's say we have this function that we want to run Something it just prints a bunch of numbers and it waits one second between each number So you ask the loop to run and to complete and that's it it prints as we expected it to it's just a little bit boring So instead what we would want to do it. We've been talking about concurrency is run something more like this we say well we Want to have two of those functions running concurrently and if we do that We can use this ensure future that will just create a future and attach it to the loop and We write an extra function because we only know so far how to run one thing So I say okay go loop and then when we execute that that would actually stop very quickly and give us an error And the reason this is happening is because we created these two futures, but we didn't really nobody's waiting for them So when the route lock the loop runs It runs the go function and it knows that will it will stop when the go function completes So that function creates one future it doesn't wait for it creates the second future doesn't wait for it And then it completes so the loop stops running and if you're debugging I think I owe you will get this nice helpful messages So instead what we can do is just a weight them and then we use a weight and we tell the loop well I want to run these two things, but I want to wait for them don't and go until they are complete and if you do that it will work But if you look at the result you can see that it's actually running one task first and the second task afterwards So it's not really concurrent. It's just sequential and you might as well just have written regular functions so instead what we can do is try to figure this out and Go back to the specification and see that we have a synco that as completed So we can create this Task that we want to run and then we ask a synco to give it back to us in a for loop in the order They complete and when one of them completes we get the future we wait for its result and Then this works except it's really ugly It's this doesn't really look very pitonic and it's very complicated for just running a couple of things concurrently So what we have instead is this I call them aggregators or the iter tools of a sync IO Where we can do things like a sync IO dot wait, which just will take a lot of core routines or a list of tasks and Not return until all of them have completed so if we run something like that, we're actually running concurrently now and It still looks quite ugly, but we can Realize that if you if we're waiting for a sync IO though wait Then that means that a sync IO though wait is an awaitable and that means that we can run that directly on our loop And then it would look something like this and this looks a lot more like an API We want to work with create a bunch of tasks and ask the loop to wait for all of them and execute them concurrently and Okay, I wanted to make an aside here and Remember the internals and how they can be complicated. We have also this function for a loop to run once instead of running Forever or until something completes and we shouldn't call it's an underscore function, but it's there So you call it and then you can see that you can run a loop step by step So whenever you're debugging a sync IO, you can just start running your loop step by step and printing stuff And you'll see what's actually happening Okay, but those are quite boring functions, they're just printing stuff So let's try to build something that retrieves some results so I changed the function a little bit now it's a countdown and Now it just multiplies the numbers as it goes down and returns a result So we create our list of tasks and we wait on them and we assume that the tasks are gonna have some information for us When we get back Thing is what we get is these coroutines and they're coroutines that have already executed So they're not very useful. We can't really get any information from them So we can try to go back and say well I remember futures were something that I could use for knowing the results of things that haven't happened. So We create in less futures instead and run that and yeah, now we have this task and the task is just Is Just a coroutine wrapped in a future that the loop is using Internally and that's good. We can access things from tasks. So we Iterate on over them and that's it. We get the results there. It's just we made this the googly again and so Instead what we can do is go back to our aggregator list and the sync IO which they're not called aggregators Or by the way, that's just the name I give them and We have this one called gathered that does very something very similar to wait Except it will actually return all of the results and since the loop returns whatever The function was running returns then we can just print those results and it does the same thing as before except It just looks a lot better now So, okay What have we learned so far? We have a sink and a wait we can create a waitable functions whose execution can be suspended and With a wait we can suspend until another waitable returns We have a loop that we can create we can ask it to run we can ask it to run something or run forever And we can stop it and we have this functions that allow us to wait for things so that we can run many things Concurrently and at the same time get their results after or just make sure that we wait for all of them So, okay, that's good with that. We can probably start writing some a little bit more realistic code and we can Write something like this. This is an example as I said before just fetching a bunch of URLs You want to get those URLs and you want to get them all at the same time Or concurrently and then just gather their results and you could do something like that and this works it will Fetch all the URLs and all the URLs will be there at the end The only thing is that Maybe we don't care about all of those URLs So we can try to do something a little bit more complex and say well, maybe I just care about the first URL to return So let's write something that wants to solve that so we can write the first completed and It's very similar to before so we just went back to this as completed idea that has a time out and We just wait for those For those core routines to complete and when the first one completes we just return that and that's it and this looks like It would do the work except when we execute it we get a lot of errors and The reason we this is actually returning you can see the HTML up there Then was supposed to be returned but then we're getting all this test that have been destroyed and loop that hasn't been closed and The thing is with I think I owe you have to do explicit cleanup You're supposed to close your own loops and clean up your own mess So let's start just by closing the loop manually so that it will internally clean up some stuff for us and that looks good Except at least we got rid of one error But we still have this test pending and the reason those tasks are pending is because if we Yes, yeah, if we if we go back to our original code, you can see that We're returning after the first task completes. That's not the one We're returning after the first task complete So the other ones are still in the loop and they're supposed to be executed But we're never waiting for them. No one is waiting for those tasks. So what we can do instead is Something like this we say, well, we're gonna execute do the exact same code Except we're gonna wait for all the tasks before this function returns and that works that gives us the right result The only problem is that this takes as long as the longest wait And if some APIs are slower than the others you get some they're returning one millisecond and some they return 100 milliseconds Then you're gonna get the first one. That's the result you're returning But then you're gonna have to wait a hundred milliseconds until all the other ones complete So instead what you can do is Something like this, I guess you start working with it. You write another functions I well now I want to cancel all my tasks and then within your cleanup you You first run your function that returns what you want great and on cleanup before closing the loop you Cancel all the existing tasks And yeah, that works It's not nice. It's not very bitonic anymore. I think so instead what you have is well if we go back to the API and We use wait before and wait actually has other parameters like a time out and return when and we can tell way to return when the first test completes and What wait returns is actually two sets of futures one for the test that have been completed and one for the test that are pending So we do something like that for the pending tasks. We ask them to cancel and for the completed one we just Get the first future and return that and this will work This prints what we want and get us the result we want the only issue is that this example is very well matched to what wait does so Yeah, if we wanted to return not the first completed, but maybe the first two then this doesn't do the work anymore So we would probably have to go back to something like cancel all or have to write our own function that deals with these things but it's good to have this The separate options that we Yeah, we can either do wait and then deal with the pending ones or we can just Write our function and then cancel the other ones Or we could cancel and manually somewhere else But yeah, so whenever we're working with the sync IO the Important thing here is we have to do cleanup and it's not always trivial and We have to close everything whenever we use Sockets readers executors everything has to be closed manually. We shouldn't expect the framework to close things for us And we should know where our tasks are So, okay Gonna Make this a little bit more fun before we end and now we have this first First completed API and let's say this is a very critical part of our code. We normally query hundreds of APIs and it's very important that we just get the first one quick and We might have something else in our stack that is not Python and wants to use this so let's just build a server that returns this and So for this we just we're gonna use the same code as we used before and Then we're gonna try to get a server that serves first completed So we go to our documentation we get the this is basically the Easiest server you can build this right from the documentation of slightly modified and Right now this is an echo server. It's like, okay So this runs in a sync IO it runs on a loop and if we want to Build our own function into it. We can just do something like this instead where This is exactly the same as the echo server. We worked on before we just changed this code here in the middle That is just calling first completed and waiting for it so And this works you can run this code and he will Execute he will run a server you can do net cap to it and you and the good thing is that it will Right right just from the example and adding a function there You will have a working server that executes and can Handle a lot of requests But if we wanted to do instead of using just plain sockets do HTML We can start looking at a sync IO libraries and look for example to into AIO HTTP again, just the same this is the Basic AIO HTTP server just hook our function there and We have a completely a synchronous server that is returning while running fetching things concurrently So, okay Is this an overkill? Yeah, probably it's a We don't really need to build a server for this But it's good that we can and we can do it while running everything within one thread in a loop while using the same Framework that we will use for all concurrency in Python so for Other use cases, maybe something we would want to do instead is just run the loop on a thread and we can do that too we can have our synchronous code and That that is our normal Python that is Python code that will be running and we can put the loop on a separate thread and then assign things to it for it To run him and then get him back Things get a little bit more complicated here But this will work and you just have to get your Make sure you clean things up and make sure you always call for the loop to run thread save and There's a lot much to a sync IO that I'm not gonna have time to go into there are low-level API is there's Specifically queues for synchronization. I are quite useful and you can build your own protocols for your servers And there are a lot of cool hacks and you should go check out the internals there if you go to get a hot python That's in KO you have the actual code there that is very easy to read and that's basically the whole implementation and Out of the external stuff for a sync IO the one that they wanted to name in itself is the possibility of creating Alternative event loops we can do quite can use this framework while using Event loops that do not come with a sync IO and one of those is UV loop which Yeah would use us a Lot of things internally, but it claims to be very very fast and if you Look at their benchmarks is up there faster than no JS and about as fast as go and This is something that you can just plug in you can run any of the code We've been writing just change the loop and use UV loop instead and it will work with a separate loop so The the flexibility that this gives us is that we can write the same code and understand the code using this framework But at the same time we can change the internals that will run it in different ways and change how it will execute and There are a lot of third-party libraries for pretty much everything you want So if you want to start playing with the sync IO get some of these and start writing some asynchronous code Thank you


This lecture is part of an online commutative algebra course, and we will be giving some examples of the spectrum of a ring. So given a commutative ring R, we defined a topological space called its spectrum in the previous lecture, whose points were just the prime ideals. And the first example, we're going to give answers to the question, why is the spectrum of R called spectrum of R? Of course, there's the traditional answer, it's called the spectrum of R because it is the spectrum of R, but the other reason is given by the following example, let's take R to be the algebra over C, generated by A, where A is the matrix in M, N over say the reals, it could be the complex numbers. Now a matrix as a spectrum, which is just its set of eigenvalues. And the name spectrum for the eigenvalues of a matrix sort of came from, it's related to the fact that in quantum mechanics, the spectrum of an element or an atom is something to do with the eigenvalues of a Hamiltonian operator. So the word spectrum is actually related to the word spectrum in physics in a rather indirect way. Anyway, so this is a commutative ring and there's a finite dimensional algebra over, I guess it should be the complex numbers, finite dimensional algebra over the complex numbers. So here the spectrum A is the set of eigenvalues, which are given as follows. If A has minimum polynomial X minus alpha one to the N one, X minus alpha two to the N two and so on, then the spectrum is just equal to the set alpha one, alpha two and so on. On the other hand, this ring R is just equal to C of X quotient out by the minimal polynomial. And the prime ideals are easy to figure out. In fact, in this case, the prime ideals are all maximal. So the prime ideals are just generated by the elements X minus alpha I. So the spectrum of the ring generated by a matrix in the sense of ring theory is the same as its spectrum in the sense of linear algebra given by the set of its eigenvalues. So that's roughly why a spectrum is called a spectrum. Next, we recall that the spectrum of Z was given by something like this. So here we have a generic ideal zero and it had points two, three, five and so on on it. And now what we're going to do is to kind of decompose this a bit. So we can look at the spectrum of the ring Z where we adjoin the element a half. And the spectrum of this looks almost the same except it no longer has a prime two because we sort of killed it off by adding a half. So here we have the prime three and five and so on. On the other hand, we can also look at the spectrum of the ring Z two where we will explain this later when we discuss localization but we'll just give a quick ad hoc definition. It's a set of all rational numbers M over N with N odd. So what this does is we're sort of adjoining a third and a fifth and so on. So it kills off all these ideals here. All we're left with is the maximal ideal two and of course the generic ideal zero. So what has happened is that we can sort of almost decompose spec of Z into two subsets. They're not quite this joint because they both contain the generic ideal. So one of them contains all odd primes in the spectrum and the other contains just the prime two. So what we would do is we use this one if we wish to focus on the prime two. On the other hand, we use this one if we're getting fed up of all the problems caused by the prime two and we just want to eliminate. So this sort of kills the prime two. So these are sort of two opposite things we can do. We can either focus on two or we can eliminate it and you can see this by looking at what you're doing by looking at the spectrum. We're either removing the point two from the spectrum or removing almost everything else. There's also a map from this ring here. So there's a map from the ring Z to the ring Z over two Z where and this gives a map of the spectrum in the opposite direction. So if we draw the spectrum of Z over two Z, it's just a point and you can think of this point as being embedded in this spectrum here. So we really can write the spectrum of Z as a disjoint union of this set here and this set here if you want. Next let's take a look at the spectrum of the Gaussian integers and there's a map from Z to the Gaussian integers. So this induces a map of the spectra going the opposite direction. So we can draw the spectrum of Z a bit like this. So here's the generic point and then we have all the various primes two, three, five and so on. And similarly the spectrum of Z of I also has a generic point. So this is a principal ideal domain. So its points correspond to prime ideals of Z of I and we can figure out the prime ideals of Z of I by decomposing the prime ideals of Z. So two sort of equals one plus I squared up to units. So we get just one prime ideal here was three decomposes as three, it remains prime here but five decomposes as two plus I times two minus I in the Gaussian integers. So what happens is we kind of get two different primes here two plus I and we'll have to make this branch out. We get a second prime two minus I and similarly we can carry on like this. So we've got a prime seven and we've got a prime 11 and we've got two primes corresponding to three plus two I and three minus two I lying above prime 13. So you can sort of see the decomposition of primes integer primes into primes of Gaussian integers as a homeomorphism of topological spaces from the spectrum of Z of I to the spectrum of Z. And you can see that the fibers of this homeomorphism kind of correspond to the decomposition of primes. If you remember from number theory, primes of the form one mod four break up as a product of two primes. So the fibers two elements and primes of the three mod four just break up as one prime and the prime two ramifies which sort of corresponds to the fact there's really a sort of branch point here. So the spectrum of a ring gives you a sort of geometric way of visualizing decomposition of primes in algebraic number fields. Now let's look at the spectrum of the polynomial ring in two variables over an algebraically closed field. And this starts to get a little bit complicated.  And these are going to correspond to the point X, Y in C squared. And then we have some prime ideals of the form F where F is an irreducible polynomial. And then we've got a generic point which is just the prime ideal zero. And if we draw pictures of these, first of all, we just get points for each point of C squared. So here I've drawn C squared and you have to think of C as being one dimensional. So this point corresponds to the ideal X minus alpha, Y minus beta. So this is alpha, this is beta. So we get a lot of maximal ideals corresponding to points. And of course, as I said before, the topology is a bit funny because the topology isn't the same as C squared. The closed sets are just finite unions of points. But then we get some extra points in the spectrum corresponding to these prime ideals. And these points are going to be one dimensional points. So this is the point corresponding to F. So F might be some polynomial in X and Y. And so we think of this as a point but it's also one dimensional in some meaningless sense. And what I mean by this is the closure of this point contains various other points corresponding to maximal ideals. So the point X minus alpha, Y minus beta lies on this point here. If F of X, so if F of alpha beta equals naught. So we can think of this point here as corresponding to the curve given by the polynomial F equals zero. And finally, of course, we have a sort of generic point corresponding to ideal zero, which in some sense is two dimensional. So really huge point because its closure contains everything else. So the closure is everything. Such a big point that its closure is an entire complex plane. So as usual, it's impossible to draw the spectrum in Euclidean space because it's none house store from the best you can do is this funny sort of picture. Well, instead of a polynomial ring, we can look at a power series ring. So what does the power series ring X, Y look like if we look at its spectrum? Well, here it's got a closed point. And this time it's only got one closed point, which is the ideal generated by X and Y, which sort of corresponds to the point naught, naught in C squared. Then we've got some prime ideals, which are none maximal, again, corresponding to F being an irreducible power series. And of course, we've got a generic point zero. And if we draw a picture of this, we've got a closed point here and we've got prime ideals. And these sort of correspond, you can kind of think of these as being infinitely small curves through this point. So this might be a curve F of X, Y equals zero in some sense, except that since F is a power series, it's not really a curve. It's just a sort of ghost of a curve. And then there's a sort of generic two dimensional point. I guess I should have used colors that more distinct than blue and green, but it's too late now. And you can think of this spectrum as being contained in the spectrum of the ring of polynomials in X and Y. Because if you look at the ring of polynomials, X and Y near zero, well, it's got a point at the origin. And it's also got various one dimensional points in some sense passing through it. And it's also got this generic two dimensional point zero. And if you look very closely near the origin, you can see it sort of looks a bit like that. So the sort of ghosts of algebraic curves look a bit like zeros of power series and so on. So there's a, so the homomorphism from the ring of polynomials, the ring of power series gives a sort of homomorphism from the spectrum of this ring to the spectrum of this ring. There's also an example of the spectrum of the ring of polynomials in the integers, but I already made an entire video about this in the algebraic geometry course. So what I'm going to do is to try and put a link to it to the video I made about this.  And if you click on, you can see a different video I made about the spectrum of this ring here. There's a fair amount of overlap between my commutative algebra lectures and algebraic geometry lectures because commutative algebra and algebraic geometry are almost the same, but never mind. Anyway, so instead of that, I will give an example of the spectrum of a Hecker ring. And Hecker rings come from the theory of modular form. So what I'm going to do is I'm going to explain the entire theory of modular forms, which normally takes an entire lecture course. And I'm going to try and do it in about two minutes. So here are two modular forms. There's the modular form E12, which is 691 over 65520 plus sum of sigma 11n q to the n, which is equal to 691 over 65520 plus q plus 2049 q squared and so on. So sigma 11n is the sum of the 11th powers of the devices of n. And another modular form is delta 12, which is q times product over n greater than 1, one minus q to the n, all to the power of 24, just q minus 24q squared and so on. And these are examples of modular forms of level one and weight 12. And if you want to know what that means, you have to go to a modular forms course. And there's something called a Hecker algebra acting on these and the Hecker algebra is spanned by Hecker operators Tn and the Hecker operators Tn act on this two dimensional space spanned by modular forms as follows. So Tn maps E12 to sigma 11n E12 and it maps delta n to tau of n times delta, where I forgot to say this is the sum of n of tau n q to the n. So these numbers are Ramanujan's famous tau function. So we've got a ring, satis generated by Hecker operators acting on this space and these Hecker operators are given explicitly like this. And what I want to do is to work out what is the spectrum of this Hecker algebra? So the spectrums of Hecker algebras are of great interest in number theory. For instance, Andrew Wiles' proof of Fermat's last theorem involved a very detailed study of Hecker algebras acting on modular forms. So it's a sort of generalization of this example. And what I want to do is to draw a picture of this. Or first of all, we need to work out what the Hecker algebra is without actually mentioning modular forms. And the Hecker algebra can be defined in a more elementary way. It's a subring of z times z of all numbers of the form Sigma 11n tau n. So it should be generated by these. Now, if we draw z times z, here I'm going to draw it in the very naive way where we just draw a point for each element. So here's nought nought. And it certainly contains the identity element, which is one, one. And the question is, does it contain any other elements? Well, it obviously does. I mean, it contains Sigma 2 tau 2, which is somewhere way over there. And so since it contains the point 11, in order to find the remaining elements, we want to know are there any congruences? Sigma 11n is congruent to tau of n mod big n. And so if there's a congruence like that, then it will restrict the pairs mn in the Hecker algebra because they will have to satisfy this congruence. And there is one found by Ramanujan, which says Sigma 11n is congruent to tau of n modulo. This is probably not a number you would guess, 691. For example, if n equals two, Sigma 11n is 2049 and tau of n is minus 24. And you can check 2049 plus 24 is three times 691. So this is a very famous congruence. And I want to draw a picture of this congruence. So the Hecker ring consists of all elements in z times z, where first of all, we have the elements n comma n, and then we have the elements n plus 691, n, it's n plus 691, n and so on. And generally we have all numbers mn with m congruent n mod 691. So the ring sort of looks like lots of numbers like that. I haven't drawn this to scale because this should really be 691 units over there. And now we want to know what is the spectrum of this ring? So here's the ring R, it's just a set of pairs in z times z, with these numbers congruent to 691. And we've got a map from R to z times z, to z times z, which just maps the element mn to m in this z and n in that z. So we have a map from the spectrum of z, union the spectrum of z to the spectrum of R. So we've got two copies of the spectrum of z. So here they are, there's two, three, five, here's we've got two, three, five and so on. And here this number is a prime ideal and it corresponds to taking mn to m mod p. So we're mapping m to z over pz for some p. And similarly, this would correspond to mapping mn to n modulo p where p is two, three or five. And the question is, do these two lines meet somewhere? And you can see they actually do meet at the prime 691. Because if we're mapping this to m modulo 691, it's the same as mapping it to n modulo 691 because of Ramanujan's congruence. So the spectrum of this ring looks like two lines, which are copies of the spectrum of the integers, except they meet at this 1.691. So this is a sort of picture of Ramanujan's congruence. So this gives us a way of visualizing modular forms. If you draw the spectrum of the Hecker algebra, then you find each modular form kind of consists of a line inside the spectrum. And these lines sometimes meet. And all these meeting points correspond to congruences between modular forms, which number theorists get very excited about. Incidentally, this is something called an Eisenstein prime. If you come across that phrase, an Eisenstein prime is roughly where two of these lines meet and one of these lines corresponds to the so-called Eisenstein series. I just finished by mentioning there's a funny relation between Ramanujan's congruence and the leach lattice of all things. So Ramanujan's congruence can be deduced from the following formula. It says 691 times theta lambda is equal to 65520 times e12 minus delta. Now this is the theta function of the leach lattice, which is sum over lambda in the leach lattice of q to the lambda squared over two. And all you need to know is that since this is counting things, all the coefficients of this are non-negative integers. So this 691 here is what is giving the congruence between these coefficients here. So in some sense, the reason why these lines meet can is related to the existence of the leach lattice, which is rather famous because Conway discovered that its automorphism group was a new sporadic simple group. So there's a sporadic simple group hiding in this picture here. So the next lecture, we'll be discussing properties of the topology of the spectrum of the ring. So we've seen the spectrum of the ring has this rather bizarre, non-Hausdorff topology in general. So I want to explain how you deal with non-Hausdorff topologies.


Hey, this is Maria John at CoinTelegraph channel with the rundown of our hottest news stories from across cryptocurrency this week. Analysts are more confident than ever that Bitcoin will stay above $5700 USD today as prices continue surging towards new highs of $6000 USD. Technical data from multiple sources indicated no slowdown in Bitcoin's charge to retake the historic price level, having increased by more than $1,000 since Monday. While BTC is no stranger to correction, the short-term predictions by well-known investors are flowing. On Wednesday, Mike Novogratz told CNBC he would not find it surprising if one Bitcoin will cost $10,000 by April 2018. Recent reports indicate that blockchain technology will be able to create safer and cheaper medication. Medication is complex to surge and often supply chains can be mixed up, opening the door to counterthitting. This results in huge amount of unsafe medication coming to market. Without appropriate levels of supply chain transparency, users are put at risk. The likes of Pfizer, BlockRx and NanTech have sought to solve these issues through the creation of blockchain systems. Systems that track the supply chain of medication from pre-manufacture all the way to the patient's hands. Such a system would provide a meaningful way to protect consumers and create rapid transparency and compliance for state and federal regulation. Both that, the simplicity of auditing and clear controls means far less expense on protecting consumers. This will lead to lowering consumer prices and increased confidence regarding purity and source. Yitzhakano, CEO of Japan's largest cryptocurrency exchange Bitflier, has stated that conservative Japanese investors have started to go all-in on Bitcoin and cryptocurrencies. He explained that the vast majority of investors in Japan, South Korea and China are extremely conservative in their investments and skeptical towards allocating capital to new asset classes. However, over the last three years, Bitcoin and cryptocurrencies have become mainstream assets in the Japanese market. Legalization of Bitcoin as a digital currency and the authorization of cryptocurrency exchanges help trigger this change. Consequently, Japan has evolved into the largest Bitcoin exchange market in the world. Currently, the Japanese market accounts for 61.23% of global Bitcoin traders, more than twice the trading volume at the US market. The only fear that Bitcoin users can have is that governments will act on their own self-involved fear. This is according to cybersecurity expert John McAfee. He believes that Bitcoin's only trouble is government trying to stop it. Cryptocurrencies were created to solve the problems that plagued banking and they are looking to cut out the middleman banks and government regulators. The lock at the central exchange put the governments in a bind. They make their income by taxing the movement of money. Just imagine if everyone uses Bitcoin, the government doesn't know what your income is and more than that, they can't tax it. Eventually, this will touch every nation's debt but honestly, it doesn't matter what they do. There is no law that will stop Bitcoin and other cryptocurrencies because technically, you just can't, it's impossible. Despite this hugely polished sentiment, that doesn't mean they can go about unregulated. McAfee admins the space needs regulation particularly when it comes to the ICOs. While street complicated relationship with the blockchain technology continues, live bands have set their position both for and against the new technology with some banks like Bank of America already pursuing patents. One of the major straggles these financial platforms are having with the technology is around the issue of privacy. Traders need to keep their position a secret in order to keep competitors out of the loop. Blockchain technology provides immutability but it doesn't provide complete security and anonymity. Key factor is for enterprise-level financial adoption. However, zero knowledge proves that we recently enabled on Ethereum following the network's Byzantium upgrade represent a new way to have both anonymity and immutability on a single chain. So will it or not? The latest to join the league of Bitcoin haters is Kenneth Radoff, a professor of economics at Harvard University. In the recent blog post on Guardian, he wrote, is the cryptocurrency Bitcoin is the biggest bubble in the world today or a great investment bet on the cutting age of new age financial technology? My best guess is that in the long run, the technology will thrive, but the price of Bitcoin will collapse. He acknowledges that certain governments like Japan have taken the lead in regulating and accepting virtual currencies, but he has tributed this to a desire to become the global leader in fintech. He foresees most governments ignoring Bitcoin when used for small anonymous transactions but will act against it once Bitcoin becomes more widely used. For the very latest news and events from the crypto scene, check out contelegraph.com and subscribe to our YouTube channel. If you would like to ask me a question or share your story with us, just leave a comment right here and see you next week!


Hey everyone, welcome to Higan Iruthil and don't mind the volcano exploding in the background. This is actually weird volcano in the snow. So anyway, this is our new event, Field of Snow. This is your typical resource generation event. You have here a mini-game for a high score, then let's just go back. You just have to clear these stages here and to get the reward. So there are first clear rewards because of these guys. Then you will be generating this currency moving forward. You can farm these stages up to deep sleep and as you farm these currency, there's also another level here that's going to be opening on April 28th. So Travelog is additional rewards for these cryo crystals. And let's move on to what we get for mining or going through the event. So the important thing about the shop is you want to prioritize really what is important to buy. So I'm going first with, you know, I think this is just a repurposed color of a skin. This is a free skin, of course. So I won't say that you have to get this. This would probably your last if you have something extra. But the important things to buy here are the Star Siegell, of course, Inspiration Siegell for the play, Universal Soul Essence is also a must. You smile, especially for SSRs is a must so that you can increase not the level, the tier of your place. This is also nice because this you can eventually increase to for your SR rarities. And this is important as well, the Rageant Pure Potion because this is being used to level up from level 70 to 71 and onwards. So if you don't get this, it's really hard to level up. So once you're done with this, let's go to the rares. The rares are basic items that you get in the store. I suggest that these guys you mine the last because you get this in exchange anyway. So again, I would suggest you finish this off, probably get the skin, probably get these eventually if you want. But again, those are this one, the Rageant Pure Potion, Muse Guide, Muse Smile, Universal Soul Essence, Inspiration Siegell, Star Siegell are the most important to go after first. The rest is just going to be secondary. So that is it guys, so happy farming in this stage. So thank you very much for staying this far. Take care, stay safe, this is The Warden and I'm out of here.


Hey everybody, Matt here for Layton Sports Cards, ripping 2022-23, Panini Daunras Optic Basketball, five box break, number one, random teams. Here we go. We will randomize eight times. Good luck. One, two, three, four, five, six, seven, eight. Robert D. Down to Joshua G. Eight times on the teams. One, two, three, four, five, six, seven, eight. Grizzlies. Down to Thunder. Drink those down a little bit. Robert D. Grizzlies. Andrew M. Cabs. Kevin L. Pelicans. Stephen H. Warrior Spurs. Colby C. Lakers. Joshua G. Celtics. Stephen H. Nuggets. Andrew M. Knicks. Joshua G. Hornets. Brian M. Pacers. Richard D. Blazers. Colby C. Magic. Stephen H. Bucks. Dominic P. Nets Clippers. And Pistons. Joshua G. Mavericks. T-Wolves. Stephen S. Jazz. Chintatsi. Bulls. Brian M. Rockets. Dominic P. Sons Raptors. Scott A. Heate. Dominic P. Hawks. Mitchell H. Wizards. Nathan E. Sixers. Andrew M. Kings. And Joshua G. Thunder. All right. Get these results posted. There's a link to your results. Let's get it going. Up after this, we have Impeccable Basketball. Two spots left. Just the Blazers and Kings. Actually, I'm going to send that out really fast here. Here we go. Bari Walker rated rookie. All-card ship. And this is Nick's. That is Nick's. Nick's. Nick's. Nick's. Nick's. Nick's. Nick's. Nick's. Nick's. Nick's. Nick's. Nick's. That is Fast Break Prism. Rookie Otto Trevor Keels. Nick's. Jay-Sean Tate. Fast Break Prism. Jeng. And Kendall Brown. That is Rated Rookie. Fast Break Prism. Raining Threes. Luca. Bari. Kobe White. This is Purple Disco. 99. Very espacely. What's up, you see? How you doing? David Roddy rated rookie. Davis Merton. Silver Trey Young. Elite Dominators. Trey Eason. Rated Rookie. Steph Curry. Silver. And Devin Vasell. Is it Vasell or Vassal? Yeah, we just had a... Roger Stalbaugh. Downtown Gold Vinyl. One of them. That was awesome. M-Parton. And Cade Cunningham. That is Blue Disco. 49. All-Stars. Bulls Suns. Derosen and Booker.  If I can find them.  And for any duels. Unless it's an auto relic or a one-of-one. Left one, two, three, right. Four, five, six for the duels. That is four. Dules go right. Dules go right. There we go. There's AI. And Vince Carter. Dules go right. That'll go Raptors. And Otto Porter Jr. Disco for the Raptors. Jalen Williams. Rated Rookie. Bones Highland. That is Red Disco. Steph Curry. Beverly. It's on this one for the recap. I'll just let you know if there are any parallels that you're doing. Yeah, that was awesome. There's Jabari Smith Jr. Rated Rookie. Walker Kessler. Jonathan Caminga. Disco. Last pack. Patrick Baldwin Jr. And Victor Oladipo. Blue Disco. There's lights out. Lamello. As we saw, Blazers and Kings. Two to go. On impeccable full case pick your teams. That's up next. After that we have Bowman Jumbo. Last I checked we had five to go on that. Full case pick your teams. Keegan Murray. Rated Rookie. And this is Hawks. Fast Break Prism Otto. Lenny Wilkins. Shea Brissette. Disco. Jaden Ivey. Keegan Murray. Rated Rookie. Disco. Nice one Kings. Kennedy Chandler. Malcolm Brogdon. Red Disco. And Luca Disco. Jalen Williams. Rated Rookie. Bobby Portis. Dominators. Devon Booker. Nicola Jovic. Nicola Jovic. Buddy Hield. And Ben Simmons Disco. I saw a thing posted somewhere about how Jovic and then like the Heat and Nuggets both have a guy that's not old enough to have a celebratory celebratory drink when the championship Kenneth Lofton Jr. rated Rookie and Jalen Williams. That is rated Rookie Purple Disco to 99.  Magnet for you. Desmond Bain. Raining Threes. And Gary Harris Disco. Jay Liddell. Dennis Schroeder, Red Disco, and J. Nivey Rookies. Christian Coloco, Rated Rookie, Tyrese Martin, Rated Rookie, and Lonzo Ball, Disco. Bryce McAllen's, Steandre Aitin, Purple Disco. Shontae Murray, box number three. Ochi Agbaji, Rated Rookie. And Magic, that is fast break, Rookie Auto, Caleb Houston. And Orlando, Kevin Love Disco. Deiland Terry, Caleb Houston. Rated Rookie Disco. Marjan Bochan, Brandon Ingram, Purple Disco. Cameron Johnson Disco. Isaiah Motley, Rated Rookie. Cameron Johnson Silver. And Donovan Mitchell, Raining Threes. Lake Wesley, KT Silver. Bones Highland, Disco. Jabari Walker, Rated Rookie. Sorry, there we go. Pink Disco, pounds to 25 for the Nets. Yolkich Lights Out. We'll go here. Jane and Kate Cunninghamily, Dominators Disco. Austin Reeds Disco. Musa, is it Musa Diabati? Diabati. Seth Curry, Purple. Yolkich. Eason David Roddy, Rated Rookie. Dasumu Disco. Feel free to correct me on pronunciations if I've mispronounced anything. I haven't ripped.  Nemhard. Malcolm Brogdon, Red Disco. Dean, box number four. Be White. There's Peyton Watson. And, nice. Rockets. Bass Break, Rookie Auto. Jabari Smith, Jr. Congrats, Rockets. Go Houston. Kenyon Martin, Disco. Bison Daniels. Jaylen Williams, Rated Rookie Disco. Thunder doing well. As we saw the Blazers and Kings, Blazers and Kings left for the next break. Both teams are on sale. Blazers marked down to 269 and 229 on the Kings. Wendell Moore, Jr. Jamal Murray, Purple Disco and Moses Moody Disco. Johnny Davis, Rated Rookie. LeBron James, Silver. Anthony Davis. I don't know where the buttons are. Scotty Pippin, Jr. Rated Rookie. Robert Williams, Silver. And Dylan Brooks, Disco. Rated Rookie. Andrew Wiggins, Blue Disco. Andrew Wiggins, Red Disco. Jah. Raining Threes, Sadiq Bay. Disco. And Kyrie Irving, Disco. Christian Brown, Rated Rookie. And Andrew Nembard, Rated Rookie. Purple Disco. Nice one. That is to 99 for the Pacers. Jah Star-Jazing. Trevor Keels, Jake Laravia. Bobby Portis, Disco. All right, last pack. There's Paolo Bencaro, Rated Rookie. Oh man, that has a print line going all the way down. It looks like it's scuffed into the card there. We'll send you an empty box and wrapper. Magic. Jimmy Butler, Gold Disco. This is four of ten for the Heat. Nice one, Miami. Steph. There we go, let's finish strong here. Coro. There's Jalen Williams, Rated Rookie. And Thunder. Rated Rookie. Fast Break, Prism, Auto. Jalen Williams. Oh, this is the other Jalen Williams. This is Jay-Line, not Jaylene. All right, well, that's not confusing. Austin Rivers. That'll take a little getting used to. I'm sure it did for every breaker. So, Walker Kessler, Rated Rookie. Benedict Matherin. Rated Rookie Disco. Donovan Mitchell lights out. Shabari Smith, Jr. Rated Rookie. Isaiah Stewart. Purple. Herter. Um, oh, this is the other studio. That one's changing. Patrick Baldwin, Kenyan Martin. Yannis. Mark Williams. Malcolm Brogdon, Silver. Jalen Brunson. Disco. Peyton Watson. Evan Mobley. That's Blue Disco. Trey Young. Dyson Daniels. Damian Lillard. Elite Dominators Disco. Jason Preston Disco. Wendelmore, Jr. Rated Rookie. Malcolm Brogdon. Red. Kawhi. Two packs to go. Johnny Davis. Scotty Pippin, Jr. Anthony Edwards. Disco. Do a quick recap here at the end. Max Christie Rated Rookie. Bobby Portis. Blue Disco. Man and Bogdanovich. A quick recap here. A couple of nice parallels. A few nice parallels here. We had Pacers. Rated Rookie. Purple Disco. Andrew Nempart. 99. Jimmy Butler. Gold Disco to 10. Heat. It's, uh, Jalen Williams. Rated Rookie. Purple. Thunder. That's the other Jalen Williams to 99. We mag that. I was thinking the other. I was thinking Jalen with an E. And then Thunder. Rated Rookie. Disco. Otto. Jalen Williams. Magic. Fast Break. Rookie Otto. Caleb Houston. Hawks. Otto. Lenny Wilkins. Nick's Rookie Otto. Trevor Keels. And Rockets. That is Rookie. Fast Break Signatures. Jabari Smith, Jr. That'll do it for the break. Thank you everybody. Unpeckables up next.


5 Simple Ways To Motivate Your EFL Students Regardless of what you are teaching, the outcome of a learning process for students will be affected deeply by how motivated they are. Motivation can initiate students to pay more attention, care more about what they are learning, and increase the time and efficiency on the mission at hand. In an EFL course, motivation will most likely be a crucial factor in how fast and well a student may learn English. There are many ways to motivate students, and it may take different ways for different students to get them motivated. One huge motivator for an EFL student will be discovering and knowing the purpose for taking a course. Important ways a teacher can motivate their students could be through inclusion, engagement, and encouragement. A teacher could also motivate students by giving them goals to achieve and help each learner feel a sense of importance. With these key points and techniques of motivation, students will, in the end, care more and perform better. Knowing the Purpose Perhaps the best motivation is knowing the purpose for taking an English language course. The purpose may vary from student to student and each student may have more than one purpose for taking an EFL course. The purpose could be to plan for an international career or to be able to travel and communicate in English-speaking countries or to be able to attend an English-speaking college in the future. Nevertheless, understanding why the students are taking the EFL course will help them understand the importance of the course. Engage the Students After the students have a sense of why they are taking an EFL course, there are many ways a teacher can motivate their students. The most prominent motivator that I learned from this course was engaging each student. One way a teacher can engage each student is by grabbing their attention through questions and addressing each student individually. If the students feel the attention of the teacher, they will more likely want to pay more attention as well. Show that you care. Another motivator that the teacher can use is getting the student emotionally invested. This can be done by getting to know the students, caring for the students, and establishing a positive student-teacher relationship. When you can relate to the students and adapt a lesson or activity so that the activity involves relatable subjects, they will likely be more motivated to participate in the activities. Encourage your students frequently. On top of being relatable, it is important to encourage students more than you reprimand them. Study and encouragement go a long way to help a student's mindset and willingness to learn. Displaying enthusiasm and excitement toward both the students and the subject will rub off onto the students, and they may feel more enthusiastic and excited as well. Set easy to reach goals. Lastly, a huge motivator for some students is reaching a goal. A teacher can set goals both for the class and individual students. This is not to discourage students when they do not meet a goal, but it is to keep them focused and forward-thinking and give them something to work towards. In my experience as a student, goals helped me achieve more than I would have otherwise. Are you ready to teach English abroad? The motivation for EFL students can come from many ways, starting with having a sense of purpose for why a student is taking the course, and continuing with many different techniques that the teacher can use. Regardless of how a teacher chooses to motivate students, creating the motivation can have a huge positive impact on each student. Speak with an ITTT advisor today to put together your personal plan for teaching English abroad. Send us an email or call us toll-free at 1-800-490-0531 to speak with an ITTT advisor today.