All right We're back again. It's day 10 of the advent of code We've done nine days so far, right? That's not bad Not bad at all We're stringer early streaming early today. I've got some visitors coming in But ah little Annie is back Whoo-hoo As you can see my T-shirt is a bit see through today, but it's great. It's supposed to be a Christmas t-shirt, but Now I just blend in a bit more All right, let's see what we're gonna do for Day 10. Okay. Yeah, we were on some bridge. We wanted the ropes. They all fell. Okay Back up river. Okay, but the route finish crossing bridge if you okay So we got the communication device pull it out Okay, the vice is video system. This is some kind of catholic rate to That's green and simple CPU. They're both driven by precise clock circuit the clock so you could take that to constant rate. Oh My god, we're gonna be making another in code machine Damn Okay, the CPU has a single register X which starts at the value one It supports only two instructions at XP takes two cycles to complete after two cycles The extra registers increased by the value V No op takes a one cycle to complete It has no other effect see we use these instruction in pros and input to somehow Okay, let's just start by a writing the parser, right? Okay, new file example, okay Paste it save it load it Module main where are you main? Okay, and we're gonna have a data instruction pulse Add X Okay, now a let's put the right language here language you see 20 one and Let's write the instance read Insta where a Reads preq. Let's import import They don't know this is tax dot parser combinators Reads read preq. This one is gonna be read P to preq Okay, so read preq to P Preq to P Okay, let's see. We're not gonna use that read preq now. We're not ignoring the text and parser combinators It's I think it's just the same. Oh, okay, that's it Let's just lift it reads preq. Yeah, okay, so we're gonna say read preq to be of lift parts to P import text P Where pars equals so we're parsing one instruction do okay, so That's right.  No up. It's just a string No up cars a add X it's gonna be a string no off and Then skip spaces and then we are gonna say a Read read as to P So where's his reads function from text on read a reads preq Right, this is actually gonna be read with these reads Hey We have to return up and then here we say Add X over and then read and now it doesn't like this a What is read this track here? This one works, okay GT and let's see the day 10 GT oh Okay, it actually turns now let's do right show here deriving Oh Into where read input is just Map Map read Over F map map read dot lines over Read file like this.  Oh, this one is supposed to be addicts. All right. We got the instructions Into usable format. It was quite fast, right now. We have to write the virtual machine, right? And I figure like tomorrow. We're gonna be adding more stuff to this. Okay, let's see. No up takes one cycle xv takes one. Okay, so Cycles instra to add X is two cycles and Cycles Okay, these are the cycles for the instructions and we read them, okay Now let's you find the virtual machine data VM It's gonna be some state right state state Okay, Monad state so what is the state? Okay, let's say here type Type VM, okay, let's say data VM State Is equal to okay, and we definitely need to keep track of the current cycle BMS Curse cycle And so the current value of the X register and let's say registers Is a map from Char, it's map from char to value and let's just say it's an int, okay and Now we have to import data.map Okay, now VM state. Okay, then we're gonna say Type a VM This is the VM monad. It's gonna be a monad state Monad state class. Okay, let's just Call it the monad. It's the state T Uh, okay, so the monad state here VM. This is just a state monad of VM state This is from control monad at state. Let's qualify this Qualified And then we see here Because we want to be using it. Okay, now Uh At the start of the first cycle now, please The initial state Initial state VMS Use a VM state. The initial state is equal to VMS Curse cycle equals one Registers equals It's gonna be a map dot from list X and Okay, um VM state is really small Okay, now let's write the execute function Execute takes a list of instructions. Let's see what we have to do Maybe less than the value of x drag is already going out to execute you For now consider the consider the regal strength the cycle number multiplied by the values of x during the 20th cycle and there's 40 cycle after that I'm wondering if we should like manually just do like a cycle and then you halt for a little time or What we should do Okay, let's just uh, so execute Is gonna take a list of instructions Let's say here a task one List of instructions to a list of uh, we're gonna have a list of Time values and current Exes okay task one And we are gonna say that this is like the This is gonna be like it's gonna return this Can I just say here type is a VM monad If we do return No, it doesn't work like that, right type state the state Termite by type as of the current function list is they don't change well Okay, but why can't I I would thought that this one was Okay, so this one is actually gonna be it's not gonna be the type. So yeah, okay It's the state here. Let's say task one. This is gonna be state We're gonna actually have the vm state and we're gonna have the kind of the The values here Um, and it's going to return The uh end comma it eventually Okay, now it says Return Expected a Actual maybe it was okay before type Okay, yeah, let's actually do it like that. So just to say vm You're trying to list if it's going Okay, now what are we gonna do? We are going to say a so xx state initial value of the final state run state uh return Value and final state. Yeah Okay Um, okay, so I just want to just get the state and we get the run state. Okay, uh, so task one No, okay, so xx let's write that a It's just inster And it gets the a so it's inster and a and it takes a Vm a to vm a Exek No op So I take no op st is equal to um Uh, and we say modify Because I don't actually return anything. So it's gonna be modify And let's go for the overloaded record dot here Language Overloaded record and that's the other one, right? overloaded record update Resume your journey No, this is the new thing all our record update record syntax and updates Works, but it's hearing the dot update expression to one of the functions. I feel and get feel a Let's just see. Okay. Let's just not do it. Um Then let's say, uh, okay, so this one is do and yet so, uh, uh, we have a Vms Dot dot Yes We get the current state and then we do set Vms Dot dot, uh, but Cur cycle equals car cycle And it doesn't like this because You know, it doesn't like it because I thought record one because it wasn't gg 21. Okay, so we get it and then we set it Uh, oh Exek, okay now add x of I don't need the state here actually get and Okay, but I can actually just write a modify So it's actually Yeah, okay, let's just write a modify function, right Vms Only modify it. We say Vms goes to Vms Cur cycle Exek add xv equals Modify and we go from Vms to Vms Cur cycle equals cur cycle plus two And And then the registers is going to be equal to modify so map dot motor map dot Adjust Adjust Adjust map just adjust Uh Plus v we're gonna do for x of Registers Okay, so task one instars. Okay, this is gonna be So we run one instar We can't do map M. So let's see. So task one. Okay for the if we don't have any instruction, we just return empty list Task one of uh, we have an instar Instars equals okay do So we exec The instar and then We do Vms yet And we actually say that And then we recurse and we say uh, we so we add to this one We say, uh, we say that it's the cur cycle And uh, it's registers bang bang x x and this is Going to be f mapped over task one of Instars. Okay, let's just do like this Rest Instars Return Here is it Registers good match Type in trap map This is a cur cycle Isn't it like I still think it should be we should be able to Do like this That's one instars Okay, now we just have to figure out what's wrong here a registers as Okay, uh, let V equals we just get the type straight here V has type int comma int. We need to say V here Okay now, uh, return Okay, so task one Let's write this as observe A Instar So this one let's call this one observe and we execute the instruction and then we kind of Execute observe the rest of the ones. Okay Observe, okay, and then we want for task one We take the instructions And we get the list of income in then let's just say that for now task one is equal to Observe So you get the instars Instars Okay, we observe instars And So this is going to be a VM operation now and then we got to go xx state, right? xx state xx state and then we uh runs no eval state. Yeah We do eval state And whatever this is and the initial state is initial state Initial state. Let's see what task one gives you task one For the first one then we get the So that was first the first the signal was zero zero Okay, let's actually I feel like we should be doing like initial But okay Let's keep it like that. Okay. So two one four four six minus one. Okay That's how it went, right? So it went from Then we have example large So, you know, we could also just say off three no option to roll We just bump up the signal, but I feel like we're going to be getting a lot more instructions. So let's just say example large Okay, and now let's run it for example large Okay, so then we get the It's still used to work, right? Okay, then and during the 20th signal cycle the registrar's value x at the start the first second no The first cycle x is one After the first cycle the novice recognition So then at x3 During the third cycle is the one during the start of the fourth cycle. I might be against execution During the fourth cycle x is still for Okay, a So the start of the first cycle During the first cycle x is one after the first cycle novice I'm trying to do nothing Start at the second cycle two Yeah, okay. So at the start of the second cycle two And then it's still one, right? During the third cycle x is the one after the third cycle the other x is the finish x is x and x is the fourth Our start of the fourth cycle. So we start always starting And during it still and then it's not until the next one we hit when it's actually been updated Okay, then let's see So on the 20th cycle a Okay, so during the 20th cycle. So that's gonna be So that's gonna be like the the first value. That's a No, the last value that's Less than or equal to 20, right Let's see So these are the values and then we're gonna say take while okay So because it on 20 so when it's 20 starts it's still 21 Yeah And then when 60 starts it's 19 yes 100 it's 18 Yeah, okay, so it's doing it correctly. Okay, but we have to figure out this Let's see that. Okay, let's get the interesting interest interest Takes in the list of int comma int Okay, so it's gonna be It's good. It's gonna take a list of Ah, just a list of ints uh interests Inter Estes interest Interests Okay, we start with the It's gonna be interests Let's start on zero and then we uh, and then we so we take So every every 40 cycles right so 20 and then every 40 cycles Okay, so interests. I'm really bad at writing this for interests zero where interests Oh, we start with 20 interest and equals So let's say here. This is gonna be span We're gonna say that like this is the cycle and the signal And We don't care about the signal here actually so span so we're gonna take a we're gonna say a c Less than equal to a c is less than or equal to Less than Yeah less than or equal to n Interests span is c is less than or equal to n And it starts at 20 and yes, we're always safe the first time of a Vals, okay, so span Let's say a okay. This is gonna be where a Before and after okay equal span of valves Now we are going to uh, so uh, this is gonna take a while I'll go while it's And then we're going to say a So the interesting valve is going to be the head of the list reverse bf Okay, so we're going to say i and then column a interests prime On a n plus 40 af Interests 20 What is what is I'm just gonna call this f. Okay F and what's wrong with f here? Uh, it's not f What's wrong with f prime here? Pretty much type into a number of the types are wrong So it's gonna be it's Let's Let's call these signals. Okay I'm better at writing that word signals prime This is gonna be f prime pinch to signals signals prime has type into income i to List of inch That's the problem It's gonna be the cycle, but we don't care about that. It's gonna be the value of the signal here. Okay Now let's print task one. Okay. So task one You're gonna eval state initial state and we're gonna take the Signals of that. Okay. Let's see if this works and No one accepts the pattern All right, and we need some base case. Yes signal We don't care and an empty list is gonna be 21 19 18 21 16 18 17 So 21 19 18 21 16 18 During the 20 200 to 20 is like no, so what is okay? And then it goes up to it ends up being I can see But it ends up being a Why do we have that 17 at the end? So that's the final one is 70 Because we take while and then we do the last one Let's do c here Okay, and let's say case c is Larger than that is equal to n if c is equal to n so I want to kind of In that final case, I want to say, what do I do in the final case here? So the final one is basically If c Is less than equal to Larger than equal to n Yeah, so so how do I say that because it might like start an instruction and then be like a really long instruction um And so the final one doesn't say okay, but to 20 uh, okay So yeah, because I because I think this is wrong right because I I mean for this one, it's okay because I know the last one will not be exactly But I could have like a really long instruction that takes Like more than 40 cycles, right and then the value at that point until it finishes will still be 241 um Okay, but here we also have that's gonna be everything Uh, let's see if that works. It probably won't work. But let's see Let's not have it here. Let's have it because of the danger is that the final one is like exactly the one Uh, okay, but no we can't do better. We can't do better So the final value, uh, so at the value at the value at cycle 260 is actually Still this right because if we just keep it running Right, but we're not we only want to mention measure If it didn't stop Okay, let's uh, have this be Right this has I should be smart about it like afterwards Okay, and now let's a Maybe we'll pay for it later, but Let me just get the input. Let me see what the input ends up in like whether the final one is kind of the same case or what? That's only 110, okay It's not that hard. Okay, so short the input is yeah, okay, but it's the same So let's keep this and let's just say So the product of the example Part of the example large is four three four six seven ah some uh, okay No, okay. Yeah, I have to During the 60th cycle register x has the value 19 So the signal strength is 16 times Okay, so I have to take the I actually have to take the uh No, we do have to look at these. Okay, the second here Okay And now let me do Some trick here and let's do a map and let's set this with list 20 40 What is it? What is the problem here? 20 and then 1 2 3 that doesn't work. It works, right? 2 4 I feel like I could uh do the step Let's go List in enum from Okay, maybe I can't do it that way Enum from then Okay, maybe there's not a comma here. Let me infinite. Okay. So we just have to do so 20 40 80 120 No, it's 20 and then it's 60 and then 20 60 100. Yep 20 60 100 140 180 220 And what if I don't do the in it here now we get 260 so I'm gonna keep the in it. I know it's a Now let's say map s and d Oh Before we do the sip And now let's do a sip with multiplication And then we do 420 111 40 and then okay, then we do the sum of this this here So it's one three one 40. Uh, let's see this 14 80 60 All right, we've got task one Let's go I hope part two is not too bad Seems like the x-ray control the horizontal position of a sprite specifically as by the jubilee So why are these we should set the person but in the middle of that sprite Sprite is depicted. This is the moment. It's not setting up a position Like the cp the crt is closely tied to the clock circuit the crt draws A single pixel during each cycle representing each pixel of the screen as a star as a hashtag Here are the cycles during the pitch towards the pitch and rise first and last pixel in each row are drawn So by carefully timing the cpu instruction the crt drawing operations, you be able to determine Whether the sprite is visible The instant each pixel is drawn the sprite is positioned such as one of its three pixels Render the image given by a program what eight capital letters appear on your crt? Can you see anything here? I can't Is there a In this let's see if we get something from the input But we should be getting this from the Larger example, okay sprite position Okay, start cycle one rigging execution add x during cycle one CRT draws pixel in position one. Okay precision zero. Yeah It's position zero This is one position two position three Wait, so when does it draw CRT draws a single pixel drinks everything each because Okay, so we do one to 40 and then 41 to 80 81 to 128 Okay Cycle 240 we end up at cycle 240 How do we Okay, anyway, I think we so let's start with task two. We at least do got the task to a go in stir in in stir in e in stir to Right, so this is we don't have to actually look at the instructions, right? Because you already know how to run them the task to equals this Observe, okay, so these are like all the value changes Okay controls a horizontal position especially the three picks of white And the extra I get your sets a horizontal position of the middle of that sprite Ah Okay, so that's why So it starts off at one and then we draw like Hashtag. Okay. That's why it starts off like this Hey, okay, so it's always like drawing and then we're like moving the stride during drawing Okay Now, uh, let's split this up into so it's the cycle zero to 40 Then cycle 41 to 80. Okay, so it's like always at 20 40 cycles of 40s Okay, so let's uh re-evaluate the signals here Let's uh Signals Now we're gonna start at zero Oh, we're just gonna do So zero is we're gonna get the signals from zero to 40 Okay Signals, okay, let's just actually have the signals I'm watching here Okay, and then this one just becomes Signals Signals needed Uh, and now we're gonna go signals zero So we go zero 40 So we go zero to 40 Okay, now we need to do something for zero Oh, it doesn't actually start at zero. It starts at one. I'm sorry doesn't work still because the first one is Okay No, okay. This is not the same function at all. Sorry Uh, so between so between Takes an int and a Incomite Between And equals between And then the end is this is like a breath link between prime of zero between prime X is equal to Of of valves between to go up Vowels, okay between so if it's empty It's empty If however, it's not empty if it says between prime And so this is the current value c Vowels equals take So you're gonna go span bf af equals span And this is gonna say This is gonna be curve Okay, so this is cycle and value. So click on whatever goes to so C is less than equal to curve. So it's like the Uh She is less than equal to curve plus and this is going to be bf bf and then a between between prime between prime of a between and then prime and then we have curve plus and Uh Will this like hit an infinite thing or not what takes until it ends. Yeah. Yeah Okay, and then a f And then this it goes into good complaints because It takes a list of instant chunks it between 40 No, and this is Map Okay, so these are the changes until 40 And then the changes between 41 and 80 and these are the changes between 81 and 120 and then These are the changes between cycle 201 I don't get starting so now we have to we have to Okay, let's just now let's write the draw function. Okay And then we'll just chunk it up at 40. Okay. Uh, now let's write the draw function. Okay The draw That's actually Let's not do it like this. We don't have that between the draw. It just takes a list of int comma int and returns string So draw This is the curve. Okay. This is the current value And we're just going to go curve mod 40. Okay current value And then this is the empty list Is just So draw now draw Cur current value on top cycle value Like cycle when the next change will happen And we start with zero and one will add zero and one to this Draw function pixel. Let's call this pixel. I mean I actually care about here Rest Now this is the current value of current value. Yeah now Let's call then we have to have the current value as well CV No, let's go Cycle and then this is up the a Yes, cd Okay now Let's see. So we're with the current pixel Curp p. Okay And we want to see so we're drawing the current pixel. Okay um Now we take like the Where okay, let's say where Screen pause is equal to current p modulus 40 Okay now So that's the screen position And then we're gonna say To put Is equal so if If a abs. So it's the difference between screen pause and a the Current the grid and the current value is a So if it's like at the current value or it's One to the left. So if this is less than two Then we draw hashtag Else dot Okay, and so they do Okay, uh, uh, so let's see here. Uh, wait, let's let's be so this is not actually current value. So this is gonna be CV prime CV prime is equal to uh if Curp p less than equal to If let your curp be So if we're if if we hit if we're hitting the update Then we do if curp equals cycle Then Upd else cv Okay, now and now we check the screen plus and the current value prime and language. Okay uh cycle Curp p less than upd else, okay And then a nvs Is equal to if Curp be equals Let's call this cv Here Yes, a cv prime. Yes prime is equal to if curp p. So if we're hitting the update Then uh, this is uh Then it's new values upd and this is rest Else it's cv Yes, and the output Is that And then so this is going to be output concatenated with draw cv prime curp p plus one Okay, and then the uh, we will have the current value plus one And we have cv prime nvs prime just complaining draw My three arguments, but it's uh, okay here so You have the current pixel and the current value current pixel uh current pixel current value and then the list And this is uh output So i'm not entirely sure that i'll get the uh That i'll get the uh Output let's actually make it Okay, so if then Okay Okay, and we also want to add a A kind of line breaks if screen pass Is equal to 40 you have output we have uh next is equal to uh If screen pass Equal zero if screen so this is going to be Output and then if screen pass zero then dash slash and Okay, let me now see read and put Okay And then we're gonna say put string ellen we're gonna say task two and we're gonna say a putster ellen Of draw and we're gonna throw the current pixel zero current value one instructions say yeah We do get the same picture Oh, we seem to have like one in the beginning Seems like we're off by one maybe Oh, I think we're off by one a new follower All right, verano's Is the best and No, this one's completely wrong doom doom doom doom I feel like i'm a i was more correct before Maybe it should be screen pass equals one and then we do it I think it's definitely zero Maybe I shouldn't start. Maybe I should start at I'm not starting at one here. I feel like I mean it's the same picture almost except I think maybe I should not Up so I should not update the cycle Uh, maybe I should know I probably should check cb here So it's going two and three and Let's actually just I want to see what it says for the input the pictures don't match So like what is happening here right like why is this thing I think starting at one is correct So it's like hashtags dot dot But then it goes like uh, you know like what's going on here. This is something about the The During cycle, okay crt draws pixel in position zero. Okay begin executing at x15 The girl precision zero. Okay. Maybe it's supposed to be cycle minus one. Yes, okay because the current Pixel was shifted by one Okay, so now we get something that looks like letters, right But the letters at the end are still wrong. So Let me see this one should be Rock begin drawing at zero. So it says c set to g Z e h u r k What eight capital letters with g said e h u r k so and the first one are Ah, okay. So all of these Should actually be here Now how do I What do we ship? So we are we are actually We are shifting one to early Yes r g said e h u r k r g said e h u r k all right Just found some nice blockcharts Ah so Apparently you can compile check for a lot of our subscriptions That is exactly correct Verano's We have a We have a lot of This is print now. Let's go to the background This is why we have the stream, you know We get we get extremely good feedback Oh, okay. All right But what if I just have space actually Okay, now, but this is kind of more like a All right, thank crazy wolf, okay All right Ah space looks nice Crazy wolf is the one giving us the He's the stylist of the channel Uh, yeah, this is quite readable, right? Yeah, this whole hashtag thing was Not the best But I wish we could make them like full width. Let me see full width Unicode block to do to do to do to do to do for This one maybe Because see this one is like half Yeah We're almost there, but I still like I would not like I don't want any space between uh Unused space with my editor swimming it, but you're right Nice looks good. See we have official Uh, we have official confirmation from the Unicode box our channel. We have official confirmation from the stylist Ah, you think okay, but anyway now we have the draw function And it it works, right? Hopefully so So we've been working with this signal processor, right? And now we've been uh now we've been working with it Two days in a row a couple days in a row, right? So I think what we're gonna end up with You know what I would have done though. I would have enjoyed Something more meaningful here in the example I can't see anything from this picture Um Okay, uh, so we're because now we have the cycle counter. We had the reading book now We have the VM state and we did a nice parse modify exec observe We observe changes, right? I think that's also one of the tricks We're just observing changes in the state Because those are actually the ones that matter. We could have also just Kind of drawn while we were executing, but yeah, this seems fine All right, let's add this get day 10.hs Input example star star Get status get commit em day 10 Get push this is all available on github. How long does it take to solve one advent of code? A Angular developer good question. So like I've been recording the streams, right? Um, and I put them up on a youtube playlist and We can actually just have a youtube treat. Love Let's have a look at the channel Playlists I don't know code 22 You that the growth has plenty of fruit too much already I Yeah, see also Yeah, day nine is not actually out yet But oh, I will be out in like half an hour Because I have to delay it by 24 hours. So we see here that it's a you know video one Is like half an hour right and then it's like half an hour half an hour And you know and then an hour and then an hour and then 40 minutes and then two hours and then an hour And then two hours yesterday night and today we were like an hour and a half, right? so It it's really different. It's really it's like sometimes it's just really hard to parse the problem to get working on it And then the solution is easy sometimes you just have to work and then um Sometimes Yeah, you just get stuck, right? So you're like doing something like that was like the two hour one yesterday we were We had the right solution for the longest time, but what happened was that We uh, we took a We took a long time to convince ourselves that it was actually And then if we ran it we got the right answer where we didn't run it We just kind of yeah So yeah, I would say like between half an hour an hour and a half two hours if you're not chatting if you're not like Constantly monologuing about it. Maybe it takes uh I think it takes not as long. It's also fun to be able to Talk about what you're doing. Now, you know some interaction. All right, but that was day 10. Hey I got some visitors coming in so I will leave you Yeah, I'm gonna leave you now get ready for visitors Tomorrow will not be as early We're gonna stream at like Six o'clock european time Because yeah, I have visitors they come now they leave Set everything back up. Boom Anyway, thanks for tuning in today Hey I have a feeling like it's gonna get harder and harder and harder Now we're at the point where it's like, okay, we can do it in an hour But then you know, we usually like day 14 or 15. It's like boom extremely hard And here we got away with kind of not modifying the state too much But like, you know, we did do like a map of registers because I know they're gonna add more registers That's what's gonna happen tomorrow That's always how it happens Anyway, thanks again for tuning in And hope to see you tomorrow, right? ask questions Why do we do it this way in Haskell? What is the intuitions? I try to Give you some hints, but I hope it's uh, I hope it's enjoyable. All right Thanks a lot and yeah, hope to see you tomorrow. Bye. Bye


