We have some benefit from pictorization of code. Why have we not used it so far? I'm going to claim that it's one of the best things the policy has. Why hasn't it been used more? If it can be degraded into Linux, what are the ways to do it? What is Debian's role in this effort? I mean, OK, this is a dead call, and I'm doing another presentation. There must be a connection. How can we use Debian and how can we benefit from it? And some coding samples, actually. I'm going to skip the presentation and show you the code in the benchmark directory. So, basically, this was introduction. Is there anyone who doesn't know what Outlook is or what CMD is? I know it's the same thing, but I'm very little about it. OK, basically, CMD units don't really enable you to do things faster. They enable you to do more things at the same amount of time. They process more data with the same instruction. CMD stands for single instruction multiple data. It's the same in theory. It's the same unit as MMX or SSC2, 3D now. They don't make the processor run faster, but they enable the processor to process more data at the same amount of time. So it is acknowledged worldwide to be the most complete CMD implementation out of it, but it doesn't. It is consistent. It enables the programmer to write code, actually code in C and not just assembly languages needed by other CMD units like SSC or MLX. One of the nice features that I really like is when I insisted that I actually stress this point. Compared to other units under implementation, Antevec gives three operands to every instruction, and the result is kept in another register, which means that basically you don't need to reuse registers all the time like you use in other implementations. For example, to do addition in MMX or SSC, you have to place the result of the addition in one of the registers of the operands, which means you can meet the first result. You have to reload it again the next time. So where can it be used? Power consumption is something that is more important. Of more importance, the more we go into the embedded market. And personally, I would like to see the G4 and G5. Well, not really G5. But G4 approaches to go more into embedded markets because it is comparatively low consumption. It's just about 10 to 15 watts. Where to find a similar performance CPU that offers a vector unit like Antevec, you would have to go to a Pentium 4 or AMD64 CPU which is just out of the question for the embedded market. Whereas, there are some cases where it is not really enough to just put more processing power in terms of higher clock speeds. You have to find another way to do it. For example, you cannot really depend on higher clock speeds to do encoding, video encoding, especially real-time video encoding. When you have to do it with custom hardware. Security is one of the sections that you can use for visualization. You can find it. I have written a paper about this. Not exactly this one, the whole security section. But I put that it's possible to vectorize some hashing algorithms and some inclusion algorithms because there would be more before me. And given quite good performance, I'm going to give some numbers afterwards. The codecs and computing linear algebra is one of the favorite benchmark of Apple to show Antevec power. And what is not really apparent is that we use Antevec for generic computing. I mean, mostly, Antevec has been used for that matter, everything, all other SMD implementations have been used for video or other applications. They have not really been used for generic computing. It's not really a part that can be used for generic computing, but you can, as we will show. So this is a small, nice innovation I found from Mars Technica. It basically explains how the, say, SMD approach works. This is a scalar, this method is a scalar code. It just processes one unit at a time. You will immediately recognize that this is a simple for loop. You have NARIOF objects, just loop over every object and try to process it. This is the SMD approach. You do the same operation, but on multiple sets of data. And this is one way to do it. Right, so let's say, is there a point or a stick or something? There one can turn. Basically, you have two arrays, A and B, size N. And you want to put the result of the addition in this second and third array. So, using plain C, what do you do? You just loop over elements and add the gem. Now, to do that, with another SMD implementation, you would have to meddle with assembly code. But without fake, it's not really necessary. Actually, it's not even in carriage, unless you're after 100% performance. You just have to write the equivalent C code using artifact extensions, which are included in the C, courtesy of Apple, and FreeScale. So, basically, just as before, you create two, you have two arrays, A and B, and you want to put the result in the vector result. So, you just find the corresponding command, vector add vector of A vector B. And you loop over each element, but there's a difference. The first loop does N iterations. The second loop does N over four iterations. It's what you have to do with integers, which has to do with integers. If you have to do with eight integers, with characters, this number is 16. Basically, you process 16 bytes at a time, which, as you will see, offers great performance. Right, why hasn't it been used so far? It is actually used. In Mac OS X, Apple has really done quite a good job in writing especially optimized routines, for that matter. But the thing is that it needs quite extensive knowledge of the subject to really benefit from it in the open source software. There are some projects that have actually really good limitations for very specific retuners, like mPlayer does, ffmpeg does. M encoder has been output to MySQL giving really good performance. But these are all specific applications. In last September, I think it was, I watched the talk of Sergio Larkin in the free-scale sndf, yeah, sndf, right, in Frankfurt. And I noticed how easy it is to actually program using gantt. This was the initial kickstart, so to speak, that enabled me to start working on it. And I was really surprised by how quickly I could get fast performance out of just a small CPU like G4, which is, by today's standards, G4 is slow. But it's not slow if you can actually learn how to program it in the proper way. So I raised the question there. Why can't we use it? Why can't we use Altevec to enable the whole system, the whole operating system, to benefit from it? Right now, Altevec is underused in Linux. It's practically non-used, only in very specific applications. Why not benefit? And I asked Genesee, which is the producing company of Pegafors, and FreeScale, and they decided to fund this effort. And so far, I have quite a big list of applications and libraries that can be Altevec optimized. I'm going to start with GLC. Basically, I've released a better version of Libre, of Altevec optimized common routines, like memcopy, string, swab, block move, anything. You are going to see the results soon. This library is eventually going to be integrated, well, hopefully at least, if we can convince the GLC maintainers to accept our purchase, to GLC, which means that every user, every PowerBC G4 and G5 user will directly benefit from it, just by updating their package. I have also done Adler32 hashing algorithm, which this particular one is used in Dbex encoding, and also ZLabre. The BracklayDB hashing functions, sorting functions, as you will see, insertion sort, merge sort. These two, the first two, are already finished. And then, waiting on Quicksort, the results are really impressive, as you will see soon. And on the two lists, this is just a small list of what we could do. Basically, I encourage anyone who has some software that things would benefit from Adler32, just send me an email or just tell me an IRC. And eventually, maybe not me, but maybe someone else will work on it. So how Dbevn can help? I mean, this is really, initially, it's not Dbevn's issue. It's really more upstream. But I found out that using Dbevn has enabled to learn to know the proper people that are responsible for each task. For example, Dbevn has very knowledgeable JLPC people. And they were very friendly. And they basically told me that, yeah, you can finish. If you can write something like that. And if we manage to resolve licensing issues, which are really no problem, because there is no company involved that has copyright or trademarks, then it's quite easy to just transfer copyright, transfer the IP to a DFSF. The thing just includes the purchase in the JLPC itself. Also, Dbevn is, I think, in my opinion, it has one of the strongest power-PC communities. They will directly give feedback about this optimization, whether they actually work or they are buggy or anything. And yeah, it will also make Dbevn the factor distribution for power distribution. Of course, since the parties are going to go upstream, eventually they will be found in other distributions as well. But yeah, I'm OK with Gen 2 growing popular, but I mostly care about Dbevn. Right, so these are just a few numbers. I'm going to show you the actual results running in the system. Mem copy is almost four times faster. How is that possible? The active unit has four times the bandwidth of the integer unit with the cache on the CPU, not with the actual memory bus. The actual memory bus is still 32-bit. Yes? What's the size? The size. The size depends on the, sorry? In this example, what's the size? The size of the buffer, right? Yeah, yeah. Basically, you are restricted by the cache size. Because my question is, processor has a cache. So Dbevn, if a cache is spilled out or insufficient of data, we need to bring data from memory. So four times faster or n times faster, it depends on the copying size. Exactly, yeah. Basically, can you tell me, can you show the source code? Yes, yes, I will show it later, yes. Mem copy, yes. I should clarify this a little bit more. About the memory copying, this would actually be a lot of debate in some RSD channels. Basically, we try to benefit from Altevex pre-caching, well, cache fetching mechanisms. Before we try to copy the actual buffers, we try to prefetch from the cache. The previous command just prefetched the next buffer to be copied. So this gives us substantial benefit. Even for cold cache hits, you benefit from that. Because by the time you try to copy the buffer, the small chunk of data, you already have it on the cache. Even for cold cache, you have at least 20%, 25% speed increase. For hot cache, for data that is already in the cache, we have pretty much about this four times faster.  I mean, it's not really, there's no point in using Altevex for just copying gate bytes, right? But you have to work on, say, one kilobyte or one megabyte, then it's really worth looking at it. Is that not very expensive? No, I'm using it outright. Not really. What's the break point when it doesn't work? It depends on the case. For example, if you want to do sorting, for memcopy, I should say that around 90 bytes, one other byte is maybe even less. 64 bytes would be OK. So the NCHR and string length, if you actually think about it, this instance, just check in small chunks of data if a particular byte is there. In the NCHR, the string length is basically the same. One such for an arbitrary byte and string length checks for byte 0. Altevex offers one very convenient distraction. Just returns a boolean. Is the byte X, does the byte X exist in this 16 byte vector? Yes or no? Which is very convenient. If you just take 60 bytes at a time, look at the code, look at the data, ask Altevex to check if the byte 0 is there, and if it's there, then you can find the position with other scalar things. But it is still faster than going to get the scalar way of the start. Man said, it's about 10 times faster for small sites. I should clarify this. If you go for every structure base here, if you go over the cache, outside the cache, the speed against drop, of course. Well, it depends on the algorithm. For example, with something, it really doesn't matter if you have one megabyte or 100 bytes. Because this is an algorithmic modification that is much more fundamental than the actual architectureization. But I'll give you this algorithmic optimization. It's not possible without Altevex. So I should consider these two very strongly correct. I know which of you know the Memphrob function. It's a C function basically that doesn't XOR. You give it a buffer. It XORs the buffer with the value 42. Just that. It was a joke function. And I tried to see if it could actually be vectorized and what would be the game. Since the original C function, C scalar code, does a byte basis. It takes a byte, XORs with 42 and puts the byte back. This does it all the time. Without it, it was about 24 times faster. Swap. Swap is very important for byte swapping. It can be used, for example, for switching data from one architecture to another. For example, from PowerPC to Intel or AMD. It's used for writing out audiospeed. It's one of the functions that you use to write audiospeed. Hashing algorithms. These are algorithms that are used. The particular ones that I vectorized are exactly the hashing algorithms that are used in the Berkeley DB library. Because of the nature of the Berkeley DB library, I wasn't actually really able to benchmark. So I don't know. But I know how fast the algorithms are. I should write here that also I'm working on vectorizing the MySQL hashing algorithm. It's a little more tricky, but I think it will work in the better way. I mean, all these functions, all these algorithms, basically are part of one family, one whole family of hashing functions. If you vectorize a family, then you can basically just throw anything. I will show you in a few moments. Adler 32 is the hashing algorithm that is used in ZLibrary to check for check sums of data, chunks of code. To give it a chunk of code, it produce hash. And then it checks the hash with the one you've given it. If it's the same, then OK, go on fetching the next set of data. The artifact version is 2.5 times faster. And it is only that with, I would say, with just the first implementation. I suppose I could make it even faster. But I felt, OK, 2.5 is OK for the first try. Maybe afterwards, when someone else will see it and find it, OK, you can do this. And this is a more clever way. The ZLibrary, after profiling the library or actually a utility of the library, meaning GZ, which uses it's GZ replacement basically, I profiled it and found about six functions that would benefit from vectorization that were very time consuming. I quite easily vectorized two of these. The others were more tricky to do. And the benefit was about 25% faster work. It was not a huge difference. But 25% is 25%. And this is my favorite one. I think this is probably one of the largest performance gains from algebra. I'm going to show you the exact algorithm later. And there actually bends my chronicle in this system. So I don't know if you can actually see this. This is the exact mem copy benefit. This is the scalar. This is not very visible, is it? Right. Supposedly, there's a red line coming here, going like that. It's approximately 1 gigabyte per second, the bandwidth of the system. Well, without it, it would go like that. For very small sizes, this is approximately here. No. Yeah. Well, in about 256 kilobytes here, the level to cache sizes is smaller than the actual size that I'm trying to copy. So I should see the performance going like that, asymptotically, to the scalar version. But for small sizes, until the 60 kilobytes, which is the size of the level one cache, you have four times the speed. After that, the performance drops, but it's still faster. I've had some very recently. I have had Marcin Kurek, a guy from Morpho Westing, who used to ask me to use these functions in Morpho West. Morpho West is another operating system which follows the Yamiga OS wave direction. I mean, it is compatible in some ways with the Yamiga OS. And I don't know exactly how Morpho West works, but I know that he used it. He used these functions, and he found, actually, their performances as mentioned. So even for small stuff that you don't really want to work on vectorizing, you don't care about vectorization. You just want your code to go faster. You could use some of these functions, all that are already made, and plug it in your code, with just a complete link, and you use it. So this is the insertion. Is it visible? Yeah. Basically, supposedly, sorry? Yes? Yeah? If size is increasing, then the line will be dropped to red line? Yes, eventually, yes, it will. But even so, because of the caching prefetching mechanism, there will be a slight benefit, even for that reason. Instead, if we introduce projecting function into red line, the normal main CPI, we can achieve more? Not really, because if it's already in the cache, you don't benefit. If the data is already in the cache, if you try to prefetch it, then the operation is a no operation, basically. It's no. And it does nothing. You just waste one cycle. But on the whole, if you know that your data will be on the cache, you don't need to do prefetching. You waste one instruction. But for generic use, you don't know that your code will stay. There is no guarantee that your data will stay in the cache. So it's wise to actually use prefetching, in most cases, at least. Yes? So the caching speed is actually right behind the cache? Yes, that's good. That's true for the big size, but for the size of what stays in cache, you have much more speed, because you have full time in the cache spend time. Yeah. The point is, actually, interest in why the G-Hips and memory copy function will not be able to utilize the cache, or not? No, it does utilize the cache. But it doesn't utilize out of it. Yeah. That's the point. I'm going to show you benchmarks. Yeah. Have you? Yes? Another point of this is that I.T.Lac has the possibility to bypass the cache, right? Yes, but this is slower. And that means that if you do a main copy of a bit of steam, you just use the CPU, you just empty the cache of any useful data from the program, while using I.T.Lac, you keep the useful team in cache. Yes. The caching cache controlling is one of the more advanced techniques of gaining more performance. But it's quite tricky to do it in one program. To understand the huge rise around the D, around 15,000 bytes. 13,000 bytes, 16 kilobytes, is the size of the L1 cache, the level 1 cache. Yeah, but that's an artifact feature, so. Yes, it is. The ultimate unit has four times. It has 128 bits, bus to the cache, the level 1 cache. Whereas the integer unit has a 32-bit bus to the cache. So this is actually a four-times speed increase. This is precisely the reason. OK, but why does it drop the make long then? Because the memory bus, the 128-bit memory bus. Sorry, the 128-bit bus is not to the memory, but to the cache. If the data is not in the cache, it has to fetch it and you lose cycles this way. So whether you like it or not, the performance drops. Yeah, the performance increase is only in theory. No, it's not in theory. As I said, mostly, most times the code, the data that you're trying to do to work on it is partly in the cache. And the perfection is done, but not in all data. Yeah, if we save it mentally, it's on the survey. Basically, I think the test case at hand is when copying the same area of memory to another space over and over again. Yes, the benchmarks, I've, well, I'm going to explain later how the benchmarks work. But since you've brought this subject, I tried to do two ways of benchmarking this code. One was trying to work on data that is all the times in the cache. This is the four times being increased. The next method would be to take a huge array or a huge set of data and then randomly pick data buffers and then try to copy one to another randomly. I knew that they were not in the cache. Even then, the performance increase was substantial, more than two times. Just wondering what the point is in those low areas where everything can be written to the cache. I think you are basically missing the actual writing of the cache. No, actually, you don't. Once you sent the, once you stole data back to the destination address, then it's the responsibility of the CPU to actually copy the data from the cache to the memory bus. Yeah, but unspecified renders will happen. It will happen on the next one, we'll try. You don't know that. And basically, since you don't know when this will happen, you don't see it in the benchmark. And as you overwrite the same area of memory again and again and again. Yes, yes. So basically, the big speed increase is not actually writing the data from the memory copy. As I said, if you work on small sets of data, consider this example, you're working with block sizes, these block sizes, and try to copy one to the memory, and maybe process it and then write it back. And then you do it all over again. If you were doing it, of course, you have to load, put the data in the cache, process it, then store it back in the cache. The CPU will find out that it needs more, that this data has been written, has been stored, so it's not really useful anymore to the main code, the main loop. So it has to free it to load another block. This process really benefits from Antibank. The process, I don't know if you know Martijn from ISE, Melko, well, okay, Melko is his nickname. He uses this code on the file system he writes for Morph OS, and it proved to be actually worth it. I mean, he saw really, he did see performance increase. I don't use Morph OS myself, so I don't know how it benefits from that. But anyway. So, shall we move to the next one? Right. The instruction sort algorithm. I don't want to go into details of the algorithm, but I basically say that it's an n-square, an old big old n-square algorithm. So if you have, this is a buffer, a sequence. Okay, and you load it. If you were working on it on a scalar base, on a scalar way, you would just see this as a complete sequence, and you would place bytes accordingly, or not all over the sequence. So you would have to work on, this is our 4 times 16, this is 4 bytes. Okay, so you would have 64 square, maximum directions to perform to sort everything using this algorithm. Using Altivec, I load this thing in registers. This is a 16 bytes, so I just load 16 bytes at a time. And I have 4 vectors, 4 antivec vectors. I try to use everybody in the vector as a column. So I sort everything in parallel. I sort 16 vectors, 16 columns in parallel. This is quite easily done using Altivec. The code is quite fast. I'm going to show it to you, and of course the code will be free, software, GPL, probably, I don't know. And after you have sorted all the columns, you still have the burden of merging everything back together into one single piece of data, sorted data. So the next step was to take all these sorted columns, as you can see, and put them back together into one single piece. What was the problem? All the merge algorithms I had found in Google, using Google, they were all about having two sets of sorted data. I couldn't find a generic merge algorithm that could take any sets of sorted data. So I had to write my own. Let's say it was an extension of the existing one. Again, the algorithm, I've just finished a paper on this insertion sort and the merge sort, where I explained the exact algorithm of the generic merge sort. So the integer sort is up to 54 times faster for 138 keys of characters. Of course, the situation is slightly different if you have short integers or 32-bit integers. But if you have to sort 100,000 characters by it, then this algorithm is... I'm going to show you the results. But isn't the... The most cases where you use insertion sort is part of a quick sort when the petitions are really small. And if the data is set up to be used in other operations, then it would defeat the whole purpose. At first I thought so myself, but I've done... Even for the smallest case I could use, Aldivicon, it was 32 bytes. Just two vectors. Two vectors and just sort one column of two elements, 16 columns of two elements, two rows, basically. And then use merge sort on that to produce the actual sort of sequence. Even this one was actually faster. It produced more or less the same number of directions, but for that kind of sizes you don't really carry if you lose some milliseconds. I mean, yes, Aldivicon does have a higher overhead to use than proper just normal scalar code because you need to prepare the registers and masks and whatever. But for sizes that are bigger than, say, 236 bytes, then the 236 square is quite a significant number. Yeah, you mean in general. There are some times where in session sort is faster than quick sort. Basically this whole deal started when I saw an article in Slashdot about using the GPU to sort elements, a GPU version of quick sort. And I thought, heck, why not try Aldivac? Would we have any benefit from it? And then I tried to see what are the most common and used algorithms. One is quick sort, but quick sort has disadvantage. It is not a stable sort algorithm. In session sort is one of the most common and it is stable. And it is actually very useful when you have almost sorted data.  But the previous data was already sorted. Quick sort, that is very slow. I tried that. It depends on what partition you use. It is a basic algorithm. If you use a good partition algorithm, it would have really good speed on the piece of data as well. True, but then you have noticed that all the partition algorithms that are offering good performance, basically they are, how to say, focused on specific sorts of data. Maybe totally random data that needs to be sorted or already sorted data. If you want to replace a very common routine in the kernel or in the GWC, you have to be generic now. And the quick sort is not considered to be the fastest routine. It is considered to be the most efficient in a generic way. This is why it is so popular. But there are cases where another algorithm is faster. And anyway, the next step is to vectorize the quick sort itself. I mean, just do a parallel quick sort using algebra then using again merge sort to put everything back together. So this was, in my estimate, I think it would be about 400% in speed increase because of what you do. Because the sizes would be over four times lower. Right. It is useful. In a few months, we expect to have ultimate code in GWC for people to test at least very few common functions, maybe not everything. But so far we've used about 15. Next thing is Z library quick. As I said, I've already done some initial work on. LibreMcrypt, which is mostly used for quick sort code. STL, I don't know which of you know the Mac port of STL, which is out of Mac STL, which is non-free software, unfortunately. One idea is to try to convince the offer to release this free software code and integrate it in some way back into the STL standard library. It offers similar results. For example, sort is about 10 times faster. And it would really be fun to see how normal applications that use C++ would benefit from it. LibreDV, which is in the code library for digital video, the list is really long. I have it on my other computer. And yes? I was going to say about context switches. Well, to tell you the truth, no one has actually measured that. I've asked so many times in the PowerPC development, well, kernel teams, and they said, yeah, we don't know. Basically, they think it's higher, but it's supposed to be higher. But the benefit, in my opinion, the benefit would be worth it. We have saved registers, which... Linux doesn't use that. Yeah, I know that. I think only Mac OS does. They use it in the process? I think they do. We have saved registers and registers, which allow you to say, we modify these registers and say... Basically, so far, they haven't used it at all, because, well, no one actually uses Altevic extensively to care much about context switching. But once you start to use in a system-wide way, then it's probably going to be significant work. At least look at it. And I have some links here. Our technical guy has a very, very good article about how G4 works in general. This is a free-scale presentation about a tutorial on Altevic, basically, which is really what got me started. It's really very nice. Very well done. And, of course, Penguin TPC has very good links. TPC Zone is a very active forum for policy users and fans. I also have some papers with some Altevic example code in my account in the end. And that's the end of it. I think we have barely enough time. Yes? Have you seen that Venus has a version control system called Git and that somebody contributed some PPC Altevic code for connecting Charbon Sun? And they seem to be very enthusiastic about making it very fast. No, I didn't hear that. It's in the source table of Git and that seems to be very optimized. And it looks like it's probably in Altevic and in Assemble. Wow. Okay. We'll probably ask you the link afterwards. It's a similar question, but do you use Altevic in user-run-to-counter-run-to-copy? At any time, a lot of time, you can shoot user-run-to-counter-time-copy. For example, how to disk access, data read-write, dcbit, and so on. So using Altevic in that communication, we can achieve more performance. Exactly. There have been many articles, especially by Fliscale, on this particular subject because you can combine with Altevic, you can combine the checksum code and the actual copying. I've seen many documents and many papers on this, but I think it's very, very well stressed that, yeah, it can be perfect. And you can actually use the G4 CPU for, say, even gigabit switches, which is not, as I understand, although I'm not an expert in the field, the actual Linux kernel right now is not really the most efficient operating system for very fast network packet switching. But I think, in this way, we can... I think this puts the policy in a very different perspective, especially with companies who work on and produce network switches and network gear. Right. I think we barely have enough time to mix it. So are there... Is the phone visible? Okay. Let's try this one. No. Right. No. VGT. Right. So this is the case with very small sizes, with con-cast kits. And this is the different alignment. The alignment of source and destination bufflets. I know this does really look impressive, but for sizes of 13 bytes, it's very difficult to get an actual benefit from Altevic right now. Once the sizes start to grow, this will start to get higher. And right now, let's... I'm not doing a very good job of it right now. I think that small size still is pretty large for Altevic. Yes. Because the sizes are really small right now. But... No, it starts to get higher. But let me... try to make this a little better. Cover... This is called cash. Yeah. It's a little worse. It's still pretty much... Can you start? Bigger size? Is there one... we beat out a different alignment source? Yeah. Sorry about that. We have to finish? Okay. So, I'll be smoky. If everyone wants to discuss it, I'll show you the actual code. Thank you very much. And... Thank you. So, thank you. Thank you.


