So this topic on data transmission we have just one one section left channel capacity and what we want to arrive at at the end of the lecture today is two different equations that show us a relationship between bandwidth, bandwidth of our link and data rate, also called capacity. Channel, our communications channel or communications link, capacity is how fast we can send bits across that channel. So think of the capacity in terms of bits per second. So we'll see a relationship between bandwidth and data rate. But to do this, to understand this, we have to introduce one or two different concepts along the way so it would take the whole whole lecture. And the first concept is decibels. Hands up if you know about decibels, DB. Everyone's heard of DB decibels? Okay, simple. What's a decibel? Well we would see in communication systems that we use DB to measure systems or measure in particular gain and loss of systems. So we need to explain a bit about decibels first. And I'll go through some first some simple examples. For any system whether it's communications, almost any system where we have some input and output, we can look at the gain of that system. So a financial system, you go and invest a thousand baht in some company. And then a week later you get return of 2,000 baht. What's your gain in that case? You start with a thousand baht, you invest it and a week later they give you some money, 2,000 baht. Your money plus another 1,000. How do you say, how much did you gain in that case? How much money did you gain? 1,000 baht? Okay, that's the absolute how much money you gained, 1,000 baht. Now think of how much you gained relative to what you started with. Start with 1,000, end up with 2,000. What's your gain relative to the input? Sorry? 100%. Okay, correct. And another way you can look at it? So you're correct, but there's another way that we can describe we could say I doubled my money. I start with 1,000 and come back with 2,000. I've doubled my money, which is really a factor of 2. That is, take the input multiplied by 2 and I get what I received at the end. So we can say that's one way to express the gain as some factor or as some ratio between the output and input. So in this system, I can say my gain is 2, a factor of 2. I start with 1,000 baht, I invest it and a week later I only get 250 baht back. What's my gain? Haven't been successful. What's my gain now? I've lost I know 750 baht, but from a relative perspective, what would I express the gain as? Any guess, attempts? 0.25, one quarter. I start with 1,000, end up with 250, that is, I've got a quarter of what I started with. So think about a multiplier. The end value is 0.25 times by my input value, my initial value. So that gain is the multiplier. In the first example, I start with 1,000, multiplier by 2, the gain, I end up with 2,000 baht. In the second example, I started with 1,000, I multiply by 0.25, one quarter, and I end up with 250 baht. So that multiplier is the gain of the system. In this case, it's less than one. What's another word for a gain which is less than one? I didn't go up. So what happened? What happened to my money? I lost money. I start with 1,000, I end up with 250, I've lost money. So we can also say that's a loss in that system. And a way to quantify that loss would be a factor of four. I start with 1,000, I end up with 250, I'd say that's a loss by a factor of four. I've got four times less than what I started with. So in fact, the loss is an inverse of the gain. My gain in that system is 0.25, one over four. My loss was four, just the inverse. So with any system, we can talk about the gain and the loss of the system. And it's especially used in communication systems. For example, I transmit a signal from my laptop to the access point. That signal has some strengths. And we said yesterday with attenuation, the signal gets weaker. By how much weaker? Or another thing we say, we lose power. We start with some power. The signal gets weaker. We end up with some received power. So we've lost some power. We often want to measure how much we lose. Similar sometimes we have an amplifier. In my audio system, I talk, so I produce audio at one output. It goes through the microphone to the amplifier which increases the signal output. So what you hear by the speakers is louder than what is coming out of my mouth. So there's a gain in that system. So we want to quantify the gain and loss of communication systems. So think simply, the gain is a multiplier. We can express that with some picture and simple equation. Let's try. What do we start with? We have a system. I'll just represent as a box. And we have some input. Something comes in and something comes out. And with communication systems we often care about power. I transmit my signal with some power level. My audio system has some power output. Power usually measured in watts. So I'll say the input to my system is some power level P in. And the output P out, P for power. So here's my system. I take some input power into my system and it does something and I get some output power. Well, the gain of that system is the ratio of the output divided by the input. So we can say the gain, let's say G, is P out divided by P in. Same as our money example. I started with 1,000 baht. I end up with 2,000 baht. The gain is 2. 2,000 divided by 1. Or in watts, for example, I have a communication system or maybe an audio system. My input is 1 watt. It feeds into the amplifier. The amplifier has a gain of 2. So therefore the output of that amplifier, P out, will be 2 watts. So an example. This is the input, 1 watt. That's this out. P out is 2 watts. We'd say the gain of that audio system is 2. There's no units on the gain. It's unitless. It's a factor, 2 times larger. The output is 2 times larger than the input. The loss is the inverse of the gain. So we can write a general equation. Another way, we can also talk about loss L. Simply is P in divided by P out. Sorry. P in divided by P out. In this case, we could say the gain is 2. The loss is 1 half. It means the same. Just the inverse of each other. I transmit using my laptop to the wireless access point. I transmit a signal.  We can measure that in as a power level. And let's say I measure the output signal from my laptop. It would be 100 milliwatts. It's 100 milliwatts. A typical value of a wireless transmitter. It transmits power at 100 milliwatts. It propagates across the air. It loses strength across distance. It attenuates. And let's say I measure it at the receiver, and the measured value at the receiver is 1 micro watt. What's the loss? That's 100 milliwatts. Not 160. 100 milliwatts in the transmit power. We lose signal strength across the distance. That's something we cannot avoid. It attenuates. And the receiver has 1 micro. This is mu here, or u. 1 micro watt. What's the loss factor in this case? So be careful with the prefixes. Million micro watts. But otherwise, loss, think of the input divided by the output. Anyone? How many micro watts in 1 milliwatts? Millie, remember, is 10 to the minus 3. Micro, 10 to the minus 6. So there's 1,000, or 10 to the power of 3, micro watts in 1 milliwatts. 1,000 micro watts in 1 milliwatts. Therefore, in 100 milliwatts, there would be 100,000 micro watts. Or, if you want to do the maths, you just 100 by 10 to the minus 3 divided by 1 by 10 to the minus 6. And the answer, 100,000. No units. The loss factor is 100,000. That is, I transmit my signal at this level. It's reduced by a factor of 100,000 by the time it's received. Any questions about gain or loss? We haven't got the decibels yet, but we will next. Gain, the factor we increase, loss, the factor we reduce by. They're the inverse of each other in these absolute values. So we can use these values, gain and loss. But in practice, especially when we have very large values, very large loss values, or very small values, and when we want to perform operations on those values, it sometimes helps to convert them into a different scale. And that scale is decibels. So a decibel is also a measure of the ratio of two levels, two power levels. The gain is one power level divided by another. The general formula for a decibel for the gain, we can express the gain in dB decibels. And the general formula, 10 times log in base 10 of the gain in the absolute value. This is dB decibels. That is, if we know the gain that we've calculated above the absolute value, like two or a loss of 100,000, to convert it into the decibel form, we take the logarithm in base 10 of that value and multiply by 10 and we get the gain in dB. What we're actually going through is in some of your, one of your handouts toward the start of your lecture notes, the definitions, concepts, acronyms, prefixes, logarithms, decibels and signal strength. So you've also have some of it in your notes. This equation. The gain in dB is 10 times log in base 10 of p out divided by p in, where in my notes I've written p out divided by p in is just g. So note there's a different subscript g, I say is the absolute value. G subscript dB is the gain in decibels. Think of it as just a different scale. The same can be said for loss. The loss in dB is 10 log base 10 of the loss, the absolute value. So dB is not a unit here. It's still when we say 10 dB, 20 dB, it's still talking about a ratio of two different levels. But it's just on a different scale than our normal absolute factor. And we take a logarithm and the properties of logarithms often help with if we have numbers in dB, then we can perform operations easier than if they're in the absolute value. And that's one of the advantages of using decibels. Also, when we have very large numbers, this isn't too large, but 100,000, what's the loss in dB for 100,000? Calculate the loss in decibels. If l is 100,000, the loss in decibels, log base 10 of 100,000, which is, okay, this is stuff you did five years ago, logarithms. What's the log of, let's start simple. What's the log of 10? 1. What's the log of 100? What's the log of 1,000? Log of 10,000. The log of 100,000. 5. We're using base 10 here. 100,000 is 10 to the power of 5. The log of 100,000 is 5. Multiply by 10, we get 50 dB. L equals 100,000 is the same as 50 dB, 50 decibels. Just the same value, but in using a different scale here. What about the gain of 2? How many dB? Approximately. The gain of 2? Well, you may need your calculator. That's later. With the gain of 2, the log of 2 is 0.3 approximately, times by 10, about 3, 3.01 in this case. So a gain of 2 is equivalent to 3 decibels, 3 dB. So a gain of 2, I won't write it down, 3 dB. And that's actually one useful one to remember, because a gain of 2 is quite common. A gain of 2 is 3 dB means if we double something, it's a 3 dB increase. Let's write it down. A gain of 2, we've got 3 dB, about 3 dB. What's a gain of 4? How many dB? Of course you can use your calculator, but maybe you'll find that it's just doubled or another 3 dB. You can check. And a gain of 6, anyone want to guess? Sorry, a gain of 8. Doubling each time is a 3 dB increase. So from 2 to 4 is doubled. It's an extra gain of 3 dB. From 4 to 8, if the gain was 8, it would be 9 dB, 16, 12 dB. Just keep adding 3. That's one of the properties of logarithms. When we multiply in the absolute values, we can add when we're using the decibels, the logarithmic values. And that property of the log of A times B is equal to the log of A plus the log of B. So that's sum that we may see in practice that 3 dB, 6 dB is a factor of 2 times 2 or 4. 9 dB, factor of 8. 12 dB, 16. I don't ask you to remember them, but we'll see them in a moment. 3 dB. What's the loss? Loss in dB. A gain of 2 is a loss of, well, forget about decibels. If I have a gain of 2, I can also say that's a loss of 1 half. It's the inverse. I start back to my money. From 1,000 to 2,000 baht is a gain of 2. Or from 1,000 down to 500 is a loss of 2 or a gain of 1 half. They are the inverse of each other. So a gain of 2 is a loss of 1 half, but in dB, a gain of 3 dB is the loss of, now calculate. So the loss is 0.5. Use our same equation. Let's try. So the log, sorry, log of 0.5 times 10 minus 3 dB. Again, due to the properties of logarithms, we will see that a gain of 3 dB is the same as a loss of minus 3 dB, approximately. A gain of 6 dB is the same as a loss of minus 6 dB. When we're using the absolute values, gain and loss are inverses of each other. When we're using decibels, it's the negative of each other. So 6 dB or minus 6 dB. And again, that's much easier when you're dealing with dB. You can quickly convert from gain to loss. Just change the sign of that number. If I have a gain of 24 dB, what's the absolute value? A gain of 24 dB. We're going to need this value later. That's what I want to calculate now. Calculate the absolute value. What's the answer? If our gain is 24 dB, that is the same as, well, 24 dB. We have the value in dB. 24 equals 10 times log of the absolute value. So just solve for this value. 24 equals 10 log something, which means if we divide by 10, 2.4 equals 10 log something. 2.4 equals 10 log something. Therefore, something equals what? 10 to the power of 2.4. And you need to calculate it. I've done it before. It's about 251. Just one example of going the opposite direction. So there's a lesson online for those who can't remember logarithms and exponentials. We're not going to teach them in this course because you learned them many years ago. But go and refresh your memory on some, especially some of the properties of logarithms because they come useful when we do calculations and how to quickly solve them. With that said, you can use your calculator in the exam, but sometimes you need to do something quick in your head. A gain of 251 is also a gain of 24 dB. A difference of 3 dB is a factor of 2. If I go from 3 dB to 6 dB, it's a 2 times increase. If I go from 5 dB to 8 dB, it's a 2 times increase. So a difference of 3 dB is a factor of 2. That's a useful one to remember because you will often see it. We'll see an example of or two examples of decibels. Any questions before we return back to our course, back to our signals? Of course, dB are used not just in communications, well, in many systems. Our audio system, you talk about the characteristic of an amplifier, maybe measured in decibels. Actually, I want one more example before we go to the lecture. Now let's go back to signals. Just a quick example. This is part of our lecture recorded yesterday, some audio, a wave file which I've opened in an audio editor called Audacity and it shows the audio signal as a function of time. So we can see the magnitude varying over time. Over about two minutes of audio. Two and a half minutes. Nothing exciting there. We can zoom in. So it's just a measure of this. So it's an example of a signal, in this case an audio signal. We can zoom in and see the details of that. So that's over a period of 10 milliseconds. We just see the oscillations of the magnitude of that signal. It doesn't look like a perfect sine wave, of course. Our real signals are much more complex than just adding two sine waves together as we see here. It looks like some random variations, in fact. But in theory, what we can do is take this signal in the time domain and do analysis that splits it into a combination of many individual sine waves, sinusoids. And if we then look at each of those sine waves and look at their frequency, we can inspect that signal in the frequency domain. So we can look at the spectrum, the bandwidth of the signal and plot the signal in the frequency domain. This software does it for us. If I zoom out, select all of this. I can do some analysis and plot the spectrum, which is, in fact, produce a plot of this signal in the frequency domain. Remember, we saw plots like very simple ones with some impulses at particular frequencies. But more complex signals have a wide range of frequencies, not just two. This one contains many frequencies. So when I plot the spectrum, it's going to produce a plot like this, but we'll see that there are many, many impulses. And there they are. In fact, there's so many that it combines them, which is the common way to view it. That is, this is the frequency on the axis, on this axis. And this is the peak amplitude. So approximately at the frequency of around 500 hertz, so 0 to 1000 hertz, around 500 hertz, this peak amplitude is the highest. That is, we say that the signal is strongest in these frequencies. We see it's the highest here. In this range of frequencies from 1000 up to 2000, it's much weaker. And there's, in that audio, there's also some frequencies in the up to 15,000, 20,000 hertz. But their magnitude is much smaller. How much smaller? And this is where DB come in. It's commonly used in such a plot. Be careful. This is in decibels. And we see the difference between here and here is 6 dB. A difference of 3 dB is a factor of 2. A difference of 6 dB is a factor of 4. What that tells us is the magnitude of the signal here versus here, this one is about 4 times smaller. So if we drew it, say, one component at the top, and then at this point, it's 4 times smaller or one quarter of the size. Another 6 dB down is another 4 times smaller. That is, the signals here are 16 times smaller than these ones, the magnitude. So even though these look about the same or close in height to here, because it's a scale in decibels, these are much weaker than here. And these are hundreds of times weaker than the signals up to 1,000 hertz. So the audio from yesterday, the main components are from zero up to 1,000 hertz. There are some other weaker components as we increase the spectrum. These are very, very weak, in fact. So there's one example where we see decibels and a much more complex signal in that it's not just two or three sine components, it's a combination of many components, each at different frequencies. Let's try and finish this topic on capacity. So we just introduced decibels, given a quick example of a signal, and now let's look at, given a communications channel with some characteristics, I want to know how fast I can send bits across it. So I have a link, maybe I know it's bandwidth, the range of frequencies I can send through that link, then given the bandwidth and other characteristics of that link, I'd like to know how fast can I send bits? What data rate can I achieve? What's the capacity of that channel? Channel capacity, the maximum data rate at which data can be transmitted across a given communication channel or link. And we'll see some equations and I will use data rate and capacity to mean the same thing. So in the equations we'll see the data rate, which I'd prefer to call it, but it's expressed as C in capacity. And it's measured in bits per second because as computer professionals we care about data rate in terms of bits per second, but the physical characteristics of the link and the signal sent through it, we understand the bandwidth of the signal sent through that channel. What range of frequencies can we send? Some other things that we would need to consider, what if there's noise? What if there's some background noise or other transmitters? Does that impact upon our data rate? And we'll see some different, there's a couple of other factors as well. So yesterday we saw a very simple example with a signal where we had some bandwidth of, I don't know, four hertz and we calculated the data rate of four bits per second. We saw some relationship between data rate and bandwidth. People have done more analysis and come up with theoretical models that relate bandwidth and data rate and they're useful to estimate given a particular bandwidth, how fast can I send data? And two models, which are the main ones, which we'll go through, are called the Nyquist capacity model and the Shannon capacity model, developed mainly by Mr. Nyquist and Mr. Shannon. And they make different assumptions. Let's go through them. And you may have heard of Nyquist in other maybe computer hardware topics, maybe not. We'll see him come up and Shannon. Shannon developed this quite famous model and he did other things like digital circuits and cryptography. His name comes up as doing some important things in many fields of communications and networks. First, Nyquist capacity. Nyquist come up with a model that relates bandwidth to data rate or bandwidth to capacity, assuming there's no noise. We said yesterday there's always noise. But to keep things simple, if there was no noise, no background noise, no other transmitters, Nyquist come up with an equation given here. The capacity of the channel in bits per second is two times the bandwidth of that channel, bandwidth measured in hertz, times by log in base two of some value m. m is the number of levels in the signal being sent. So we'll need to explain that. We'll explain what m is and then with some examples and then come back to how we can use this equation. But this is the Nyquist capacity equation. If we know the bandwidth and we know this value m, we can calculate the Nyquist capacity of our channel. What is m? m is, as I said, the number of levels in our signal. Up until now, we've used two levels in our signals to represent bits. Let's draw some examples. You've seen some before. We had a very simple example yesterday where I drew or in the past, we said that if we think of a simple sine wave, we could use the low portion to represent one bit and the high portion to represent another bit. So if I had a sequence of bits to send, like 0, 1, 1, 0, 1, then I could draw use to represent 0, low for 1, high. The second one, high. 0 is low and the fifth bit, high. We saw some examples like that yesterday where we said in a very simple scheme, when I have a bit 0 transmitted at a low level, when I have a bit 1 transmitted at a high level. But our signal doesn't have to be a simple sinusoid. It can be a combination. So it can be much more complex. But that's a scheme which says each bit maps to one level. There are two different levels in this scheme. High and low. High and low. Okay. Let's draw it as a square wave. All right. I'll draw a square wave because it's easier for me to draw and a larger sequence of bits. Let's say I have 10 bits. Let's extend. 0, 1, 1, 0, 1, 1, 10 bits. Okay. Just some random bits. Then let's use this scheme, low level for bit 0, high level for bit 1 and draw a signal. But in this case, I'll draw it using a square wave. 0, we start with low. And we maintain that level for some fixed period of time. And then bit 1, we go to high. And a second bit 1, we maintain high and down to 0 or low. Then we've got a bit 1 and a second bit 1 and 2 zeros. And in fact 2 ones to finish with. So that red signal is one way to represent those 10 bits. Where the period for each, let's say, signal element is this. 0, 1, 1, 0, 1, 1, 0, 0, 1, 1. Okay. Again, this signal has two levels. And we can describe them and I'll write them on the board so that we can recall them. The scheme here was bit 0, low. Bit 1, high. Two levels. So m is 2 in this case. Now let's do a different scheme. We don't have to just be limited to low and high. Let's do something where we map two bits to one of four levels. We're looking pairs of bits. And I'll design a scheme that says if I have two bits 0, 0, then I'll produce a signal which is, let's say, very low. 0, 1. So very low, let's say negative 5. And 0, 1, just low. So we have minus 3, 1, 0, high. That is plus 3. And 1, 1, very high. This is a different scheme for mapping bits to signals. There are four levels here. m equals 4. Let's try and draw that signal that we need to transmit to represent those 10 bits. Need some space. Actually I want that to be black. Let's draw a green signal, represent those 10 bits where our bit's gone. So 0, 1, 1, 0, 1, 1, 0, 0, 1, 1. What we do now is we take two bits at a time. So the first two bits, 0, 1. Well we're going to produce a signal which is low. And then the next two bits, 1, 0, will be a signal which is high. Try and draw the signal yourself. Well, I think it's quite easy. I don't want that. You made a mistake. The first portion of the signal here is our low signal, 0, 1. This is high, 1, 0. It's a positive value. The next two bits are 1, 1, correct? So very high. And then very low. And very high again. Low, 0, 1, high, 1, 0. Very high, 1, 1, very low, 0, 0, very high, 1, 1. The same 10 bits. If we receive this signal using this second scheme, we'd receive the same 10 bits. The important difference here, two different schemes for mapping bits to the signal levels. Which one's faster? The green one finishes the transmission of those bits in half the time as the red one. If everything else is the same, because for each, let's say, signal element, in the red one, we transmit one bit of information with the green one in the same time, two bits of information. So if we're doing everything at the same speed, we'd be sending twice as much information per second in this second scheme. We send our 10 bits in this period, whereas with the red one, we send 10 bits in double the period, twice a slide. Which indicates that by increasing the number of levels that we have for our signal, we can increase the speed at which we send our bits if everything else is the same. That is, we send the bits in shorter time. These are just two made up example schemes. In another topic, we'll see some realistic schemes, but the principle's the same. The more levels we have, the higher data rate we can achieve. The Nyquist capacity equation considers that. If M is the number of levels in the signal that you're using, and you know the bandwidth of your communications channel, then the data rate that you can achieve is two times the bandwidth log base two of the number of levels. From the equation, we see two quick things. If B increases, if the bandwidth is increased, then the capacity or data rate increases. More bandwidth, more data rate. Similar, increased M, more levels, higher data rate. Going from M equal to 2 to M equal to 4 will increase our data rate. Now let's apply Shannon capacity equation with a couple of quick examples. First example is here. The telephone system has a modem. So you have your computer connected to a modem. Think of the old dial-up modems, which then connects to the telephone line and you send your data across that telephone network. The telephone system supports a bandwidth of 3,100 hertz. How fast can we send data? In the initial case, assume we use a signal with just two levels. Very simplistic, the simplest we can achieve. If M equals 2, what's the data rate? Quickly calculate using the Nyquist equation. Our bandwidth is 3,100 hertz. That's a realistic bandwidth of a telephone link, your home telephone system. In this case, to get started, let's assume the number of levels M of our signal that we use is 2. Using the Nyquist capacity equation, we can simply calculate the data rate or capacity. 2 times the bandwidth times by log in base 2 of M. Log base 2 of 2 is 1 times by 3,100 times 2 is 6,200. Here's a trick or a rule. The bandwidth is measured in hertz. So 2 times 3,100 hertz, capacity is measured in bits per second. The answer is given in bits per second, 6,200 bits per second. With a normal home telephone line, which supports a bandwidth of 3,100 hertz, if I use a simple signal with just two levels, the fastest I can send data, assuming there's no noise, is 6,200 bits per second. Anyone who remembers the dial-up modems? Anyone have a dial-up modem still? No? Anyone remember using them? Before the ADSL modems, you had a dial-up modem which it dialed into the ISP before you started using the internet, made that funny noise and then connected. Anyone had one? Used one? Everyone? Most people? How fast? Faster than 6,200 bits per second. Can you remember the speeds of the dial-up modems? 56 kilobits per second. That was about the highest speed that we got. The original ones were around 28 kilobits per second, but the latest ones, 56 kilobits per second. Those modems use the telephone network, which use a bandwidth of 3,100 hertz. How can we achieve 56 kilobits per second when we're limited in bandwidth? How do you think that modem worked? What that modem did was took your bits from your computer and sent a signal. The bandwidth of that signal was 3,100 hertz. What else did the modem do, related to what we see here? It increases the levels. It must do because, remember this is a capacity. Nyquist equation tells us if we have 3,100 hertz and if the number of levels is 2, you cannot send faster than 6,200 bits per second. It's a capacity, the upper limit. There's no way in the world that you can send faster. That's the way to interpret this Nyquist capacity. In fact, in practice, you would send slower because there's noise and other factors. It's the upper limit. We just said that our dial-up modems, which I'm telling you use the same bandwidth, we think they can achieve 56,000 bits per second. To do that, our modem must use the signal with more than two levels. How many levels? Find the solution. If we know from experience that the capacity is about 56,000 bits per second, same bandwidth, then how many levels did the signal contain? Try and solve that. If we have 56,000 bits per second as the capacity bandwidth of 3,100, what's m? Basically, you use the same equation, but work backwards. Anyone find the answer? Find m to the closest power of 2. To the closest power of 2 is what you need. You don't have an answer yet. Bandwidth is still 3,100 hertz, so b is still 3,100. Close? Good. Correct approach. What did you get? Looks too big. I think your calculator is using log 10, but this is log in base 2. So by rearranging the equation, we know, and we can write it, we get 56,000. The capacity equals 2 times the bandwidth, 3,100 times log base 2 of m. So we get what? 6,200 here. Take it to the other side. So 56,000 divided by 6,200 is about, some people will discover it is about 9. So 56,000 divided by 2 divided by 3,100. So it's approximately 9 equals log base 2 of m. Therefore, m equals 512. Because 2 to the power of 9 is 512. That is, in those modems, the dial-up modems where you achieve 56 kilobits per second, the modem generated a signal, didn't have two levels or four levels, it had 512 different levels. Each level mapped to nine different bits. So it could transmit a signal to carry that data at 56 kilobits per second. And any questions on the calculations? Some basic maths there. In practice, the number of levels is usually a power of 2. So even though this is not exactly 9, 9.03 or whatever, in practice the implementation, because we're dealing with binary, 0s and 1s, the number of levels is a power of 2. Let's return to our equation. So what can we say about some trade-offs that are identified from the Nyquist capacity? If we have a communications link, we know it's bandwidth, we know the number of levels used in the signal we're transmitting, then we can calculate the data rate for that link, the upper limit data rate. Under the assumption there's no noise. And we see if we increase the bandwidth, we increase the data rate. If we increase the number of levels, we increase the data rate. That's direct from the equation. But some practical things. If we increase the number of levels, then it becomes harder and harder for the receiver when it receives a signal to map that signal back to the correct bits. So that's not captured in the equation. But especially in the case of noise, the more levels you use in the presence of noise, the larger the chance you'll get errors at the receiver. So there in fact is a practical limit to M. And in fact in the the home modems, dial-up modems, the practical limit, we just calculated it, 512. Going larger, to say 1024, it wasn't possible to implement the hardware to deal with that state. So they looked at alternative techniques, ADSL for example. So Nyquist capacity says just increase M, keep going and you get higher data rate. But practice tells us that you can't make that too large because it makes the receiver very hard to implement. And in fact in the presence of noise, you start to get many errors at the receiver. You send bits 011 and you start to receive 010. We get bit errors. So that's something to consider when calculating with Nyquist capacity. Well, in real life there is noise. Another guy, Shannon, come up with a different theoretical model, taking into account noise. So Shannon come up with a formula that says if we know the bandwidth of a communications channel, irrespective of the number of levels, if we know something about the noise in that channel, in particular the noise relative to the received signal strength, then we can calculate the data rate of that channel. So we have a new concept here called the signal to noise ratio, SNR. It's the ratio of the received signal and the received noise. And we tried to do that what yesterday. When I talk, someone receives my signal, if other people start talking and the noise goes up, then what do we get? The signal to noise ratio, the noise goes up, the signal to noise ratio goes down. The more noise, the harder it is to receive and the end result, the lower the data rate. So Shannon equated these three factors together. Bandwidth received signal strength or signal power and the noise, received noise. And we see from the equation, higher bandwidth, higher data rate, higher capacity. Increased signal power, so SNR goes up, increased data rate. That is if we transmit at a higher power, the receiver will receive at a higher power and that gives us a higher data rate. And also increased noise, more noise in the system, SNR goes down, so this goes down, data rate goes down. The more noise, the lower the data rate. So that's the relationship between those three factors. Increased bandwidth or signal power increases the data rate, good. Increase of the noise reduces the data rate, bad. And something that's not captured in this equation but again is in practice. If you do increase the bandwidth, according to this equation, we increase the data rate, but it allows more noise in practice. Larger bandwidth signal or system, the more noise can come in. And the more noise, the lower the data rate. So there's in fact a practical trade-off there. You can't just keep making the bandwidth larger because it starts to make the noise larger when everything else is the same. And you can't just transmit at a higher power all the time because the higher you transmit, you start to get interference from other sources. For example, if I want to communicate to you clearly, if there's other people talking, if I keep talking louder and louder or if I keep increasing the amplifier output, the sound level, according to this, it'll be easier to hear, but I start interfering with other classrooms, for example. The classrooms downstairs will start to receive my signal, causing noise for their system. So there are some practical trade-offs to consider between increasing bandwidth and power level. So this is another formula to tell us, given some characteristics of a communication system, how fast can we send bits? Same with Nyquist. This is a theoretical capacity. In practice, there are limitations that mean we cannot actually achieve this capacity. We can get close, but you will not go above it. It's a capacity. And in practice, you will not actually get the exact same value in realistic conditions, but it gives us a good indicator of how fast we can send. Let's give an example, but before we do that, be easy. If we know the bandwidth, we plug it in here. SNR is the signal power divided by the, or think of the received signal power divided by the received noise power. In practice, we usually need to measure the noise. We may not know in advance. We could guess what it could be. So sometimes the SNR, this ratio of the two, may be given for a particular channel. Let's solve this one in two parts, two steps. So we have a communications channel, has a spectrum of between 3 MHz and 4 MHz. That is, it contains frequencies from 3 up to 4 MHz. We know the characteristics of that channel that when we transmit a signal and we measure the noise, the ratio between signal to noise is 24 dB. Forget about the question here. First answer, what capacity can we achieve in that channel using the Shannon capacity equation? We know the spectrum. We know the signal to noise ratio and db. What capacity can we achieve? Try and calculate that. And the hint, which makes it a little bit harder, this equation SNR is not measured in db. It is the absolute value. So this question gives you SNR measured in decibels. You need to convert that back to the original absolute value and then plug it into this equation. Try over the next five minutes. So you use the Shannon capacity equation but you need to find b and SNR in the right or the right values for them. So hint, one thing not to do, do not put 24 here. It's wrong. 24 dB, you need to convert it to the absolute value for signal to noise ratio. So go back to your knowledge of decibels. You know the db value. You need to know the absolute value. And then you can insert the absolute value here where we have SNR. What's b? Anyone help me? What's the bandwidth of our channel? 1 MHz. The spectrum is said from 3 MHz up to 4 MHz. So the width is 1 MHz. What is SNR is your next step. You know in db, convert it back to the absolute value. And we did it before. In the examples of db, that's when I did the calculation. That's why I did it in the first example because I knew we'd need it. Anyone remember the answer? What do we calculate? Someone's got it 251. SNR is 251. 10 to the power of 2.4. Now you can use the Shannon capacity equation. Now you can just plug the values into the capacity equation which is b times log base 2 of 1 plus SNR. b, 1 by 10 to the power of 6 Hz, 1 million Hz, 1 MHz. So be careful here. Log base 2 of 1 plus 251. That is log of 252. Anyone get an answer? What is it? The final answer? 8. About correct. Log of 252 is about 8. Log base 2 of 256 is exactly 8. So log of 252 is a little bit less than 8, 7.9 something. I don't know. But I'll assume that log base 2 of 252 is close enough to 8. So therefore our capacity is about 8 by 10 to the power of 6 bits per second. Or 8 Mbps. And then return to the original question. How many signal levels are required to achieve this capacity? If we want to get 8 Mbps, we know the bandwidth is 1 MHz. Now use the Nyquist equation to determine M. How many signal levels we need? So in fact this is a combination of the two. To get 8 Mbps with 1 Mbps bandwidth, M would need to be what? So recall now the other equation. Capacity equals 2 times B log base 2 of M. We know C, 8 Mbps. We know B, 1 MHz. Find M. Anyone else have M? Correct. So what's M? Good. Okay, some people are on the right track. So just some simple rearrangements of that Nyquist equation. Capacity is 8 Mbps equals 2 times 1 MHz, 2 times 1 million, log base 2 of M. So 8 million equals 2 million log M. Which means log M must equal 4. Which means M must equal 16. It's log base 2. If we wanted to achieve this capacity of 8 Mbps in theory, we'd need to use a signal with at least 16 levels. We could use more, but less than 16 would, according to Nyquist capacity, would not get us to 8 Mbps. Let's summarize. Return to that in a moment. Nyquist and Shannon capacity are theoretical models for determining the data rate, the capacity of a link, given the bandwidth and other characteristics. Nyquist assumes there's no noise, makes an assumption so it's simple to calculate. In reality, there's always noise. It depends upon the number of levels in our signal that we transmit. Shannon assumes that there's noise, and therefore the data rate, the capacity depends upon how much noise, especially how much noise relative to how much signal do we receive, the real signal. So when someone transmits, I receive the signal. How much noise is there relative to that? The more noise, the lower the signal to noise ratio and the lower the data rate. Both of them are theoretical models that we cannot achieve in practice, but we can get close. That is, we can build systems, communication links, which approach the Shannon capacity. So if we know some bandwidth and signal noise ratio, we can implement the hardware to transmit signals which get close to the Shannon capacity, but because of practical limitations, not exactly reach the capacity. And let's stop there. So what you'll do


