Welcome to this next lecture on disturbing function. We just saw some motivation in the previous one and we also saw that for linear time invariant systems, real part and imaginary part correspond to the sinusoidal part and the cosinusoidal part of the output for a sinusoidal input. So, we are going to use that to define the disturbing function in this lecture. So, recall that for LTI systems, let us say with transform function g of s, if you give a sin omega t, the output has a transient part which we are now going to worry from now on. We are going to have the output a real part of g of j omega times sin omega t plus a imaginary part of g of j omega times cos omega t, which we are going to write this together as a g of j omega times sin omega t. This one is a real signal, sinusoidal part, cosinusoidal part cos omega t times j, we are going to write as nothing but sin omega t. So, g of j omega is now a complex number, complex number. This making it complex has helped us eliminate this cos omega t part. Does that mean that everything in the output is in phase with sin omega t? No, there is an imaginary part hidden inside g of j omega that imaginary part does not mean that the signal is complex. We measure only real signal, in a real world we do not have any oscilloscope that measures imaginary part and that is just notation. So, the imaginary part is to be understood as the cosinusoidal part. The imaginary part inside g of j omega is to be understood as the cosinusoidal part, the part that is 90 degrees out of phase with sin omega t, 90 degrees leading or 90 degrees lagging that is extremely important that depends on indeed whether the imaginary part is positive or negative. So, we are now going to say, consider for what class of systems can we do this, we will worry very soon. Consider saturation non-linearity and we give a sin omega t, output equal to m b sin omega t plus c cos omega t plus many more. What are these many more? Are these transients? No, this is memory less. We can have transients only when the system has memory where it takes some time for the output to stabilize to the input. But this is I mean suddenly you start this and suddenly the output will come to something may not be this, it has something more plus higher harmonics. This is also missing in linear time invariant systems. In linear time invariant systems, the forced part has only the input frequency. It does not have higher harmonics or subharmonics. In our very first lecture on non-linear dynamical systems, we said that non-linear systems can have harmonics that are different from the input signal, it can have higher harmonics also. But we are interested in only b and c. So, describing function of this saturation non-linearity a, omega equal to b plus jc divided by a. Why? Because you see as I said in our previous linear time invariant system situation also there was a factor that is within a and we are going to think of this as a gain. Because it is gain we are going to divide by a. So, of course dependence on a for linear time invariant systems b will have a factor a, c will have a factor a, they will all get cancelled neatly and the net gain is independent of a. But even for linear time invariant systems, we already saw that there is a dependence on omega can depend on omega and a both in general. But of course we will see that for this situation of saturation non-linearity, there is no dependence on omega. In fact, the c will also turn out to be 0, it will turn out to be real, the imaginary part will be missing. In other words, the cos omega t will never be there. The input when you give all the higher harmonics will all have only sinusoidal terms. There will be no cos 2 omega t, there will be no cos 4 omega t, etc. So, how do you find b and c? One finds a Fourier series of the output and then finds out the first harmonics coefficients, the sinusoidal part we put into the real part here, the cos sinusoidal part we put as with multiplied by j and we divide. This is nothing but first harmonic, first harmonic amplification. This defines the describing function for saturation non-linearity. What we will do first? We will do this calculation for, let us say the sign, for the sign non-linearity. Which non-linearity? It just gives a sign of the system. Then we will analyze in more detail a ready made formula for this memoryless, for the saturation non-linearity and then we will also see for what class of non-linearity is one can define this describing function this way and what are its properties? For example, when is it going to be real? When is it going to be independent of omega? All this we will explore in the rest of today's lecture. So, first consider the non-linearity that takes a input and gives you plus or minus 1. What does it do? It just gives you the sign of the input at that time instant. Output y of t equal to plus 1 if this is u of t. If u of t at that time instant is greater than or equal to 0 equal to minus 1 if u of t is strictly less than 0. Of course, one might say why is it that when u of t is equal to 0 you are biasing it towards plus 1. That does not matter. You see u of t is equal to 0 for just one instant. Most of the time it is either positive or negative. At only a one instant at only 0 pi at 0, 2 pi by omega, 2 pi by 2 omega, pi by omega at only at these instants it is equal to 0 and at such a for a set of measures 0 what value you define y of t that does not make any difference. So, this we will call sign non-linearity. Some people also call it signum non-linearity. Signum non-linearity is same as sign non-linearity. Its graph looks like this. It gives the output plus 1 if the input is positive, it gives the output minus 1 if the input is negative. So, find Fourier series of output. How does the output look for the sinusoidal input? Let us plot the output first. Output is like this. For what value of the input let us also plot the input when the input is like this. The way I have drawn this figure, a is greater than 1, value of a is greater than 1 that is why this peak is greater than plus 1, but it is in phase. So, we can find the Fourier series of this periodic signal. This is y of t and this is of course the input u of t equal to a sin omega t. So, first important thing to note is the output is periodic. The output y of t is a periodic signal. Periodic signals are the ones which have a Fourier series. Let us find out this Fourier series coefficients. We are going to integrate over the period 0 to t where t is the period which is 2 pi over omega of this is the output y of t dt. This will give us so called a0. y of t we write as a0, this is a DC term plus a1 let us call this real times sin omega t plus a1 imaginary for cos omega t plus a2 real for sin 2 omega t plus a2 imaginary for cos 2 omega t etc. So, now we are interested in finding a0. To find a0 one has to integrate from 0 to t and since y of t is over one period this is value of t. So, over one period the DC is 0 it adds up to 0 this is equal to 0. So, a0 equal to 0. Now, how will you find a1r? a1r is nothing but we can be obtained by 0 to t y1r sin omega t. So, that we these all basis functions sin omega t cos omega t are an orthogonal basis then orthonormal basis. So, that when you in order to get the component of a1r along this direction all you have to do is project a1 y1 on to this particular signal and then find this integral. So, this particular integral evaluates to just integrate from 0 to t sin omega t. Why? Because y1r is nothing but equal to plus 1. So, y1 this y of t y of t is equal to just plus 1 when sin omega t is positive it is equal to minus 1 when sin omega t is negative. So, this evaluates to this. So, we will just evaluate this quickly. We will just go ahead and evaluate this integral that will give us this coefficients except that we have missed some factors. So, this a0 if we define a0 like this and what comes here is a0 by 2 and a1r we need some normalizing factors that we have missed. There is 2 by t here. So, 2 by t here I just not check that these factors will not give us without these factors we will not get the correct describing function. So, what we are going to calculate is a1r is equal to 2 over t integral from 0 to t of sin omega t dt. Why did we put this absolute value? Because we are multiplying sin omega t with y and y changes its sign if sin omega t changes its sign and y is equal to plus or minus 1 only. So, in other words when we multiply this by y we get exactly this which is equal to now 4 over t and we multiply integrate from 0 to only half the period. Why? Because this particular signal here is something like this. This is t, t is equal to 2 pi over omega. So, we are going to integrate only up to here. So, 0 to t by 2 of sin omega t. Over this interval sin omega t has not changed sign. So, that is equal to 4 divided by t is equal to 2 pi by omega. So, we are going to get 2 pi here into omega of integral of sin omega t integral of sin omega t is minus cos omega t divided by omega. Evaluate from 0 to t by 2. t by 2 is nothing but pi over omega. t is 2 pi over omega. So, t by 2 is pi over omega. So, this gives us omega omega cancels 4. So, we have 2 minus 2 over pi times cos of pi minus cos 0. So, this gives us cos of pi is minus 1 and cos of 0 is plus 1.  This is a 1 r. So, now, we have to also calculate recall this formula. In this formula, we have calculated a 1 r. This is the part that comes as sin omega t. a 1 i is the part that comes as cos omega t. And similarly, these all higher harmonics of course, we have decided to not calculate because the describing function requires only these both. So, now, we are going to find a reason why a 1 i is equal to 0. So, let us just draw this input and output. So, the output is something like this. So, this is y of t and this is t. So, this output, notice that this output is a odd function. The output is a odd function. What is, when you call a function or f of x equal to f of minus x, this is what we would call even odd function. If some function f of x satisfies this property, then you will say f of x is an odd function. Of course, one should also notice that odd function requires that f of 0 equal to 0. And we have defined sign of non-linearity as f of when sin omega t is 0, output is 1. So, for the purpose of this odd, one can also put this as 0. Another important thing to note is that the Fourier series is unaffected if you change the value of the function, whose Fourier series you are trying to calculate, that periodic signals function value, if you change at just a few points, then the Fourier series is totally unaffected. Why? Because the Fourier series depends on this integral formula you see. The integral is more requiring the area under a curve and if you change the value at just a few points, the area under a point is 0. As long as that point is finite, the area under that point is height multiplied by the width and the width is 0 because the width of a point is 0. Hence, the Fourier series is unaffected by changing the periodic signal value at a few points. In other words, on a set of measures 0, that is the technical term. So, our odd function, so our output is the odd function. When you give sin omega t as an input, the output is the odd function. For the purpose of making it odd, one should I think define sign of non-linearity as this. But even if you do not, if you define a sign of non-linearity as taking value 1, when the input is 0, even in that case, as I said the Fourier series is unaffected by changing the value of the periodic signal at a few points. So, odd function, so Fourier series, series has only sin terms. Why? Because cos is an even function, cos n omega t for every n for every n is an even function. Of course, all functions are not either odd or even. All integers are either odd. Any integer somebody comes and gives us is either an odd integer or an even integer. But that is not the case with functions. Every function need not be either an odd function or an even function. In general functions, we can say has a odd part, even part. You need both odd and even parts to construct a function. If you are trying to resolve it in terms of odd part and even part. But coming to this case, we have resolved it in terms of all its odd parts and all the sinusoidal terms together comprise its odd part. All the cosine terms together comprise its even part. Since the function is already odd, you do not require any even function like cos n omega t to synthesize that function. So, using this, what this means is dA1 imaginary part equal to 0. In fact, A for any harmonic the cosine cell term is not required. So, this says that, now we are ready to calculate the describing function for our, for this example. So, what is the describing function for this? So, eta of A, as I said the describing function allowed to depend on both the amplitude of the input sinusoidal signal and the frequency omega of the input sinusoidal signal that is equal to A1 r plus A1 imaginary part, j times of that divided by A. Then this turns out to be equal to, let us just look at the formula 4 over pi and of course, this factor also has come. Why? Because we already calculated that A1 r is equal to 4 over pi. So, notice that this is first of all independent of omega. Second, this is real. Let us just see what is the significance of this. We have just now calculated the signum non-linearity. This is 1 minus 1 signum non-linearity. We have found that its describing function is equal to 4 over pi A. This is t, this is the output y of t, sorry this output is going to keep oscillating. This is what I have drawn here is not function of graph of y of t versus t, it is input u of t, y of t. If the input is positive, for any positive value of the input, output is equal to plus 1. For any negative value of the input, the output is equal to minus 1. In that sense, this non-linearity gives the sign of its input. It does not bother whether the input is increasing, decreasing at what frequency. It just gives you whether the input is positive or negative. If the input is positive, it gives plus 1. If the input is negative, it gives minus 1. Input is u, output is minus. Now we have decided, we have calculated that we have a notion of gain for the system that gain associated to A sin omega t's input and that gain turns out to be equal to 4 over pi A. Gain is a function of A for input A sin omega t. We all are used to Bode magnitude plots where we speak of low pass filter, high pass filter. There the independent quantity the x axis, the horizontal axis is frequency omega. Here also we are looking at gain, complex gain actually. Luckily, it turns out to be real for the case of signum non-linearity. When all it will be real, we will see very soon. But we are now plotting the gain as a function of amplitude and that we have found this as a graph. This is what we just now calculated equal to 4 over pi A. For large values of A, it is very small that is expected. You see you give A sin omega t and what you get out is only plus or minus 1. Here is a signum non-linearity and how much ever high amplitude you give as input, output is always plus minus 1. What is the magnification that this system causes? Magnification is very small if the input has a very high amplitude. Why? Because the output is always plus minus 1. If you are giving a very high amplitude signal, then most of it is sort of getting diminished. It is getting diminished to just plus minus 1. In that sense, this graph is reasonable that for large amplitude the gain is very small. Why the gain is small? Because output has to always be plus minus 1. Gain is like output divided by input. Output divided by input measured in some sensible sense to get a real number, to get a scalar, to get a complex number in general but in our case it is real. To get one scalar, we have to have a notion of how we are measuring quantifying the output and the input. We have decided to quantify using the first harmonics coefficients. So, using that method it turns out that this disturbing function of the signal non-linearity is decreasing like this. It is decreasing. When would it be constant? Let us see various other examples. We will see what happens for linear systems. When would it be constant? But for signal non-linearity this decreasing makes sense because for very high amplitude also the output is just plus minus 1. For a very small amplitude also output is plus minus 1. For a very small amplitude in other words, there is high magnification because we will give you plus minus 1 even if the amplitude is 0.0001. As long as it changes sign, the output will jump between plus minus 1. For very high amplitude also the output is just plus minus 1. Hence, the magnification is small for large amplitude. The magnification is very high for small amplitude. So, this is a graph of the describing function, the gain of the system as a function of A. So, let us see some more examples. The example in every non-linear dynamical systems course, the first example we should be dealing is linear systems, but we took a signal non-linearity because of the ease in which we can calculate its Fourier series. Let us take constant gain. Output y of t equal to 5u. Here is an input that just multiplies by 5. What does it do? It takes the input, sees the current value, just multiplies by 5. Easy thumb rule to implement, no complicated saturation, signal, etc. So, what is the gain? Gain is equal to 5. How do we see this? Input is equal to A sin omega t. Output is equal to 5A sin omega t. It is a good exercise to calculate the Fourier series. Fourier series A0 is equal to 0, A1r will turn out to be equal to 5, A1 imaginary part will turn out to be equal to 0. Hence, describing function here turns out to be equal to just 5. It is real. Important things to note is real independent of A, independent of omega also. That is expected. You see this just multiplies by 5. How does the describing function graph look as a function of A constant? We prefer plotting only for positive values of A because sin omega t we have amplification by A. It is a positive number. So, the describing function, the gain of the system is independent of A. That is expected for LTI systems. If eta dependent on omega also, then this graph would not make sense because it depends on A and omega. But here, it depends only on A and this is a constant. Why? Because we have a static linear system that just amplifies by 5. So, amplification by any positive constant would just be equal to that number. If it is amplification by a negative number, then nobody prevents the describing function from being negative. This will be equal to minus 3 for a system that takes input u and gives you output y and multiplies by minus 3. This is how the describing function would look. It is always at minus 3. Describing function can be positive and negative. It is a convention to plot it for only positive values of amplitude A, input amplitude A. So, now, we will see some more examples. Let us try to already guess how the saturation nonlinearity disturbing function is expected to look. After that, we will consolidate some properties of the describing function when it is expected to be independent of A, when it is expected to be independent of omega, when the imaginary part is 0, all those we will quickly see. So, the saturation nonlinearity, this is our input. This is our saturation nonlinearity. But at any time u, the output is like this. Now we are going to give some plot something as a function of time. The input is always a sinusoid as far as the disturbing function definition is concerned, u of t. Now, if this input amplitude is less than 1, it never crosses 1. So, we are speaking of a case where the input is always varying between let us say plus and minus 0.6. So, the input is now varying only inside this range. Since the input is varying only inside this range, the output is not even getting saturated to any value. If the output is not getting saturated to any value, what comes out in the output is again a pure sinusoid. Exactly same comes out in the output also because for this range, this output is equal to the input. So, for this range, because the output is equal to the input, this is like as good as a system with gain 1. We are trying to directly plot the saturation nonlinearity as long as input has been multiplied is by amplification is at most 1. The gain of the system is just 1. What is the meaning of this? The gain of the system is equal to 1 as long as the input amplitude is at most 1. Beyond that, you see when this t, this u of t, suppose the amplification is more than 1, so that 1 is somewhere here, so the output is equal to this, then it comes back. It is always getting saturated to 1. That is the meaning of the saturation nonlinearity here. So, if it is getting saturated to plus minus 1, you see there is something that is getting cut here. We can think of that when the amplitude is larger and larger, then the output is always getting saturated to 1. For a very small range, for a very small duration of time, it is inside this linear range. For most of the duration of time, it will be in the saturated range if the amplitude is very large. For very large amplitude, it is equal to 1 for most of the time and the input is actually much larger for most of the time. That time we expect that the magnification is actually very small. Why the magnification is very small? For very large amplitude, let us say amplitude A equal to 1000. For amplitude equal to 1000, the output is getting saturated to 1 most of the time and the input is much larger than 1 for most of the time. Even when you integrate and find this exact Fourier series coefficient, one will get that the disturbing function, the magnification is very small. Because the magnification is very small, for large amplitude is what we are talking about. For large amplitude, because the magnification is very small, for large amplitude we still get plus minus 1 only most of the time. Of course, there is still a small duration of time over which it is equal, but that time the input is also very small. Input is less than 1. That is why, so let us draw another figure. Let us draw a figure for A equal to let us say 100, the u of t. This 1 is somewhere here, this is 100. This is how the output looks like. Because the input is much larger than 1, most of the time, the output is sitting at 1 most of the time. You see, this is how where y of t is, this is where u of t is, this is y and u and this graph is plot of both y and u. You see, output is most of the time just plus minus 1, while the input is most of the time much larger than 1. So, what is like a net amplification? That amplification is a very small quantity. On the other hand, if the input amplitude were itself less than 1, if the input amplitude were equal to 0.6, then the output is reproduced as the input. So, this justifies our graph of the describing function as a function of A which is equal to plus 1 and then going on decreasing. Of course, it never touches 0, but comes down to 0 for large amplitude. Up to amplitude equal to 1, the describing function is a constant. It is equal to 1, like it would happen for any static gain linear system. For any such system, it would have been a constant like this. So, we will check from a formula from the book that it is indeed like this. How do we get this? One would have to calculate the Fourier series of a function that gets chopped like this. They are explicitly calculating the Fourier series from here to here, then it is a constant from here to here, again from here to here. For what range it is a constant and when is it increasing like a sinusoid? That depends on the value of A, of course. This is equal to 1. If A is very large, then this time itself is much smaller. So, using a careful calculation like that, one finds the describing function explicitly as closed form formula in terms of A. So, let us see in general. In general, if nonlinearity is memoryless, what is the meaning of memoryless? This is an operator and n of u is a function of time, is equal to y of t. So, n is an operated ax on u, but that is luckily given as some other function that does not know that the input is varying. So, we can think of this x, n of x. If n, if the output, the way the output depends on the input, depends only on the value of u at the time instant and as soon as that value is given to a function n, n of x, you will get the value. This is the meaning of memoryless. You will call nonlinearity n as memoryless if the way the output, n of u is the output. The way the output depends on time t can be associated to a fixed function n of x, where output y of t is nothing but n of u of t. In that sense, n does not even know at which time instant this is happening. It just depends on the value of u at that time instant. This is the meaning of memoryless. Of course, we have been doing this for time invariant systems, meaning if the input is delayed by certain amount of time, the output gets delayed by same amount of time. This is time invariant systems. It is a big class of systems, both linear and nonlinear. Amongst the nonlinear time invariant systems, we have described memoryless systems. What are examples of memoryless systems? All the saturation nonlinearity, the dead zone nonlinearity. These are all examples of memoryless time invariant nonlinear systems. What are examples of systems, nonlinear systems, nonlinear time invariant systems with memory. These are systems with hysteresis. We will see two-three types of hysteresis. Hysteresis is a nonlinearity that of course is time invariant. The way the output depends on input does not explicitly depend on time, but it depends on whether the input is increasing or decreasing. In that sense, there is a notion of memory associated to it. Hysteresis is an example of time invariant nonlinearity with memory. In other words, which is not memoryless. If the time invariant nonlinearity is memoryless, then the disturbing function depends only on A. At most, the time invariant nonlinearity this depends only on A means that independent of omega. So, the frequency at which the input is changing cannot affect the gain, the magnification of the input to get the output. To say that there is no omega, omega we have skipped here means that the disturbing function, the magnification, the gain does not depend on the frequency of the sinusoidal input. So now, we will see under what conditions it is real. So, when would it be real? This having function real. This is same as A1i equal to 0, no cosine term. In other words, output is in phase, phase with input. Now, notice that your input is odd function of time, A sin omega t. So now, if your output, if your nonlinearity was also a odd function, for example, this saturation nonlinearity. Another example was the signum nonlinearity. These nonlinearity is when instead of this value, when you take this value, then the sign, these all satisfy the property that f of minus x is equal to minus of f of x. These are all so called odd nonlinearity. Within the class of memoryless time invariant nonlinearity, we have classified some of them as odd nonlinearity, nonlinearity. If this dependence of n is as a function of x is an odd function, odd function meaning it satisfies this property. Under those conditions, the describing function is going to be a real function. There is no imaginary part, that is why there is no cosine part. Why would this happen? Because when sign is changing, the input A sin omega t is already an even function. So, the output will not have an odd function, the output will not have an even function. The input A sin omega t is an odd function and the nonlinearity is also an odd nonlinearity. This ensures that the output will not have a cosine term at all. It will not have any even part. This is what ensures that A 1 i, in fact, all the higher harmonics also are not required and hence the describing function will be a real function of A only. Why is it not a function of omega? Because it is memoryless. Why does it not have an imaginary part? Because the nonlinearity is also an odd nonlinearity. So, when you give A sin omega t as an input, you also get an output that is an odd function and hence no cosine terms are required to synthesize such a signal. So, we have found, described some conditions for which, under which the describing function is memoryless, the describing function is independent of omega and when the describing function is a real function, when the imaginary part is equal to 0. Before we see more examples of describing functions of various nonlinearity, we will try to see if the describing function has some rigorous development behind it one might ask, why study the first harmonic? Why aren't the other harmonics important? In what ways is describing function carrying some important properties of the nonlinearity? After all, it is an approximation. I have already used the word that this describing function is an approximation. It is approximation in what sense? Is it in some sense a best approximation? What property of the nonlinearity system has been captured by taking just the first harmonic? This is what we will see in little more detail before we see how the describing function is used for calculating approximate values of periodic orbits. So, consider a system like this. So, we have a nonlinear system like this and we are trying to linearize. So, we already saw a notion of linearize for a nonlinear differential equation. The differential equation is what we took and already linearized once and told something about whether you can conclude about the stability of the equilibrium points post linearization. With respect to the linearized system, you draw out some conclusion about the stability of the equilibrium point and you can that be utilized for concluding the equilibrium stability properties of the equilibrium point of the original nonlinear system. So, that is not the linearization that we are talking about now. Here, we are now speaking about linearize with respect to an input, with respect to a reference input. So, we are speaking about a reference input R of t equal to U of t and we are looking at the output of the nonlinear system. We are trying to find a linear system whose output is as close as possible to output of this nonlinear system. So, we are speaking about linearize with respect to a reference input. This is different from linearizing with linearizing the differential equation for analyzing the stability properties of the equilibrium point. These are two different notions of linearization. So, this is better called as quasi-linearization. Why? Because it will turn out that the linearized system, the optimal linearized system depends on which reference input you use. So, when there is some notion of dependence, it is not really linearized in the full sense because of this different linearized system that you will get depending on which reference input you took. So, whenever this happens, people will use a word to say that this is not independent of what you use for linearizing. So, that not independent is sometimes conveyed as either quasi or pseudo. So, in the context of describing functions, one says that the describing function is a optimal quasi-linearization. So, what is optimal about it? That you will see now. What is quasi about it? Because the linearized system depends on the reference input that you use for the purpose of linearization. So, let us take this R. Let us take this original nonlinear system N. This is the actual output. This is linear system. This is the error. So, take reference input. This is why actual, this is why actual reference input why approx. What is approx about it? Because we are trying to fit, we are trying to find a linear system approximation to the nonlinear system such that this error E is minimized. Minimized in what sense? At every time instant or some total, that is what we are going to see now. Take reference input R of t, find linear system such that integral from 0 to infinity of E square dt is minimized. Is that reasonable? Is minimized over what? Minimized over all linear systems that you could take. So, when we give a reference input, we say that this reference input is very important. It is not a problem that this nonlinear system has different linearizations. With respect to this reference input, we will compare the actual output that comes from this nonlinear system for this reference input and we will compare that with why approx. What is why approx?  So, this linear system output is what we will call why approx. We will take the difference that is called the error. That difference we will call as the error. We are trying to minimize the energy in the output. Why is this energy? Because we have taken square. In the time domain, we are measuring the total energy integrating from 0 to plus infinity. So, find best. What is best about it? This error has got minimized. So, of course, the first question is, is this integral even less than infinity? It is possible that this integral is not even bounded. It does not exist. It is very large. E is positive, agreed. So, this cannot be negative, but it could be plus infinity. For example, if the error is a constant number, if it is always equal to plus 5, if it is a nonzero constant when you integrate from 0 to infinity, then you will get something that is unbounded. It is minimized, provided finite. So, this is our objective, performance objective. So, it turns out one very important result is different, different for the same, for same fixed n nonlinear system, different inputs R of t give different best linear approximate. First important point, even for the same fixed nonlinear system. Second, it is not even reasonable to call the best. Best approximate, best linear system, approximate is not unique. Why, what are all those different linear system approximants which are all best and still there is some freedom? What are they? Assume n is Bebo stable. What is Bebo stable?  Bounded input, bounded output stable. So, what is the meaning of this? Whenever you give an input that is bounded, the output is also guaranteed to be bounded. So, assume that this nonlinearity n is a bounded input, bounded output stable, so that you can give a sin omega t and you can be sure that the output has finite power. a sin omega t is not a signal that has a finite energy because you integrate from 0 to plus infinity and the energy is unbounded, but at least it has finite power. So, we are dealing with finite power signals now. We are trying to deal with finding a linear system approximation with respect to reference inputs that are all having finite power. This all will be made more precise in the following lecture. But assume that n is bounded input stable under these conditions. What are all the nonlinear systems that have the same? Let r of t equal to a sin omega t. Any h of s such that h real part of h of j omega is equal to a1r, imaginary part of h of j omega equal to a1i, where a1r and a1i are first harmonics, coefficients of y actual. What does this mean? y actual, we are trying to write as some a0 plus a1r sin omega t plus a1i cos omega t, etc. We expand this. We find a Fourier series representation of the actual output, where the actual output is for this reference input, a sin omega t is the input. So, any transfer function h, also has to be bounded input bounded output stable. So, any stable transfer function, the extremely important theorem that is what makes this function very rigorous and of course, it has always proved to be very useful. Derivation of this can be found in Vidya Sagar's book on nonlinear systems analysis. So, any stable transfer function h of s, whose real part coincides with a1r, whose imaginary part coincides with a1i, what are these a1r, a1i, a1 refers to first harmonic and r and i refers to the sin omega t part and cos omega t part. Take any transfer function which matches only here. As long as it matches here, this h is a best approximate. What is best about it? It minimizes the square error. There might be a division by a that is missing, sorry divided by a, where this a is amplitude of the input a. If the input is large, we might expect that a1r and a1i are also large. So, but then h is going to just allow the amplification a to come into the output, into its output, the y-approx that we used. Hence, there is a division by a that is required here. So, clearly, if you are only specified a1r and a1i, there can be many transfer functions which have the same value when evaluated at j omega. So, this is what brings in the non-uniqueness in h, but then the best part is that all these best approximations, best approximate linear systems all evaluate to the same complex number when evaluated at j omega, if they have to be a best linear system approximate to that non-linear system. So, once it is a linear system, how will the output look like? That is what we will use just straightforward impulse response. We will call this h of s, y-approx, y-actual. So, y-approx is nothing but equal to integral from 0 to t h of t minus tau r tau d tau, where h of t is impulse response, impulse response of h of s. We have only assumed that this is stable. No poles in the right of plane, no poles on the imaginary axis also. That is when h is bounded input, bounded output stable. And this is how one will calculate y-approx for any linear system. Notice that h can have memory also. So, this h of s output is calculated by this regular procedure, the way we do for linear time invariant systems. When will the error get minimized? It will get minimized in the average sense. In the power sense, there is a small mistake in what I told in the previous slide. I will correct it right now. So, in that power sense, with respect to the minimization of the power here, you see why we shifted to power instead of energy? r is not a signal with finite energy. When r is, that is what I will explain in more detail now. These things are made besides in Vidya Sagar's book. When r of t is equal to a sin omega t, 0 to infinity of r of t square is not finite. But you divide by t, if you look at the power in the signal, limit as t tends to infinity of r of t, taking square is same as taking absolute value and then taking square. This is finite. We will say finite power. We will say this is not finite energy. It is not finite energy, but finite power. So, our input has finite power and for systems that have bounded input, bounded output stable, the output, let us come back to this example, the output y actually will also have finite power. If you have to minimize the power in the error, then this also has to have finite power and the transients of h are all dying to 0. Because they are dying to 0, the average power in them is 0. So, they have finite energy, the transients. I am speaking only about the transients. The transients have finite energy and hence, average power is equal to 0 and only the value of h when evaluated j omega decides the average power in y approach and when these two signals are subtracted, this average power in e is minimized. That is what makes disturbing function optimal quasi linearization of a nonlinearity n. This is the theory behind using disturbing function. That is why it gives us the values that we want in a very useful sense of even though they are a little approximation, they give us the required values. So, we will see more in detail in the following lecture.