The World Health Organization recommends we reduce our consumption of salt, trans-fat, saturated fats, and added sugars. Why? Because consumption of such foods is the cause of at least 14 million deaths every year from chronic diseases. Several decades ago it was heresy to talk about the impending global pandemic of obesity, but now we're seeing chronic disease rates skyrocket around the world. We have exported our Western diet to the far reaches of the planet. With white flour, sugar, fat, and animal-sourced foods replacing beans, peas, lentils, other vegetables, and whole grains. Understanding the reasons underlying this trend towards increased consumption of animal products, oils, and sugar, and the reduced consumption of whole plant foods begins with understanding the purposeful economic manipulations that have occurred since World War II relating to agricultural policies around the world. For example, the US government, since early in the last century, has supported food production through subsidies and other policies resulting in large surpluses of food commodities' meat and calories. In this artificial market, large food producers and corporations, big ag and big food, become very profitable, and that may be part of the problem. Last year, Dr. Margaret Chan, the director general of the World Health Organization, gave the opening address at a global conference on health promotion. One of the biggest challenges facing health promotion worldwide, she said, is that the efforts to prevent our top killers go against the business interests of powerful economic operators. It's not just big tobacco anymore. Public health must also contend with big food, big soda, big alcohol. All these industries fear regulation and protect themselves by using the same tactics— front groups, lobbies, promises of self-regulation, lawsuits, and industry-funded research that confuses the evidence and keeps the public in doubt. And they should know. In 2003, the World Health Organization released a draft report outlining a global strategy to address issues of diet, making a series of rather tame recommendations. But six words in that report limit the intake of free sugars. Stimulated a remarkable series of events. Free sugars means added sugars. The food industry went to work within days. The sugar industry threw the sugar association and listed the support of officials high in the U.S. government and led a vigorous attack on both the report and the World Health Organization itself, culminating in a threat to get Congress to withdraw U.S. funding to the WHO. You know, the organization deals with AIDS, malnutrition, infectious disease, bioterrorism, and more, threatened because of its stance on sugar. Just as the U.S. went to bat for U.S. tobacco companies and led the charge against World Health Organization's Framework Convention on Tobacco Control, but the threat from the sugar industry was described by WHO insiders as worse than any pressure they ever got from the tobacco lobby. As revealed in an internal memo, the U.S. government apparently had a list of demands, deletion of all references to the science that experts compile on the matter, and having dietary guidelines are fine as long as there are no references to fat, oil, sugar, or salt. The threats failed to make the WHO withdraw their report, entitled Diet, Nutrition, and Prevention of Chronic Diseases that formally launched and concluded that a diet low in saturated fat, sugar, and salt and high in fruit and vegetables was required to tackle the epidemic rise in chronic diseases worldwide, though they did end up watering it down. Gone was referenced to the Comprehensive Scientific Report, and gone was its call for recommendations to actually be translated into national guidelines. History has since repeated. At the last high-level UN meeting to address chronic diseases, we helped block a consensus on action after lobbying from the alcohol, food, tobacco, and drug industries. When asked why Michelle Obama's successful childhood obesity programs in the U.S. should not be modeled around the world, a U.S. official responded that they might harm American exports.


