I did do. OK, now it's recording. OK. Hi, everyone. Welcome to the first recitation of CSE 421-521. My name is Ali, and Carl is over there. We're going to be your TAs who will teach recitation. We will be rotating per week. So each one of us will handle one week. The next week, for example, we're going to be Carl. We will have several recitation per assignment. For example, we're going to have two recitation for assignment one, three for assignment two, and then we're going to have four recitation for assignment three, in addition to recitation for the midterm and final. What should you expect from our recitation? Basically, it will help you get started. We will show you what are the files that are important. As you might know, the source code that you've already cloned has a lot of files, and pretty just like confusing if you really want to go through these files and figure out what's not important for your assignment. So we will point these files out for you. And we will also show you where should you go and start implementing code in these files. We will also just provide you some hints on the assignments. So we will help you get started, show you the important files, go through the, for example, the implementation that is already provided to you through the source code. And then we will provide some hints for you so that would help you to implement your assignment. Also, we're going to be recording the recitations. Every Wednesday, I'm going to post the slides and the videos on the website, or just going to post them. And I will post them also on this course. So you will have them by Wednesday. So that's for the logistic. Any question about the recitation? OK, so let's get started with assignment one. So for today, I'm going to review, go through the assignment one. What should you implement? I'll present you to the critical section. What is the critical section? Then we're going to present you to the locks and then spin lock, weight channel, semaphores, and condition variables. You'll get an idea of what each of these are because in order, for example, for you to understand what is a lock, you need to know that there are some part of your code that is a critical section. We name it a critical section because, for example, it has access to a shared resource. So these are the building blocks for each other. So we're going to go through them one by one. Hopefully, if the time allow, we will also cover the condition variables. If not, we're going to cover it next week. So assignment one, you're going to implement synchronization primitive. That will allow your code to synchronize. So you're going to implement locks. You're going to implement condition variables. And then you're going to implement reader writer locks. After that, you need to solve synchronization problems like the well-meeting problem and buffalo intersection problem. For these problems, after you implement these synchronization primitives, you need to figure out which one are the most appropriate for each problem. Once you're done, this is assignment one. And then you have the deadline, which is going to be on Friday, February 17, which is around one and a half week from now. So let's start with the critical section. Critical section basically is a piece of code that, let's say you have a program that has multiple processes. And there are a piece of code in your program that these processes need to access at the same time. This part of your code, we call it critical section. And this part of your code, because basically it will have access either to data structure, to shared resource, you need to protect that. You cannot allow more than one process to access that shared resource at the same time. So critical section, as we said, doesn't allow multiple concurrent processes to access that shared resource at the same time. Let's say you have a printer that's shared between five PCs. If all these five PCs access the printer or send the print job to the printer at the same time, what will happen? Either things will get mixed up while printing, or the printer basically will crash. So let's try to say that in your program, you want to define a function that will print. So your first version of the function print will be basically it's a void safe print. It will get the job and do print. The command will send the job to the printer to print. So now this will not work. Why? Because as I answered this before, this is a shared resource. You have five PCs. There might be times that multiple PCs will send a print job at the same time to the printer. And this will basically not work. You will get mixed up. Either things going to be mixed up at the printer, or as I said, the printer will crash. So now we need a lock. This is where a lock comes into play where we need to protect that shared resource. And the lock basically is a synchronization mechanism that will make sure that a shared resource does not get accessed by multiple processes or thread of execution. Wherever you have multiple threads of execution and you have a shared resource, you need to protect that shared resource so it does not get accessed at the same time by more than one thread. So basically it's a way for you to just like enforce a control policy on the shared resource. So what are the interfaces that you need for a lock? Basically, you need to create a lock. So let's say for the printer, you need to define a lock that is specific to that printer. So you can, for example, name it printer lock. So this is one of the interfaces that you need. You also need lock that's destroyed. We want to make sure that whatever you allocate is a freed and you're not leaking memory. This is very important, especially for OS161. We are checking for memory leak. So you want to make sure whatever you malloc or came malloc, you're going to free it later in your code. If you do not free it, you're leaking memory. And you have the tools in the kernel to check if you're leaking memory or not from the kernel menu. I think you can find this easily. Then the third interface that we would need for a lock is lock acquire. That means any process that wants to access that shared resource needs to acquire the lock first and then access the resource. And the fourth interface would be basically lock release, which is releasing the lock after you're done from the shared resource. So now this is our example should look like. You have the safety print function. First, whatever thread is calling that function, it should first acquire the lock, send the print job to the printer, and then release the lock, giving the fact also that the lock is available. If it's not available, we will talk about that scenario later. So now where can you find locks in OS161? So locks are basically you have the function declaration defined in this file, sync.h, and you should be implementing these function in this file, which is sync.c. Let's go through the file. So this is sync.h. As you can see here, if we go down, here's the part where the lock structure and functions are defined. So we have a lock structure that you need to add variables to it as you implement your locks. Then you have lock create, and you have lock destroy. You also have some comments that will help you understand what each function does. So you also have here lock acquire, lock release, and lock do I hold? That's basically do I hold will tell the thread if it's holding the lock or not. Why do we need it? Let's say recursive lock. I acquire the lock and then in function A, and then I go into function B, where I need also to acquire the lock again. So instead of reacquiring the lock, I can just query whether I'm holding the lock or not through that function. So that function will basically return Boolean as you can see that says if you're holding the lock or not. So I know this seems vague to you now, but it's going to get more clear as we move on, and especially if we go through the semaphore implementation, which is already implemented and given to you. So this is sync.h. And if you go to sync.c, you could see that the functions are there, but they are empty. Nothing really in there. So in create, you have some of the, for example, you have the name, which is already given to you in the structure. And here we are allocating the name. So when you create a lock, you need to give it a name. But that's not really important. You shouldn't identify the lock by its name. So the name is passed to you as you create a lock, and you need to create or allocate the name variable. So this is the create, and that's destroy, which will basically destroy or free your lock that you allocated. And you need to make sure that whatever you create or whatever you allocate within the create, you're going to free when you destroy. So this is one of the checkpoints that you should always have whenever you're defining the create and destroy functions for a variety of stuff that you're going to implement later on in this course. And then you have lock acquire and lock release. And then lock do-i-hold. So you have the function definition, declaration, and you have the actual function given to you here, but you need to add stuff to it that's empty. Later on, let's say starting from assignment two, you won't get this stuff. You need to just declare the functions, whatever you need, and implement the actual function. But for assignment one, you're given all of this here. You're given this for locks and condition variables, and also the reader writer locks. So let's go back to the slides. Now, what are the... So in order for you to build a lock, there are building blocks for building a lock. So we already have a lock that is implemented for us in OS 161 called the spin lock. And you might wonder, since we already have a lock, why shouldn't we use that spin lock instead of the lock that we're going to implement? So the only difference between the spin lock, basically, just like, let's say you want to acquire the spin lock. If you try to acquire it, and it is acquired by another thread, you will keep spinning on the lock. Are you available? Are you available? Are you available? So you're going to be on the CPU without just releasing the CPU and keep bugging the... Just like the spin lock, ask him, are you available or not? So what we need to do here is to implement a sleep lock. So the lock that you're going to implement, basically we call it, other than its named locks, it's basically a sleep lock, which will allow a thread, if it tries to acquire the lock, and the lock is not available, it will go to sleep on a weight channel. So that's the difference between a spin lock that you already have implemented in OS161 and the lock that you're going to implement now, an assignment one. So spin lock will keep spinning while sleep lock, if it's not available, you will go to sleep. But to implement the sleep lock, you do need a spin lock. Why? Because still the lock, so still it's a shared resource. And you're going to see this through, if I go through the semaphores, I'm going to show you, you have some shared resources within this implementation that you still need to protect. And you shouldn't allow more than one thread to try to access the sleep lock. So spin lock is one of the blocks that we're going to use to build the sleep lock. And it is defined the function declaration for a spin lock is defined in spinlock.h, and you can find the actual function in spinlock.c. Now, you don't really need to really know everything or how the spin lock is working. What you really need to know is what are the functionality, what are the functions that are given to you by the spin lock? So if we go to spinlock.h, we can see that here are the functions that we have for a spin lock. Basically, a spin lock, and it will initialize the spin lock, clean up, similar to destroy. You have spin lock acquire, spin lock release, and spin lock do-i-hold. So you're going to use these to implement your sleep lock.  What are the other two that you do need to implement the sleep lock? You have the lock, but you don't have the weight channel. So you need a weight channel so that a thread can go to sleep whenever the lock is not available. So weight channel is also defined for you, is already given to you, and you don't need to worry about that. So you have all the building blocks, you have the spin lock that is already implemented for you. You have the weight channel. You only need to put these together to implement the lock. So let's go through the spin lock function declaration and the code itself. You also have a thread.h. You can go through that, which is also useful, but you really don't need to understand everything. It's good to go through thread.h, which will provide you with the function definition for the thread, just like fork a thread, stuff like that. But you don't need really to go into how these functions are implemented for now. So let's have a look at the weight channel and see what are the functions that are provided for us. So basically whatever, let's say for the synchronization primitives, whatever I think that you need to define in OS 161, you do need the create function and destroy function. So as we can see here, we have the wchan create, which will create a weight channel for us. And also the destroy function, which will free the memory that we allocated in the create. We also have the wchan is empty. This you can use to check if the weight channel is empty or not. Also, we have that useful function, which you're going to use, which is the wchan sleep. This function that you're going to use to put the thread to sleep, if the lock is not available. And what does it take? It takes the weight channel for that shared resource that you defined. And then it will also take the spin lock, or the weight channel for the sleep lock that you already defined. So when you define a lock, you're going to have a spin lock, you're going to have a weight channel. And that's what you're going to pass when you call wchan sleep. You're going to pass the weight channel for that lock. And then you're going to pass the spin lock for that lock to the weight channel. What does a weight channel basically will do when you go to sleep? It will basically release the spin lock, put the thread to sleep. Whenever the lock is available, now we're going to wake one of the threads. And now when you wake a thread, you will acquire the spin lock again and continue. Or you can wake all the threads that are sleeping on the weight channel using the weight channel, wake all. So you have weight channel, wake one, which will wake only one thread. And weight channel, wake all, which will wake all threads that are sleeping on the current weight channel. So this is how we should go about implementing a lock. Now you have just like a high level understand of what is a sleep lock and what are the building blocks of this sleep lock, which is spin lock and weight channel. Now how should we put things together? So let's say now we have that function. And this is what I'm going to present to you through the Simo, for example. So let's say we have five printers and 10 PCs. Will this function work? Anybody? We have five printers that are shared resources. We have 100 or 10 PCs. Do you think this will work or not? Nobody? So this will basically partially work. Why? Because the lock will give us access to only one shared resource. It will give us access to one printer and not five printers at the same time. What would be a better solution to this? It's a Simo4. Simo4 basically is a synchronization primitive that will control access to a set of shared resources. Not only one, you have a set of them. And you should use a Simo4 with them, not a lock. Because if you use a lock, you can only acquire one lock at a time. So if you have five printers and five PCs are trying to access these five printers at the same time, they won't be able to. Only one of them will get access through the lock. So what should you do? You should use Simo4. So in order to do this, Simo4 has one extra variable within it defined, which is Simo4 count, which that you will set when you define a Simo4. You will set it initially, just like once you create a Simo4 for these five printers, you need also to pass the number of printers that you have, which is five. This will set the count. And then we will use the interfaces, which is called P and V. P will basically decrease the Simo4 count. And V will increase the Simo4 count. So let's say all five printers are printing at the same time. What will happen now? If another thread, while these five threads are printing, want to access one of the printers, we will put that thread to sleep. Because the Simo4 count is equal to zero. Once one of them is done with the printer, they will call the function V, which will increase the Simo4 count. And at that point, whatever weighting thread on the weighting channel will be weighted up and will get to print using that printer, which is released now. So let's go through the implementation. So this is how our function will look like. And instead of lock-acquire, so P is equivalent to lock-acquire. V is equivalent to lock-release. So you have five printers. As long as the Simo4 count is more than zero, threads can get in. Once the Simo4 count is less than or equal, let's say equal to zero, because it won't get less than this. Once it's equal to zero, we will put this thread sleep to sleep until one of the threads releases one of the printers, which will increase the Simo4 count and will let that sleeping thread to wake up and go into the critical section. And that's why some would call a lock binary Simo4, because locks are basically a special case of Simo4. So with Simo4, you have a set of shared resources with a lock you only have one shared resource. But there is a significant difference that doesn't mean you should go through the implementation of Simo4 and exactly do the same with a lock. That will not work. The best thing you can do is you go through the Simo4 implementation, you try to understand it. And then based on that, you try to implement the lock. Why? Because with the locks, the only difference that we have between a Simo4 and a lock that a lock can identify itself. We have the function, do I hold? While you don't have that function with Simo4, they don't care about who's holding the lock. But with locks, you have the function that should tell you which thread is holding the lock. So there are going to be some differences within the implementation between a lock and a Simo4. So where can we find the implementation for Simo4s? You can find the declaration for the functions and sync.h. And it is implemented for you and sync.c. Let's go through that. So this is the Simo4 function declarations and structure. And it's fully implemented for you. So the first step you should do, go through the implementation here. This will answer a lot of your questions. So as you can see, the structure Simo4, what does it has? It has a name. It has a weight channel. It has a spin lock. And it has a count. And that's basically what you need to build a Simo4. And then you have the Simo4 create, which will take the name and the initial count. When you create a Simo4 for a set of shared resources, you need to tell the Simo4 how many shared resources you have to control it. So here is where you pass the initial count for the Simo4. Then you have the sum destroy, which will basically pass a pointer to the Simo4 structure. And you start freeing whatever you've allocated. Then we have P, which will increase. This is equivalent to lock acquire. V, which will decrease the Simo4 count equivalent to lock release. Let's go through the implementation. So now this is the function Simo4 create. As we said, it takes the name, string, and it also takes the initial count. Now here, you're going to create the Simo4 structure. And then you start to allocate memory for every variable you define in that structure. So you need to allocate memory for the structure itself and then name. And then you need to allocate memory for the weight channel. And then you need to initialize the spin lock and set the Simo4 count to the initial count that you've received.  You will do this only once. Once you're done with the Simo4, you make sure it is deleted or destroyed. And for destroy, you take the pointer for the Simo4 structure and you start cleaning up. How do you clean up? So you created a spin lock. You use the functions for a spin lock. We have a spin lock create. We have a spin lock clean up. You created weight channel through weight channel create, as you can see here, you need to free it or destroy it through its own functions. And then the name, which you manually created, so as you can see here, you need to free it because you don't have an interface for it. So make sure to use the interfaces for every tool that you use. You use spin lock, use its interfaces. You want to create or define weight channel. You want to use its own interfaces. So this is SimDestroy. Now let's go for the p function, which is equivalent to the lock acquire. What will happen? Basically, what I'm going to do now is I need to acquire the spin lock here. Why do I need to acquire the spin lock? Because now to the Simo4, the Simo4 itself, it has a shared resource. What is the shared resource for the Simo4? Anybody? So the shared resource for the Simo4 is the Simo4 count, which can be accessed by multiple threat at the same time. And you want to protect that. So here, you're going to use a spin lock.  Then now you're going to loop here. While the Simo4 Sim count equals 0, I'm going to put the threat to sleep. So if there are no more Simo4s available and the count is equal 0, instead of spinning, you put the threat to sleep using the weight channel sleep. And you pass the weight channel for the Simo4. And also, you pass the spin lock for the Simo4 that you defined. Why you do this? Because the weight channel sleep will basically release that lock and put the threat to sleep. Let's say there are Simo4 available, then you won't get into that loop or the while loop. You will basically decrease the count of the Simo4 and release the spin lock. So as you can see, the shared resource for the Simo4 is the count and that's what you really need to protect. Once you decrease the count, you release the spin lock and at this point, you have acquired one of the Simo4. You can go ahead and print. So this is going to be here. It do print job. So once I'm done with, once I release the spin lock and the P function, I'm going to go back here and go ahead and send the job to the printer. And then we have the V function, which is equivalent to the release lock function. What I'm going to do in the V function, again, because you want to access the Simo4 count, you need to protect that through the spin lock of the Simo4. So first, you're going to acquire the spin lock and then you're going to increase the Simo4 count. And now, since you released one of the shared resources, you need to wake one of the sleeping threats. So you're going to use weight channel wake1 function to wake one of these sleeping threats. You're going to pass the weight channel for the Simo4 and the spin lock for the Simo4. So once you increase the count and you wake one of the threat, you can now release the lock. So this should give you a good example of how should you go and implement the lock. Any questions? So anybody started implementing the locks or not? OK. So now, as we can see here, you have now the lock create, lock destroy, lock acquire, release, and then do I hold? Look through the implementation of the Simo4 and then try to implement these functions one by one. So this is the sync edge and sync.c and sync edge. So here, you can see that we, as I showed you, you have the lock structure, which already has the name in it. Now you need to add stuff here. You need to see what do you need to implement the lock. And then you have the function declarations already given to you. You don't need to do anything. And you can see what's the signature. So for example, the lock you create only receive a name. It doesn't need to receive an initial count like the Simo4 because the lock will only protect one shared resource. The destroy will, again, receive the lock structure, acquire, release, and do I hold? You will basically pass the lock structure. Through the structure, you should be able to identify. You should be able to see if the lock is available or not. So to acquire it or release it or check if you hold the lock or not. So that's basically how you should go about implementing the locks. Now if you don't have a question, I can go ahead start with the condition variables. So any question on locks, Simo4s, weight channels, spin lock? OK. So let's move forward. Now after you implement the lock, you need to implement the condition variables. What is the condition variable? Condition variable basically will let a thread to sleep until a condition become true. So you can say that it is similar to a weight channel. But a weight channel receives a spin lock while condition variables receive sleep lock, the locks that you're going to implement. So you will have some cases where you need to wait for some condition to become true to proceed. And this is where you need to use condition variables. So how does it work? Let's say you acquire the lock, and then you see that that condition doesn't hold. It's not through yet. So instead of keep holding the lock, you will release the lock, go to sleep on the weight channel. And then once the condition becomes true, you will wake up and acquire the lock again. So this is basically how the condition variables work. And it is, as I said, similar to a weight channel. But keep in mind, weight channel takes a spin lock, but your condition variables take a sleep lock that you've implemented. So where can we find condition variables in OS 161? You can find them in these files, and you have all these interfaces defined for you for condition variables. Let's go through them one by one. So this is the part for condition variable. You have the structure. Again, you're going to have a structure. So things keep repeating, as you can see. You have the structure. You have condition variable create. You have condition variable destroy. And then you have the functions or the functions that will define the condition variable functionality like CV weight, where you're going to put a thread to sleep, CV signal, where you're going to wake one of the threads that are sleeping on the weight channel, and CV broadcast. So if you want to compare this to the weight channel, as we remember, for the weight channel, we had three functions, weight channel sleep, weight channel wake one, weight channel wake all. So weight channel sleep is equivalent to weight channel weight. But here, as you can see, it takes the condition variable and the sleep lock that you've implemented. CV signal is equivalent to wake one, weight channel wake one. And CV broadcast is equivalent to weight channel wake all. So CV weight will basically release the lock. Three things you need to keep in mind. It's important. Release the supplied lock. Go to sleep. Once the condition is true, you will wake up and reacquire the lock. This should happen within CV weight. CV signal will basically wake one thread that's being sleep on the provided or supplied condition variable. And CV broadcast will wake all the threads that are sleeping on the condition variable. So CV weight, I'm going to repeat this. You're going to release the lock. Go to sleep. And then once you are waked up, you need to acquire the lock within the CV weight. So these are the interfaces for condition variables. Let's go through an example. A very known example for condition variables are the producer and consumer example. So we have a producer that produces items until the buffer is full. And we have a consumer that consumes items until the buffer is empty. So how should we coordinate between these two? We're going to use condition variables. This is how the code should look like. So for the producer, we'll basically produce an item first, and then I'm going to acquire the buffer lock. So the buffer is the shared resource here. We are going to acquire the buffer lock. Then you're going to check if the buffer size is max, which means the buffer is full. If the buffer is full, you should sleep. You should put the producer to sleep until the buffer has space for one more item to be produced. So once the buffer is not full, you're going to wake up the producer. So while the buffer size equal max, you're going to put the producer to sleep, and you're going to supply the buffer lock. And here, the buffer lock now, which you acquired, will be released. You will put the producer to sleep. And then once we signal the producer through the consumer, the producer will wake up, acquire the lock, and then continue. So when will we be continuing or going after the while loop?  Once you wake up, you will continue with this line of code, which is buffer add item. So you're going to add the item which you already produced. You're going to add it to the buffer. And then once you add an item to the buffer, now here you're going to signal one of the consumers telling the consumer who is sleeping waiting for an item to be available in the buffer that now there is an item available for you in the buffer. You can go ahead and get it in consumer. Then you're going to release the lock buffer. So if we go for the consumer, it's going to be the other way around. You're going to acquire the buffer lock. And here, let's say the buffer lock is acquired by the producer. At this, what will happen? We will put the consumer to sleep until the buffer lock is available. Then the consumer would acquire the buffer lock. So if the buffer lock is available, the consumer will acquire it. And then it will check if the buffer has an item in it or not. So if the buffer is empty, I'm going to put the consumer, as you can see here with the producer. I did put the producer to sleep. While here, I'm putting the consumer to sleep because the buffer is empty and to provide the lock. Again, release the lock, put it to sleep. Once the producer produce an item, it will signal the consumer condition variables, which will wake the thread that I did put to sleep. And the thread now here, the consumer can continue. So it's either I'm being waked up as a consumer, I can continue, or the buffer has something in it. At this point, I can just skip the while loop and then continue to the next line, which is item equal buffer get. I'm going to get the item from the buffer and then consume the item. Once I consume an item, I'm going to do the other way around. I'm going to signal a producer that I did consume one item. Please produce another item. So that's why we're going to CV signal and we're going to pass the producer CV and the buffer lock. This will signal one of the producers to produce an item. And then I'm going to release the lock. So this is where condition variables become useful. Any questions? Yes, sorry? So yeah, the condition variable are the CV. So you should already have CV for consumer and condition variable for a producer, as you should have a buffer lock. So you pass that CV. So a producer should have its own condition variables, its own channel, weight channel, and consumer should have its own condition variable and channel. And you're going to exchange those, depending on which one you're working on. Any other questions? So that's what we have for today. Thanks for coming. Let me know if you have any questions. Or you can come to our office hours. Thank you.


