Okay, welcome to this short tutorial within the introduction to Python programming course. This tutorial is real quick just to show you how to navigate quickly within JupyterLab. So my assumption is that you have been on the GitHub page for this course, GitHub.com slash web artifacts slash intro to Python. And then when you scroll down, I assume that somehow you figured out how to run the installation most likely with the Anaconda distribution. So you will somehow go to anaconda.com slash distribution and download a version of Anaconda. For example, the latest one here with Python 3.7 for your operating system, Windows, Mac or Linux. And after you install that, what you will do in, for example, in Windows, you will look for Anaconda navigator in your stop menu. It should also exist in the Mac somewhere. And then you will open something that looks a little bit like this. And this is called the Anaconda navigator. And you have several applications that you can open from there. And then you will open the JupyterLab application. And then in your web browser, something should open that looks somewhat similar like this. And then I also assume that you figured out how to download the materials for this course with the green button, clone and download. You click on Downloads as SIP. And then you download the SIP file and unpack it and put it in some folder that you can find here. And then just now I want to quickly give you a run-through of how you can navigate notebooks. So first, let's start simple. Let's start with an empty notebook. You see here, it says Notebook, it's a launcher. In case you don't see this, you can here click on the plus button, then you will get a new launcher, but you only need one of them. So what the launcher does, it shows you what type of documents you can open in JupyterLab or create. And for now, you will, of course, create a notebook with Python 3 in it. So note, I have also Julia installed. You probably won't have it. So you will just have one button here. You will click on this button. And then a new empty Jupyter notebook opens. And now the question is, how can you navigate inside the Jupyter Notebook? Well, for example, you can just, you know, let's, I just click here with my mouse. And so you see that there is no focus inside the code cell. In order to get into the code cell, you can, of course, always click in. And then what you see is the frame in the JupyterLab here and the code cell within the notebook becomes fluid, becomes highlighted. If I click out here on the outside, then it's gray. If I click into the cell, the cell is highlighted. That's how you know that you're in a cell. And then what you do is, you can write Python code. For example, you can write print, hello world. And now I hold my control key and enter and I execute the code cell. We see a one because that's the first code cell that was entered. So now I haven't, I'm, I'm moving my mouse, but I haven't pushed any buttons on the mouse. So where am I right now? I am still on the cell, right? I'm still on the cell that is highlighted with the blue, with the blue line here on the left-hand side. So now if I click, or if I hold control and enter key again, I can execute this line of code several times, okay? So now oftentimes when you're in a Jupyter notebook, especially when you're reading through the chapters that I provide, you want to execute a code cell and jump to the next code cell or create a new code cell. So that's the, the same application actually. So what, what do you do? What you do is you press shift and enter, and shift and enter does two things. First it executes the code cell and second it creates in this case a new code cell that where, where I can now enter stuff. So I can now say one plus two and now I will press shift and enter again and the code cell is executed and now I have a new code cell and I can say whatever. What can we say? 42, just 42. And now when I press control enter again and again, I can execute the code cell without creating a new code cell, okay? That's important.  Well, the best way is just to hit control and F for save. And what you will see is down here in the middle, it will say, it will say saving completed. So control S and it saves. That's the fastest way. You can of course also push here the, or click the save button here or go somewhere in the file menu. But again, control S for save is a lot faster. So now the thing is this, whenever you open a new notebook, or let's say whenever you open a chapter in the book, what you want to do is you want to reset the notebook. So how do you reset a notebook? So here we see the numbers here on the left hand side that means that these code cells have been executed. So in order to reset everything to zero, so to say, we click on restart kernel and then we say restart kernel and clear all output. And then we confirm that. And then what happens is the Python process in the background is restarted. And of course the contents remain the same, but the code cells are now not executed anymore. And now what I can do is with my, with my mouse, I click into the first cell and now I click, I hold shift and I click enter and I execute the first code cell and I move to the second. I click shift, enter again, execute the second code cell, move to the third, and I do it one more time. And then I end up with a new code cell below it. Okay, so control enter and shift enter are good to know. So now I'm in this new code cell that is empty. And let's say I want to delete it. How do you get rid of the code cell? Well, you have to know where you are. So I'm currently in the code cell. How do I see that? Because the frame of the code cell is highlighted. So how do I get out of it without using my mouse? I just press escape and the highlight goes away. And now I'm still on the cell. I'm still on the fourth code cell, but I'm not inside the cell, I'm outside of it. And now what I can do is I can press the button D for delete twice in a row and then the cell is gone. But you should be careful. There is an undo functionality. Here it says undo. There are several undoes, actually. But whenever you delete a cell, there is a chance that you will lose it forever. So you have undo. Sometimes it works, but because it's in a web browser, you never know. So now I am on the third row. How do I see that? I see it with the blue colors here. And I'm also not in the cell. So without using my mouse, how can I go back into the cell that has the 42 in it? I just press enter. No control, no shift. Just enter, and I'm in the cell. And we see that now the cell is highlighted and the cursor blinks. Now I can delete the 42 and put there, for example, an 87. And let's say I want to go out of the cell without executing it. How do I do that? Of course, escape. Now let's say I want to create a new cell below. How can I do that? Well, whenever you are outside of a cell, that means not in a cell, then you can just press the button B for below. And this will create a new cell below. And now I want to delete it again. I press D twice, and it's gone. And again, I'm not in the cell now. I'm on the third cell. Let's say I want to create a new cell, a new code cell above the 87. How do you do that? I just press A for above, and I have a new code cell. And now these are all code cells. Let me say, let's say I want to change the type of the cell. So you have to know the cells have different kinds of cells. The default type is the code cell, where you can just type a Python. But let's say you want to type English text. How can you do that? You want to create a markdown cell. So now we have an empty code cell. How can I make this a markdown cell? Well, you can use your mouse, and you can choose markdown. And then you see that the brackets go away. And that means now this cell is a text cell. So I can say 87 was a good year. And now how do I get out of it? Well, just control Enter. And now I have text. OK. So let's say I want to get rid of it. How do we do that? Just DD, it's gone. And now let's say I want to create a new cell again above. I create A. And now let's say I want to make this a markdown cell without using the mouse. How do you do that?  You just push, in this case, M, M for markdown. And then the cell becomes a markdown cell. And now I can press Enter to go into it and write text. And then say Control Enter to go out. And now I have text. OK. And let's say I am on a cell. And I want to make it a code cell. How do you do that? When you are on a cell, just press Y. I don't know why it's Y, but Y is making this cell into a code cell. And now, of course, if I go in, text is not a valid text. So I better put there something else. Let's say 42 times 7. And let's execute this. OK. One thing that you want to remember, always remember, the number in front of the code cell once it's filled in tells you in which order the code cells have been executed. Whenever you're doing assignment, or doing analysis in your job later with Jupyter Lab, what you want to do is, at the end of the day, you want to click Kernel, Restart Kernel, and run all. And what this will do is it will run all the cells from top to bottom. And sometimes the cells hang. I don't know why this happens sometimes, but when I see that, what I do is I say Restart Kernel and clear all. And now they're all empty. Let's try it one more time, Restart and run all. And now it worked. So again, because it's in a web browser, I think sometimes something bad happens. And now the important thing is all the cells have been executed in order. That's important. Whenever you turn in an assignment, you want to make sure that whatever code you turn in works without error from top to bottom. Because oftentimes it happens that you create a variable. Let's say it's towards the end. Let's say let's just do that. Let's say I'm now in the last cell. Let's create a new one with B. And let's say I set a variable A to 99. And now what happens is I could go, let's say, to the first or to the second cell and replace the one plus two with A. And now, of course, Python knows what is A. So if I execute a cell, Python knows that A is 99. However, A is set below. So if I now go back and say kernel, restart kernel and run all, I will get an error. And if you get such an error, don't turn in the assignment. You know that you provided a notebook that doesn't work. So always make sure at the end of when you work on a Jupyter notebook just to restart and run all, restart means we forget all the state in the program and run all means we run it top to bottom in a linear way. And that is how we make sure that everything works. So now let's say I want to replace. Let's say I want to change this cell into a markdown cell. I hit Escape to get out of the cell. I press M to make it markdown. I press Enter to get back into it. And let's say I want to write a bold text. How do we do that? I can write this text is, and now I want to write something bold. How do you do that? Double star bold, double star dot. And now you execute it. And now the text at the end is bold. Important, if you now just click back in, this is called formatting. And whenever you format text, you have to execute the cell, even though it's not a code cell. It's a markdown cell, but they still can be executed. So I hit Control Enter, and now the text is bold. So what are the options that you have? If you use single asterisks here, single stars, then you will have a text in italics. And then what you could do is you could say this is a list colon newline dash first dash second dash third. And now let's execute the code cell. And now we can get dots. This is a bullet point list with no order. If you want to order this, we'll just write first as a 1 dot, 2 dot, and 3 dot, and execute this. And now you have a ordered list. So if you want to learn all about what are the formatting options that you have, you will go to GitHub. And they have a tutorial, Mastering Markdown. And this is like a 10 to 12 minute read at most. And then you know all the options. So you can mark, you can form a text in any way. You can create lists as we see. You can enter, you can put in images. You can use quotations that look nice. You can also put code examples in there and some other stuff. So I'm not going over this. You can read this on your own. It's not so hard. And also you would find many, many videos on that on YouTube, I guess. And yeah, what else is there? So good practice. When you, let's say, want to read the first chapter in the book, double click on the first chapter. Now the chapter opens. And what I do is take some time now. And now we see that that's the file just after downloading it from GitHub. So the cells have already been executed. So the first thing I always do when I start reading in the chapters, I say restart kernel and clear all, and restart it. And now what you can do is you can put your cursor. You can basically click with your mouse once here. And now what I do when I read a Jupyter Notebook is I hold my Shift key. And by pressing Enter, I jump, as you can see with the blue mark on the left hand side, I jump through the book without using the mouse. And also, I'm not using the arrow keys. I'm only using the return button. And once I hit a code cell, what that means is a Shift Enter will execute the code cell and also jump to the next one. So this way, you can read the book in a very efficient way without using mouse or anything. And yeah, and of course, if you want to go back, just use the arrow key. These are the basics that you should know about Jupyter Lab. And yeah, you can do a lot more things with Jupyter Lab. I suggest you look for some video tutorials or other online tutorials on Jupyter Lab, or you will just try it out. You cannot really mess anything up. So just try it out. And I think I showed you all of the basic stuff. And yeah, I think this concludes this short tutorial on how to use Jupyter Lab.