The best journalists are persecuted and despised. Notes from the edge of the narrative matrix. The best Western journalists are overwhelmingly despised while the worst are acclaimed millionaires. Western civilization is built on lies, dependent on lies, powered by lies. Don't seek widespread approval. It's worthless. Live long enough and you'll learn that the people who will really hurt you and screw you over aren't the obvious overt monsters, but the sly manipulators who smile to your face. The US Empire is a sly manipulator smiling and posturing as the good guy by contrasting itself with overt monsters. As our consciousness has expanded, it's become unacceptable to be seen as an overt tyrant by the public. But that's just meant the emergence of a sneakier form of tyranny. The age of the brute gave way to the age of the manipulative bitch. This manipulative bitch of an empire has been instigating and orchestrating violence at mass scale and then using its unrivaled narrative control machine to blame the violence on other powers. And its provocations are only getting more and more aggressive and more and more dangerous. If humanity meets its end, it will come not at the hands of the overt monsters, but the sly manipulators. The trajectory toward the horrifying global conflict we appear to be fast approaching was set by the manipulative bitch of the US centralized empire. If there's one thing sly manipulators hate, it's people who continuously highlight whatever they are being manipulative. That's what drives the ongoing push to silence, censor, and marginalize critics of empire.  Manipulators can only manipulate when their manipulations are invisible to their subjects. A grassroots push to bring public awareness to the empire's manipulations would hamstring the empire. The empire knows this, hence the push to neutralize empire critics in myriad ways.  Remember, it's crazy and conspiratorial to say the CIA likely is involved or will soon become involved in domestic uprisings in a US targeted nation. The same position is to believe that the CIA never does anything, and its officers are all sitting in their Langley offices watching Netflix. The responsible correct view is that the CIA's extensively documented role in fomenting domestic uprisings around the world is strictly a thing of the past, and that the agency now receives billions and billions of dollars each year to do nothing whatsoever. If you lived with someone who always steal things, you'd suspect them any time one of your valuables goes missing, but you're a crazy conspiracy theorist if you think domestic uprisings in a US targeted nation might involve the CIA. We learned the CIA was literally plotting to assassinate Julian Assange five years ago, and people still act like it's crazy and outlandish to suggest that they're doing evil things in the world currently. If you don't want people speculating about CIA involvement whenever there's unrest in a nation the US government doesn't like, you should be calling for the dismantling of the CIA. Otherwise, you're just supporting the CIA as it works to foment those kinds of uprisings and yelling at people who don't like it. People don't serve in the military, they work in the military. It's a job. And if it's a job with the US or any of its imperial member states, it's one of the most unethical jobs that anyone can possibly have. People who defend the US Empire from criticism aren't actually defending the Empire, they're defending their worldview. They're staving off the flood of cognitive dissonance they'd experienced if they saw that everything they believe about the world is a propaganda-induced lie. That's why so many of them say things like, of course our government does bad things, but, and then make up some nonsense gibberish like, you think Putin is an innocent little flower or whatever, they don't love the Empire, they're just flailing around protecting their worldview. Their arguments consistently lack robustness because they're not invested in defending some globe-spanning power structure, people don't usually do that unless they're paid to, they're just throwing up any kind of walls they can that will protect their worldview. Still, though.  Imagine actually seeing that as a problem. There are actual people who sincerely see the existence of Empire critics anywhere online as a problem that needs to be solved. How far gone do you have to be to live like that?  Most people get that you can't win a nuclear war, but not enough people understand that you can't even remain fully in control in a nuclear standoff.  Google nuclear close calls if you doubt this. Our rulers are ushering us into a nuclear standoff of steadily increasing escalation, and they cannot, cannot, cannot control its outcome. They're gambling everyone's life hoping to win the prize of planetary domination, and their game is getting more dangerous by the day.