So now you will listen to Dima talking about Dragonflow. So Dima, the stage is yours. Thank you. Good morning, everyone. Today I'd like to talk about the Dragonflow project and our effort to make it into this open platform for network services. First about my stuff, as I was introduced, my name is Dima Kuznetsov. I work on the Dragonflow project. I'm the core developer there. I work for the cloud group for Huawei's Tel Aviv office. And I'd like to start by talking about software-defined networking. Now, I thought for a while how can I introduce software-defined networking because it's quite a broad concept, but basically I came to the definition of where we have a specific and unified interface for controlling and configuring the network fabric in the data center in the infrastructure. I think this definition would be quite suitable for this presentation. And what usually means is that we have a central component. This may be a single server or a cluster of servers that you can query or request changes to the network topology through this service. And it will take care of performing this configuration request. And it basically allows you to separate the network configuration problem from the actual forwarding and physical access problem where you want to configure a specific topology of the network and you don't have to bother with going to each of the switches and the routers and configuring them accordingly and you have this kind of software-defined network solution doing this for you. And what this allows us to do a lot of time is to do a thing called networking virtualization which can be sort of just like a regular virtualization where we have our physical machines and we have virtual machines and we can have several machines on a single physical host and we can have different kinds of machines on a single hypervisor. And networking virtualization allows us to do just about this. We have our data center or infrastructure and we may have a single physical network there connecting all the machines. But we may want to create an illusion for the VMs that we are in different networks, maybe different addresses. Maybe we have two VMs on different hosts but we want to create an illusion that they are connected one to another directly. And the SDN allows us to kind of create this illusion and show the VMs or the containers this virtual topology instead of the physical one where they can see how the data center is connected how the hosts are connected and how the switches and the routers are configured. Okay, and as we talked earlier, we have this network... We have this network service configuring network fabric, the routers, the switches and one popular way to do this is through an OpenFlow protocol. An OpenFlow protocol is an abstraction for configuring network appliances where each appliance is represented as a bridge or a switch or a router and it is basically a state machine for packets coming in. And the states are separated into tables where each table has a collection of flows and a packet coming in will land at some table and the switch will apply a specific flow to it and then if it decides it needs more processing it will apply another flow maybe from another table or the same one. Now each flow is composed of two things. A flow is a match which means what packet this flow should apply to. This can be on any from... OpenFlow allows you to do this with one through four levels. You can say I want all IPv4 packets or maybe I just want TCP packets targeted to port 80 or maybe even I want all the non-syn packets coming into the switch and when a packet is arrived to a specific table the switch will go through all of the flows in this table sorted by the priority and try to see the first one that applies to the packet. Now the second part of the flow are the instructions and the instructions basically say how the packet should be handled if the flow matches the packet. And they basically do I think three major things. One of them is modify the packet themselves. You can request a packet modification and say I want to replace the source MAC address of the packet. You can modify the state of the packet and say I want a next table to be table 20 or maybe I want to set some local register of the packet which is a state that the packet carries with itself through the switch and you can say that you want to drop a packet or output to a specific physical port of the switch. And this allows you basically to implement a lot of low-level networking functionality in the switches. Like you say, you can say that you want to receive a packet and see if it's on a specific network like by examining its VLAN 80 and then deciding what ports it can go out to and what ports it cannot. So this was quite a quick introduction to the overflow. We'll come back to it later. And I'd like to talk now about Dragonflow. Dragonflow is an open source project implementing a software-defined networking controller for OpenStack and Kubernetes at the moment. It is built on a few major principles. We wanted to try to make it as lightweight as possible and quite as simple. So if you have a small deployment, it won't be too much of a burden to run Dragonflow there but also we wanted to make it quite scalable. So if you have a huge deployment, you can still try to use Dragonflow and not be limited by its architecture. And additionally, we try to make everything pluggable. So we don't know how the deployment will look like in the end and you may have a single data center and a very converged infrastructure or maybe you have a distributed infrastructure. Maybe you have just a huge amount of nodes and you may want to use different features for different kinds of deployments. So we try to do a lot of things in a pluggable manner. And finally, we try to distribute a lot of stuff to the nodes meaning that many of the services we try to provide, we try to provide them in a distributed manner. For instance, one of them is DHCP. If you look at a traditional DHCP implementation in Neutron, you will see that it has a network node running a DNS mask answering all the DHCP requests from there. So if you have 10 machines and one network node, all of the DHCP requests will travel to the network node and if it is unavailable then none of the machines will be able to get DHCP. And we try to avoid these kind of points of failure by pushing the functionality towards the VM. So one example that we try to do is our DHCP server is handled by the controller itself. So if a packet of DHCP request comes out of the machine, then the controller will capture it, see it's a DHCP request packet and craft a specific reply packet inside it back. So there is no dependence on external server and the only reason that you won't get a DHCP request is that the machine is down. So the VM is down itself. So there's not much to do there. And some more trivia about Dragonflow. It is 100% upstream and open source projects. It was an official project in the OpenStack community. It was initiated by Iwawi a few years ago. It's in the OpenStack since the killer release and it is led entirely by community and not by a product. Okay, so here is a high level architecture overview of Dragonflow in an OpenStack deployment. We have three major components here. We have the Neutron server at the top in the middle in a nice orb there where we have our Dragonflow management code. In the center we have the Dragonflow distributed database. And on the side we have the computer running the virtual machines connected to the OBS bridge and Dragonflow controller controlling each local OBS bridge. And as I said earlier, Dragonflow can also be used in a Kubernetes environment. So here as well we have the control node at the top in the middle where we have the Kubernetes API and another service called OpenStack Career which is an OpenStack project for interfacing and allowing networking from Neutron or other providers towards containers. And inside Career we have our Dragonflow drivers that translate the requests from a career to Dragonflow. And those two are basically on the same orb but they don't have to run one next to another. They can be on different machines. The main point is that we have the Kubernetes API and then we have the career service subscribing to Kubernetes API events. So they don't have to run together but they act as a single unit for this purpose. And then again we have the Dragonflow database in the center and on the edges we have, now we have pods instead of VMs connecting to an OBS bridge instead of Linux bridges. And then we have our CNI and kublets running on the computer alongside with the Dragonflow controller controlling the OBS bridges. Now if we look back into a typical OpenStack Neutron deployment with Dragonflow, we'll see that on the lower level we have the Dragonflow part in the Neutron server and we have the Dragonflow part on the controller and they talk one to another through a distributed database and a published scribe interface. And one of the points of the applicability that I tried to talk about earlier is that we try to avoid being restricted to a single set of database and pops of mechanisms so we obstructed everything away through a driver layer. And there are really several drivers that we support and maintain our code for the database or ETCD and I think ZooKeeper and Cassandra. But what is common to all of those interfaces is that they are quite simple key value stores. So you can come up with your own driver if one of the database does not scale well enough for your deployment or does not answer specific requirements. So implementing a new driver is basically a matter of writing a few simple functions to store values from the database. And same with the PubSub mechanism, we use PubSub to facilitate faster updates between the management part and the database and the controller, excuse me. And again, we can use the distributed database mechanism here to implement the PubSub functionality or you can use any other kind of other database that you have deployed in your environment or you can use no broker solution at all, like zero amp here. The PubSub interface itself is also obstructed behind a driver so implementing a new mechanism should be quite simple. On the higher level of functionality we have the Dragonflow drivers and service plugins inside Neutron. Each one of those tiny little cubes at the top is a driver or a service plugin in Neutron that handles a specific segment of functionality. For instance, we have the L2 and the security groups handling a translation of incoming networks, ports and security group events and translating them into Dragonflow actions and state. And we have other plugins for handling L3 routers and service and service function chaining. Each of those cubes is a steved or entry point so it is dynamically loaded by Neutron so you don't have to write those stuff directly inside Neutron code you can just register it externally, install the plugin and set the configuration and it will be loaded. On the bottom we have the Dragonflow controller here connected to an OBS bridge that is connected to our VMs in the containers. Inside Dragonflow we also have those tiny cubes with names on them those are Dragonflow applications. Dragonflow controller itself is basically a mechanism for distributing events coming up from the Neutron server or any other kind of northbound API into the applications on the Dragonflow controllers. A major differentiation from the Neutron's open-view switch implementation is that we don't distribute flows and actions through RPC we basically push policy towards the controller so each of the controllers is the complete state that it requires to set the data path and modifies the data path according to the state that is required. For instance if such a method coming in from the server can be a new port is created and then the controller itself has to decide how the data path has to be modified to accommodate this port. As I said in the beginning of the talk one of the points that we try to address is to make Dragonflow a more of an environment or a platform so you can introduce your own network functionality because with the solution sort of time the data path is kind of a black box and you don't have much of a direct control over what happens there. You may be able to configure it through maybe to runtime or configuration but you don't have real control of what happens to the packets inside the data path and we try to actually enable this kind of change because no deployment is the same and you may have to tweak your data path to make stuff more fast or maybe more efficient in your data center. Now from the plugability standpoint as I said earlier in the Neutral Server a lot of the plugins and drivers are basically Stibler entry points and we didn't have to do a lot of there because we kind of got this for free from the way that Stibler works. By using configuration values you can enable or disable specific functionalities inside the Neutral Server and introduce any of those boxes and maybe other boxes down there to do specific functionality. Now on the controller side as I said earlier we have applications. A specific application is responsible for really a small piece of data path functionality for instance we have here port security. Port security is a quite simple application. It is responsible for a specific table where packets go through when they are coming out of a VM or container and this port security application will just filter all the packets that match the source IP and our MAC address of a specific port so the VM will not be able to max poof its packets in the bridge. And again we used Stibler here to allow dynamic registration of applications so you can write an application, put it outside of the project and it will be loaded and started by Dragonflow as if it were one of the core applications. So Stibler really helped us out on this aspect. And if we are going to talk a bit more about Dragonflow applications there are basically kind of three major types that can be classified into. We talked about Dragonflow earlier. So one simple example for applications are applications that just use flows. So the application receives events from the database and it will modify specific tables to match to the policy described by the table. This can be a port security as I mentioned earlier that it sees a new port created and it can create a new valid flow in the port security table. It can be routing that sees that a new router is created and it will create a new routing rule in a table. And this is kind of the best applications in terms of performance because the packet will be serviced entirely by the OBS and the packet does not have to travel anywhere and the problem is really constrained into this specific bridge. And some examples as I said earlier are port security, L2 forwarding, routing, responding to R-preqs and ICMP pings. Now second type of Dragonflow applications are a bit more complex. One of the things that OpenFlow allows is to send a packet to the controller of the bridge. So the second type is kind of applications that install flows but also send packets to the controller for handling. And this can be an issue for both the control plane perspective because your controller is now also dealing with the forwarding and data plane a bit. It has to process packets and also from the database perspective because now your controller has to... The packets have more latency because the packet has to go to the controller, controller has to treat it and send it back to the bridge. But it also allows you to implement a more complex functionality like the DHCP server. So the DHCP application will capture all the DHCP discover and request packets coming out of virtual machine and then it will see what port it is coming from and graph a specific reply packet and inject it back into the bridge. And there are other examples for why this can be useful. And finally the last type of applications are kind of the most complex where we have the application that installs flows but we also deploy an external service on the side. We attach an interface to our Tor switch and we configure an external service to listen on this interface and then we install the flows that route specific kinds of traffic into this service interface. And it allows us to do a lot of much more complex things like a metadata service which is basically HTTP proxy for some Nova API or maybe a DNS lookup or a load balancing by deploying HAProxy alongside the Dragonflow controller. And it basically allows us to take advantage of the protocol stack on the hypervisor because in the previous slide when we are packing in our packets to the controller we had to deal with the protocols ourselves and if you look at HTTP request it's quite harder to do this because there is a lot of state we have to implement TCP in our controller and we have to implement HTTP on top of that and by deploying a sidecar service and attaching it to the bridge we can just take advantage of the hypervisor TCP stack and use that for the controller. But there are also downsides to all of this because now we have to make sure our service is alive as well we have to deploy it, we have to configure it we have more moving parts on the computer and we have to make sure they are alive and behave well and now kind of the problems all three types of the applications they were doing one thing in common they were installing flows and as we saw earlier openflow is quite a low level API for a switch and forwarding configuration so this works well enough if you have your own applications and you can kind of coordinate what tables you will use and what registers you will use and you will make sure there is no application that steps on the toes of another application but this won't work well if you want to have third-party applications or maybe plug-in applications where you have two applications that have no notion of one of another and they want to use the same flows or maybe the same registers this will cause trouble and not just plug-able applications we have some of those flows inside Dragonflow code itself we have our table 55 with handles L2 forwarding and then we have some flows installed there by the forwarding application but also some flows installed by the 3-year-olding application and some flows by the DRAT application and now we have to coordinate the priorities of the flows of each application with all the application you will need and we have to make sure that when we delete flows we don't delete flows from another application and this basically means that a lot of care should be taken when adding and changing stuff there and debugging and troubleshooting is much harder than stuff don't work so it's really not a nice way to let people write plug-able applications but then run into this kind of trouble so what we came up with we decided that we are going to introduce something called application specifications so each application will specify what kind of interface it exposes to towards the data path and kind of wrap each application into a black box on the data path where the application itself will be responsible for whatever happens inside this black box but nothing of what happens outside so the basic specification of an application looks like how many tables it wants to use and what registers it is going to use to implement the functionality and what are the application entry points and the exit points now an application entry point is basically a callback into something that we want the application to do for instance here we have a security group example a security group application enforces network policies on the cloud network so we can have a network policy saying that for this VM we want to allow incoming ICB packets but we don't want any of UDP or something like that and here we have two entry points and two exit points now an entry point means that all packets coming into this entry point will be serviced as if they are ingress for a specific VM and the egress entry point will be handling all the packets coming out of the specific VM so if you want to use this kind of black box we'll have to wire all the packets coming out of the VM to the egress port and coming into the VM into the ingress entry point and the exit points are basically the same where each application is kind of taking packets in and outputs them out so if you have several entry points it may have sense to have several exit points but the relation is not always one to one for instance we may have L2 application that does forwarding so we may have only a single entry point but we have several exit points for instance one for unicast packets but also one for multicast packets and along with the specification we also introduced a more strict semantics for applications so this won't be for nothing we decided on a set of rules that an application should abide by and one of them is we said earlier that we require application to declare all the tables it's going to use so an application can only really interact with its own tables now and it can only access the registers that it declared it will use it will only go to between tables of its own or maybe to one of the exit points and if we talked earlier about this packet in packet out to the controller functionality then the application won't intercept packets from tables that belong to other applications and won't inject packets back to tables of other applications so basically confines itself into this kind of specification black box and now if we kind of zoom out of a single application we still have the data path and now it's built of those boxes so the controller itself is responsible for connecting all of those applications between themselves and on this level the connection is quite simple there's no branching each exit point goes to exactly one entry point and the controller also is responsible to swap the registers between the applications so if one application expects some value to be stored as rack 5 but other application expects it at track 7 and the controller will be responsible to move it between the registers and this also allows us kind of net functionality that now we can validate a lot of stuff about the data path we can see if there are any maybe unwired entry points or maybe applications that are at all not unreachable that are not reachable at all or maybe we are consuming a variable in application A but no application before it so we can run into some trouble there it allows us to assert more correctness on the data path now that we have those kind of contracts between the applications and finally to allow all of this integration between applications we wanted to make all this wiring configurable so the controller itself as we said earlier it handles the actual wiring between an exit point and an entry point but it does this by reading the configuration so if you want to plug in a new application you just have to edit as a stevedor entry point and you go to the configuration for the data path and you kind of insert it on one of the edges or maybe several ones and you don't have to modify the Dragonflow code itself what we try to achieve here is that we really try to be able to write a specific feature top to bottom from the management to the data path itself without being required to actually go into the Dragonflow code and modify internal functionality that's about all I have on this topic we are an open source project and we'd be happy if you see a new participate we have an IRC channel it's a hash-open-stack-drag-on-flow at Feynard and we have weekend meetings one for actually the times are bi-weekly we have one for for the Pacific time zone and one for the US and that's it, thank you if anyone has any questions I'd be happy to take them yes do you have plans to implement load balancers as a service? do we have plans to implement load balancers yes, actually we have a specification and design already done and we have someone working on that right now I think at the moment we don't plan to do L7 right off the bat we want to do L4 first and I think we will do L7 maybe with a proxy I don't know anything else?