It was a dirty trick. Why did they have to send me? There were lots of other fellas on the force they could have sent around the teller. Fellas who were impartial, who had no feeling about the case one way or the other. But no, they had to send me. I remember riding over there in the prowl car that night. Jack Hurley was driving. I said, Oh, look, Hurley, why don't you go up and tell her? Not in zone, Norris. The old man said you. Oh, but you haven't any connection with the case. No, but it happens to be one part of the job that always makes my stomach crawl too. Oh, come on. No, thanks, Norris. This is your party. From mixing the cake to blowing out the candles. What'd you say the number of the house was? Uh, 6427 Locust Drive. Let me shoot the spot around and see if we can catch the house numbers. That'll be pretty close to it. Can you read what the number on that door says? Uh, 6411. Must be that third house in the corner. Okay, Norris, there she is. 6427. I'll wait here for you. Uh, Hurley, is it worth it five for you to go in and tell her? My friend, they haven't started making money and denominations big enough to make me say yes to that job. Sorry. I didn't say any more. I just opened the car door and stepped out onto the sidewalk. I stood there a moment looking at the house. It was a stucco affair that looked as if it were made of some bilious blue confectionery. Black windows stared out of me like blind eyes. I swallowed and then I moved toward the house. Heavy footed, I plotted up the three stone steps to the door. I listened as the bell shattered its fullness inside. I waited. Then a light flashed on upstairs. I listened. Padded feet thumped down the stairs. The whole light came on and the feet padded toward the door. Then the gnar rattled and the door swung out.  Although at first I didn't see any of those things. The first thing that hit me were her eyes.  In fact, it may sound ridiculous, but her eyes screamed when they saw me. I could hear them scream just as if the sound came from her throat. I swallowed again and felt my scowl. Tighten at the back of my neck. Like someone had just laid a nice handful of icicles there. She made it easier for me in a sense because she spoke the first word. Yes. What is it? Something's happened to John. You're Mrs. Miller? Mrs. John Miller? Yes. Yes, I'm Mrs. Miller. What's happened to him? You better brace yourself for a shock, Mrs. Miller. What's happened? He... had an accident. He's not. Yes, Mrs. Miller. He's dead. Oh! Oh! No, maybe you better go back into the house and sit down. Better sit here in this easy chair. Thank you. How did it happen? Car fell? Ma'am, you're sure you're okay to listen? Of course. Well, it isn't very pretty, Mrs. Miller. Maybe something of a shock to you. What are you trying to tell me, Austin? Your husband was shot. Shot? How? Where? In a hold-up, ma'am. A hold-up? Oh. At Stover's warehouse. Oh. Did you catch the man? Who would want to hold him up? I'm afraid, ma'am. He was on the wrong end of the hold-up. Can't be not John. I'm sorry, ma'am. Well, there must be some mistake. You don't know John. Recognize these papers, Mrs. Miller? What? John Miller? Why, yes, that's his old private license. He was going to get it renewed. And this is a photostatic copy of his discharge papers, right? Yes. Yes, those are his. They were taken off his body, Mrs. Miller. Those and this blank application for unemployment insurance. Yes. He was going to fill it out and file it if he didn't find something to do by the end of the week. He wasn't working? No. That's where he went this afternoon, left home quite late. Said he wouldn't be back until very late. Told me not to wait up. If it's John, maybe... Maybe there's been a mistake. Maybe, ma'am. But you'll be able to tell for sure in the morning. In the morning? Yes. You'll be asked to go to the morgue to identify him. But I... Well, I wouldn't hold out too much hope, Mrs. Miller. Why? Oh, and then he matches the description on that driver's license to a T. You better get back upstairs to bed and try to grab off some sleep. Tomorrow will be a bad day for you. Yes, I'll see you to the door. If there's anything I can do to help. Thank you. You've been very kind. Well, good night, Mrs. Miller. Good night. I was very kind. That's what she said. Very kind. Yes, I was very kind. I was very kind until tomorrow morning when she found out that I was the guy who killed her husband. I never figured they'd give the story such a big spread. I figured on a third of a column, maybe on the inside pages, but no. The thing happened to break when they were fresh out of visiting generals and strikes and major accidents. So they splashed assorted details all over the front page. There was a three-quarter view cut of me and my uniform and kept smack in the middle of page one. The caption read, The hero shoots gunman in warehouse robbery. Went on to tell my story. I saw a light flashing in the warehouse, crept to the door and surprised the thief, John Miller. How he drew and tried to plug me in, how in the gun fight that followed, I shot and killed him. It all sounded just like something out of a dime detective story with me, the big hero. What I didn't like was the way it played up that he was an ex-serviceman, honorably discharged, out of a job. A victim of a time. A Joe who had distinguished himself in combat, only to come home to find himself a forgotten hero. Even brought out how he used the German Luger he'd brought home as a souvenir to stage the robbery. But, of course, the important thing was everybody said I was right. They all agreed that I had no way of knowing that the guy was an ex-serviceman. One reporter said, when a guy has a gun, he's about to use it. You don't walk up and say, please, may I see your discharge papers? Of course, the boys at the station saddled me with that hero stuff and rode me all over the place, kidded me about how it felt to be a celebrity and swooned at myself on the front page. When I left the station to go on my regular tours, I guess I must have had my picture snapped fifty times. Seems everybody wanted to get into a shot with him. When I got back from tours, the captain left word at the desk for me to go right into his office. Come in, come in. Sit down. Oh, thank you. Well, you're quite a hero, Norris. First chance I've had to talk to you about it. I never figured it would draw as much attention as it has, Captain. Captured to a lot of people's imagination. A lot of important people. Important people? Including the commissioner. The commissioner? Yeah. He called me today. Norris, how would you like to be transferred to the detective division? Plain clothes, hmm? This was too much. If he only knew how long I'd wanted to change into plain clothes and join the detective squad. If he only knew how long and hard I'd worked for it. And now he laid it right in my lap. Yes, it was quite a day. Quite a day. But if I thought it was over, I had another guess coming. That night I went to Mike's place for dinner. I usually ate dinner at Mike's, mainly because he served the best mess of food 75 cents could buy. Only tonight when I came in he said... Tonight, Pete, is it dinner as he is under me? Oh, never let it be said. Pete Norris argued with a guy about buying him a meal. Just the one thing, Pete. Well, I figured there was a catch in it, Mike. What do you want? Oh, please, please. I would like you to autograph this menu, huh? Well, talk about you believer or not. Here was a man I'd known for the past too many years. And now, just because I shot a man and got my picture on the front page, he was all excited about getting my autograph. Well, I scribbled my name on the menu for him and anchored one of the tables in the back and sat down. First chance I'd had all day to... Well, to be alone and really think. As I dug into the plate of spaghetti Mike served me, a pair of brown eyes suddenly snapped on in my brain. It wasn't the first time since last night that I'd thought of those eyes, or the person they belonged to, but I'd always been able to close them out because so much was happening. Now, they've stayed with me. I couldn't rightly tell whether they were accusing or just hurt. Then an incredible thing happened. A voice that matched those eyes spoke and... Hello, Officer Norris. Oh, Mrs. Miller, I... Well, I was just... I'm sorry if I'm bothering you, Officer Norris, but you were so kind last night when you came to tell me I... Well, I... I just wanted to ask you a few more questions. Of course, Mrs. Miller.  Thank you. Uh, you eaten? Yes, yes, thank you. Or coffee maybe? No, thank you. I... I just want to talk if you don't mind. Well, of course I don't mind, but you certainly read the papers. Papers? I mean... You know I'm the one who... Yes, I know. I'm not blaming you, Officer Norris. Pete, if you don't mind, everybody calls me that. I'm Betty. Pretty decent of you not to blame me, Mrs. Miller. I mean, Betty, a lot of women wouldn't feel that way. It was your duty. You saw someone robbing the warehouse and... Well, it was your job to stop them. But... But what? I can't believe John would do such a thing that... There must be a mistake someplace. A mistake? Yes. Probably... Probably John saw the light flashing the same as you did. Maybe he went to find out what was happening too. John was like that. You mean... Maybe I shot the wrong person? It's possible. Maybe the other person who it was fired the first shot and then ducked. You maybe thought it was John and he thought it was you. Can't you see, Pete, I've got to believe that's what happened? Yes. Yes, it would make things easier for you. No. No, not for me, Pete. The jigger. Jigger? My son. Oh. I didn't know you had a son. Three years old. Born a few months after his daddy sailed for Europe. You see now why I've got to believe that way for his sake? Why I've got to prove that John didn't really go there to rob and kill? Well, believing it, that's okay, Betty, but proving... Oh, that's a different thing. That's not going to be so easy. No, it's not going to be easy, Pete. But I've got to do it. That's why I came here to ask you to help me. Of course I'll help, but where do we start? There isn't a single clue to go on. We've got to find a clue. How? I don't know. I don't know, Pete. I haven't the faintest idea of what even began like looking for it here in an ocean. But you will help me, won't you? I tried to say no. I wanted to say no because I knew it could all lead to only one thing.  It wasn't just pity that made me say, yes, I've been in harness too many years to let anything like that sway me. This was something stronger. Something that had never happened to me in all my years. Something I told myself never would or could happen to me. Last night I felt it when she first opened the door. But I managed to fight it off then. Now it was too powerful, too overwhelming to fight off. Besides, I didn't want to fight it off. Yes, I was in love with Betty Miller. I was in love with the wife of the man that I'd killed. Officer Peter Norris, and this was a hero. A play well calculated to keep you in suspense. Strange when you're in love with someone you don't want to sit and talk to them about death. Death is something that seems very far removed from life. Love is just another way of saying life, of saying you're glad to be alive. At least that's how I felt about it. But Betty, she wanted to talk about death. The death that had thrown us together. The death she said she wanted to prove was an honorable one. So we sat there in Mike's and talked about it. There are several things I don't understand, Pete. And they are? Well, first of all, John wouldn't take anything that didn't belong to him. Well, a man will do a lot of things he never did before if his wife and child need something. But the fact that he didn't even want to take the unemployment insurance if the state was willing to give him proves how proud he was. Well, sometimes a man can hide his pride and not let anyone know. Besides, he did have a gun on him, a German Luger. Yes, I know, but that only strengthens his case. Well, how come? Well, he took that gun within to pawn. It was a souvenir that he brought back with him from Germany. He figured he could easily sell it. But he didn't. But that's just it, Pete. He said if he got the job, he went after he wouldn't pawn it. Now, wait a minute. Maybe this is important. In other words, you think he got the job. Oh, Pete, if we can prove that, maybe we can prove he had no reason to rob the warehouse. Because if he had a job, certainly John never would have done such a thing. Never. If I can find out that much, I'll prove he died honorably. I'm telling you, Pete, I'm not going to let this thing rest. You... You know what job he was after? No. No, I just never thought of asking. How did he hear of it? Read it in the paper. Oh? What paper? The Evening Globe. You still got it? I know. He took it with him. And he went to see about the job late in the afternoon? After four o'clock. Why? Oh, no reason. Well, I saw Betty home. I had full intention of leaving her at the door, but she insisted I come in and meet Jigger, her son. Betty's sister was there. A kid about 16. She'd been minding Jigger and had put him to bed, and we went upstairs to the bedroom to see him. He was sitting there in his bed in some kind of kid's nightclothes with the feet and hands sewed in. On one side of him was a big fluffy floppy ear dog, and the other side was a big pink and blue elephant. I'll never forget the way his little eyes fastened onto my face. I felt like turning and bolting back down the stairs. But I knew he had no way of knowing that I was the guy who had killed his father. In fact, Betty had told me that he'd seen so little of his father that he hadn't had time to even get used to him. I knew as soon as he crinkled the corners of his mouth in a smile that I was foolish for thinking the way I did. I knew too that this was something I'd missed. Some part of life that had passed me by. Something I suddenly wanted more than anything else in the world, but did I dare take it? I finally shook hands goodnight with a little fella, said so long to Betty and her sister and left. I took the bus back downtown. I found a newspaper stand that had a copy of last night's evening globe. Turning to the classified ad section, I went through a list of help wanted. Under Car Washers Mail, I found an ad placed by a guy named Crown who ran the city garage on Maple Street. Now, Maple Street wasn't too far from the warehouse where I shot John Miller last night. In fact, you had to pass the warehouse to get to the bus line. Half an hour later, I was talking to Al Crown while he squirted a hose on a muddy blue-black sedan. Yeah, I'm the guy that put the ad in the paper. We're all a good at it. Guys are the wicker here.  Eh, nuts, I says. How long did you run the ad? Uh, a whole week I run the ad. What happens? Three guys answers it. Three guys? Yeah, one a night. That's all they last. Oh, what happens? Al Crown's got to climb into a pair of rubber boots and clean cars his self. Al Crown, the guy that owns the jet has to do this. Oh, hand me that sponge, will you? Yeah. Oh, thanks. Did you hire anybody last night? I say, did you hire anybody last night? Last night? Last night? Oh, yeah, yeah, yeah, last night. Yeah, I found me the answer to a garage owner's prayer. He was a sweetheart. The guy washed more cars than the eight hours he worked and the other two guys washed together. Remember his name? Eh, wait a minute, I ain't so good on remembering. Johnny. Yeah, Johnny's something. A nice looking kid with blonde curly hair and glasses. Said he was coming back tonight.  Oh, yeah, I remember. Miller. Johnny Miller, that was it. Oh. But I guess the roller like collects you seven bucks and blows. You haven't read today's papers. Look, I was washing cars with this here Miller guy till midnight. Anybody come in? Huh, after five o'clock at night this place is dead in underneath the satin pillars of a casket. So Miller left here at midnight? On the noggin. And I spent the rest of the night fixing flats, changing earl and scraping plugs. Didn't hit the sack till almost nine this morning, just got up an hour ago. Now you tell me what time do I have to read papers? And why? Another woven declared? Or did some brain find something to split the thing that split the atom, huh? The next morning I picked up the paper and on the second page I see a picture of none other than Al Crown the fella I spoke to last night. There was a one word caption over his photo. Murdered. Below was the picture, picture was the story.  It looked like a murder robbery job the paper said because the cash drawer was rifle and things in the office were scattered all over. Well, as soon as I had breakfast I called Betty.  There was suddenly a lot of things I wanted to talk to her about. She said okay, so I grabbed the bus out to a place. Maybe I was imagining things, but I had a peculiar feeling that something was wrong the minute she opened the door. I don't know what it was, but there was something about her eyes. Aren't you coming in, Pete? Oh, thanks. I don't have to report until late this afternoon thought maybe you and I and Jigger could go someplace. Oh, I'm sorry, Pete. I let Jigger go with my sister. She's promised to take him to the zoo for so long. Oh, well... I'm sorry, Pete. Well, it's okay. Maybe it's just as well anyway. There's some things I'd like to talk over with you. You found out something? Let's go someplace else and talk, shall we? Pete, you don't like this house? Well, maybe it's remembering how and why I first came here. Well, I'll get my hat, Pete. I'll only be a second. She turned and walked into the next room to get her hat. She couldn't have been much more than across the threshold when I clapped my eyes on it. He was lying right there on the end table on top of a couple of books. A copy of the Evening Globe. I grabbed it up in my hand. The date on it seemed to leap off the paper and smash into my brain. Wednesday, October 24th, the night before last, the night her husband was murdered. It was the copy of the paper she said she didn't have. The page the paper was open to was a classified ad section, and halfway down the first column was the item. Car washer, mail. It was the same ad I had read, and it was circled with red lipstick. I blacked out completely for about 30 seconds. I couldn't move, couldn't think, couldn't see. Everything before me was just a black curtain, and then from the doorway... So, so you found it? I don't know what I did first. I don't know whether I tried to turn or hide the paper or tried to speak, but when I did turn, I saw her eyes. Wide, fierce, murders stabbed out of them and fastened on the paper in my hand. Well, Pete, what now? Oh, you know where he went? Yes. You know he got the job? Yes. You read this morning's papers? Yes. Well, Betty... I'm sorry. You are? Yes, Betty. I am. Really, I am. What are you going to do to me? What is there left to do? Only one answer.  Like it killed John and the garage owner. Yes. Then you did kill him. Yes.  Too bad you found out, Betty. I've grown very fond of you. I wanted to marry you, Betty. I wanted to make you my wife.  I'd have made it up to you and to Jigger. I'd have given you the things John Miller never could have given you. No. Too bad, Betty. No. But you know too much to stay alive. No! No! All right, all right, all right. Hello, Captain. Well, I suppose you heard it all. Yeah, yeah, we were hiding upstairs now. Mrs. Miller called us as soon as she read about our crown's murder this morning. We were coming to get you, but decided it was better to have you come here, as Mrs. Miller suggested. Okay boys, take care. Come on, Nora. This is the Armed Forces Radio Service.