I opened up an airspace for Israel and oversaw the Arabian and Oman after I had a little visit there. And we brought Israelis and Palestinians together at a political level, at the Aqqa'i and the Al-Shu'a. And as I affirmed the Prime Minister Netanyahu yesterday, America's commitment to Israel is firm. And it is ironclad. And we're committed as well to ensure that Iran never requires a nuclear weapon. So we've got a lot to talk about, but again, welcome. Thank you, Mr. President. It's wonderful to see you again. I bring a message of greeting and gratitude on behalf of the people of Israel, the entire nation of Israel, from all sides of the political spectrum, all expressing great friendship and gratitude to you. As you said, it's almost a jubilee since you entered politics and you've always stood by the state of Israel, the people of Israel in so many issues. And I was pleased to hear about your conversation with Prime Minister Netanyahu, in which you focused on our ironclad military and security cooperation, because there are some enemies of ours that sometimes mistaken the fact that we may have some differences as impacting our unbreakable bond. And I truly believe that, had they known how much our cooperation has grown in recent years and it's achieved new heights, they would not think that way. I also want to thank you, Mr. President, for pursuing more and more cooperation and integration in the region, for finding and looking for further partners for peace with Israel and for cooperating on so many regional issues together. And finally, Mr. President, I know you have mentioned, and we will discuss that as well, the internal Israeli situation. As you know, I'm here and I'm happy to be here, because tomorrow I will be speaking in front of a joint session of Congress, especially devoted to celebrating Israel's 75th independence. However, of course, my heart and soul is also in Israel in the heated debate which we are going through as a society. It's a heated debate, but it's also a virtue and a tribute to the greatness of Israeli democracy. And let me reiterate clear, crystal clear, Israeli democracy is sound, strong as resilient. We are going through pains, we are going through heated debates, we are going through challenging moments. But I truly believe, and I would say to you, Mr. President, as I've said it, as head of state to the people of Israel, we should always seek to find amicable consensus. And I agree with you on that as well. I'm pursuing it even in these very moments for my people as much as we can in order to find solutions and exit out of this crisis properly. Thank you, Mr. President, for your friendship, and God bless you. Thank you for your friendship, and I'll have to talk about it. Thank you very much. Okay, we just heard the comments made by Israeli President Isaac Herzog and US President Joe Biden. These were not live. These comments made about a half hour ago before they actually went into the Oval Office to have a private discussion.