OK. So, I would like to thank the organizer for the invitation. And in this talk, I'm going to speak about the local and the functional RG. The local RG is an RG approach developed mainly by Hugh Osborne, while the functional RG is the topic of this conference. The aim of my talk is to highlight and explain the connection between the two approaches. So, let's go fast a moment through the RG theory, because at the beginning I want to give a lot of statements, which are RG statements, which do not depend on the method. And then from where we will arrive, I will start to explain you how the construction of Osborne goes. And then I will make a connection with the standard construction based on the FRG. So, as we know, the RG theory is basically the theory of the flow in theory space. Every theory consistent with the symmetries. And then, once we have an RG approach, we know there are particular theories, which are particularly important, and these are the conformal theories in many cases. They are our fixed points. And once we know them, we know that around these fixed points, we can construct all the linear theory, and usually this linear theory around the fixed point we can approach perturbatively with conformal field theories or many other methods. The local RG and the exact flows, so in this case the FRG, are the only approaches that we know that are able to construct the RG flow arbitrarily far away from a fixed point. So, in that regime that I will call is the genuinely nonperturbative regime. And in particular, when you are able to construct the RG flow between points arbitrarily away from a fixed point, you can also construct the RG flow between two fixed points. And when you can do that, you can access very important quantities like the C function and the A function, and you can use the knowledge about this function to learn about universal properties of the fixed points, which are not related to the scaling region, but to be computed, they need to be integrated along the full trajectory connecting to fixed points. So, then the local RG of Yugoslavl is basically an approach which promotes the scale, the RG scale to be field dependent, position dependent, so it promotes the scale to become a scalar field basically. And then he uses vile consistency conditions to derive some non-trivial relation relating RG quantities. And RG quantities are beta function, A function or C function, and things like zomologic of metrics, and other quantities that naturally arise and characterize the flow arbitrarily far away from a fixed point. While the exact flow, as we know, is based on implementing an exact flow, which can be constructed, for example, along the standard way where we have the Vetterich equation. So, in particular, when the kind of problem that is intrinsically non perturbative is the flow between two fixed points, and in even dimension, one can define two interesting quantities. For example, in two dimension you can define the C function, while in four dimension you can define the A functions. So, these are functions that depend only on the couplings, and they have peculiar properties. For example, if you compute the difference between the central charge, between the UV fixed point, infrared fixed point, you will find the quantity, and this quantity will always be bigger than zero, because basically the central charge, the C function, counts how many degrees of freedom we have, and when we go down with the RG flow, we are burning information, so the number of degrees of freedom will decrease. So, the integrated C theorem is a general RG statement that tells us that delta C is bigger than zero. Recently, there has been a lot of work only in trying to extend this statement to four dimension, where the quantity that we call C is called A for historical reason, but it's basically the same quantity. And then, there is also the question if the flow of this quantity has monotonic properties, and for example, in two dimension, it is possible to prove that under certain situations, the flow of the C function is monotonic, so the beta function of the C function is positive. While in four dimension this statement is still known only at the perturbative level around certain fixed points. So, what I want to do is to try to introduce the approach of Osborne and then also the FRG view on these matters, starting from looking at the effective action in the UV and the effective action in the infrared when I basically follow a flow that connects two fixed points. And it turns out, and this is a characteristic of Osborne approach, but also the approach that I will use, that many RG quantities in RG question are easier to understand if you work on curved space, because even if you are interested in flat space matter theories, if you go to curved space, then many RG quantities start to become couplings in the effective action, but they are couplings of certain operators, which involve the curvatures, so are not present when we go on flat space, but will be present only when I evaluate a certain number of functional derivatives of the effective action. So, they will show up in flat space only when I look at the correlation. For example, one quantity, again the conformal anomaly of the central charge in two dimension will show up only the two point function. Something analogous in four dimension will show up only on the three point function or four point function of the energy momentum tensor. If instead we work on curved space, all these effects will be related to a certain operator, and in general these operators are non-local, because for example the central charge is the coefficient of the polyakov action. Obviously, if I choose a background which is simple enough, like a conformally flat background, then this will automatically introduce another field which is the dilaton, and everything will be local in the dilaton. So, the starting point is to ask which one is the general form of the effective action when I do this co-variantization and go to curved space. So, if this is a conformal field theory, the effective action at the fixed point will be made by one part which is basically the, is viling variant and is the co-variantization of the conformal field theory action, which in principle I know because I know all the correlators of the conformal field theories. And then, and from now on I will work in two dimension, then there is another part which is intrinsically gravitational, so it depends on the curvature, it will be zero on flat space that encodes the conformal anomaly, and in this case it is well known that this action is the polyakov action. So, basically at a fixed point, the general effective action of matter and gravity will be of this form. So, once we know this, we can immediately obtain one important result which is the west domino relation which introduces the west domino action because if now we make a vile rescaling of the matter field and of the metric and we subtract the un rescaled effective action, then the viling variant part will simply go to zero and I just obtain the difference between the polyakov action which is rescaled and this one naturally gives me the west domino action in two dimension and the west domino relation. Something analogous I have also in every even dimension for example in four and six and so on, but for now on I will just stick to two dimension to make the connection clear and simple. So, basically at every fixed point I have this relation that must hold and this is the central charge. So, now the next step is to ask what happens if I slightly deform my effective action away from a fixed point. As soon as I go away from the fixed point all the operator that I use to deform so all the relevant perturbation that I added to flow out will start to flow by themselves and they will have k dependent couplings. But now if I make the difference, so if I just try to ask myself how the west domino relation is deformed or how the west domino relation looks like away from criticality, I understand that what is left on the right hand side is something which will be zero on flat space because on flat space this thing will be zero and it will be the west domino action away from the fixed point. So, it will be a running west domino action. And since I know that when I go back to UV fixed point or to the infrared fixed point I must first of all recover the standard west domino action. I know that one sensible expansion of this running west domino action will be something that involves a running version of the west domino action, the standard one with the running central charge and in particular there is the possibility that the two operators that define the west domino action will be splitted because there is no symmetry that will protect the two coefficients. So, in principle I have two running C function and then I can have many other terms which will be proportional to beta function in the sense that when I go to a fixed point they will be zero. And so here I have everything that vanishes at the fixed point. So, this is the general form I expect and note here that I made the rescaling also of the scale. So basically this is a way to implement the Stuckelberg trick. So, once I did this first step the first question I need to ask is what is the relation between the two central charges? So, again, since when I go back to the fixed point the two central charges must, this part of the running west domino action must recompose the standard west domino action, the difference between the two central charges must be of order of beta. So, it is natural that I parametrize their difference introducing a vector. This is a vector in the space of couplings. And in this way then I will I can rewrite my west domino action having this object here and this other object. In particular later on we will realize that the correct definition for the running C function is actually this shifted combination. So, this is one of the result which is also characteristic of Osborn approach but from a general RG point of view it emerges naturally because it comes from the fact that as soon as I go away from a fixed point the west domino action will break apart and all the coefficient will start to run in a different way. This is the reason why in four dimension we have an A and A tilde and this is the reason why there has been a lot of confusion at the beginning in four dimension when people try to prove the A theorem to really realize which is the right quantity that we should look at the scale derivative to see if the A theorem is satisfied or not. But then there are other terms which are beta terms that they are proportional to beta functions. And one way to understand how this term is or at least how is the first contribution to this beta term is just to remember that as soon as I go away from the fixed point I also have a scale anomaly because I have the beta function and I know that the trace of the energy momentum tensor will contain something proportional to the operator and proportional to basically a quantum scale anomaly and the classical scale anomaly if this is present, if the coupling is not a dimensionless coupling. So basically this shows us and give us a first hint of the general form of these beta terms. They will start with something which is proportional to the dimensionless beta function because these are the ones that vanish at the fixed point. But then there is and there is the operator that is used to the form so the matter part and then there is one power of the dilaton. So we will see this is the first contribution also to the flow of the C function when in a moment we will derive the flow equation for the C function. Then if we go on we see that already by this first couple of hints about the general form of the running waste domain action we come to the situation where we are invited if you want to perform a derivative expansion of the running waste domain action. And in particular we understand that the potential will start with the term linear in beta and proportional to the matter operators. And here is an important point. In all this discussion if we take operators which are primary so which transform in a nice way with respect to the vile transformation I will have that the matter fields enter only the potential part while the genetic part and the curvature part they will involve at the lowest order the C function and this vector which accounts for the shift between the two C functions basically. But in principle I have many other terms which are present at every in the running waste domain action. And how do I determine this? And this is what I am going to answer. I just want to say one thing before. Here I am writing every in terms of the dilaton. In every moment of my reasoning I can eliminate the dilaton by basically writing the dilaton as one over box R and so I will obtain that a covariant expression in terms of the curvature which is non-local. And this will be basically the general form of defective action away from the fixed point. So how do we determine the next terms? So the first thing is to exploit the consequence of the Stuckelbert trick. Because we have rescaled the k in terms with the field so now basically the couplings become space time dependent in a very specific way. And this fact naturally introduces beta function because if now I perform an expansion I see that here naturally I have a term proportional to the beta function of the coupling and here for example I have a term which is naturally the flow of the C function. So once I do this I simply see that my general framework obviously at the lowest order will naturally recall this scale anomaly but if I go on at the next order I see that an interesting structure will start to emerge because I see that new terms in this effective potential for the dilaton are suggested and the coefficients will be proportional to beta functions or to derivatives basically the stability matrix. So if I go on thinking like this and I do the same thing also for this vector omega and for the central charge I start to see that the coefficient of the derivative expansion start to show a nontrivial RG structure that involves a lot of RG quantity which are mixed between the various orders. And then I still have the possibility of having new objects here and this is very important because whenever I have new objects these objects are in principle present and they define new RG quantities. For example now we will and here is the connection with Osborne approach will emerge. I can simply for example the dots here must be filled by something which is of second order in the beta function and since the beta function are bosonic in this case it will be a matrix. So naturally here I will write a bilinear form which involves what we will realize it is the zomologic of metric and so on. So a lot of RG quantities are naturally encoded in this way of thinking. So now I can introduce the local RG because what they set up to now was completely general it was true for any approach because it was just RG ideas. So the idea of Osborne is this one. We have the difference of the we have the wisdom in a relation and we know that we have promoted the scale to be a field so the couplings actually becomes some fields. So the idea of Osborne is that if I have to make an ansatz for the West Zumino relation I do not do the derivative expansion that I was doing before. I do another thing because I know that at the end what I need to do is to construct all possible invariants made out of the dilaton and the curvature. But what the idea of Osborne and the idea which is underline the local RG is that since now I have promoted the couplings to be fields I have to use also the fields. And so I just start to construct all possible invariants and by doing this you see that since you can construct something like this with one coupling index free you are forced to introduce a vector which is the vector that basically we have seen from our point of view before and you are also forced to introduce something which is like proportional has two indices and it's symmetric and this is basically it's a logic of metric. The connection to the derivative expansion is very simple because now if now these couplings are in Osborne approach the couplings are real scalar fields. From the point of view I'm presenting you they become scalar fields because the scale has been promoted in that peculiar way. If I use that fact then for example the gradient of G if now I think that the gradient of G is the gradient of G and the dependence goes through e to the minus tau I see that the gradient I can expand and empowers of ingredients of tau and I find this term while for example this term will give me a contribution like this one and so you see that here we find some of the terms that we already introduced before and then we find some of those terms that I left in ellipses before so quantities which involve RG quantities. So basically the underlying idea of the local RG is this one. We just look at the the form of the West-Zumino relation and we have a natural West-Zumino action that runs and we perform not the derivative expansion but we perform an expansion using the fact that we have promoted the coupling two fields. Ok, now now that we have the general setting we need to find non-trivere relation the way in which the local RG proceed is using the fact that the vile transformation are a billion. So for example for sure at the fixed point this will imply a local an infinitesimal vile consistency relation with this kind of infinitesimal vile transformation but since the vile transformations are a billion also and this property is not related to the fact if I am or not at the fixed point I will have with a modified operator and now involves beta function and variation with respect to the couplings a modified let's say an infinitesimal vile consists of sec condition which is valid also away from the fixed point. So now Osborn idea is just the one of taking the ansatz that we wrote before and we plug it inside here and then we just do the variations and we collect all the coefficients of the operators in monomials of tau and this quantity must be equal to zero and this magically gives some non-trivia relation. I just highlight you one of this consistency condition gives that this combination this equation must be valid and if you want from this relation we realize that exactly this combination is the one that satisfies the CT or M so this is the correct candidate to be the representation for the C function away from a fixed point. This is very nice and this can be also adapted to higher dimension and so basically this idea uses exploit the symmetry of curvature invariance to obtain information about their G and also exploit together with the ability of the vile transformation. The fact is that in this approach up to now we have not explained how to compute the beta function or how to compute examologic of metric or how to compute any of this quantity because it's just a formal reasoning and so it's exact but it doesn't tell us how to construct things. So since now we work in we know the FRG we can also do a further step we can just take a scale derivative of the vestumino running action and this will be we know the right hand side because the right hand side now we can plug in the flow equation and then we know for example that the C function is the coefficient of the biliner term in tau when I go to flat space and so in this way I'm able to obtain a flow equation for the C function. So by combining the general reasoning with the FRG we obtain an explicit constructive explicit constructive relation because we know how to compute C and we know how to compute the betas and what is very important is that the flow of C is induced by matter-delator relation you see matter fields and dilatons and these are only present in the running vestumino relation. I cannot change. So now if I just draw this diagrammatically this is the flow of the C function the curly lines or the dilaton why the standard line is the matter field and then I can just it's very nice because now if I have a truncation I can just where my action runs I just know how to upgrade it to curved space by following what we said and I can compute the C function. And for example if I do this in full generality with the form of the effective of the running it's a vestumino action that we discovered before and we realize that the matter fields enter only in the potential and that the term linear in tau and of a certain power in the matter is proportional to beta function I see that this diagram gives me something which is quadratic in the beta function while I see that this diagram do not contribute because I also have to take only the term goes with p square and so this gives me back this relation exactly this relation because and what is very important it gives me also an explicit construction for the zomologic of metric okay so basically the key point is this one we have a general Rg construction and then at one point we can decide to see what we can obtain by using consistency condition and this is basically the local Rg approach but at the same time starting from exactly the same equation which is the vestumino relation away from criticality I can just make a t derivative and I can connect everything to the functional Rg and that's it so this was my main goal to show you the connection so basically at this level the functional Rg is able not only to derive the same consistency relation but to have them derived in a framework where every Rg quantity has an explicit representation where I can put inside something turn the machine and compute them I will stop here