Good afternoon, everyone and welcome. This is Melissa Arma with the Stock Swoosh, and I'm reviewing here Blulu. I made an option call this yesterday was terrific, amazing, and it worked, and I even talked about it in the room yesterday I talked about the webinar last night, and what I reviewed was that some other trading company actually was looking to buy this stock at $50, the day that it gapped, and I said how ridiculous that was, and then I did a whole talk on it in the lecture, and I'm actually really, really happy that I did call this because it's rare that I call an option as a put because the market's been so strong and even today, I mean, look how weak Lulu is. What a nice trade. So I called puts yesterday expiring out for a month, the end of April, and it's already through the strike, which was $50, really nice call I made in this, and a long talk I gave in the webinar last night, and then also in the room about why Lulu is a short. Okay? So in the webinar last night, people were saying they wouldn't buy it at $50, but they buy it at $35, and I said why? Why would you buy it at $35? Again, I predicted that this would drop and break $50 in the next couple of days, and that's what it did, and it did it today. So my system predicts where stocks are going to go. You can't predict that the stock is going to get bought at $35. You can't predict it's going to get bought at $50, and that was wrong anyways. You can't predict it's going to get bought at $35, okay? You've got to have some, might it, could it, maybe, I don't know, that's not predictable. What is predictable is once the stock gaps, which is what happened here, on March 30th, you rate the gap, if it rates more than 20 points, it's a short per my 26-point rating system, and then you can predict based on the gap and the rating, the targets, and the resistance, and the support, and where the stock's going to go, eminently, okay? So that's what I did, and that's what's happening, and everybody in the option letter is up, and it was just another beautiful, amazing prediction by me that worked. So congratulations to everyone that did the trade. Lulu looks great. This looks like it's just going to bleed lower. I mean, there's no help for this right now. This is zero survival rate at this point for the Lulu. So if you'd like to sign up for my Golden Gap class, if you want to make money trading, then email me at melissa at thestockswish.com. I can teach you. If you want to make money, you still have eight more months left in the year, almost. Today is April 4th. The class is this week in April 8th and 9th. Email me at melissa at thestockswish.com. Thanks, everybody. Have a great day.