and chair of the Department of Romance Languages. We are really honored today to welcome home Gail Sheevy back to her alma mater to speak to us today at this celebratory moment. Would you all please join me in a very warm return for Gail Sheevy. Good morning. I want to, before I begin, I want to take a picture of the most important people here. President Sullivan, trustees, board chair David Dagle, Governor Peter Schoenland, Senator Patrick Leahy, members of the faculty, proud parents, and above all, lucky graduates of this great university, my alma mater. Are you ready to go out and change the world? Power to you. But can you put it off for just about another 20 minutes or so? Because I have a few things I want to tell you. And you pretty much have to listen to me because I could be older than your grandmother. Thank you for the honor of this platform to offer some parting words about what really matters out there in that world you are about to disrupt. I'd like to begin by offering my congratulations to the nearly 500 graduate students who received their master's and doctoral degrees at the graduate college commencement ceremony yesterday. Later this afternoon, President Sullivan will confer degrees at the College of Medicine Commencement Ceremony. So at this time, I'd like to ask all students who are receiving the distinction of Latin honors, summa cum laude, magna cum laude, and cum laude, noted by the medallion they wear today, to stand and be recognized by their faculty, peers, and family. We are very proud of you and congratulate you on receiving this honor. So this is the time you've been waiting for, mom and dad, family, graduates, members of the class of 2016. Through your successful efforts, satisfied by the recommendations of your deans, you have met the requirements of your respective schools and thus deserve to receive the hallmark of the University of Vermont. By the virtue of the authority vested in me by the Board of Trustees of the University of Vermont, I admit you to the degrees for which you have been recommended. Graduates, please rise and in recognition of your new well-earned academic status, please remove that tassel from the right to the left. It's official. Congratulations.