Our next speaker, while he gets set up, I will introduce him. His name is Matsumoto. He is the creator of Ruby. He has not spoken at as many conferences as Nathaniel, but he's spoken now at nine of them, I guess. We heard him this year at Ruby Kaigi, which was an excellent good time. I'm hoping that some of the things he talked about there he will also talk about now, but you never know with Mats. So welcome, Mats! Can you hear me? Can you hear me? Yesterday we had a great keynote from Dave Thomas, and we had the keynote speech from DHH himself.  So I'm going to finish it very soon. Anyway, I believe I had some kind of responsibility to give you something. So anyway, I'm going to give you a small keynote. So acknowledgement. So last year we lost Gideku and White Lucky Steve, but we love them. And why? I believe he's alive. He's alive. So I really want him to come back again, but anyway, why if you listen, please come back. And I love him. We love him. You know, how many times we mentioned him in the presentations in the conference? Yes, we love him. So today's menu, and we are going to... This is a 10th annual international Ruby conference, so it's a special conference. I'm going to tell you about something about history and the future and the diversity. So this is 10th. The Ruby conference was started on... Starting on 2001, which is right after the 9-11. At that time, the anthrax was very popular. At the state of the Florida, the first conference was held in Tampa.  I was very excited about the first international Ruby conference. So I took risk and went there. And since then, in every Ruby conference, but one, I gave a keynote. And the first conference was, as I said, held in Tampa, Florida. And the subject of the keynote was the human-oriented programming language. So at that time, virtually no one knows about Ruby. And the conference was, I don't know, 30-something people, very small, very small people. And I give you what? And I must have his very small person, anyway. So I gave a presentation about the being human-oriented programming language. And, well, in a sense of the tooling complete, every language can emulate other languages. So in future-wise, every language could be equivalent. But there should be a difference between languages. So what is that? So the policy and philosophy and design is focused on human or machines. Those are the teams for the 2001. In 2002, the conference was held in Seattle. And the team was the B-minor, B-cool. And at that time, the Ruby was very minor. And we were very minority. But the cool things happen from a very small community or from the minority. So even we were small in numbers. But we can be cool. And we try to be cool since then. And next year, we had a conference in Austin. And I had a keynote for the Visions for the Future.  I know Ruby is not perfect language. So I tried to fix the defect of the language for years and years. So I give you the ideas. I gave a presentation about the ideas to improve Ruby here and there. And next year, we had a conference in China to Virginia. And I missed the conference. I'm sorry. And Brad Cox, who originally designed Object C, gave a presentation at the conference. And I've heard that he didn't tell anything about Object C, but Java and education. But they told me that that was a very good keynote there. And at that year, I had a baby. So that was the reason. Thank you. Yeah, six years ago. Next year, we had a conference in San Diego. And I give you similar things and visions for the future. And the wild and weird ideas, basically similar things. Fixing bugs and fixing defects of the language and trying to improve the language even better. In Denver, Colorado, I talk about the bike shed. You know, designing the language is a very interesting thing. I just attended the session about the rail. And he said the designing compiler or implementing a compiler in the language is not that difficult, but very interesting. And I wholeheartedly agreed with it. So in this talk, I try to encourage you to have an aspect of the language designer. The next year, I'm going to talk about the language model. The programming language is very important in the programming field. And in Orlando, I explained about the reason behind Ruby. The basically similar thing to the DHS gave you this morning, but in a poorly organized way. Last year in San Francisco, I talked about the 0.82 language. No language can fit every situation. So no language can fit all the situation. But there could be some language that can fit, that can fill 80% of the situation from the Pareto principle. So the Ruby trying to be that 0.82 language. And this year, New Orleans, I'm going to talk about the future and diversity. Future and diversity. So first, I'm going to talk about the future, which is Ruby 2.0. And I talked about Ruby 2.0 again and again and again. So maybe you're sick of it, but I have to. So please stand. So Ruby 2.0, we just started the work on Ruby 2.0 finally, after releasing Ruby 2.192. So this is a little bit more concrete than previous ones. We are going to have the trace and the method combination and the keyword arguments and namespaces and a few other new features in Ruby 2.0, which comes sometime in the future. A trait is a collection of methods used as a simple conceptual model for structuring object-oriented programs from Wikipedia. What's wrong with modules? We already have modules, so what's wrong for them? So it doesn't have conflict detection and conflict resolution, and it is weak for tree modification, and they don't have any method combination. So name conflict, if a class and included module has a method of same names, so it is conflict, but that could be intentional or accidental. So it is difficult to tell the difference. It is intentional or it is accidental. So a little bit, yeah, don't read, feel. If you have the module, two modules, which has the same attribute address, and in a class, we include two modules. So if you call that address, if you access the address attribute, which is effective. So the inheritance precedence is the Japanese, which one is the Japanese-American? The Japanese-American comes this way. The Japanese-American, Japanese-American object kernel. So the address defined in Japanese has a precedence, but it's kind of confusing. So we will introduce the method named mix instead of include. So mix can detect and resolve conflict. So mix injects the current snapshot into the other class and module so that it raises error when named conflict. So unless you resolve it explicitly, that I mean the two module, American and Japanese, has the same attribute named address. So if you include them in a single class, so the address attribute defined in Japanese module has a precedence. But if you use mix, the mix detects the attribute conflict and raises the error. And if you can resolve the conflict by explicitly renaming it. And the modules are very weak to the modification afterwards. So in that case, the module M1 has included in class C1 and defined module M2. And then include M2 into M1. So even though the M1 has an ancestor, the M1 includes M2, the C1 doesn't include any M2 just because at the time of inclusion, the included hierarchy does not include M1, M2, I mean. So this is kind of inconsistent, but it's kind of implementation reason. So the mix copies attribute, so tree modification afterwards does not affect any time. So officially does not affect. So it's not useful though, but it's consistent at least. And to implement some kind of method combination, the rails provide the alias method chain, but it's kind of ugly and fragile to multiple wrapping and we want to wrap method. So we discussed with some other guys and we decided to introduce the prepend method. The prepend put the module before the client class. So method defined in the class will wrap method of the same names. So if you define the module full that has the method full and the class bar, which has method full, then prepend full module before the class bar. So calling the full method, the full defined in module full, then full defined in bar. You know what I mean? So the first full method wraps the other. So you can override, override the method afterwards. And we will finally have the keyword arguments called like this, one to step by two to 20 or something like that. And define any method definition we can write like this, then step by there, goes like this. It's mere expanded hash argument at the end. This is not special. 1.9 has this syntax for a long time. So it's just the automatic composition like this. And namespaces. In the previous session, the Shugo Maeda, which is from Japan, presented by the class box session. And which is kind of encapsulation of monkey patching. Monkey patching or freedom patching is global modification. It's useful and it's powerful and at the same time it's dangerous. And if we can restrict the effect of the modification in certain namespace or some certain package, so we can enjoy freedom without the risk of breaking other programs. So it embodies freedom, but not dangerous. So there are some features in other languages like name the class box, second name space, or refinement or whatever. The concept is like this. Ruby has open class, so you can modify the method afterwards. In this example, we define the slash to make it 1 divided by 2 makes it rational. But with a new refinement feature, so you can define a module as a namespace. So refine integer to define redefine a slash method. So in that namespace, which is from module to end, the division operation gives the rationale. But out of scope, the 1 divided by 2 is integer division so that it returns 0. And using refinement, you can use the using method to declare the use of the namespace. So in that module, the division is redefined. And yeah, this is too complex, but it's just a concept. You can provide the real private method of refinement. So the frequently asked question for, yeah, I prepare the questions for you. Yeah, FAQ for the future is when will they be available? This is a very great question and Ruby 2.0. When will Ruby 2.0 be? Christmas. Let's talk about diversity. I love the diversity. As Dave Thomas said, diversity is very important things. We need diversity to keep going. Steve Jobs criticized Android that it's not free, but segmented or fragmented or whatever. And then iPhone, yeah, iOS or the system provided the Apple is integrated. Yeah, great word. But still we need diversity. But at the same time, I very sympathize with Steve. You know, having diversity has cost. We divide effort, so we have a lot of implementation so that we can... Our resource, our human resource is divided into MRI and Rubenius and JRuby or the Macruby or something. So I have kind of mixed feeling about diversity, but I'm truly involved with diversity, so I'm not going to reduce them. So even though it requires cost. And then Ruby language has a specification and implementation. And then we try to make up a specification in human readable way and the machine readable way. So RubySpec defines the basic behavior of the Ruby language among the implementation so that Rubenius, MRI, JRuby all try to conform to the RubySpec. And at the same time, we try to define the human readable definition of the language and we are going to submit it to ISO. Yeah, can you believe that? My hobby language, after 17 years finally submit to the ISO. And for implementation, we have a lot of implementation like the CRuby, JRuby, Rubenius, Maclab, IonRuby or Macruby, Ruboto. Well, we have so many implementations. Yeah, a few years back, the Python people criticized us. Ruby is very complex language so that there could be no other alternative implementation. And they had the C Python and the Ion Python, they had two. And we have so many. Yeah, I love diversity. And I wanted to fill the niche like a JRuby for Java environment and a Macruby for Mac environment, Maclab for Jamstone and Ruboto for Android or something like that. So if there is a niche, so we are trying to grow to fill in. So just because I really, really love diversity, I try to add one more to embedding. Can you believe that? So it's called write, the newcomer, the right-wing implementation of usable subsets of the Ruby language. The target is embedding. Small devices like digital appliance and the application like gaming devices and more. So, yeah, it's not the time for our digital TV runs on Ruby, but in a few years, maybe, three, four, five years, so the computers embedded in the digital TV will be powerful enough to run Ruby. So we have to prepare it beforehand. So we are working on some companies, some universities and some other guys, some government people to make up a fund to start a project. Then it's an embeddable Ruby. Think of Lua. Lua is very popular among embedding. A lot of games embed Lua or some devices embed Lua. And Lua is a great implementation, but as a language, especially object-oriented language, it's, yeah, anyway. So the basic principle of the write implementation is the components and the configurable. Components, by components, I mean that the implementation will be a combination of the components, like a puzzle, virtual machine, garbage collector, debugger, and the class libraries, so that we can, if the device is very small, so we can rip off the puzzle and evolve so that the compiled, the intermediate representation and the virtual machine, combine one to make up a very small executable on a small device. So we can remove some of the class libraries to reduce the size of the program. And by configurable, I mean configurable to a minimal set of features required for that particular application so that, you know, basically the embedding system is one-off, so you don't have to have a universal behavior between platforms. So, for example, no file I.O. needed for small devices, like if the small subset of Ruby runs on, say, PalmPilot, so it doesn't have any I.O., file I.O. So by configurable, I mean that you can choose the size of the floating point, arithmetic, double or float, or the size of Fixnab could be into a long, or long, long, long, or you can configure the character in coding to ASCII or UDF-8. And the requirement for the right implementation is it should be portable, and the minimal requirement is done as C and C99, and it should run on PCs and real-time OS and the free-standing environment, and it should use less memory than, say, CRuby, MRI and URL, and it should focus on latency rather than throughput. So, in implement detail, not detail, in implementation summary, it used the register-based virtual machine and 32-bit world code and floats the immediate, and possibly generational incremental mark-and-sweep card refreshing. So, by right, the right can be easily embedded into the application, like the game or the editors or something, and it could be used for small devices like the embedding environment, say, digital TV. Actually, I'm working with a big appliance company in Japan. I don't think I can disclose the name of the company, but I believe you know the name of the company. It's a very big company. And it can be used to the concurrent, so assign virtual machines for each thread, so it could be opened up to a very interesting possibility for concurrent environments. And in addition, Professor Tanaka from Kyushu Institute of Technology tried to make up the Ruby chip. And by Ruby chip, I don't mean something like Java chip, the chip that runs the Java bytecode. It's a MIPS-like SPGA CPU with a few instructions added that helps method lookup or garbage collection marking. So it's not really a Ruby chip, actually, but you know, marketing requires the term Ruby. So, I pick you again. But it's a part of Japanese government funded two-year project. So we highly expect it to be released before the end of the fiscal 2011 year. That means March 2012. If you don't, that means the project failed. So I try my best to avoid the project failure. And will Ruby open source? Yes, probably under MIT license. But we need a business model for the satisfied government. Yeah, just because it's a government funded project. So we might choose GPO Plus commercial video subscription model or ISKOL, but I don't know yet. But anyway, it will be open source in some way, in any way. Will Ruby replace MRI? No. Ruby will not be full-featured universal implementation. It will be target to the embedded and configurable environment. So for example, the PC environment or to create the web application, the MRI or JRuby or even Rubinius is suitable. And it is kind of like a domain-specific implementation, like Roboto for Android and Ride for embedded device, Ride for small devices. How about CAPI for Ride? Ride will have a very different CAPI from JRuby, just because, you know, the CRuby API is pretty good and very convenient, but not very suitable for the environment like the multi-thread environment or the embedded environment. So we will design and provide a new API, a totally different API. And currently we have no plan to provide compatibility layer like the Rubinius does. We will write support M17N like encoding like in Europe, Asia, Japan, China, India or something. And then, no, you have to configure a single character encoding from ASCII or UTIP-A in compile time. So no, no, no multi-lingualization. And will write support native sets? No. To use thread, you can use multiple VMs per native per set. Write may support fibers in the future, but currently we have no plan to support fiber neither. Does write run faster than YAR, JRuby, Rubinius, et cetera? I don't think so. But maybe on some benchmark due to float, floats are immediate value in write. So, and so we will try to make it fast, like choosing the register based virtual machine in the pocket into the 32 bits. And maybe on some benchmarks, it runs faster than YAR, say YAR, but we are not going to provide the JIT for write or nor some, you know, hackish, hackish technique. Like we have to stick to the C99. So I don't think the write will be a super fast virtual machine, but you know, it will have, it should have some kind of modest performance considering the devices. How can I contribute to write? Wait until we make it open source. We will open it on GitHub. Ooh! And that means I have to learn Git. Write sounds familiar for some of them. Originally, write was a code name for the first Ruby 2.0 virtual machine before write. In the presentation, and a keynote presentation in the conference held in 2003, we presented about the conceptually same thing, like a keyword arguments, a keyword combination, and well, like a name, selector name space, and a code name write at that conference. But year after, we gave up the write project. And YAR was, YAR was originally an independent project, but it was so good, so we merged it in instead of write. So I gave up the code name write so when I started the new interpretation of the small Ruby, and the code name was resurrected. So it's calling from Ruby lite. Do you resign from CRuby? No, but I have spent less time on CRuby recently anyway. And I will keep being a maintenance of CRuby and above all, above it, above all, I will keep being active as a creator of the language and a leader of the community. I will. So I think that's all of my presentation. I started creating the language, designing the language Ruby in 1993, 17 years ago, and at that time I expect Ruby users to be less than 100 all over the world. But, you know, in this room I have, I don't know, 800 people? 700 people? And the Ruby users worldwide become, I don't know, maybe close to million. It's incredible. And it's amazing. It's not my effort. You know, if David Thomas did not find the language named Ruby from the Far East, if he just bored with the language or if he didn't write the pickaxe books, or if David didn't choose the Ruby to next language to PHP, if you don't participate in the community, so Ruby is nothing. So I, from bottom of my heart I really thank you.


A forest penetrator is an alternate insertion extraction device that we use that was designed to punch through jungle canopy to be able to reach the jungle floor for the survivor to be able to get onto and be able to be extracted out of the jungle as safely as possible. In a real world environment, if we do have an injury or a casualty in that scenario, we can then use that as a means to get them to like that higher echelon of care. I believe any time that any service can integrate like we did today with the Marines and the Navy, it builds a better relationship and a better understanding of what each side does. If for ever reason they get stuck, they know that we know our side of the job to get them in and out of harm's way of possible.