somatosensory brain-computer interface, BCI, based on sensory imagery, SI, has been shown to be effective in providing a viable alternative for individuals who are unable to achieve adequate BCI control using traditional BCI modalities. This study demonstrated that the SI task induced a contralateral cortical activation, which was consistent with the real tactile stimulation and imagined tactile stimulation. Furthermore, the combination of SI and other BCI modalities, such as motor imagery, may provide new avenues for further improving BCI usage and applicability, especially in those subjects unable to attain adequate BCI control with conventional BCI modalities. This article was authored by Lin Yao, Ning Jiang, Natalie Marchekskirsting, and others.


Yes, Welkom back guys again and to remember Iqsori's mechs and giving you all this very important information to get in the Gulf Countries By the way, is even the first time to come across this channel, don't forget to subscribe. It's mechs giving you all these updates. We're looking at the Gulf, we're looking at Qatar, we're looking at Dubai, we're looking at Kuwait, Oman, all this important information that definitely should know. Yes, we are looking at what you call, how to download what you call a visa on what you call the website, your website portal. Yes, most of you you've been here, you've applied for visa or agents have been applied for your visa in any world. But you do not know how even to download your visa or to get a visa from the website. Yes, regarding the visa when it comes here in Qatar you remember the systems are quite very good is that you can download visa using what you call the Ministry of Interior portal. In this case you can use what you call the application number in case you have the application number. It will show the status of the visa. Then still number two is when you have what you call the passport, passport number it will just go to the system to the Ministry of Interior portal. So you put in your passport number then you put in your what you call your nationality then also what you call the aperture number that will give you the open up number. So once you take in it will give you the details. Once giving you the details is to either show your visa is under processing under application or not available at that time. So definitely you can check your visa using what you call your passport and nationality. So most of the times will be denied by the agents or visa process and definitely you have internet with you. Check your status of your visa before the agent can try to lie you. Check go to the website. Put in your passport number and nationality the visa only will show either it's under process either it is printed or it says approved or it's process or the fees are paid. All this one will be in the system. So once you see the visa is ready for print even by yourself you can print the visa. Not waiting for the agent in case you pay the money to the agent in that case. So once you say you check the status then you can be able to download or print the visa for you. Hope I have tried to share something for you. Thank you so much by the way it makes giving you all this important information. Is it your first time you cannot proceed alone? Don't forget to subscribe so as makes giving you all this information.


Hi everyone, today I'm going to show you how to use the Forecast feature in Excel to demonstrate how a food security organization can forecast inventory needs. This spreadsheet shows a food bank's quantity of donated food over the past year. Using the forecast formula, I ask in January 2024 what value of donations you'll expect this month. I see here we should expect around 252 drink donations. This estimate our canned meat donations this month, so I type equals forecast open parenthesis our desired date comma range of dates on column D, range of dates on column B, close parenthesis. It looks like we can expect 247 cans. I can take these forecasts for each type of food and compare them to my number of families in need.