to get Scrapple with your meal, do not ask what's in it. Nope. I know it's in it. And then understand that you enjoyed what you ate by way of what's in it. I had Scrapple for the first time at Bob and Edith's on Columbia Pike in Arlington, Virginia. And it was delicious. And I did not know what it was when I ordered it or ate it. And I'm glad I didn't. Scrapple is delicious. Because now all I think of is how delicious it was. I mean, because basically it's just a big patty, right? Exactly. It's a big sausage patty. Yeah. Start the casing. Yeah. You don't ask too closely what went into your sausage. You're not Rudyard Kipling. Yeah. I mean, who are you? Rudyard Kipling?  Just eat your Scrapple. Just eat your Scrapple. Like, I mean, at least in Minnesota area Midwest, you got a lot of Scandinavian, like Lutafisk. Yeah. And what's hot dishes, right? Isn't that like a Minnesota? I have a lot of German-influenced food in my area. But again, nothing. I mean, pork burgers. Pork burgers would be the one thing that I could think of that definitely was huge in Greenville and you couldn't find it most other places around us. But that's not, I don't know, the pork burgers or... What is it in Iowa? It's like a fried pork loin. They love... Yeah, but they eat it off the bone. Like, it's like, I've seen it at state fairs. Yeah. No, it's like a fried pork loin and they love that just as much as they love dipping their pizza and ranch dressing. It's like a corn on a stick. If you need to dip your pizza in anything, it's a bad thing. The kind of food I would get at the Bon County Fair would be the most regional of foods and nothing I could think of is, you know. That being said, I'm reading this book about the campaign and they're talking about, I'm reading the Iowa stuff now. And I really, really want to go back to Iowa for the caucus. That was super fun. Is it heaven? No. It was fun. It was just a good time. Somebody on Twitter tipped me off Greenville, Illinois was the dateline of a Wall Street Journal article on big agribusiness today. And good old Jim Gaffner was quoted the soy ambassador. He calls himself, no, I think he's officially like the soy growers association guy. Okay. So, are we all clear about what we're doing here? I do do a show, right? Yeah. Roger needs control, as always. Always. Control free. Control. Okay. Here we go. Quality content thrives for the support of those who benefit from its creation. If you gain value from The Daily Tech News Show, consider joining others like me who provide support. Learn how to help at dailytechnewshow.com slash support. This is The Daily Tech News for Thursday, April 20th. I'm Tom Merritt, Justin Rubber, young alongside for the National Holiday of Colorado. And Washington State. And Washington. And large parts of California. I got a little thrown off at the beginning of today's show. This doesn't usually happen, but I got a notification on my iPad that it uses a sound board right as we were starting the show. Rick Ankeel unpacks the yips and talks about getting a fresh start. Is that just a random?  I apologize for bringing baseball into your tech podcast. Well, hey, listen, I know that this show is going to be a perfect 10. And I have five on it. Let's get it going. All right. Here's a few tech things you should know. MasterCards testing a new fingerprint sensor in its credit and debit cards in South Africa. It replaces entering a PIN or signing a receipt. So certainly more of an issue for folks in countries that use the chip and PIN technique. Which is all of them, but us, practically. Everybody but us, right? But interesting in terms of the advancement of tech on this front. Yeah, for sure. Amazon brought its Lex voice assistant technology out of preview so any developer can build chat features into their own apps. That's, so basically we knew this was available, but now everybody can get it. So that's kind of cool. We'll be seeing more Amazon stuff. Apple released its environmental responsibility report saying it has a goal to eventually move to a closed loop manufacturing system in which all metals and rare earths in its products come from recycled materials rather than mining. I'll tell you. I mean, this has been something that's been a big issue for them for a while. They've always wanted to be on the forefront of the environmental and reusability thing and it's been as a PR sword and shield a way of fending off some of the stickier issues that they have in China. Yeah, and they don't have a timeline on this. It's just a goal. All right, I am gonna put on a hat and fill up the shot glass so I can take off this hat and pour a little out for Australian retail because Amazon's coming. Amazon confirmed its launch and its retail online shopping services in Australia. Amazon searching for a site for its first fulfillment center. They do have a bookstore. If you're like, wait, there's no Amazon in Australia. There is. There's a few products there. Kindle Store, a few other things. They launched that in 2013. Meanwhile, in advance of Amazon coming to Southeast Asia, the troops are circling. They're circling the wagons. The wagons are some metaphor involving circling in there. Lazada announced a partnership with Netflix and Uber called Live Up, or maybe Live Up, launching in Singapore for 28 Singaporean dollars a month. That's about $20 US a year. I'm sorry, not a month a year, $20 a year. It offers faster shipping from both Lazada and Taobao. Lazada is owned by Alibaba, so is Taobao. Discounts for red mark groceries, discounts for Uber rides, discounts for Uber Eats, and six months free Netflix. But in reality, Amazon coming. You know, much like over down the alley, this should not bode well when it comes to Australian commerce. Although, who knows? I mean, I'm good for Australian commerce in general, in aggregate, perhaps. Yeah. Can you imagine with all that we rely on for Amazon now, if all of a sudden, for all of our Australian friends, they're going to get the fully formed Amazon, Amazon Prime experience just all at once. I feel like it's overwhelming for me, and I've been a Prime member for coming on a decade now, for as long as they've had it effectively. And Amazon likes to do price wars. Australia famously, famously has higher prices for many things than they reasonably should, even with exchange rates. I wonder if we see that kind of stuff happening. I have a prediction, and that is that Amazon's e-commerce, or sorry, Australia's e-commerce that is not Amazon will indeed go up in smoke. I'm brick and mortar too. It's the eye of Sauron that is Amazon, turning away from Singapore for the moment, giving them a reprieve. An update on Google Home adds support for up to six different users. Not only can six different accounts be connected to a device, but Google Home can tell them apart by voice. Each user will train the device by saying the trigger word three times, while Google thinks its voice detection is pretty good. It admits it's not perfect and does not recommend relying on it as a security feature. I read between the lines as, this will stop Burger King, but don't use it to safeguard purchases. You'll need to go to other methods for that. So the idea is only the users that are authorized will be able to trigger it. Right, that's the idea is you'll have multiple accounts, so you could have, you know, six people in a family, up to six people, register and train it with their voice. And then when that person says okay, and then says Google one after the other, it would only trigger it if that person has trained it. If I say it on this podcast, it shouldn't trigger it once this is in place. So let's understand that the Burger King thing was obnoxious by Burger King, although pretty funny, I think, to many, many people. As I said earlier today to Justin, the troll in all of us admired Burger King. It was one of those, where somebody was going to do it, it's funny that somebody did it, right? Like it was going to happen at a certain point. However, I kind of think this is a little bit of a step down if random people aren't able to use it. Like people who come and like watch our birds when we're away could be able to turn on our lights so train them a profile, add their profile to it. So now we got to have them come on. I don't really think the step, no, no, no, it's at the point of AI. The point of these voice activated AIs is to avoid that step, right? And we can always do, this is the common point when it comes to technology, to dismiss technology, well, you can always just do bleep, blop, bloop. No, the magic is not happening to do it. I hear what you're saying. It's putting a barrier in place. Yes. But it's like saying, it's like saying to my ears, like, oh, so now you have a password on your laptop and not everybody can just sit down and use your laptop. Well, that's a pain. That's not the way technology is supposed to work. Like these devices, you only want people who are regularly in your house to use them. Do you? You don't want people to be able to do it at a party? You don't want people who are- No. ...courses that are coming in to be able to do stuff? I mean, I- This is the difference between you who has friends.  People are passing through town, it's at our Brian Brushwood was just here. Would I like Brian to be able to use my Amazon Echo? Sure, I guess. Or my Google Home in this case. But it never came up. He never did. I just don't see it. I see it as more people are concerned about it being accidentally set off for the wrong reasons than are concerned about letting guests use it. Yeah. It's interesting though, I hadn't really thought about it, to be honest. I guess to me, the magic is ubiquity. And if you are taking away from ubiquity, I'm not saying it's not forever, that it's a major problem. It's just a thing for me that I don't know if it's going in the right direction. Yeah. HTC plans to show off its squeezable phone, the HTC you, on May 16th. I don't know why a squeezable phone just makes me smile so much. The phone is expected to include edge sense. It's a system of sensors in the frame of the phone that'll let users control apps and other functions by squeezing or swiping. It also, you know, it's got sensors so you can swipe along it to do stuff too. I just feel like, Justin. I love it. That, you know, people are like bezel-less, fingerprint sensors, biometrics, and then HTC's like, oh, I got something nobody's thought of, squeezable. Squeezable phone. Well, I love it for a few reasons. Number one, HTC obviously is just like, notice me, Senpai, in any way. Like, we just need to make a phone that's going to stand out because these heavy hitters are making these world-class phones. Let's see if we can take a gamble on a feature that for whatever reason people tend to like and now maybe we can be a little bit closer to the center stage when it comes to the smartphone conversation. But also, I love it because it's not just this herd mentality that we have right now within with Samsung and, you know, Google and Apple where all these phones are effectively the same. Within a year, all of the top smartphones are going to be these gorgeous, beautiful, button-less glass shards and they're going to be great and I'm going to own one and a bunch of people are going to own one and we're going to really like it. But I just long for the days when there was the crazy little thing that came out. And when I see squeezable phone and you can swipe and that's another way to engage with the phone itself, I don't know. It's pretty cool. I kind of like it. I kind of love it. And look, we know a lot of companies have been doing like voice assistance before other people or modular phones. The try-it modular phones, it didn't seem to work out but there's still a few companies trying it. Like, yes, we get it. But there's, I don't know, there's something about squeezable that just strikes me as funny but also useful. Like, I see the demo from HTC where you're just holding the phone and then you basically like can just move your thumb to move through a menu and then you can squeeze it to select something. Yeah, it kind of feels normal. It kind of feels cool. I really dig it. Yeah, good on you HTC.  Verizon reported a 20% fall in quarterly profits from 1.06 per share last year to 84 cents a share this year. Verizon lost 307,000 retail post-paid subscribers. Analysts had expected additions of 222,000. Doge, yeah, 222,000. Go south, south, 220, yeah, 220. Yeah. Okay, so first of all, Verizon in the process of trying to become an ad tech company as well. Don't forget about that. They've got AOL, they wanna buy Yahoo. That's gonna make up a bigger percentage of their margins but right now, wireless is the majority of what they do. And not margins, margins is the wrong word. But it's gonna make a bigger percentage of the business. They need to be adding subscribers and the best part about this story for me is that everyone said T-Mobile couldn't survive that they needed to be bought by AT&T. Well, not everybody, but a lot of people did. And turned out that not letting AT&T buy T-Mobile kept the market competitive to the point that T-Mobile is now stealing business from Verizon which would have been unthinkable a few years back. Oh my God. I mean, in this coupled with the spectrum that they've bought, they're, you know, crowing about how much better the T-Mobile service is going to be. This is really an amazing story and it's hard to make Verizon kind of softening in their lead as far as their market share grows into a T-Mobile story.  There's a lot more subscribers getting a T-Mobile bill in the mail. There is a tremendous story to be told that a company that said, you wanna know what, people find their cell phone companies odious and a nickel in diming to say, hey, what do you say we start doing a lot of consumer friendly shocker, consumer friendly practices and it could make business sense in the long run. This is just an exceptional story. And you're right, Verizon has been future-proofing by buying the companies that they have. They wanna be a different company in five years than they were five years ago. They saw this coming, but man, it's a fall of that short. I mean, this is a half million, over a half million difference between what the expectations were and what they wound up doing. That's a big swipe, you know. And don't get us wrong. I don't think we're overselling this as Verizon is done. T-Mobile has won the war. By far, not the case at all. Instead, we have something much more interesting which is, hey, you can't just rest on your laurels and expect to stay number one and have little niggling fights with AT&T with sort of a wink, wink, understand we're not gonna change our terms too much, right? There's plenty of room for both of us in this market. Instead, you've got T-Mobile and to a certain extent Sprint and all of the smaller operators out there nipping away at your heels, causing you to go unlimited, causing you to really rethink how you approach customers. It's not killing Verizon. It's making Verizon have to work for their subscribers. Indeed. Scientists at Oak Ridge National Laboratory in partnership with General Electric have developed a clothes dryer that uses sound waves instead of heat to dry your clothing. High-frequency sound waves speed up drying from 50 minutes to 20 minutes and should use 70% less energy. Way it works, small sheets in the interlining of the drum vibrate at a frequency high enough to shake water from clothing, turns it into a cold mist that is then driven into the outer part of the drum where it flows into a collection tank. It also produces less lint because the lint comes from the air blowing through and basically damaging your clothing and this doesn't do that. Does it not shrink your clothes? I don't think it would either. I don't think it would. Right, because that's a heat thing, right? Because the heat stretches things out and then it compresses. Yeah. Uh, you could dry your wool sweaters in this? Give me, give me, all right. Is it next year or is it the year after when this is the talk of CES? This seems like one of those like sound wave dryers are going to be the like the thing that everybody's talking about at a CES within the next two years. Possibly, yeah. I think that might be the case. I love that, first of all, this is coming from Oak Ridge National Laboratory where they have, you know, one of the world's biggest supercomputers. Not that that supercomputer was working on this, but hey, they're doing lots of good research there and this could, I mean, it would cut your power bill. It would save on your clothing. Your clothing would last longer. There's so many good things about it.  We've got just a lot of like cool, fun tech, like cool, fun hardware stories today. This is a great thing. This is a cool sound waves. I wonder if this would affect animals. Would my dogs not like the sound of this running? Oh. Like what frequency is it at? I don't know. Oh dude, all right. So what would you, would you trade for 20 minute drying if your dogs went freak show crazy? Oh, no, no. I would have to figure out a way that the dogs aren't affected by this because this would be a no go. So what if it's just you had to take them out. They had to just be out of the house. That's so inconvenient. I'd rather just go 50 minutes at that point. It's only 20 minutes. I mean, I'm sure if you add it up all the time, that's the time. Yeah, but it's the flexibility of the schedule. Right now it's important to my lifestyle, Justin, to be able to toss clothes in the dryer, turn it on and leave and go out and get some Chippino. Uh-oh, uh-oh, we got it, we got it. Roger's tagging in. What's up, Roger? But this would make the ultimate washing machine is you could build that in to a washing machine, right? And so you would actually need to transfer anything. It would be in the same machine. How awesome would that be? And you know what's great is because front-loading washing machines typically only use two gallons of water. And if you get the really high efficiency kind, they extract at least 80 to 90% of the water in their spin cycle. So you wouldn't have that much water left to shake off anyway. It'd be the ultimate washing machine. It'd be awesome. You could cut down on the amount of space you would need to store all that. I'll be great. Yeah, you're right. I'd go in on this. The dryer would become part of the washer at that point. Maybe, maybe. I don't know if the drum, if the drum has to be constructed in such a way that wouldn't work for the washer, but that's interesting. Would this be greener? Would this be green tech? Yeah, well, it would use less power. They say 70% less energy. So yeah. Hell, I'll tell you what. I mean, another, I'll tell you what. And your current dryer emits steam. It sounds like this would emit more of a condensed water, but that's not that much. I mean, here on Thursday, April 20th, we're all about the green stories. Hey, folks, if you want to get all the tech headlines each day in around five minutes, be sure to subscribe to our other show, our Better Half. Well, our other half, dailytechheadlines.com. And that's a look at our top stories. Let's get to, we should have teased right up at the top, Wall Street Journal's Jack Marshall reporting that Google is planning to introduce ad blocking on mobile and desktop versions of the Chrome browser. Now Google's not talking. They're not saying anything about this, but we already have Marguerite Vestiger in Europe being asked if she would pursue antitrust against Google for doing this. Google would reportedly use the Coalition for Better Ads list of standards to determine what it would block. Fortune already has an opinion piece of why this is a bad idea to have the world's largest advertising company, owner of DoubleClick and AdWords, deciding in their browser what ads get to show up on people's pages. So let's walk through, just to give context, the history of ad blockers coming into the mainstream. It was about two years ago that Apple decided to start letting ad blockers into the iOS store. Right, but not built into Safari. We're letting other people come up with them. And dire predictions were made by all. And yes, it has had an effect, but it has not had nearly as large of an effect as some people feared. So the idea is, I think, soundly realized by impartial observers that there is a lot of ad crap out there. Oh, yes. It can be, at its most benign, a degradation of your reading and browsing experience, and at its worst, a malicious hole into a far more defarious actors, right? Yeah. So the idea here, it seems sound, that there would be more close assurance. We're not on the browser side. It's not different from opera doing this, right?  But users say, oh, that's pretty cool. And I didn't mention this, but it's an important point. It's opt in. It isn't turned on by default. At least, again, this is a report. But according to the report, it would be something that you would have to turn on yourself. It'd be built into the browser. You wouldn't have to add an extension, you would have to turn it on. Sure. We also don't know exactly if maybe it detected things that were bad, that it would alert you, that you could take advantage of this feature. Possibly, possibly. There's a lot of possibilities. Once it's in there, that's the big question. Although opt in versus opt out is a big difference. Having it opt out would mean that it's there for everybody. And the ad agencies would really freak over that. So with that being said, let's discuss why this is a very troubling idea for Google. Because like you made mention, Google is the 800-pound gorilla when it comes to advertising. It's how it makes all of its money. It has pioneered, from the very beginning, this the unobtrusive, easy to buy, very comfortable to click, AdWords. Consumer friendly. Friendly AdWords. We don't need to do, they do display ads, right? But they have become this very, very dominant kind of company. You would imagine that part of the curiosity to this is, so how many of your own ads are you going to be blocking? Sure. Well, none. We follow the Coalition for Better Ads guideline to a T. You'll never see one of, that's almost a troubling response if they make that. And it's the response they should have. They should say, oh, no, we don't deliver these abusive ads. So we would never be blocked. But again, that's them saying, our ads will never be blocked, only yours, you competitors who sell ads to other people. And that's a bad outcome. I mean, it's good for consumers. Again, if Google's just a browser company, this is just them trying to be pro-consumer and being fairly responsible about it, saying we're not gonna block all ads, although this report did say they might consider blocking an entire website's page of ads, even if only one type of ad was offensive. But let's see if they do that before we dam about them. But they're only going to go after the ones that are against the standards. That's a good way to do it. Opt-in for consumers is a good way to do it on all sides. It's the fact that on the other end of the campus, you've got the people who are putting these ads out there that makes it feel like, well, wait a minute, how much communication is going on between these two sides? And can your ad people tell them what to block and what not to block? And let's be clear, ad words run Google. Google has the amount of money that they have because of ad words, almost full stop. It's not to say that other stuff doesn't make money. Nothing comes close to how much they make on ad words. So let me ask you this time, is it hardballed, anti-competitive? Question mark? The way you have to look at anti-competitive stuff is this an abuse of the position in the marketplace. And this is right on the line. You can have a company do everything for the right reasons and with the right intentions, but if the effect of doing it drives out competition, then it's considered antitrust. It's considered anti-competitive. And Chrome has around 42% of the browser share in the US. It has a pretty big browser share worldwide. It's not overwhelming like it is with Android, but the Chrome browser on Android is the Chrome browser. This is gonna be on mobile and Android's got 90% share worldwide. That's where it starts to get troubling and where it starts to smell like antitrust. Yeah, and I'm seeing numbers even higher than the 40s for Chrome usage. Sometimes even over 50 or it has topped over 50 in the past. So Chrome is a dominant browser. It is something that is a huge part of many people's lives and my life as well. Would it have been a better way to introduce this? If Google spearheaded along with maybe Opera or Mozilla, possibly even Microsoft and Apple to say we want to create a consortium against the worst actors in junk and malicious ads. And we want to spread what we've learned and share what you've learned to make sure that we have the most up-to-date database that we can hard bake in to our browsers to make sure worldwide we are stamping out some of these very, very, very pernicious and malicious actors. There's no reason to believe they haven't tried that. They may have. Again, this is a Wall Street Journal saying our sources tell us they're considering this. Part of that consideration may be even now reaching out to others to for a final announcement that involves multiple companies. We don't know, but yes, absolutely the only way for this to avoid any kind of anti competitive appearance is to put this out as a non-Google started consortium. So the problem with Coalition for Better Ads is Google started that, right? So even though it's independent of them, they started it. You need to have Microsoft, Apple, Opera and Mozilla at the very least, at the very least you need to have them on board with an independent commission that says these are browser standards implementation. We're all going to follow it the same way. So if you're going after Chrome, you're also going after Safari and you're also going after Firefox and you're also going after Edge. It's the only way Google avoids that kind of inspection. However, I don't know that there's a whole lot of motivation for Firefox, Safari and Edge to do that. Like why should they help Google out? Well, because theoretically, because these are junk ads, right? Like these... Yeah, but they can come up with their own ad blocking scandal that won't get them in any trust hot water. Why should they have to play along with a standard that Google would operate? So the idea would be let Google either have a inferior ad blocking solution or face anti competitive. Exactly. If I'm Microsoft Edge, I win either way. I mean, it's part of me hopes that this blows up and not because I want Google to get in trouble or I don't root for Google, but just because, man, I would love to run back some of those Microsoft issues from the late 90s. Now... Bundling a browser with an operating system. Well, I mean, like those Microsoft... Seems like an innocent time. Were the reason why tech companies started getting lobbyists? Part of the reason why Microsoft in the autopsy said that they wound up getting spanked as hard as they did in the United States, Europe's a different story because Europe loves to throw the anti competitive thing around, but in the United States was because they didn't think they needed lobbyists. What do we need lobbyists for? We're just trying to do tech stuff. And now everybody does. Hey, and Google has lobbyists and they might avoid problems. They might be able to do this and this might be perfectly innocent. It may be operated in a way that's perfectly innocent, but they might have to use that lobbying power and they might still run into problems in Europe particularly. Oh, I think no matter what, they are going to get heat if this is an effective solution. So I think you were right. Either it's going to have to be fairly feckless or they are going to get some kind of heat because somebody is going to want to push the needle on them. And honestly, I would love the browser companies to get together and say, hey, what we're going to do is shut down the bad ads. We're not blocking all ads. And that's what this story is saying. They're not going to block all ads. It's not an ad blocker that says get rid of all the ads on a page. Like some ad blockers do. They're saying these abusive units, these units that aren't good are the ones we're going after. Is it going to be both? They're going to have the purest intentions and yet face these repercussions. Hey, thanks to everybody who participates in our subreddit and submit stories there and vote on them. You guys help us figure out what to talk about. DailyDecknewshow.Reddit.com. Bunch of messages here in response to our discussion of to-do lists and organizations and productivity yesterday. Steve writes, after listening to Tom's method, our methods are similar. I use Google Calendar with my Gmail. I have email sent to my Gmail for upcoming events. I use Google Calendar and Gmail as my to-do list. If I have something in my Gmail, I have to call, email or follow up with something. I never delete the event from my calendar. That's my historical record. Instead, I just delete the email reminder.  I also, like Tom, like the ease of being able to adjust things on the fly. I often have a need to go back into my calendar and see what I did or where I was on a certain date. Dude. Andy Beach wrote in, my biggest productivity tool is still a letter size pad of paper and a pen. My last function every day is to take all of my digital to-dos and follow up tasks for the next day and make a physical list. This handwritten list serves as my narrowing down of the to-do to just the one day, the next, and the process of me doing so lets me mentally prep a little for what needs to be done. All scheduled tasks go to the top of the page and then the unplanned tasks, things that pop up during the day, go at the bottom and roll up. God forbid the two lists meet. By the end of the day, anything that I've not completed on either planned or unplanned get merged into either the next day's physical list or moved out to a digital if it's no longer a follow-up. The system has served me for years and was one I started doing when I was a project manager more than 15 years ago. And then finally, Mark, in weather ambiguous Birmingham, UK, says I was listening to your discussion on task management. I'm sure someone will have already mentioned omnifocus, but I recently moved to it from things and have found it way more powerful. Its methodology takes some getting used to, but I'm finding it a great way to keep track of everything I need to do for work and home stuff. However, just today, I started combining my calendar with my to-do list as I was starting to feel like I was stretching myself too thin and working too many hours. So I now have calendar events in two to four hour blocks that let me know what area I should be focusing in right now, client work, podcast recording and editing, admin, marketing, et cetera. Once I'm in one of those contexts, I can use omnifocus to help me figure out what I should be doing in that time block. This helps me stay focused, but also ensures I'm spending the right amount of time on my various commitments. And omnifocus is beloved by people who are way into this. So that's the high end of this stuff. Hey, if you want more details on my organizational method, if you're curious about what I said yesterday, patreon.com slash daily tech news show, patreon.com slash DTNS rather, has the post up for this week's tech update for anyone backing at just the $5 a month level. It's a weekly newsletter you get as part of backing us there. So check that out, patreon.com slash DTNS. Thank you, Justin, Robert Young. How are things going right now? Oh man, they are going great. We are working on the new Kickstarter, which will launch this summer. It is the follow up to the contender, the card game, the game of presidential debate, which you can still get at thecontender.us. But the new game is going to be called Action News. You are interested in it. This will be kind of contender meets Anchorman, wherein you and your friends will take big famous news stories and with fragments of other stories, mash them up to your own creations and then conduct a newscast round by round. Just like real journalists do. Just like real journalists.  You can go ahead and hit me up on email. We're about, or sorry, not email on Twitter, at JustinRYoung, and we're about to send out a print and play for people who are interested in giving us feedback on it. So you can play the game before anybody else in a very early draft, if you hit me up on Twitter, at JustinRYoung. The election may have ended, but the news continues. Oh, the news rolls on, my friend. I think people are really going to dig this, but the Kickstarter is going to launch June 30th. So go ahead and mark your calendars. Hey, real quickly, before we wind up the show, big happy birthday to two of my favorite people in the world, S.P. Sheridan, who you may recognize as someone who submits things on our subreddit and writes in regularly to the show, and Allison Sheridan, who you definitely will recognize from hosting the show with me. They are married and both of them have the same birthday, which is today. So happy birthday to Steve and Allison Sheridan. You guys are the best. Well, light them up, light them up. Those birthday candles, light them up. Hey, thanks to everybody who gives a little value back to this show for the value you get from it. That's all that we ask. Connie Shocktell, Jason Denin, Maria Thors, you three amongst the many others who support the show are awesome. Thank you for supporting us at patreon.com slash DTNS. Our email address is feedback at dailytechnewshow.com. We're live Monday through Friday, 4.30 p.m. Eastern at alphagiqueradio.com and diamondclub.tv. And our website is dailytechnewshow.com. Back tomorrow with Jen Cutter. Talk to you then. Frogpants Network, get more at frogpants.com. Well, that was a good show. I see that someone in our chat room would like us to continue the food talk already, though. We're food every day. Back to food talk. Someone's hungry. You can't force stuff like that. It's especially food. Titles are things we can't force because we have to have a title. Top is Am, Oz on, get it, because Oz. And Oz, oh, because Australia, Oz got it again. Okay, okay. Does this know anti-trustee to you, Mr. Whipple?  Amazon, Australian for commerce. Drying at the speed of sound was a good one. Let's see, there was another one that stood out. Please don't squeeze the Android. That was the other one. Please don't squeeze the Carman. Right. Did I just butt squeeze? Very funny. Magic is you, Biquity, Amazon, Australia, I did that one. And they keep moving too. I like Google is blocking the hand that feeds them. Yeah, there's so many. What, Justin, do you have a fave? I really like the smell anti-trustee to you. By the way, did we get an official count of the jury eggs? I saw them, I saw them try to keep track of the chat room. You know, I'll tell you what, you always want to review, you want to reward the close listeners. Yeah, yeah, yeah, for sure. So does the smell anti-trustee to you is deleting and it will be the title? I like it. I like it. Can I just read to you guys? I just ran across this story of, you guys heard of the Starbucks unicorn Frappuccino, right? No, I actually have not. So it burst onto the scene yesterday. It was the first day it was on sale. It is a mango and some other sour fruit like Frappuccino. Okay. It was an absolute bonanza apparently for Starbucks to the point where it overran many stores. There was a 470 unicorn Frappuccino order placed in San Francisco yesterday. I didn't hear about that. In Houston, they had another 42 unicorn Frapp order. Apparently the Starbucks Reddit is just littered with overworked baristas who had to put in the time to make hundreds and hundreds of these things. Oh my gosh. That's a throughput problem. So is it just a Frappuccino? Neutrality. Is it just a Frappuccino that is like a sweet sour taste to it? Yes. I mean, yeah. So yeah, it's all like mango and like tart. So apparently it changes color as you drink it and it changes taste as you drink it. It goes from tart to sour apparently. Interesting. It spoils as you drink it. It spoils in your mouth. Here's a quote. We just had a college class of 20 people come into the cafe and each order them. Most of them with modifications. So we couldn't even use the same blender. Every single car in the drive-through ordered at least two unicorn Frappuccinos all with a whole four people working. Oh my.  I was off at seven and we had sold 400 at the time that I left and it kept going. We had a debt account and a delivery. I never thought I'd have a near breakdown while covered in pink dust. Covered in pink. Oh, because the pink stuff they had to put on. Oh yeah. No, apparently. Yeah. Shortages. People. People love them. I don't drink coffee drinks. They make me sick. Apparently our own gambling man on Twitter says it tastes like starburst and sour patch kids were dropped in some yogurt then crushed bits of Twix were added two out of 10. He adds unicorn scat as his review. Yeah. I'm going to check in something real quick. I'll be back. Okay. All right. Where do you get the idea for a unicorn Frappuccino? I mean whoever unicorns hot right now. I just saw a billboard after dropping Eileen off at the airport this morning for the Cinemark and it didn't even have an address. It just said Cinemark X D theater. Enjoy the experience or some, some such thing. And it was a person with 3D glasses on surrounded by unicorns. I think I've seen the same billboard, but here in. Yeah. Let's go. Coming over the bridge. Unicorns are hot. I think part of it is.   It kind of cycles through every purity and, and in all that it's magical. Lots of my friends had the unicorn notebooks when I was a kid. Sure. Yeah. And I think it's also just time, you know, everything comes back around and the nineties just might be back. Cause I looked at that billboard and I thought, I don't want to be in that theater, but I assume it's not targeted at me. No. And the thing is I go to that theater and I like that theater. It's a very good theater, but that billboard did not make me want to be there. Yeah. Yeah, people are. Yeah. I mean, uh, even, even the manly testosterone circus of the WWE has, uh, the longest running tag team champs the new day for which have unicorn memorabilia and they had you light up unicorn horns that they were selling for a while. So unicorns are hot. You heard it. So no more vampires are done. Zombies on their way out. Unicorns, time travel and. It's amazing. We haven't seen a unicorn TV show or a unicorn movie where someone, it's, it's coming. Yeah. Unicorns on the ascendancy, I think. Yeah. That's unicorn remake. That's, that's a no brainer for like free form or the CW or something like. Definitely. MTV. Yeah. Oh, totally. Dark unicorn show. Unicorn Riverdale crossover for the CW. So would you, I mean, I guess the problem with, with wrapping a show around an animal is that the animals either got to talk, have mind powers, or somebody turns into the accord. Yeah. You could, you could do a show where the unicorn is more of a background character. Right. It's the unicorn forest and it appears infrequently to dispense inspiration and wisdom. But it's the, the unicorn brigade that's defending its lands that are the main. Yeah. But even then, so then you have, then you have a lot of characters that can't talk. Right. Like you have, you have a lot of big important elements that can't, they can't talk. Yeah. Fair. Almost screwed up the feed again. Cause I was thinking about unicorns. Um, well, but the, the defenders could talk, right? It's only the unicorn and the unicorn would, would, uh, would communicate psychically. I'm sure. I guess. Yeah. That's my question is, is do you have them? Are they talking psychically or does somebody turn into one? To me, that's the only. Well, I think that's your season two twist. Is he thought it was just a unicorn talking psychically? Turns out it used to be someone. Oh, that one of the care, like one of the group secretly was one of the characters whose father disappeared in a mysterious incident. Yeah. Turns out. Are we, we should write our, our unicorn spec script. We really should. I think we just did. We just did. We just did. Roger, make it back yet. Nope. No. No. No. No. No. No. No. No. Daily tech headlines? Well, that's weird. Why would I do that? Okay. Two seconds. I will be right back. Okay. I did something stupid, but I think I can undo it. Because I haven't updated yet. I was in the wrong post. That's never good.  Changed up my routine so that I now do. do the blog post when I'm upstairs before I come downstairs, which means when I come downstairs, the tab that has the blog post open is the Daily Tech Headlines tab from doing it earlier in the day. So if I'm not paying attention, I start writing over the Daily Tech Headlines post, which is a problem for many reasons. Sorry, sorry, it's right back. Hey, what were you doing? First I used the bathroom and then I had to check on my kid. Well, I asked. Sorry. No, that's fine. I was just stopping myself from screwing up the post again. Don't screw the post. Sorry, I didn't give you enough food. Oh wait, we're still live. What else can I add to the post show? All right, I'm just making sure that I'm not screwing this up. That's all there. That's all there. That looks right. Where is the wrong thing? See, I bought a double checked. That's why you double check. That's why you always double check. You measure twice, cut once. Measure twice, post once. All right, I think I got it right this time. All right, I've published, but did I publish too much? Ba, ba, ba. You know what I've been craving a lot lately and I know I've mentioned this on the show. It's been going on for a while. It's fried chicken. Fried chicken, huh? Yeah. Yeah, you know, I don't think I've had really, really good fried chicken in a while. Gotta take you to the Honey Cuddle in Culver City next time you're down. Yeah. It's really good. You know, fried chicken's always a weird thing because even the best, you're really, like it is one of the rare, like commodity foods where you make a lot of it, where it is very dependent on like each cooking.  Like a lot of what is done, you can do it in batches, right? But with fried chicken, good fried chicken, like a good drum, a good breast, good breading can be ruined if you're leaving it in the fryer too long. Mm-hmm. Or, I mean, well, it's one of those things here. I'm gonna just send you a link. This is the one I like in San Francisco. Ooh. Ooh. But what I find is the best fried chicken I've ever had is the one that's done in your standard deep, deep iron skillet pan. Nice. Yeah. I'm also, I'm a fan of a thin breading, thin breading. Yeah, I don't like... You know what's funny is I used to be in the KFC terms, an original recipe person. Yeah. But I find myself leaning towards extra crispy as I get older. I've always been more of an extra crispy guy, but I don't like a ton of it. I don't like it when there's so much more breading than actual meat. Yes. Which bugs me. Well, I think what I liked about the original recipe when I was a kid is it was tastier, but I found as I've grown older, that just means saltier. Yeah. I don't like salt. I love salt. Love it all. I mean, you need salt, but at the same time, I just think that people add, when they say seasonings, all they do is just put more salt. And it's not like, you know... I'm gonna have to take you guys to Loven Salt in Manhattan Beach. To Salt Lake. Yeah, everyone gets an individual size Salt Lake. Deep fried unicorns, says Strengths. It's velvety smooth meat. All right, I think I have successfully prevented danger and the show is posted and we have successfully talked about more food. So, thank you all for joining us. Jen Cutter with us tomorrow. And Len will be here, Roger? You did the script. So I wasn't sure. Yes, I'm sorry, I was... There will be Len. There will be a Len. Talk to you then.