Once you've brainstormed some keywords, it's time to turn those keywords into a search statement. In this video, you'll learn some effective database search strategies and how to modify your search terms based on a results list. When you brainstormed keywords based on your research topic, you should have identified the major concepts of that topic and multiple keywords that could be used to describe those concepts. You'll start with this list as you develop your search statement. In order to turn our keywords into a search statement, we're going to use something called Boolean searching. With Boolean, the word OR is used within a concept to join synonyms. Basically, OR broadens our search by saying that any of the terms joined with OR is acceptable in our results. Adding more of these synonyms will give us more results. Here's an example. Let's say that I search just for the word hunger in a database. I get around 2,100 results. However, if I use OR to add the synonym food and security, I get almost 3,000 results. Well OR joins synonyms and joins concepts. Basically, AND narrows the results by telling the database that all of the concepts joined with AND must be present in the results. The more concepts we connect using AND, the fewer results we'll get. For example, if I use the word AND to add low income or poverty to my first concept, I'll go from around 2,800 results to only 587. Let's see what this would look like with the keywords I've brainstormed. I had three major concepts, and I brainstormed multiple synonyms for each major concept. I'm going to join the synonyms within each concept with the word OR. You don't have to use all capital letters, but they do make it easier to visually separate your search terms. To keep my concept separate, I'll put parentheses around each one. Now, between each concept, I'll add the word AND. Now I have what's called a search statement. I could put this into a database complete with the parentheses, and it would work just fine. However, a lot of databases set up their interfaces to help you create a search statement without worrying about all the parentheses. For example, this database from EBSCO hosts defaults to its advanced search feature, which has three boxes already joined by AND. Keep it to one concept per box, and join your terms in each box with OR. Keep the default AND between each box. If the database doesn't default to the advanced search feature, you can usually choose it from the basic search box. There's usually the option to add more boxes as well. Once you've gotten your initial set of results, you'll want to go through some of the results to see if your search terms gave you the kind of results that you were looking for. Sometimes the term that you think will work doesn't give you the kind of results you want. Keep on tweaking your search statement until you're happy with your results list. You might need to remove terms or add additional terms that you discover as you evaluate your results list. There are plenty of ways to get help with the library. For additional help with figuring out how to create a search statement, ask a librarian.