Have you ever felt trapped in a loop of negative thoughts that just won't stop? What if I told you that you could reprogram your mind to kick out those thoughts and welcome abundance and positivity instead? Yeah, it's possible. And it's all about the power of your brain. Imagine controlling your health, your happiness, and even your finances just by shifting how you think. In the next 60 seconds, I'm going to show you how. The last tip is very important, so make sure you watch till the end.   We get stuck in these negative loops, thinking about problems, feeling stressed, and then doing it all over again. It's like being stuck in quicksand. But by changing your thoughts and emotions, you can rewire your brain. It's like hitting the refresh button on your life. And meditation is your secret weapon.


In conjunction with the start of Black History Month, Central Lakes College hosted City of Duluth Human Rights Officer Carl Crawford to speak to the community about race and the history of racial divides in America. Crawford gave a lecture and also answered questions about how the community can improve human and civil rights in today's society. A progress has been made in the last 50 years. Crawford says there is still a lot of work to be done. One of the biggest things is to know that all hope is not lost. Even though we haven't fully moved the needle from the civil rights era, we haven't restored all the rights. We haven't got everything in place, but there is hope.  For us to get things on track, it's going to take all of us. And I sincerely believe that there are no throwaway people, so everyone has to get in the game to make this change. The lecture was part of the college's Cultural Thursday lecture series. If you enjoyed this segment of Lakeland News, please consider making a tax-deductible contribution to Lakeland PBS.