Hello and welcome to the session in which we would look at a CPA exercise or simply put a simulation that deals with testing assertions. Simply put, you're going to be giving an audit procedure and that audit procedure will test asserting assertion, maybe more than one assertion. The difficulty in the audit exam is this. In the audit exam, you have to use your judgment. You can memorize certain terms, certain concepts, but when it comes to application, you have to use your knowledge in order to apply certain audit procedures. So I hope this exercise will help you apply those audit procedures and get you used to those type of audit procedures. Now, obviously, you can pause this recording now, try to solve this problem, then we can work it together. But before we start, if you are a CPA candidate, which most likely you are, or an accounting student for that matter, I strongly suggest you check out my website, farhatlectures.com. What I do is I supplement your CPA review course. I don't replace your CPA review course. You keep it. That's not what I do. I add value to your CPA review course by explaining, by teaching you the material better. That's the difference between what I do in another supplemental course. I don't give you the same thing that the CPA course given you. I teach you the material. And by doing so, I can add 10 to 15 points to your CPA exam score because by learning the material, you can do better on the exam. Now, here's your risk. You can try my system because my system, I set up my courses to be very similar, not very similar, the same as your CPA review course. So when you sign up with my Wiley FAR or my Wiley AUD, it's set up the same way. You risk $30. Are you willing to risk $30 to find out whether you can improve your score or not? Now many students use my system before you can go to my LinkedIn account and check out my LinkedIn recommendation to find out how students use the system to pass. And if not for anything, check out my website to find out how well or not well your university is doing on the CPA exam. It gives you the average score. I do have a full audit course if you are an auditing student. I strongly suggest you check it out. Please connect with me on LinkedIn, like this recording, share it and follow me on Instagram and Facebook. So let's take a look at this CPA exam simulation or an exercise that's going to help you understand the audit procedures as well as testing of assertion for the account receivable slash revenue cycle because when you are doing it, when you are auditing account receivable, you are also auditing the revenue cycle at the same time because they are related to each other. So your client is Adam's company, electronic wholesaler, and what I want you to do is select the most appropriate audit procedure to test the assertions. So here are the audit procedures and we have the assertions here. Starting with the first assertion, ensure that the entity has legal title to account receivable, which is the assertion is rights and obligation. How can we test this? Now think about what are you doing here? What we are doing is we wanted to make sure that the account receivable that's listed on the books is actually the company's account receivable. Now you were saying, why not? If they are listing the account receivable, it should be their account receivable. Well, you have to be looking for if they are pledging those receivable because that could happen. They can pledge it. They can pledge it simply put. They can go to the bank and tell the bank look, we're going to pledge. Simply put, we're going to, we will give you the receivable if we don't pay. It's basically pledging your receivable to get a loan. So how do you find out whether those receivable are pledged or not? Well, you have to look at their loan agreement. In the loan agreement, if the bank is taking your receivable as a collateral as being pledged, that will appear in the loan agreement. Also, what could happen is you could be also selling your receivable. If you're selling your receivable, the bank statement, the bank confirmation, the cash receipts will identify this. Therefore, you should be looking for answers that deal with loan agreement, something to do with the bank. Let's look at the first option, review bank confirmation and loan agreement. Yes, that will solve this problem because once you review the bank agreement, you will find out whether anything is pledged or not. The loan agreement will tell you this because that's the risk. It's really on their books, but it's being pledged. And if it's being pledged, well, it's not, you know, we have to disclose this at least in the financial statement. We might have to do additional work, but at least this has to be disclosed somewhere. B, determine that recorded amount a count receivable include all amounts owed to the client, which is the completeness assertion. How do we test for the completeness assertion? So what is the completeness assertion? The completeness assertion means you are keeping something out. You are not recording something. So it's basically something that does not exist on the books. So how do we find out whether you are, how do we test for that completeness to find out whether you recorded everything? If we are dealing with sales, what do we have to do? Well, we have to make sure that select maybe a sample of shipping document and find out if those items were shipped. And if they were shipped, that's great. Are they recorded in the sales journal? Are they recorded in the account receivable? Are they updated the sub ledger for the client to make sure all the shipment has been recorded completeness? So let's see. Review the draft of the financial statement that will not help us. Select the sample of shipping document. That's good. Match them with the related sales invoice. That's good. And determine that they've been included in the sales journal. Excellent. And the account receivable sub ledger. Yeah, I would say three will be the answer for this. Why? Because you want to make sure that everything that was shipped, all sales are actually recorded. So you will start with the shipping document and you want to make sure everything that's been shipped that's actually a sale exists actually on the books is recorded on the books. It's completed. Therefore, this will satisfy the completeness. Verify that all account receivable are recorded in the correct period, which is the cutoff assertion. How do we make sure that it's recorded in the proper period? For one thing, what is the risk here? The risk is toward the end of the period we could be recognizing some sales, some account receivable prematurely, or we could be deferring some sales because we met our expectation to period two. Therefore, what we have to do, we look toward the end of the period and look at the cutoff, look at documents to find out when was it shipped, when did the sale took place, and when was it actually recorded. So few days after, few days before, few days after during the period to find out if they are recorded in the proper period, which is the cutoff. So select the sample of shipping document for a few days before and few days after your end. I would say four is the answer for this. That will do this. That will satisfy your cutoff assertion. Let's take a look at D. Ensure that all allowance for incollectible account is properly stated, which is accuracy, valuation, and allocation. What does that mean? Here we are dealing with the credit worthiness. Here we are dealing with the credit worthiness of the receivable. Do they have to book any allowance for doubtful account? How long is the account receivable outstanding? What do you do under those circumstances? For one thing, you have to understand the industry itself. That's good. Like for example, if the industry is experiencing some difficulty, you will notice they're going to have to increase their allowance. But what you have to do too is talk to the manager, review the account receivable with the manager, with the credit manager at the company, and learn how did they come up with those allowance for doubtful account, then you would use your judgment. I would say you would review the aging of account receivable with the credit manager. You would still have to use your judgment, whether that number is appropriate or not. But this is the audit procedure you would use to test for these assertions. E, confirm that recorded account receivable are valid existence. Are they really actual sales? This should be an easy step in a sense that you should know this by heart. The best way to do so is to send a confirmation to the customers. Now, the customer may or may not respond. There are alternative procedures. You really want to know that this step for existence confirmation is the best. So confirmation of account receivable. Now there's a lot of steps for confirmation. If you go to my website, farhatlectures.com, I do cover, I have one whole recording, one whole lesson about confirmation. There's positive confirmation, negative confirmation, alternative procedures when the client doesn't respond, so on and so forth. So you have to be very familiar, extremely familiar with confirmation. It's not only, you know, it tests existence, yes, it tests existence, but there are other steps that deals with a confirmation. F, ensure all revenue related disclosures are made in the financial statements. How do you know whether they made all the disclosure? You would review the financial statements and you would read the notes. And based on your knowledge about the company, you want to make sure that all the notes, the notes reflect everything that's stated in numbers and any relevant information that the users of these financial statement would need to know. So you would review the draft of the financial statement and make sure everything is there. Everything that's supposed to be there is there. For example, if something is pledged, you want to make sure it's there. If they have anything outstanding in terms of lawsuits, you want to make sure it's there, so on and so forth. So this is how you would do so. So notice here, what you do, what we did is we looked at the assertions. So you want to, first of all, like, why is this topic, it can be difficult for students? Well, for one thing, if you don't understand fully the assertions, what does it mean completeness? What does it mean cut off? What does it mean existence? Then you're not going to be able to match the assertion with the other procedure. So first, you really have to understand, so here you have to understand three things. You have to understand the revenue cycle and each cycle will have different assertions. And again, on farhatlectures.com, I have plenty of recordings for the revenue cycle, the expenditure cycle, the inventory and warehousing cycle, the payroll cycle. So we'll teach you all these cycles. But the point is you have to have a good understanding of the cycle, so that you have to know three things in this recording. You have to understand really the revenue cycle itself. From an accounting perspective, how does the revenue cycle work? You have to understand assertions, then you have to understand the type of evidence, and you have to match those three together in order to properly answer a problem like this. Again, this is only about revenue. This question could be given about expenditure, about how to verify the inventory assertion, so on and so forth. So again, I'm going to invite you to visit farhatlectures.com and you will find the appropriate resources to help you prepare for these type of questions. The difference between what I do in a CPA review course is I teach you the material. I don't give you any shortcuts. I don't promise you I'll help you pass in 20 days. I will help you understand the material, whether it takes you 20 days or whatever time you need to take, but I will help you learn it. That's the difference between what I do in a CPA review course and other supplemental material. Other supplemental material, they even sometimes they cut down on their material to help you pass faster. I don't help you pass faster. I help you pass period. For now, stay safe, good luck, and study hard for the exam.