And this is all about you, Nets fans. You waited four long years. A complete knockdown and rebuild. You've heard the jeers. You've heard the jibes. You won't be dealing with that nonsense after this season. This season is proof that the foundation that was poured by Sean Marks on the corner of Atlantic and Flatbush is rock solid. Marks is the architect Kenny Atkinson, the sculptor. They started at the bottom. Now they're here. We go hard as their mantra. It's also the rally cry of you, the fans. Your team is back in the playoffs, and they are providing a new religion in the borough of churches. Let's take a look now at the Nets season notes. It's their first playoff appearance since the 2014-2015 season. It's their most wins since the season before that. They had 44 in the 2013-14 season. They have 41 wins this season. They guarantee themselves a 500 record only four times since the 2006-2007 season. Have the Brooklyn Nets been at 500 or better? And four players sent to All-Star Weekend. Joe Harris, of course, winning that three-point contest in the Angela Russell, sets a new Nets franchise record with 227 three-point field goals made, and he beats his own teammate, Alan Crabb. He set the mark last year with 201. Let's get to high...


Hello everybody! In this video, I'd like to show you the top five types of apps you should remove from your phone immediately. If you need to recover deleted data, view or restore removed browser history. Hetman software products will help you. Follow the link in the description, download the necessary program for free, install it and analyze the disk. The utility will show you the data you can recover, so you will be able to view it or get it back. In our channel and blog, you will find solutions to any problem, from installing an operating system or configuring it, to fixing possible bugs and errors or optimizing mobile gadgets. Our specialists will answer any questions you ask in your comments, under the videos or articles. Google Play is an excellent platform for new developers willing to publish their own applications. Unfortunately, not all of them have only best intentions. Some apps can collect your data, send your personal information elsewhere and even try to steal money from your bank account. So here they are, the applications you should say goodbye to as soon as you find them on your phone. And let's begin with weather apps. Such as the Weather Channel, Weather Pro, Weather Boom and the like. In fact, this type is a wonderful example of how a very simple app for letting you know the weather forecast can become a true monster, hogging tons of resources only because it's overloaded with all those functions you don't really need. Animated wallpapers, weather maps, all kinds of widgets and lots of other useless junk – all of them eat up the precious megabytes of your phone's system memory. Every few minutes, such app goes online wasting your battery charge bit by bit. As a sound alternative, consider using a browser – Google can give you a weather forecast for a week or even longer. The next one on the list is the Facebook app. At the moment, Facebook is the most popular social network in the world, so it's no wonder millions of people have its mobile version installed on their gadgets. The mobile client lets you receive notifications on the likes your posts receive, upload new photos and always keep in touch with your friends. In exchange for all these conveniences, it consumes tons of system resources and reduces your phone's battery life considerably. In short, the Facebook mobile client is among the top resource-intensive apps for Android. As an alternative, I can recommend using the mobile version of Facebook in any browser you have on your device. The functionality is somewhat different and you won't be able to see notifications popping up here and there, but it will make your phone's life easier and save its battery charge. Otherwise, try Facebook Lite – it needs less resources and features just the same set of functions. An antivirus is another useless piece of junk you may have on your phone – antivirus-free and many others. With all the attention given to this topic, there is still no definite answer to the question – do Android gadgets really need an antivirus? My personal opinion is this – as long as you don't root your phone, as don't install cracked apps from doubtful websites, you don't need an antivirus. Google takes great care of the contents it selects for its online store and immediately removes any potentially dangerous elements, so round-the-clock antivirus monitoring will only affect performance of your gadget without any real-life benefits. And if you do feel suspicious about your phone's health, install the antivirus, scan the gadget, feel relieved because everything is fine, and remove it for good. After all, some devices feature integrated apps to combat malware, so why not? The part I could not possibly miss is all kinds of system cleaners and optimizers. CleanMaster and other similar apps make sure the cache is cleaned in time and unnecessary apps are removed. On the other hand, most up-to-date smartphones already have these functions built into the operating system, which makes third-party optimizers obsolete, while they'll still consume a large piece of cache and battery charge. So forget about accelerating your phone that way. All you can get is a significant slowdown with the nasty bonus of apps. Apps that claim to boost your RAM are in fact the same as optimizers. All they can do is to clean the cache in time. Hey, your phone can handle this task on its own. Talking of RAM, there is no way to get more system memory than a gadget does physically possess. So in the end, RAM blasters can only waste your phone's resources and probably collect your data. The fragmenters enjoy the booming popularity when they first appear, and that's because the idea sounds similar to using special programs for hard disk defragmentation with good old PCs. But wait, there is no hard disk to defragment in your phone. These apps just analyze how much internal memory is used by certain programs or files. In addition, the fragmenter apps will also consume your phone's resources and make collective data again. So if you're using an app like that, I'm going to disappoint you. Most of them do nothing at all, and some can even be harmful. You can clean the cache and remove junk files after uninstalled programs just by using integrated system tools. What you think can boost your RAM will in fact make apps work slower instead of the acceleration you have been promised. As a solid alternative, go to the settings and clean the cache manually or use the built-in system tools. The last item on the list is browsers with extra functions, watching videos or broadcasts and so on. Such apps have two considerable disadvantages. First of all, the amount of annoying ads you're going to see is incredible, which certainly doesn't help to enjoy the experience. Secondly, your privacy can be in danger. Apps want access to so many functions, even managing your calls, that it becomes suspicious. Instead, try using just good browsers customized for Android devices. I recommend Google Chrome as one of the fastest and most reliable browsers. Lots of functions, support for latest web technologies, options to save mobile traffic and simple user-friendly interface. To remove unnecessary apps, just open the settings on your phone, select the application that you don't need any longer, and tap to remove them. Here you are, a simple way to get rid of all third-party apps you don't want to keep. That's all for today. I hope this video helps you clean your phone from users' apps. If you liked this video, give it a thumbs up and subscribe to our channel. Leave comments to ask questions and share your opinion. Thank you for watching. Good luck!