Sajindarilkar is one of the greatest cricketers of all time. And when I saw his article, it did not have a pronunciation for his name. And what I did was I recorded the pronunciation in my voice and uploaded it to Wikipedia. And now anytime anyone around the world has to listen to how his name is pronounced, they would go to the Wikipedia article and listen to it and it would be in my voice. And over a billion people in the world would probably do that. And that is an achievement which I probably think is something that I treasure a lot. My name is Srikith. I live and work in Mumbai. My full name is Nupur Raval. I'm a result of one of his outreach programs. We used to be friends and everything, but this one day we were in Bangalore and he said there's a Wiki Meetup. So I said what is a Wiki Meetup? Like you keep talking about Wikipedia and everything, so what is it? So he said come along, let's just see what it is about. Then I started editing a lot as well. And I realized that there isn't much content about Indian cuisine and culture. And you know like really famous things like a saree. A saree is the cloth that you wrap women wear it very commonly in India. And there's simply not an article on the world's most famous saree style. So I was quite appalled, you know, I really wanted to contribute. And it's a personal journey, so I started discovering which villages make it, how do they make it. From which I jumped to the problems that the Kanchipuram saree industry is facing, you know, because these were weavers who were making it manually. And now because they have industrial people coming in and making it in machines, so many people have lost employment. So that kind of intricate fine work is not being done. So yeah, it was, you know, not just writing an article but also learning a lot about the Kanchipuram saree. Even though there's a neutral point of view, this is a kind of point of view, right? If you're not representing something or writing about something on the encyclopedia, it probably means that it's not noteworthy enough, which is not true. Especially when it comes to India, there are tons of things that aren't written about. While the Indian community is fairly well represented in the Wikimedia community, but the Indian populace is not. So what needs to be done is more of these people need to start coming on Wikipedia, writing about it, because there is an audience to read about it. They just don't know that it's not there or they don't know that that information can be accessed or there is something to be read about.