It's an environmental protection agency. It's an APA. Today, one of the kids is in North East Church Rock Mine, one of the children who has been home for 17 years now. Other than that, there are 14 children now in the community. And one of my children who wasn't here before, they had an NRC, each one of them was one of them, three of them were in the community at the time. It was a year before I went to school. I was very worried because I thought I'd be able to keep my family safe. I was very worried because I thought I'd be able to keep my family safe. The environmental impact statement was made by the Department of Health and the Department of Health and the Department of Health and the Department of Health and the Department of Not an automated system search. Prom�到了,了吧 exfoliated, I don't want them in the enormous within the En Мар Meetup Assessment to mier and people who are people really special than others local income. It effected everything that happened in the world. It prevented There are many things that are not available in the UK, but recently we have been working on a number of things that are not available in the UK. The UK is not available in the UK, but the only thing that is not available in the UK my husband and I used to live in a rural area, where we lived for a year. I lived in the United Nuclear Zone, and I was born in the United States and I was born in the United States because my child had a bad life. My child was born in the United States and I have a very bad life. I think it's really important to be able to do what we're doing right now and to be able to do what we're doing right now. I was working at the NRC, and when I was a student, I was working at the NRC, and I had two friends who worked at the NRC, one of them was from the NRC, but the other one was from the NRC. I think NRC are very important for the future. I think NRC is also a very important place in our country. I think NRC is a very important place for the future. I think it's uh I think it's uh I think it's uh I think it's very important for us to be able to understand what we're doing and what we're doing in the future. I think it's important for us to be able to understand what we're doing and what we're doing in the future. I think it's very important for us to be able to understand what we're doing and what we're doing in the future. I think it's very important for us to be able to understand what we're doing in the future. I think it's very important for us to be able to understand what we're doing in the future. I think it's very important for us to be able to understand what we're doing in the future. I think it's very important for us to be able to understand what we're doing in the future. I think it's very important for us to be able to understand what we're doing in the future. I think it's very important for us to be able to understand what we're doing in the future. I think it's very important for us to be able to understand what we're doing in the future. I think it's very important for us to be able to understand what we're doing in the future. I think it's very important for us to be able to understand what we're doing in the future. I think it's very important for us to be able to understand what we're doing in the future. I think it's very important for us to be able to understand what we're doing in the future. I think it's very important for us to be able to understand what we're doing in the future. I think it's very important for us to be able to understand what we're doing in the future. I think it's very important for us to be able to understand what we're doing in the future. I think it's very important for us to be able to understand what we're doing in the future. I think it's very important for us to be able to understand what we're doing in the future. I think it's very important for us to be able to understand what we're doing in the future. I think it's very important for us to be able to understand what we're doing in the future. The NRC has been working with the NRC for the past few years. The EPA has been working with the NRC since 2011. The United Nuclear, which is one of the most powerful nuclear systems in the United States, is one of the most powerful nuclear systems in the United States. The United States is one of the most powerful nuclear systems in the United States. The United States is one of the most powerful nuclear systems in the United States. The United States is one of the most powerful nuclear systems in the United States. The United States is one of the most powerful nuclear systems in the United States. The United States is one of the most powerful nuclear systems in the United States. The United States is one of the most powerful nuclear systems in the United States. The United States is one of the most powerful nuclear systems in the United States. The United States is one of the most powerful nuclear systems in the United States. The United States is one of the most powerful nuclear systems in the United States. The United States is one of the most powerful nuclear systems in the United States. The United States is one of the most powerful nuclear systems in the United States. The United States is the one of the most powerful nuclear systems in the United States. The United States is one of the most powerful nuclear systems in the United States. We were in the country with the Nile when we were three years old. We were born at the age of six. We knew the game, but we knew that we needed help. When we were four years old, we had a child. I don't think we should be able to talk about this now. I don't think we should be able to talk about this now. I want to talk about the chapter 2 of the book. I could say that it is a very important relationship that I have to deal with.  I sent back your message through this message. I hope that you support me and the community through this guide. I thank you, my fellow students from the school and I thank everyone else who attended. the I don't know how it will end. I think it's in Chapter 4. We are going to start with the first chapter, and then we'll do the second chapter. Then we'll do the third chapter, and then we'll go to Chapter 18, and then we will start with the second chapter, and we need to speak their language. We need to learn from each other. And that's why I'm so proud of you guys. I'm also very proud of you. I'm very proud of you. I'm proud of you. Thank you for giving me your warm suburban. We will talk about that later. I should thank you and thank everyone. We are going to talk about the new community and the new culture that you are under, So it was a very special time for me to learn about A.E.Nahar. This is A.E. Chapter 5. I was more interested in writing A.E. than I was in writing A.E. I also didn't know what A.E. was writing. Part of it is that Diary of Chapter 6. This is the beginning of the story of Diary of Chapter 6. I have been like this for a long time. I have been through a lot of work, but today I have been doing the things I've been doing. and I would go to the house and get a mask to wear as well. I would go to the fire in the city. We all were in the fire. The fire started coming out of my house. I would have to work on that. I would have to pay a lot of money for it, but I would have to pay the bills for it. But... I would have to pay a lot of money, I would have to pay a lot of money. This explains that the ship's to save a lot of lives. They just want to go back to our root zone, I don't know if I would visit or apologize to them, but they told me that everything that I do can be done with a gift. And I don't know where I am or what I am doing. I want to learn as much as possible. I wanted to do it as much as possible. If you're not a good place to live, you can't afford to stay. You can't afford to stay in a home for too long. We are now living in a home for a couple of years, and we're still very old, and we're not even close to the US. And that is the way to do that. I'm not very good at teaching, but I'm very good at teaching. I'm a very good teacher in the arts, but I'm not very good at teaching. So I don't teach about art at all. I teach about art, but I'm very good at teaching. I don't have a lot of knowledge about art. A koko adat jina bi ka bi is sok koko ee yaa. Aisi ee ko nao ne hoon naalik ee do, jo ee ee yaa, a kotsa koko ee, hi khee dao ee, dee dek a lé lee, kha agi ee do, dahoot bé dahoot xon ee, jo ee kwee yaa hi khee dao lee. Ne ne gee jo ee maill osaib dee, ne ee khee dao ee yaa lao ee do lee, I couldn't do that. It didn't matter what I did, I didn't know what they'd do for me. They didn't know what I was doing with my family. It's not like I was in the United Nuclear Propulsion Association. I wasn't in the United States. and I think he was taught in a different language, I think he'd come into it and come in with me. That's what I want. I want to help him find a job. So that's why I do all these jobs. Thank you very much. because all of these things are connected to each other. And if they are connected to each other, then they are connected to each other. Now, I would like to talk about the NRC, the NRC of the United Nuclear Diplomental Society. Today I would like to talk about the NRC of the United Nuclear Diplomental Society. The NRC of the United Nuclear Diplomental Society is connected to each other. The NRC of the United Nuclear Diplomental Society is connected to each other. The NRC of the United Nuclear Diplomental Society is connected to each other. The NRC of the United Nuclear Diplomental Society is connected to each other. The NRC of the United Nuclear Diplomental Society is connected to each other. The NRC of the United Nuclear Diplomental Society is connected to each other. The NRC of the United Nuclear Diplomental Society is connected to each other. The NRC of the United Nuclear Diplomental Society is connected to each other. The NRC of the United Nuclear Diplomental Society is connected to each other. The NRC of the United Nuclear Diplomental Society is connected to each other. The NRC of the United Nuclear Diplomental Society is connected to each other. The NRC of the United Nuclear Diplomental Society is connected to each other. The NRC of the United Nuclear Diplomental Society is connected to each other. The NRC of the United Nuclear Diplomental Society is connected to each other. The NRC of the United Nuclear Diplomental Society is connected to each other. The NRC of the United Nuclear Diplomental Society is connected to each other. The NRC of the United Nuclear Diplomental Society is connected to each other. The NRC of the United Nuclear Diplomental Society is connected to each other. The NRC of the United Nuclear Diplomental Society is connected to each other. The NRC of the United Nuclear Diplomental Society is connected to each other. The NRC of the United Nuclear Diplomental Society is connected to each other. The NRC of the United Nuclear Diplomental Society is connected to each other. The NRC of the United Nuclear Diplomental Society is connected to each other. The NRC of the United Nuclear Diplomental Society is connected to each other. The NRC of the United Nuclear Diplomental Society is connected to each other. I think it's a good thing to do. I'm working with the UNC. I'm a United Nuclear Directorate. I'm working with the UNC. I'm working with the UNC for a long time. I have a lot of work to do. I have a lot of work to do. I'm working with the UNC for a long time. So a, a Danish, a really good name. And, um, I'm a woman and I've been a teacher for a long time, I've been a teacher for a long time. And I've been a teacher for a long time and I've been a teacher for a long time. And, uh, I was born in the village of Nga'u. I'd come from Nga'u, and I'd come from Nga'u, and I'd come from Nga'u, and I'd come from Nga'u. I'd come from Nga'u, We were all very young, and we didn't know anything about it. We just didn't know what to do with it, and we didn't know how to do it. We didn't know what to do with it. We just started doing it. I was learning. But on the other hand, I was able to do whatever I wanted to do, or do whatever I wanted to do do. I grew up learning all about this and I also got involved and I was able We had a lot of friends, and we had a lot of family members. We had a lot of friends, and we had a lot of family members. When I was 11 years old, I had a lot of black kids. I was in school, I was in the middle of a school. I was 12 years old, I was in the middle of school, and I was in the middle of a school. I had a lot of friends, and I had a lot of friends who had a lot of connections with me. I had a lot of friends who had a lot of connections with me. When I was a child, I used to go to school. I used to go to school with my children. I used to go to school with my children. When I was a child, I used to go to the UNC. I used to go to school with my children. I was a nurse at the NRC. I was a nurse at the NRC. I was a nurse at the NRC. I was a nurse at the NRC. I was very young and couldn't train for a long time. It was an age of children too. I was one year old. He was genocidal. When I was a child, I was raised in a village called Seiji. When I was a child, I was married to my father. I was never married to anyone else. When I was a child, I would go to the army and have a seat. When I was three, I would go to the army to have a seat. the U.S. as well as the areas of our community, the areas that we had to contribute. We had our own schools, we had our own schools which had to be attended. And we had to have been very careful. So I do think that if we could have made a contribution, Today, we have a lot of people who have a lot of work to do. We have a lot of work to do. We have a lot of people who have a lot of work to do. I had a husband who was very young and had a very strong faith in me. My husband was very young and had a strong faith in me. He was very strong. and we'd be able to draw them from the clouds, and then we had to do it for two or three years. You know, three years, then you would have to re-do it.   I had children and my mother was alive. I had a mother, and had children, and had a mother. I had children, and had a father. I had children and I had not been able to communicate.  I had children and I had nothing to do with this. I had a baby and I had to stay at home. I had nothing to do with this. I have been working in the US for a long time. I'm a nurse at the University of New York. I'm a nurse at the NRC. I'm a nurse at the University of New York. I have a lot of friends. I have a lot of friends. They had to compete with each other to find out who we were. They had to compete with each other to find out who we were. They had to be able to tell the truth. We didn't have to say who we were. We had to compete with each other to find out who we were. I would live with my children, and I would have a child. It's not like I'm the only one who's living with my children. I'm not the only one who has a child. I'm the only one who's having a child. When I had a child, I would have a child. I'd have a child, and I'd have a child. I was born in a small town, and I was raised in a small village. I was born in a small village, and I was raised in a small village. I just thought that I would take my children to school, so that they would be able to get a job each year. I was very tired at that time. I was very busy with my studies. I was trying to find a way to find my children, and I couldn't find a way to get them to study. I think it's a good thing that we have a lot of people in the community and we have a lot of people in the community and we have a lot of people in the community. I think it's important to have a particular group of people who are living in the community. We have to have a group of people who are living in the community, who are working in the community, and who work with the community. The only thing I didn't understand was that I didn't really understand the language of the language. I didn't know how to speak the language. I only understood the language of the language.  And now, I'm not going to say a lot of things, but I think the NRC has been working. There's been a lot of things going on, so we have to It's very important for us to be able to communicate with each other and to be able to communicate with each other and to be able to communicate with each other. It's an example of how many people have died in the war. I think it's a good example of how many people died in the war. I was very lucky to be able to go back to the U.S. and join the U.S. We were very lucky. We were very lucky. We were very lucky. We were very lucky. And, on the other hand, we were very lucky. We have to be able to get our children to the top of the mountain and to the top of the mountain. We have to be able to get them to the top of the mountain and to the top of the mountain. United Nuclear. I'm a nuclear scientist. My son died in the year 20 Elections. He was a patriot and a leader of the nation. Not to mention he's a very strong person. His family is not very strong. It was a very difficult time for me. I had a lot of problems. I didn't know how to read or write. I didn't know how to write. I didn't know how to read or write. So I got to work on it, and it was very difficult. I didn't have to work on it. I had to work on it for eight years. I didn't have to work on it for eight years. I worked on it for six years, and I didn't have to work on it for eight years. Today, I think it's important to have a person who's very sensitive. When it comes to that, it's not very helpful, it's not very good. It's very difficult for the family to take care of it. So now I think it's important to have a person who's very sensitive I'm not sure if I would have started to go to the hospital, but I have been to the hospital for 3 months now. I'm living in the forest now. It's a bit difficult for me to leave the house. I don't have any other option. So I'm going to leave the house. I'm not sure if I will be able to return. I'm a beautiful woman. I've seen a lot of women in the family and guests. I've seen a lot of women in the world who do not know about making the world a world that is very different from friends. It was hard to get a job, but at that time it was hard. We couldn't find a job, so we had to work hard. We couldn't find a job, so we had to work hard. When I was three years old, I didn't know what to do with it. I didn't know what to do with it. When I was three years old, I didn't know what to do with it. I didn't know what to do with it but I had...! It's been a long time since I've been here. I've been here for three years now. I've been here for three years now. We started in the 19th century, in the first chapter of the book. We started in the 19th century when we first started in the 19th century. We started in the 21st century. I don't know. I thought they'd united nuclear with it. I don't know what they did. I don't know what they did. I don't know what they did. I don't know what they did. I don't know. I don't know what they did. I know that they don't understand who they really are. I don't know how to speak to them. I don't know why they even teach the students I said I'd like to let you talk about how you're going to do it. I'm going to talk about how you're going to do it. This is actually a part of the reason why I was born. For the first time, I was born with a son-in-law named Nalza Nal. And I was born with a son-in-law named Delche. There were hundreds of children in the village to whom I could talk to. Then I was raised and raised. So this was not good, and it was useless, and it was all gone. So the others would not be able to go back to life.  Chapter two, three, and five. Chapter three, three, and five. Chapter four, three, and five. Chapter five, three, and five. Chapter five, three, and five. Chapter five, three, and five. Chapter five, three, and five. Chapter five, three, and five. Chapter five, three, and five. Chapter five, three, and five. Chapter five, three, and five. Chapter five, three, and five. Chapter five, three, and five. Chapter five, three, and five. Chapter five, three, and five. Chapter five, three, and five. Chapter five, three, and five. Chapter five, three, and five. Chapter five, three, and five. Chapter five, three, and five. Chapter five, three, and five. Chapter five, three, and five. Chapter five, three, and five. Chapter five, three, and five. Chapter five, three, and five. Chapter five, three, and five. Chapter five, three, and five. Chapter five, three, and five. Chapter five, three, and five. Chapter five, three, and five. Chapter five, three, and five.