So, as I was starting to say, no, thank you so much for coming out tonight. I appreciate that. I hope various protests and such are going to get in the way of a great evening like this, and then obviously it's not. So, we're going to be talking about something that's rather interesting, and I say rather interesting because when this was first announced a number of months before the anniversary update came out back in August, and I actually should find out what the exact date was, but I know from the thought of just hearing this, the fact that Microsoft was actually going to be running Linux on Windows. I thought, well that's, wow. I mean, I knew Microsoft was becoming a different company. We're certainly opening up to open source. Microsoft loves Linux these days. Our company is the biggest contributor to open source technology now today. According to GitHub, we are the biggest contributor to open source projects on GitHub right now. Which is, I think, a testimony to our drive to support the open source community. And a big part of that is supporting open source developers. And to do that, we need to be able to make sure you have tooling available to you in the environment that you want to use. And it shouldn't be a matter of, and this is actually one of our stated goals around Windows. We don't want you to go from, just have to use Windows, right? You have to use a Linux box, you have to use a Mac, and you have to use Windows for whatever. We want you to be able to go from having to use Windows to liking Windows to loving Windows to wanting to be, you know, to not be able to live without having Windows on a box. For everything that you do, whatever kind of productivity, whatever kind of development, whatever tools you're using. So that's really the big part of what we're doing with things such as containerization on Windows. We're running actually Windows containers. I don't know why I'm just doing this. Some process on my computer wants me to authenticate. It might be my office stuff here, so. If that comes up again, I'll see if I can maybe shut down the OneDrive. All right. So we, and by the way, that's a little demonstration of Windows Hello, right? Fingerprint logged me on my keyboard here. So this is really crazy that we're doing these technologies in the open source space and supporting open source technologies also in Azure. Azure is, of course, our cloud environment. And right now, a third of the workloads running in Azure are actually Linux workloads. And that number is increasing every week. We're outpacing new workloads running Linux to Windows, about three to one right now. So it's gaining on it. We need to support this because this is where people are at. This is what people are using. This is what developers are building tools for. This is what applications are running on for the sake of business. So we built this subsystem for Linux. And part of my agenda today is going to be showing you what this is all about. How did this get built? What's some of the history behind this? What is the kind of an overview of the architecture of that and how to actually then activate this Windows subsystem for Linux on Windows 10? Then we'll go into a demonstration of what it can do. So it's kind of an introduction to Bash. Let me just ask this before we continue on. How many of you are familiar with Linux? Have worked with the Bash shell or other distribution of Linux? Well over half. Almost everybody. Awesome. So some of this won't be new to you. So I won't spend an awful lot of time on some of the basics. But we're going to show that we can also not only support this Linux environment, but also supporting graphical applications as well. We actually have support for X11 and GDK graphical applications. We'll talk about some of the current features and also some of the limitations. This is a product capability that is currently in beta. So there are things that are going to work and there are things that are not going to work. And we'll talk a little bit about that. And also how you can very importantly help contribute to the community, try things out for us, report back what works, what doesn't, and so on. So we'll talk about that. And we'll talk about what the developer workflow looks like with this. Give you a couple of examples of the sorts of things you can do and some additional tooling that you can take advantage of to work with your local system to work with and troubleshoot or work with web applications to build up with some of the more familiar tools that open-source developers like. And then such as Jekyll and Node.js and C++, Python, Ruby. We have all these available to us in batch. I'll show off some of these in my last demonstration. So this Windows subsystem for Linux has kind of a longer history than you might think. We've actually been supporting a subsystem in Windows since Windows NT days in order to make this happen. There was a subsystem that we built in NT that was the goal with this being to support other operating environments, other applications or other application types that were built for other operating environments such as POSIX, OS2, and of course the Win32 subsystems, which are the ones that you're more familiar with today. But, you know, we could run OS2 apps on Windows. We could run POSIX apps. It required some recompilation, but you could actually make these apps run very simply on Windows. Similarly with the addition a little bit later of the subsystem for Unix-based applications. So SUA was built. It was an implementation of POSIX. We implemented the user mode APIs. We mapped it to NT constructs. But the ability to import Linux or Unix applications to this environment became a selling point for many developers. Of course, not enough to actually have continued further than this because, again, it did require recompilation. So it wasn't just simply a matter of taking binaries and running them under Windows. Along with this, a while later, we have this project that we call the drawbridge project. The idea here is that we have a Pico process and Pico drivers that run that spin up and kind of intercepts and allow us to then plug in intercepting calls. So when an application that's a Linux application, for example, calls to a certain API in the file system, for example, in Windows, this actually maps one to another so it does what is a similar capability in Windows. If that functionality doesn't exist in Windows, then we're building it. So we're making sure that native Linux executables are actually working under Windows, under this Windows subsystem for Linux. So what is it? It is this ability to run native Linux L64 binaries on Windows. No virtual machines were harmed in the making of this subsystem. This is not virtualization. This was actually one of my first thoughts when they announced that they were going to do this. Oh yeah, we're just going to run a Linux virtual machine. We'll make it really easy, kind of like what we did with Windows XP mode on Windows Vista. We had these XP applications running in a virtual machine and kind of made it look like it ran local and so on. No, we're not doing that. We're actually running it on Windows, in Windows, together with Windows, working with the same file system, but also taking and adjusting to the differences between the different file systems because there are, of course, very distinct differences in the file systems. We have an LX Session Manager, which is the User Mode Session Manager for this Bash shell here. The Pico provider drivers are the LXSS and LXCore.Sys, and then we have a Pico process that hosts the shell, the bin slash Bash. And here's what it looks like in a graphical form. So we have the kernel mode, which is the operating environment, the operating system, that calls in kernel mode, that actually then do this mapping so that in the heart of Windows, we actually have this LXCore and LXSS. The Bash executable is running in User Mode. It's working with a Session Manager, and every instance that we start up has its own environment and its own shell. The file system is kind of an interesting animal, as I mentioned. We have two different file systems that we have to support, and so we are going to be, we are supporting this environment with the Linux file system. So those of you who are more familiar with Linux and have maybe worked with Windows, what's one of the things that's really interesting from the command line with regard to Linux versus Windows? Slash, yeah. There's a particular direction that you have to go, and it's consistent in Linux, and not so much in Windows. What else? Case sensitivity? Case sensitivity, yeah. So that's kind of the one that's going at two with these both good answers. If you're working with the piece that is the Linux file system, there's a ball FS, we've got the Drive FS, that is what you're in when you're using, for example, the File Explorer or Windows Explorer under Windows. We're navigating the file system on your C drive and so on. Now I'll show you when we get into the demonstration how we can actually get into, while we're in Bash, we can actually get into the Windows file system. I will carefully show you that we can, from the Windows file system, get into the Bash file system using the Windows Explorer. I say carefully because that's not something that's well exposed right now and there's a good reason for it, which I'll tell you what that is in just a little bit here. But the whole result with this is the fact that we now have this ability to run Linux and Unix tools directly on Windows. So you're running the Bash show, you've got tools that you're familiar with, such as SSH, Greb, Zed, Ock. We can actually support platforms for open source system development, open source projects. We have development tool sets, such as Ruby, Python, Java, Node, C++, certainly. I'll show you a number of these as we get into it here. And again, this is real stuff. This is not virtual machines. It's on Windows, in Windows together. This is a similar slide. Give me a chance to smile at this. We'll do it again. Thank you. I got a couple of teammates that are here today cheering me on. It's nice. All right. So how do we get this installed? It does require Windows 10. It requires that you're running the 64-bit installation of Windows 10. So you have to have a supporting processor of course then to make that happen. It does have to be the anniversary update or newer, and I say or newer because you may be running in the Windows Insider program. Is anybody here a Windows Insider? All right. Awesome. Thank you. Everybody else should be Windows Insiders. Windows Insiders are able to install various rings, either fast or slow ring of releases. And it's cutting edge stuff. It's not a machine, but it gives you early access to the newest stuff that's coming out and coming along down the line. It helps you get feedback to us. It helps you kick the tires. It definitely improves the product. By the time a version of Windows is released, it's not tested by hundreds or thousands of people at Microsoft before it's released in public. It's literally tested by millions of people. So we know it's a heavy, well-tested machine when it actually rolls out into the wild. It actually had a fast ring prior to the anniversary update that did have this included. So people were actually kicking the tires of this even before it was included with the anniversary update. That said, again, remember, this is actually still beta. So even though Windows 10 Anniversary Edition is released, it came out in August, the capability for the Windows subsystem for Linux is still improving, still can be contributed to. So this is what you need to have for making this happen, the prerequisites. The prerequisite is that you turn on developer mode. This is a capability that we're building for developers. It's a functionality that we want to make sure that you're agreeing that, yes, I'm a developer, yes, I want to use my system in this way, and so you turn on this development mode in the update settings, update the security. I'll show you where that's at in the demo. Then you also have to turn on the feature. So it's actually a Windows feature that you turn on. Go into the Windows features and down toward the bottom, Windows subsystems for Linux. Next to it. That's where you actually enable it. Now once that's done, you can either go into a command prompt or PowerShell prompt, either one, both administrative, so administrator prompt, and simply type bash and hit enter. And that will then run the process of actually installing, pulling down the bits, you're actually pulling them down from canonical, and installing them on Windows. And once that's up and running, you can simply any other time you want to run it, you simply run bash again, it'll run into that shell, or you can, it actually installs a shortcut to a canonical logo application that you can run as well. And I'll show you what that is. This also points out that if you want to simply use PowerShell to enable this, you can do this. So the PowerShell command is shown on the screen here, enable Windows optional feature. And then you're, of course, doing it online. And the feature name being Microsoft Windows subsystem Linux. So, you install it, run bash from a command prompt. It's then going to prompt you for some additional things as well. So it's going to download and install the tool. And then, of course, the first thing you want to have is a user account, right? So it's actually going to create your first user. So you'll enter a name and it prompts you. You'll enter your password for this user. And then that is the user that, by default, when you log into this shell, that's the user you're using. Now, that doesn't preclude you from actually creating additional users, and working with it that way. But this is kind of your default administrative user. While you're logged in as that user, of course, you're going to be using sudo, apt-get, sudo, of course, being the ability to sort of set administrative credentials when you're running some command or something like that. So that's bash on Ubuntu on Windows. So, I'll go ahead and give you an demo. Now, again, remember, if things break, it's preview, so I've got that out. I can always say, wait, it's in preview. The demo didn't work because it's in preview. We're actually running this in user mode. We're running actual executables that were downloaded from online repositories, that were actual bits that run on Linux, now available on Windows 10. So let's go ahead and do that. First, before we get into that, I'll show you where we actually install that. So I right click on the start menu, I go into programs and features, and I mentioned that under programs and features, we scroll down toward the bottom. This is where I have the Windows subsystem for Linux. So you see, I do have that installed and enabled here. And also, the settings, updates and security, I go in here to for developers, looks like I've got some updates to install, and notice I've enabled developer mode. And I won't install my updates right now, we'll wait for it a little bit later. So then once I've done that, I mention I can simply run an administrative command prompt and type bash, I'll actually do some more work with a larger font for you later. But boom, there I am, I'm in bash. Now the first time you do this, of course, this is when it's actually going to do the install. So I've already done the install, it's not going to do that, it's simply going to log into this. Notice interesting thing too, I'm actually put into a mount point on a C drive in the Windows folder on the System32 folder. Does that look familiar? If I exit this, that's the folder I was in in the Windows system, right? So it's actually now, showing me what that map point looks like when I log into the bash shop. Now let me exit out of this, and instead, I've set up a shortcut on my start menu here for bash on Windows. And this is that installation that happens also. You'll find it in your list of applications once you install this. Let me go ahead and make this a little bit larger so we can have some fun with this. Make sure it's all on the screen for you. Is that font okay, or do you want that a little bit larger? Just a little bit bigger? Alright. By the way, I should show you as well, maybe you don't know this, but Command Prompts, PowerShell Prompts, and even the bash on Ubuntu on Windows has an opacity. Opacity? Opacity? So I can actually make the window kind of see-through. That's a new feature that people don't actually realize is there, but I think it's kind of interesting. I don't use it much personally, but it's kind of nice if you want to be able to see what's behind the screen when you're, or behind that command window when you're working with it. So how's that? Is that okay? Alright, that should be good. Good. So now I'm currently deposited into my home folder in this case. So if I do an LS, of course, it's going to give me a listing of the files. I've got a couple of demonstration folders and files that I've set up here for today. If I change directory to the roots, then I see a whole bunch of blue text that's really hard to read, but if you can make some of that out, you're familiar with the Linux file system. Some of these should be familiar to you. So I've got my boot, data, EDC, or Etsy, Lib64, and so on. So these are all here. They're all what you expect. You install an application. It's going to install into the bin folder and into an application folder. Now, I can also, as I showed in that last command shell, change to the C drive. Now, what's interesting about the user's folder? Well, it's a capital U, right? If I type U and hit Tab, it doesn't know what to do with it. I have that in a capital U. There you go. Case sensitive. My kevrum folder and let's go to the Documents folder, which is also a capital D. If I do a listing here, those are the files and folders that are in my Documents folder. Of course, I can look at the details and permissions and all that as well. So let's do a couple of well, actually, you might be curious about what's going to change to my home directory, is what version of Linux am I actually running here? Make sure we don't lose the bottom screen. So I'm going to enter LSB release dash A. Thank you. And yes, it is. It went to 1404.5. It's the trusty release. So we can see that here. Walked you through some of the file system. So I can run tools and utilities and anything, you know, if I want to update the system, for example. Now, I don't know if I'm actually going to find a bunch, but it seems like every time I do this, I do get a whole bunch more updates. But I can do a pseudo app get update. And it's, of course, the first time I run pseudo, it has a time, you know, it's going to actually prompt me for that password for my account. And notice where it's actually getting the updates from. This is where we expect it to be. Deb.nodesource.com security.abuntu.com trusty updates, trusty backports. So it's the same place that your Linux installations are going to get their updates from. And the same thing with app get upgrade. You can do that as well. Installing a file or installing some tool. Let's say I'm curious what my fortune is. But I've already got fortune. And I've already got the current version, so I don't have to install it. But that's as easy as it is. Just do the installation of the applications and pull it down from the online repository. And of course, if I run what my fortune is, you'll be told about it tomorrow, go home and prepare thyself. Okay, good. Tomorrow's a big day, David. All right. How about Kaosay? Very important app. Actually, you know what I should probably say since I know you should know your audience.  Of course, I can import applications one to another, right? So Kaosay can actually tell you your fortune. Silly, silly examples.  Anybody else play Rogue back in the day? Uh-oh, what happened? Oh, I'm not using enough graphics real estate for this.  That's interesting. Let's reopen that. There's a bug. I gotta report that one. I just tried that, but it cleared, but then it's still giving me... Line feed. And that's another thing, too. Interesting thing between Windows and Linux file systems, right? In terms of the file formats, the carriage return line feed is different. And sometimes you'll take a text file from one, bring it to the other, and now you've got one long stream of text instead of what looked nice and formatted before. So those are the little things that you gotta watch for. But of course, all the editors that you're familiar with in the Linux environment are gonna be available to you here. So if you love Vim or Vi or whatever, you can install those and work with those here as well. Many of them are installed by the phone. Let's go ahead and close this, just reopen it so we can clear that up. And move that over a little bit, right? Well, we don't have to run a road. We'll play a road later. All right. So I have a... I mentioned that we actually do have the ability to work with X-servers and X-loving graphics. And I have actually installed a couple of tools so to run that on Windows. So if I just run this X-server, it's gonna put it down on my system tray and it's gonna make that system available to me. And I do have to export the display. And I could have put that in my BatchRC file as well, but I'm just gonna do it here, manual. Looks right. And now I can run the tools that I've downloaded that are graphical, such as XIs. Important stuff, right? So there's XIs. Follows my mouse around. How about XCalc? There's a calculator. Those calculator work. Two plus two equals four. Good. Has it not been done yet? Thank you, David. Thank you very much, thank you very much. I'm here all night. Okay. That was the other one. Clock, yeah. So just kind of a, you know, silly examples of the fact that we are running these Windows, but I'm full screen if you want to, and on top of Batch. But they're using that X-servers capabilities. In fact, let's go ahead and close these. There's actually a fun little game.  XBill is the story of XBill, is yet again the fate of the world rests in your hands. An evil computer hacker known only by his handle, Bill, has created an ultimate computer virus. A virus so powerful that it has the power to transmute an ordinary computer into a toaster oven. So, ooh. And the point of the game, whoops, just need to exit the game here, is to stop Bill from replacing all the operating systems we love with Windows, right? So here's coming in with Windows and he's going to replace it. Oh no, he's replacing one there. Let's get him. Let's stop him before he gets there.  No. Go ahead and exit that. So it's interesting because, you know, hey, now we love Linux and the open source community is actually embracing us now as well, which is encouraging. Hopefully for some stuff that we're doing like this. So gosh, even beyond that, I've got a great example of another fairly intense graphic application. In fact, if I list my folders here, you kind of see one example, a little bit of hint of what it is. I've installed a freeware version of Quake on my PC and with some scripting and some examples. And my friend Paul DeCarlo actually has a great blog post on how to get this to work. I've actually got Quake running in this X server. So here it is. So we can go ahead and look for people to shoot or whatever they are, monsters. I haven't actually found one yet. I haven't played this long enough to do it. It's really kind of dark on the screen. It's kind of dark there, but kind of see what you have the capability of doing here. Close that out. All right, so that's just some example and really, again, kind of simple, silly examples, but really the proof point is that we are running native Linux binaries on this bash shell running on top of Windows. And with the support of Canonical and their Ubuntu builds, we will continue to do that. And you have a question. I was wondering about the X Windows server that you're running. Is that provided by Microsoft or somebody else? No, I found that online. It was pointed to it online. But there's a number of versions. This one was... Actually, let me open this up. Actually, another thing that one of my other teammates actually created, a kind of interesting script, a PowerShell script actually, that if I open the folder here, she has it up on GitHub, so I cloned it here. But if I open this folder in Visual Studio Code and again, I apologize for part of the screen being cut off here. But she has a Xminc set up that PS1 file that actually prompts which version you want to install and actually uses chocolate to do the install of whether or not you want to do Xminc or VXServe, which is the one I have here. And I think there was another option. No, maybe there's just the two. Anyway, she kind of scripted that to make it. But those are some of the ones and some of the URLs are here. Or you can search and find Xserver. Easy enough. So any other questions? Thank you for that. Alright. So just a quick introduction showing off some of the fact that we can actually run those binaries here. And even take advantage of some of the more graphical ones, more graphical in nature. So we saw user mode and kernel mode participating in this, Ubuntu running in user mode, the VXShell running there, being able to install tools on that. I didn't actually get into the developer tools yet, as you see on the slide here, but we'll get to those in a minute. Running on the subsystem for Linux. It's available and supported in the Windows kernel, so it is a native part of the operating system that you can turn on. It's the addition of that feature. I don't know if the developer mode will always be required for this feature. Very, very likely maybe. But the fact that we can actually work with this on a Windows system means we might be able to do with one less piece of hardware. The main point of this, the point is we want to be productive in whatever way you want to be. So what works and what doesn't? This is brand new stuff. So there's going to be gaps. It's improving all the time, but you do have to be aware that there are some things that are not going to work. For example, I'm also getting into containerization. Anybody here work with Linux containers and Docker? Anybody? Docker containers being able to have a small image that represents an application that requires a base image beneath it, then quickly installs all the pieces it needs and runs on top of an operating system. So it's not a virtual machine. It's a virtual operating system really. So it's the next level up. But we actually now support Windows containers now as well. Windows operating systems can be running in containers that way and support containers. So, and that's I'd love to be able to run Docker on Linux as an example of running Linux containers in this bash environment. But because Linux is really just, or this bash is really just a shell, there are pieces of the kernel of Linux that really don't apply here. I'm assuming that the reason Docker doesn't work in this environment is because, yeah, that requires some real knowledge of the operating system as a whole to make it work, or actually pieces of the operating system to make it work the full Linux kernel. Many popular tools work well in testing. App to get Ruby, Git, Python, G++, Quake, important tools like Quake. But there are some things to avoid. NPMs has had some issues. I've had issues with it trying to get certain things installed. The Azure command line interface, for example, the cross-platform interface running on bash, it does work really well, but there's some tricks in running the proper installation order in order to make it work properly. Go, Rust, of course, CLR also have some issues, and those issues are being fixed even as we speak. We do want to work as quickly as possible to close the gaps, and that's why we really want you to try things out as well. There's a lot of, you know, how many scenarios could there possibly be out there, right? I mean, it's crazy permutations as far as number of apps and number of combinations. So we do have a list that we're maintaining, and you can contribute it. You can watch it and watch it and look for things that you may have tried, or maybe some solutions to things you've tried that you may have found didn't work. This list is being maintained and updated all the time. So let's talk about your developer workload using bash. Out-of-the-box, simple DNS tools, tools that are built for troubleshooting, or who is, and let's look up, these are all part of the operating environment. Of course, you want to be able to do remote client connections, so SSH is supported, both as a client and as a server. That's actually one of the blog posts my friend Jessica Dean put together. I've got some links to their resources at the end of this deck, plus a link to where you can get this deck, so if you want these URLs, you can actually have them in the deck. But SSH she actually set up her window system as a SSH server and she connected through it from her Mac and was able to do some interesting development workload through that. Now that's not so tricky except she also showed how to do it with certificates, so it's automatic certificate authentication from one machine to another. No longer to have to use putty. If you want to use the SSH from the bash subsystem, yeah, you can just use that. If you want to do it straight from windows, then yeah, you can use putty. Honestly, I think there's another tool that I just heard about the other day and I don't recall what it is, but do some searching on that because there's actually some additional pieces you can do in windows. I have to investigate further to actually say specifically what that was, but I think there's other options. Telnet, of course. Integration with Visual Studio Code. This is kind of interesting. And Visual Studio Code, for those of you not familiar with it, is a very lightweight open source, actually lightweight but yet very powerful because it's extensible, coding environment. So I can actually use this to build applications, many different platforms, many different languages supported, many different plugins to add additional capabilities to supporting those languages and beautiful intelligence and text formatting and even opening up a terminal window underneath the coding window. And that terminal window, guess what? It can be your command line, it can be PowerShell and now it also can be bash. So I can actually set this up to have a terminal window at the bottom of my coding window where I have access to bash directly. There we go. So that's my next demonstration. It's kind of showing off from a developer point of view the sorts of things we can do with bash here. Can we code? Yes, we can. Let's go into that again. So I have Visual Studio Code open here but we'll come to that in just a second. Let me show you some simple command line tools here. I happen to have a number of folders that again you probably recognize some of those names. So for example, let's go into Python. So I've got a file called hello.py. How do you do hello world in Python? Hello world? Let's see. Yep, print hello world. Okay, so if I run it, yep, Python's there and so Python. What about Ruby? How do you say it in Ruby? Is it just hello world? Okay. What do I know? Let's see. Okay, so how about Ruby? Put s hello world, okay. Sure enough. Here's a tricky one. How about C++? David? It's like three lines of code. It's like three lines of code. But it has annotated every letter. Well, yeah, you got to include the upstream. You have to have a main function and you can send it to standard out. Yep, but then the results are not and of course C++ is a compiled language, right? So I have to actually compile it. We don't have FoxPro in here. Sorry, David. Let's see. Nope. It's just as hello. Okay, so it's compiled and I should be able to run hello world. Cool. What about let's see. I've got a file here called app.js. Now again, I'm not a developer. I'm usually an IT pro. So some of these examples were built by other people. So if I say things that are a little bit off, please forgive me there. But my understanding of this application is actually setting up a web server and then answering to a request. So it's actually listening on port 8000 on the local host in this case, <IP_ADDRESS> and it's going to respond with hello world when it's called that way. So I can do this, run it in the background and now it's running on port 8000 at local host. So I can do curl local host and I get hello world. Hey, cool. What about the browser? Hello world, very tiny up there. Oh, you can't see it. Hold on. There it is. Hello world. All right. Now, yeah, there we go. See, any other examples here. I've got some notes here so I don't forget to show you something. Let's see here. Oh yeah, visual studio code. Remember I mentioned that we can integrate to the terminal. So right now, I've just got the command line terminal opened up when I choose to open that up. So the way we would do that is we have an option to view the integrated terminal. It's just control with a back tick and that will open up the integrated terminal. But right now my default terminal is actually running command.exe. Well, I've got an example here that I'm going to copy from my friend the justice code and I'm going to close these here. Actually, it doesn't matter if they're closed. I can actually go into the preferences. So if I go to preferences, user settings, here's that file settings .json. I'm just going to copy this all into here and we're going to make sure that it's not the power shell as is enabled right now because that's the uncommitted code. Sorry if that's all there. It might be a bit big there, but let's actually close this terminal here and instead uncomment, not that, uncomment these two lines here and comment this one out. Save it. Now go ahead and close visual studio code, open it back up again and now when I open up the terminal I'm actually running the bash shell. So we can actually do our work here and actually we can do bash commands, list commands from and work with list applications right from this terminal window right into visual studio code. Now I'm going to open up, I'm going to create another folder in my bash environment here and actually I'm going to cheat just a little bit because I want to make sure I get all the commands in the proper way. So I've got a just a scratch text file that I copy and paste from here, but I'm going to create I'm going to do this here.  So I've created a repository up in GitHub that I call Jekyll demo and I'm going to clone it to the local system and I'm going to work in that folder. Let's actually do it in the documents folder though. So if I, oh it hasn't been created yet, wrong one, this repository because I have git installed pulls it down and it's an empty repository. I just created it in GitHub so I haven't done anything with it. If I look at what I have here I'll see if I can go to that folder that was just created. I actually have a readme and if I look at the long list of files here there's a gitignore file as well that came out from GitHub and a configuration file. So these are basically I have now a new repository. Let's open that up in visual studio code. So I'm going to open up that folder here and what that will show me is that I currently only have those two files but I'm going to run a command to create a Jekyll application a new Jekyll application in this folder and we're going to see these files show up in visual studio code. So if I have to force the new because there's files already in the folder and put it in the local folder it's going to create this new Jekyll application for me. I may see an error on this, hold on a second. For some reason the I guess that worked, let's see, nope. Let's try this again. Again in preview some things work, sometimes they don't, you run it the second time and it works. But now I've actually got that application created so I can go back to visual studio code and there's those files but what's interesting also is that these files are not only here let's go and get that bigger here but because I've integrated this and this is interesting it's not showing this, there they are. The changes also show up in visual studio code. Visual studio code also integrates with GitHub and it knows that this happens to be a repository that I've cloned and so it also shows me that I've got seven files that have actually changed and I can actually integrate with Git both locally as well as with my online repository to say, okay, commit these changes here, alright, go ahead and sync them up to my cloud repository. That's pretty cool. Let's go ahead and edit one of these files. I've got the config.yaml files actually where the title of my web application is going to be so I'm going to just make a modification here. Go Vikings. No, I won't do that to you. Okay, and we'll save that file and now I'm going to go back to my, and again I could do this from the terminal window as well. It's just a little easier to see in this Ubuntu window here, in the bash window. So now I will go ahead and Jekyll run with the right command. I just want to make sure Jekyll serve, sorry, Jekyll serve. So we'll paste that here. But I have to not type Jekyll, Jekyll, just Jekyll. There we go. Alright, so the app is running and it says the server address is <IP_ADDRESS>00 so let's open it up on port 4000 and if I copy that properly to the clipboard open up a browser go to that web application there it is, go Cubs. So running the local web application that local server. Now, this is a partial demo, okay. The reason I say this is a partial demo is because ultimately what I can do with this because I also have the azure command line tools installed here I could connect to azure from my local system. You know what, I can do that part of it anyway. Let's do that. Control C does want it to stop. There we go. So yeah, I'll just go ahead and do an azure log in. So if I just run azure we'll actually see that the tools are installed and it'll show a nice little ASCII text azure cloud in there. It's kind of cool. But to log into my azure subscription it's just azure log in and whenever you're using the azure command line interface and trying to log into the account you're given a note to say go to this location aka.ms slash device log in and enter a code that's authorized. So it knows that this is actually coming from someone we trust and that web application is actually going to then prompt me to log into my account so aka.ms device log in paste the code here sees that and recognizes it and I continue and now it's going to prompt me for some credentials. So I'm going to go ahead and use my corporate account here. So it's logged me into it in the browser and actually if I open a new tab and go to portal.azure.com I've already authenticated and this browser will actually bring me straight in there as well. But back in the Ubuntu world it says log in okay good cool so I can do azure commands I can list my resource groups for example maybe not azure is it list group well I don't remember anyway the oh interesting the default mode is azure service service management that could be why azure config mode azure resource manager let's try azure group list sure enough there they are resource groups a little more azure than we were supposed to be doing tonight but the point being I could actually run a command like this that creates an azure website and then I can use get to push my changes any changes that I make that code in that Jekyll folder not only to give up but also up to my azure website and use this to actually publish new changes to the azure website directly from the fan line here in bash so just another good example of how we can connect these services in a workflow that really makes sense particularly when you're now getting to the point where you're publishing it to a cloud based location so I'm going to give you a call to action here as I mentioned earlier we do need your help this is a solution that really needs lots of eyes and of course the more eyes the better kick the tires for us this is in Windows 10 it's available now in the current public release just enable developer mode enable the feature just run bash install it start playing with it and see if you can break it in fact for those of you that are linux experts much more than me we'll just take a quick second to try to break our linux environment right here so come up with some commands that might actually mess my system up if you would think about it for right now we'll do it in a second do tell us what's broken give us examples of what works and if there are things that you want changed certainly we want to hear about that you can share your experiences with the user voice pages of Microsoft you can share your experiences with the team you can share your experiences directly to the product manager he is actually making himself available as well his name is Richard Turner his twitter is at the bottom of this screen here so get into that user voice go to github and look at the issues, the list of issues people have found and resolution the community has been really great a lot of the back and forth of this didn't work other people give ideas of what they tried that actually did work or fixed a particular problem and of course the product team is eating it up and taking good advantage of your feedback so please please please do that for us here's some additional resources that you started again these are links to blogs from some of my teammates as well as some of the resources from my blog and my facebook location and twitter handle is actually just Kevin Remedy but if you want to contact me there don't worry about writing all these down though because the last link here on this slide is aka.ms slash b-o-u-o-w that doesn't have to be capitalized that way I just did it for readability that stands for bash on Ubuntu on Windows so aka.ms b-o-u-o-w we'll get you to my OneDrive presentation and go ahead and take advantage of that download these and take advantage of the URLs and again, please help, please contribute to this we really appreciate it any other questions before we try to break my Ubuntu installation here but let's wait to do that one last great, that's a good idea now should we ask what about other shelves none of the shelves at this time no, we've been working very closely with Canonical and making Ubuntu work on Windows that means we have to actually be like I said, mapping calls to like commands in the Windows subsystem or actually creating the functionality on the Windows side so what would happen if you would if you simply install them oh, that's good, well I don't know that's something we can actually try but actually, you know, you just reminded me of another demo I can do before we do that I'm going to close this X server here this is actually running that this is a Windows version I've got actually another kind of a cool example I'm going to run a full screen server take the defaults there now that full screen server of course is very black right now, there's nothing running in it but if I go back here and see the command was I've actually installed X Ubuntu desktop that took about 40 minutes to install so it's not for the faint of heart I've seen other Ubuntu desktops available also but if I go back to that server you can't see the whole screen here but I've actually got the file system list here the home folder although I think it's going to give me an error initially when I run this this is embarrassing I've actually got Firefox running on a patch on Ubuntu on Windows so we've got the Linux version of Firefox running here so you can do a lot with this so I'm going to if it can be installed it's another shell why can't you just run it? I don't know how to do it do you tell me how to do it? ok let me close this up here yeah, for fun for sure apps up sudo get install tcsh alright wait oh yeah ok so then what do I do how do I know I've got tcsh because I don't have colors that's one indication well you can ps ok ps oh there it is sure sure seems to be working I mean you can run a test suite or something like that that's interesting tcsh yeah exe tcsh good to know, thank you let's get another one up here what would you like to do? if you try the gimp it's new image I haven't tried it but no I'm going to guess it would work but I haven't tried it let me get that from you at the end here because I definitely want to try that you said you installed the desktop right? yeah what was it again? I don't have the server running let me just go ahead and run the server again ok so say again gimp ok couldn't quite hear it can I open display do I have to export display? how do I do that? look at that so it's obviously not working yeah it does you know there's actually a 3D paint now available you can actually build 3D yeah 3D paint look at the windows store for it yeah is it, do you know David do you know the 3D paint in windows? there's a 3D version of paint Microsoft Paint it was a rumor for a while it was a rumor for a while oh was it in the center? yeah maybe it will be cool other things you want to try? let's try to break it run system D ok say what? do it again? run system D run system is that one word? install no installation candidate by that name services ok looks like it didn't install what do I do with it? why are you thinking of that let me just go ahead turn off developer mode see what happens with that can I actually do that do you know David is that a one time choice? let's just side load apps but it's also required for the subsystem for linux I'm not sure if just turning on side loading apps developer mode is as much as I can do it looks like you can't actually turn it off no that's not true you know we have the what's that called the moonlighting clauses? yeah and that may require a restart too but I'll just go ahead and close this and try to reopen it up again well hey you know what you're not running that now so you do need that did you get it turned off? not only in that developer mode so it just wouldn't run interesting so if it was already running let's see let's suppose you get something going out well it doesn't appear to stop it but it won't let me run it again how about emails? oh yeah let's go ahead and turn that back on again nope I don't think I have installed them application? well then we might be standing here watching it down from time to time any other questions while we're installing more stuff? windows file system features and expansions that are not you have to well in the shell you can navigate to the file system the windows file system and also in the windows file system you can navigate to the linux system I'll actually show you where that's at but after I show you this there only because like I said you can actually mess things up but it's actually under the app data folder local under your profile and it's the lxss folder so here's my file system that's kind of where it's hidden but again do be careful if I start going in here and start editing files my c++ application for example the entire folder subtrees by playing around with files using the explorer here in windows so it's very very delicate right now I suspect that they're going to try to make it more robust eventually and maybe not even hide it as much as they are here but for right now it's very delicate oh good okay so enex there we go I'm sorry the you started a new shell so the explorer is going okay oh alright yeah you're right so oh I see what you're saying okay so let's I didn't probably have to do that got it my server's still running I guess you've already showed this that the clipboard works back and forth yeah yeah it's a right click you can paste that away control V no right click on the mouse yeah that's a great question um I don't know I should think it'd be nice enough it would be nice of them to say oh well that's a windows program we'll go ahead and open it up in a window but honestly I haven't given a try out to give that a try out I don't think I have a console I can so oh by the way what am I supposed to while we're in the emacs piece what am I supposed to say yeah okay alright so that piece didn't work so great there you go well that's what I'm expecting you guys so um so uh yeah let's see what do we have well there's no pad installed there it is nope that's a that question okay cool thank you this is great I'm learning so much I appreciate you guys doing this great anything else I really appreciate your time tonight hopefully you found this useful enjoy your evening and uh safe trail as well thanks very much that was the end by the way