Hello everyone. I'm Sanjay Gupta. I welcome you on Sanjay Gupta Tech School. So today I'm going to deliver day 56 session and in today's session I will be covering scheduled Apex and yesterday I completed a QABLE Apex demo and like I didn't demo you how we can implement the test class. So in today's session I will show you how we can implement test class for QABLE Apex as well. Right. So today's session will be ending all the topics of Apex programming and from next week we'll be starting Visualforce. Right. And if you want to follow all the sessions so you can just have this session tracker. The session tracker link is available in the description of the video and from here like the Salesforce exercise sheet link you can access where all the exercises are available. Right. So day wise all live session recordings and practice exercises are available. So you can follow it so that you can improve your learning. Right. So moving forward if you have joined this session for the first time from the boot camp. So through this slide you can know about me. So I am running Sanjay Gupta Tech School for learning platform and I have total 16 plus years of experience and helping students, freshers, professionals to ram their career in the Salesforce ecosystem. So this is me who is delivering all the sessions. So so far I like this is day 56. So so far I have delivered 56 sessions to this beautiful community and from the beginning like I'm just requesting all the learners to follow all these best practices. So I hope everybody is following all these best practices. So moving forward like be consistent from next week onwards different different topics will be available in different weeks. So just join those sessions as well and do regular practice. Then you can join this telegram group where people are helping each other, whatever doubts they have. And today week 15 will be completed and from next week, like we'll be starting visual force, then we will be having two weeks for integration. Right. After that, everything will be for lightning component development. So we'll be discussing about prerequisite like HTML, CSS, JavaScript, then I will explain aura and LWC. But prior to that, I will be dedicating one week for a development project. So in that development project, I will be covering flow and apex related scenarios. So flow scenarios are already there in the project document. Apex trigger test classes as synchronous apex related scenarios I will be updating. Right. So just follow Sanjay Gupta Tech School on YouTube, LinkedIn, Instagram and Telegram. If you want to receive timely notification and want to be connected with the platform and all the important links are available in each video description. So moving forward, so follow this YouTube channel to the needy person who want to learn things in easy way. And now I'm jumping to the curable Apex demo. So like yesterday, what we did, we implemented curable Apex class. So this was the example and now I'm going to implement its test class so that you can understand. So creating file new apex class and naming it as update parent account test. Right. So first of all, what we need to do, we need to create the data. So I'm just annotating it with at the rate is test. And here I'm going to implement the test method. Right. So the name of test method. So before implementing test method, I'm just annotating it with at the rate test setup. So before implementing test method, I'm creating this test setup method. So if you remember while explaining test classes, I explained you the use of test setup method like in a test class. First you can create the data in this method and then you can query the data in the test methods. So here I'm going to create it. So I'm creating list of account where I will be adding account records because for this curable apex, like we need to pass account list and we need to pass idea of account record. So here first of all, what I'm doing in this list, I'm just adding a new account and I'm setting name of that account as parent. So this will be parent account that will be populated on individual account records. Now here I'm just iterating a loop integer i equals to zero i less than 100 and i plus plus. So this way 100 times this loop will be iterating then acclist.add and here I'm going to create new account records. So total 100 account records will be created. So test account then plus i. So this way total 100 account records will be created and they will be added into this account list. So one account will be added through this statement and rest 100 accounts will be added through this statement. Now after completion of this loop, I can just write insert acclist. So this everything is happening in the test setup method. Everything is happening in the test setup method. So this test setup method is basically creating the data which will be required to implement the test method, right? So now after this, what I need to do, I just need to implement the test method. So for that, I'm just writing at the rate is test. So here I need to implement the method. So private static void test cueable, right? So now here what I need to do, I will be querying the data which I created in above test setup method. So I'm creating ID variable named as parent ID and then I'm going to write SOQL. So select ID from account where name equals to parent. So we created one account record whose name is parent so that parent account I'm querying and it will be available at 0th index. So I'm just fetching its ID. So whenever we apply SOQL, so SOQL basically returns data in form of list. So through that list, like we already know one record will be queried because only one one account record is having name as parent. So that will be available on 0th index. From that 0th index, I'm just fetching ID field and that will be assigned into this parent ID. Okay, now after this, I need to query other 100 account records. So here I'm creating account list and applying SOQL select ID name from account where name is so I'm just writing it in new line account where name like test account. So here I'm using this like keyword which says the account records whose name starts with test account. All those account records will be queried. So here you can see all account records, all account records will be starting with test account name and then I will be added at the end. So here we are using name like test account. So all those account records will be queried, right? So this way, all the data is available. Now what I'm going to do I'm writing test dot start test and inside that I'm writing system dot nq job. Yeah. So before that, I just missed one statement. So before that we need to create instance of this class, cueable class. So naming it as update job new. And here in constructor, I'm passing account list and parent ID. Right. So we did it. We did it yesterday. If I show you the anonymous window. So we did it yesterday. So what we did, we queried the data and then we passed account list and parent ID here. So in test class, also, you just need to pass account list, which will be having all the account records. And this is the parent ID that will be populated on each account record. Now here you need to pass this update job. And then you can write test dot stop test, right? So this way, basically, I just implemented this code. So now one more thing is remaining. That is like to apply assert statement. So what will happen till here, nq job will be like creating asynchronous process, which will be starting execution of cueable epics class. And now after completion of this, that process, what we need to do, we just need to check or validate whether whatever operation we are performing through cueable epics that is actually happening or not. Right. So there's one question, Jana is asking, why did you add a single account record in line number eight? So if you remember, Jana, so here, we need to pass this account record ID, which will become the parent account that we need to populate here. Right. So that actually I have created here, one parent account record, that parent account record will be populated on all these 100 accounts. Right. So that is actually happening here. So I hope you understood this. Right. So now moving forward after this, what I need to do, I just need to apply assert statement. Right. So now I'm going to apply assert statement for you so that you can understand how exactly we can validate the result. So you can just apply system dot assert equals. So here I'm passing 100 and then I'm just squaring select count from account where parent ID equals to parent ID. So here we created one variable named as parent ID. Right. If this parent ID, this parent ID will be having one account record. If that account record ID is available on all these account records which we created under parent ID field. So on account record, we have a field called parent ID. If that parent ID field is equals to this parent ID, it means all those account records are having that parent ID populated and that counts should be equals to 100. Right. Because how many records we created here? How many records we created here? We created 100 account records. Right. So all those 100 account records will be updated through the queueable apex and here we are just validating it. So now I'm just saving this code. I'm just saving this code and now I'm just clicking on the run test so that I can show you how it will be executing. So it is throwing an error. So let's check what it is. So it is saying insert field so required field missing that is active. So while creating account record, we need to pass that field value as well. So here what I can do I can write active underscore underscore C equals to yes. And the same value I need to pass here as well. So I'm just saving it. Again, I'm clicking on one test. So again, it is failing. So let me just check why it is failing. So it is showing assert field and expected 100 and actually zero. So now it is something different. So you also try to identify mistake if I missed something. Okay, I think I just missed percent sign here. So let me just run it run it again. Yes, now it is running fine. So basically when we use like and you are using test account. So basically we need to use percent symbol because percent symbol shows like after test account there there may be some more values. It can be different for each account record. So if you use this percent sign so it will work fine and it will be query 100 record because we are updating 100 that one record like someone is saying 101 record. So basically that one record is the parent one so that we are not updating. It is actually populated on other 100. So now it is working fine. And if we go here, so we will be having the code coverage as well. Right. So 100% code is covered. So this way, this cueable apex test class I showed you from yesterday's example. Now moving forward, we need to understand scheduled apex which is also very easy. So first I will be explaining all the theoretical concepts related to it. And then we'll be seeing how we can schedule. So it is like similar to scheduled triggered flow. So you can run apex classes at a specified time. So basically if you want to run maintenance task on daily or weekly basis, so we implement scheduled apex and you need to implement schedulable interface in apex class. So this is the basic syntax. So whenever you are implementing any class and if you want to schedule that class, so that class must implement schedulable interface. Right. So if your class is implementing schedulable interface, then only it can be scheduled. And it will be having only one method that is execute. And in that method, you need to pass a parameter of type schedulable context. And then inside these parentheses, you will be implementing the code. So Jenna, which code you are asking test class. So I can share that code. Let me just paste it in the chat. I won't be able to because it is exceeding the character limit. So maybe in the telegram group, after the session, I will be posting the code. So Navin is asking, why did you return count? So basically count is to count number of records, those will be querying. So first parameter is 100. And second parameter is on SOQL. This SOQL will be basically counting how many records will be queried. So Jenna interface names you can search. So like you can find a picks documentation. So here, let's say we have a picks. So let me just search. So we don't have, yeah, here we have this one. So you can search for interfaces and yeah, so this is complete guide for a picks. And here I think you can search for interfaces where you can find details of interface, right? So we have lots of interfaces. So you just need to search them here and you will be able to see the documentation again, an example, right? So moving forward now, we need to understand scheduled apex like how we can implement and how we can test it. So quickly I'm going to implement one example in front of you. So creating new apex class and naming it as daily OPP processor. So daily opportunity processor is the name of the class. And this class is implementing schedulable interface. And here I'm going to define the method. So public void, I need to define execute method. And in that execute method, I just need to write schedule label context CTX, right? Now here I will be implementing the code that will be executing. So basically, I will be querying opportunity records. So here I'm writing as a girl like select ID lead source from opportunity where lead source is equals to null. And I'm applying limit as 200, right? So I'm just going to query 200 records where lead source is null. Okay, then for opportunity OPP, opportunity list. And here you can write OPP dot lead source equals to web. So this operation we performed with the help of batch apex as well. So this code we are directly writing in the schedulable apex and the scheduled apex will be running at particular interval, right? And later you can call a batch apex directly into the schedulable apex as well. So if you go this if you go and check this exercise sheet, so here I gave you one task for schedulable apex and one task for scheduler batch apex. So for that reference videos are available with the help of them, you can solve these and one example I'm demoing here. So we just need to query the data, then you can apply the business logic and then you can just apply update operation, right? And there may be chances like you receive nothing. So you can apply null check as well, right? So this way you can apply null check and here you can write the code. So this way our daily opportunity processor is implemented. Here we have implemented this schedulable interface. That's why you will be able to schedule it. So if I go here and search for apex classes, so I am searching for apex classes. Now under apex classes, I will be having a button. So here I have this button schedule apex. So I'm just clicking on this button. So here you will find this interface. So you need to provide the job name. So let's say daily opportunity processor. Then here you need to search for the apex class. So here it is. So we can see only one apex class because only this apex class is implementing schedulable apex, right? That's why we are able to see it. Other apex classes are not available here because those are not implementing an interface. So you can just select it. Now here we have frequency like weekly monthly. So weekly, so you can select particular day monthly. So this way you can select particular day of the month, right? And you can check multiple days as well. Then start date and date and preferred start time. So generally we schedule it for midnight, right? And start date and date accordingly you can select and days also you can select. So today is Thursday, start date and date. So this is selected. Now if I click on save, so it will be scheduled, right? Now how we will be checking whether it is scheduled or not. So you need to search for apex jobs. So click on it and here you will find. So you can see its status is queued. It is not executed yet, right? So submitted date time is available, job type is available status is available. Now here if we go, so we have this completion date. So whenever that time, date time will match, so it will start its execution. So this way you can schedule, right? So as simple, just implement the code and implement this schedulable interface, right? So if you have any questions, so just ask those questions. So Sachin is asking, is there any benefit using schedulable Apex? So Sachin, the main benefit is to run your Apex class as a particular date and time. That is the only benefit. If you don't want to schedule your Apex code, you can go with batch, queueable and future. So Jana, this will come from practice. The more business requirement you solve, the more you will be able to understand like which feature you will be using and how to start the coding. So this can be done through practice only, right? So here you can see I am giving you business requirements. So here you can see this is just a business requirement. So here I mentioned schedulable Apex, but in real-time scenarios, you just need to judge as well like which type of feature we need to use. So these type of business requirements you can use and you can just implement the code, right? If you have any more questions, so you can ask. I will try to help you out. So I'm just waiting for more questions than if there is no question. So I will be answering, sorry, I will be implementing the test class for this schedulable Apex. As soon as we can schedule tasks using flow in Salesforce. So if you go through the session tracker, so here, like when we discussed about flows, so here I showed you like how you can schedule flows. So here schedule triggered flow scenarios are available, right? So day number 30 if you go through, so you will be able to understand them. So such in for governor limit for Async Apex you can just search. So here let me search for governor limit. So we earlier discussed about it. So here you will be finding both the governor limits. So here you can see for synchronous and asynchronous governor limits are available, right? So this document you can search and I can share it in the chat as well so that you can have. Yeah, so we can we can call batch class and schedule Apex. So I already provided you one scenario for practice like how to schedule a batch Apex.  Yes, Divya, Kron expression is also there. Like right now I scheduled my Apex class through UI, but you can schedule your Apex class through Kron expression as well. So let me show you that as well. So we have Kron expression in Salesforce. So for Apex scheduler, you will be using Kron expressions. So these are something like that. So this way you will be scheduling. So you need to create an instance of your schedule Apex, then Kron expression, and then you can use system dot schedule. So this is the name, then schedule like Kron expression and then instance of your schedule class. Okay, so this is the document where Kron expression is implemented. And if you want to understand the Kron expression, so here we have this thing, right? So first parameter is second, second parameter is minute, third is our fourth is day of month, fifth is month, then day of week, then optional year. So this is totally explained here. Okay, so you can just try this as well. So I'm just sharing this link with you here and I'm just putting it here as well. So here I'm writing note, try to schedule with Kron expression. So here I'm just providing this reference document, right? So this reference document is available with you. So you can just try it and practice. Okay, so if you have more questions, you can ask. So Sunil, I already shared this, like how you can schedule through Kron. So just try it yourself. It is very easy. So in this document, everything is explained. So you just need to use this in anonymous window. So this code you need to write in anonymous window. So here you can write a class name like so our class name is daily opportunity processor. So here you will be writing daily opportunity processor. This you can understand with the table which is available in the bottom. And this will be same. Here you can just put any name, then SCH is the Kron expression variable and M is the instance that you are creating above. So if you write it in the anonymous window, so your code will be executed and your apex class will be scheduled. And for this also, whatever apex class you are using, that must be implementing schedulable interface, right? Yes, oh, yeah, you just wrote it correctly. So this is the syntax. Okay, guys, so I'm just moving forward and trying to implement new apex class for implementing test class for this one. So this is the last apex class that I'm implementing for today. So at the rate is test. And here at the rate is test. So basically, I just need to implement a method test method, where I will be implementing the data first. So we need to test schedule apex. So like you already know, we implemented it for opportunity. So we need to create opportunity data, right? So here I'm creating list of opportunity, then through loop I will be creating the data. So I will be creating two different type of opportunity records. So if I is less than 250, if I is less than 250, so 250 opportunity records will be created where lead source will be null. So here you can see we have lead source like if lead source is null, only those records will be queried. If lead sources having some value, so those records won't be queried. So here what I'm doing, I'm going to add data in this opportunity list. So we just need to create new opportunity. So I'm providing name as test plus I then stays name equals to prospecting, then close date equals to system dot today, right? So I'm just breaking this into two steps. So what is happening? We are creating new opportunity, then we need to pass the name. So here I need to use a parenthesis. So using one more. Yep, now it is correct. So new opportunity will be created. I'm just assigning name stays and closed it. Now here I'm just putting else and copying the statement as is and then pasting it. So here one more parameter I will be passing that is lead source, right? So this way data is created through this loop. Now after this what I need to do, I just need to insert this opportunity list. Okay, now I'm just writing test dot start test. And inside this what I will be doing, I will be like scheduling this particular schedule depicts. So here I also did one mistake. So I just need to use this. Okay, right? So moving ahead now here I just need to schedule. So basically for that I will be requiring a clone expression as well. So here I'm going to create it. So string SCH equals to and then here I'm writing zero space zero space zero space. And then I'm writing at risk. Okay, so here I'm writing string job ID equals to system dot schedule. Now here I need to pass the name. So process opportunities, then chron expression, and then new daily OPP processor. So here like directly I'm passing the new instance, right? So directly I'm passing the new instance like this. Also you can create it in different line and then you can use it. So that will also work, right? So this way what we did, we just created the data. Then after creation of data, what we did, we just created a chron expression. So actually it is giving some error. So I think I need to shift that chron expression inside. So line number 31 and 23. So what I'm going to do, I'm just cutting it from here and writing it here. Yep. So now that error is resolved and it is giving me more errors. Okay, no worries. I will see it later on. Yeah. So it is for semicolon. I need to use this semicolon. Now after calling this statement like scheduling it, so now what we need to do, we just need to query the updated records and we need to apply assert statement, right? So what assert will be doing assert will be just validating whether whatever changes like we have done in in the records. So those are done correctly or not. Right. So now I'm going to implement assert statement so that we can check it. So here I'm just creating list of opportunity, updated opportunities, new list of opportunity, right? So here, we need to query the data. So what we can do, we can write a SOQL select ID lead source from opportunity where lead source is web and here like we already having web. So here I'm just writing email from opportunity where lead source is web, right? So here I just modified lead source as email. So what will happen through this daily opportunity processor, 200 records will be queried and all those 200 records will be having lead source as web. So now here I'm just querying the records which are having lead source as web. So what I can do, I can just write system dot assert equals and I am just comparing it with 200. So the updated opportunity list, if its size is 200, then our test class will pass, otherwise it will fail. Okay, so now I'm just saving it. So it is giving some issues. Yeah, now it is saved. There is no issue. So I'm just removing unnecessary lines. So a test class is implemented now correctly. Now what I'm going to do clicking on run test, moving to tests tab and it is failing. So let me just check why it is failing. So insert failed. Okay, so opportunity amount we need to populate. So here what I need to do I just need to fill amount as well. So amount is required field. So at the time of opportunity creation, we need to populate that as well. Now I just saved this code, I'm just clicking on run test again. Let's see what happens now. So again, it is failing. So there may be some more issues. So we just need to open this and okay, so support for specifying both a day of week and a day of month parameter is not implemented. So actually, I just need to modify this. So in here, so in Chrome expression like here, I'm using this question mark. So if you want to understand this Chrome expression, so this table is the best way. If I take you here, so here you can understand. So in at fourth place, I'm just using this question mark, right? So like here you can use for three places, you can use 000 as well. For day of month, you can specify one to 31 or these values. Month, you can specify like this. Day of week, you can specify like this. An optional year, right? Description is available here like what does these spatial character means. So you just need to understand this properly. It will take you like some time, but it will be important if you understand. Otherwise, whenever you will be getting a chance to implement Chrome expression in any of the project. So with this document, you will be able to understand it. So I just modified it. Sorry. I'm just saving it again and trying to run the test class again. Yeah, so this time test class is working fine. You can see it is showing green tick. And if I come here and see, so it is having all the lines covered. Right. So this way you can just create. So in generally in test class, you can use this kind of a Chrome expression. Right.  So now if you have any questions, so you can just ask. Yeah, so summation admin project flow scenarios are there, but I have not implemented those. So I will be solving them while explaining development project. Yeah, so basically we need to understand the Chrome expression parameters properly. So I just provided random values for testing or demoing purpose in projects like you just need to understand it properly and then only you will be able to implement. So I hope with this way, like you are good with all the stuff related to apex programming. So we discussed apex programming, all the things, triggers, test classes, asynchronous apex. So now you just need to do lots and lots practice. Right. So home is asking one more question. Let me just take it. So back size of record is 250 and a third you provided to 200. Yeah. So some this is home. This is good question. But if you focus, so our schedule apex is basically processing 200 records on the limit is 200. So that's why I provided 200 and it is working. If I remove this limit limit 200, then here I need to write 250. So this is the catch here. Okay, so this way I hope you are good with the things what we have discussed and practice. So here you will find practice exercises. So go through that and how to schedule a batch. This is important. Practice it. Try to schedule using cron expression as well. So we have done 56 sessions so far. And from next week, visual force basics, I will be explaining and then we'll be having integration and then development project and then lightning component. So this will be the sequence for future sessions. Okay, so do more and more practice so that you can become expert. Thank you so much for watching these sessions and next session will be on Monday. So till then you can do practice at your own. So I will be providing Monday next week session links in the session tracker and I will notify you through different social media platforms as well. Thank you so much for joining this session. See you on Monday.