into the cloud. Welcome. It is the 19th, in your time zone, yes, still the 19th of June. And it is, this is Google Summer of Code, Get Cash Maintenance. Thanks for your cash for being here. Let's go ahead. Okay, what are the topics you'd like to discuss? Okay, I have written can you like share your screen so that you know, you can open the project and yeah, I'll show you the status. Okay, so here's, here is the screen where I was actually doing some further manipulating. Is this the screen you want? What would you like to see? Do you want to see? Can you run the project? Sure, you bet. So here we go. Let's bring up this one.  Yeah. Okay, great. Yes, absolutely. Jenkins. And if I remember right, you've got it already configured to run with Jenkins 2.346. And we'll need a web browser, won't we? So let's get a web browser. And eventually it will come up and localhost 8080 slash Jenkins, I think. Ah, I was right. Good. Okay. So I worked on the scheduling part, you know, scheduling maintenance tasks and adding it into a queue. But I'm not sure that is, you know, like the code is written the code for it. Can you like once go through it so that you know to confirm if it is the right way or not? Let's go through it together. That's a great, great plan. So you can now enter the crown syntax. So like just enter the crown syntax, you know, for every minute so that we can test it. Oh, every minute. Okay. Yeah. Okay. So we're going to incremental repack every minute. And we're going to, yes, I meant it. Let that be. Yeah. And I'm going to GC weekly. And whoops, weekly.  And okay, so now I'm going to save that. Oh, wait, I don't know about like, can you write it like at the weekly kind of thing? I'm sorry, can I do what? Can you write a given input as accurate weekly? Does it take our Jenkins? It should that that's that is allowed crown syntax elsewhere. So I don't know if it's allowed crown syntax in in in the parser you're using, but it's definitely allowed crown syntax here. So for instance, let's create a new job on scheduled. And we're going to do a freestyle project. Come on. You can do it. Okay, so we want to build periodically. And now when we look at this, the help it will tell us things like, oh, come on, where is it somewhere in here is the hint of the other allowed syntax. Oh, now that's interesting. I'm just sure that it was allowing daily. Just a minute. Oh, here it is hitters. In addition, at yearly annually, these okay, so let's try those. So we're going to say it's going to execute yearly, annually, monthly, weekly, daily, midnight, and hourly. And now what does that tell us? Did it give us an okay, I need to close the help now. Don't I? Okay, and it says, yes, this would have run. So next run would be at Sunday, June 19, 701. Ah, so it will run very soon within about an hour. So I don't know why it's throwing an error on my team, because I didn't write that yearly, annually then. So I'll have to check that out. Well, and it may not throw an error. Let's take a look. Let's see what, because I think you had a, what if we say here that, so let's say hourly. Save, save, save. Oh, you have to save it first. It's throwing an error in the building. Oh, interesting. Okay. All right. So, so there's, so that's, we learned something. The, the, the syntax that you're using is, or the checker you're using is not allowing the same syntax that Jenkins users are accustomed to elsewhere. I'll have to check that out. Oh, but even, even now it's saying invalid. No, no, there are other, there are other weekly hourly rates. Oh, right. I see what you're saying. Yes. I need to make it valid. So let's do it. Let's here, let's back here to, let me grab some other examples that, that are available there. And we'll, we'll paste a few actual valid examples. Oops, wrong one. So here, cron scheduled, configure. Let's go read the help. Okay. So the app, the at sign-based ones did not. Let's try some other examples like these. Ah, that's not, let's give myself a cup of or where I can copy those things. Okay. So we're going to do every 15 minutes. And this one, we're actually going to do it because you had advised, we're going to do it every one minute. Now this one, every, there we go. Okay. Every 45 minutes. And this one, and this one. Okay. Shall we try it? Yeah. Okay. And that, and that was accepted. Good. Okay. Now, and I don't remember if this is actually an every minute syntax or not. So, but So now the data has been saved internally. Like if you go to that folder, right? And with the workspace folder in your ID, you'll find the file there, the XML file. Okay. So you want me to look inside? Actually, I, it's easier for me if I just use my bio browser. Okay. So here you want me to go to the, this thing to hub, my plugins, git plugin, work, and then there's the git maintenance Jenkins plugin, the XML file. Okay. Okay. So let's drag that into our friendly local editor. Okay, here we go. So here the data is stored internally. Okay.  You can try that out also. That's also working. Okay. Good. Very good. All right. So, so if for instance, I do, where is my Jenkins? My Jenkins is right here. If I do a slash restart. Flash restarted. Oh, it won't let me restart. Okay. So if I bring up this thing and hit the enter key and of course it's windows. So it says there's a busy file. So I have to interrupt it and run it again. So now all the configuration is loaded from this file. So that's what I worked on. Oh, good. Right. So what you're showing is what you've shown now is you have successfully persisted the definition and it's, it's, it's coming back after the very good. Okay. So let's see that. So let's go manage Jenkins. Oops. Come on. Respond. Here we go. Patience. Clearly I need a faster computer. Or maybe I just need to do less stuff with my computer. Okay. Manage Jenkins and get maintenance. And there it is. Yeah. Okay. So now in terms of tracking the tracking the little things like the weekly, annually, etc. You'll do that somehow. I'll do that. Yeah, I'll do that. Okay. Because that way we avoid the overhead of issue reports in Jira. I don't think they'll help you move as quickly as you can. Great. Okay. Yeah. Yeah. I look into that. That's not a problem. Great. So now can you like schedule one job for like every minute kind of thing? So incremental repack I think is actually scheduled for every minute. Let's be absolutely sure and do a save. And then click on execute. Okay. Execute. So now, now after a minute you'll see the, you know, in the terminal and the terminal you'll see a queue being printed. Okay. Good. You'll have to wait for a minute. So exactly like 614 your time will get printed on the screen. Good. All right. Well, so then let me, are you okay? Well, there we go. Okay. Yeah. So this task has been scheduled for execution right now. Okay. The code for it is written as in the, you know, in the task scheduler file. So the cron, yeah, there. So basically if you open the cron file, the cron file, okay. This file, if you see the code there, the get recurrence period, this thing is said to run every minute. Okay. And every minute with the function called schedule maintenance task is run. Okay. Which, which checks the cron syntax whether it's valid or not. And then if it's valid, it's added to the maintenance queue. Okay. And there's not already something in Jenkins that would do this for us. This was something you had to create on your own. So there wasn't, there isn't already a scheduler facility inside Jenkins. That surprises me. It may be there. I'm not sure because when I explored, I found this part if there is another part, we could follow that. Okay. All right. Good. Yeah. So, so you're open to other. And if we find, if we find another way to do it, great. Okay. Okay.  It checks all the configuration whether, you know, this maintenance task is valid or not. If it is valid, it's added to the queue. Okay. Here I had a doubt. Okay. I created a new thread in Jenkins using, you know, the runnable class. Okay. That's logic. Is there a prebuilt way of creating a thread or can I use, you know, the Java thread to create a thread? As far as I know, you can use the Java thread to create a thread. I'd have to look at other examples to be sure, but I don't see any reason not to use a new thread. Let's, let's do some checking elsewhere. Let's see what is, what is something that, ah, the global build discarder, as it would be my example. I assume you had looked at it. Was it using new thread to construct the thread? No, no, no. I don't think it was using a thread. It used to call the build function and that used to internally do it. So I don't know how. Oh, well, so if, so it was using a build, huh? Interesting. Okay. All right. Well, let's, okay. So global build discarder. What I'm doing is looking at, okay, build the starter. So in GitHub, and now what it's got is, this is the strategy. Where is the implementation? What does that? Oh, I think that's present in Jenkins. Oh, is it, it, build discarder is part of Jenkins. Global build discarders part of Jenkins core, isn't it? Yeah, yeah, yeah. I'm looking in the wrong place. Thank you. Okay. So let's look at core. Now I don't find it. That's not attic sensible background build discarder. Here we go. Okay. This is Daniel's poll. It's been merged and here's what changed. Okay. So background global build discarder, which is an async periodic work has, has an execute method and a process job. Oh, so what it's doing is it's iterating over each job and calling process job on each job. Okay. Okay. So this is his global build discard background global build discarder. I think this uses an async, yeah, async periodic work. The reason, yeah, so async periodic work creates a new thread which runs asynchronously. The reason I was more preferred towards periodic work is because there's a timer thread in Jenkins, which, you know, every, you know, based on that, the recurrence, you know, function, it runs periodically. So I was thinking if I use a periodic work, the amount of work, you know, a task that a thread has to do is very less. So I was thinking we don't have to create another thread was what I was thinking. Okay. And I, I don't have anything to disagree with your logic. So that, that, that sounds reasonable to me. And exploring it and experimenting with it feels like the best way to decide if it should be periodic work or async periodic work. The logic would be the same. It's only about whether we are going to create a new thread or use the same thread. Great. Yeah. Okay. Oh, oh, this is, this is a reminder. We need to be sure we've got a symbol. Good. Okay. And what exactly is a symbol? What a symbol does is this allows us to use, to refer to a capability in Jenkins by a shorthand notation, in this case, build the scarters and build the scarters then is, can be put into a configuration as code definition file and used to define the settings for something so that when Jenkins restarts, the settings or when a brand new Jenkins is, is created is, is being spun up. I can have the definition already that hey, these are the things I want as my global configuration. That's actually a good one for me to check separately if, yeah, it's, this is, that is a good feature. We should be sure that we include the cheering you include in the plugin that it can be configured by configuration as code. So very good. All right. So sorry, I was, I was, I'm not being as helpful here as I should be your crew. The question that led us to this was you wanted to, to decide should we use help take me back to what the question was, you know, the Java thread or should we use a better thread in, you know, where I have to create a thread in Jenkins and link it to something so that we do the work or should I, can I create a Java thread? So I don't object to your creating a Java thread. I'm just a little surprised to see that Daniel was able to do global build discard or without creating a thread. So is that because he used async periodic work instead of using periodic work? Oh, I even, I thought of creating, like if you go back to that code, okay, which I've written, if you, you know, the reason why I, I could have created, you know, run the maintenance task in this function itself. But the reason I chose not to do it and create a new thread is assume if the maintenance tasks, a task, you know, to execution takes a lot of time, like an hour or like 30 minutes or so, then this thread would get blocked, you know, to just run that maintenance task. And, you know, this thread again wouldn't run the next minute because it would be busy doing something else. And that makes sense if it's important that we must, that this thing must run every minute. My thought was, isn't, oh, no, no, okay, right, because background, so the global build discarder is not, is not allowed to be defined how frequently it checks, right? This thing, this thing is different in that way in that it will, it will, okay, for instance, yeah, what it's defined is it will run and not more than once an hour. Yeah. Okay, all right. So you're saying here what you've got to do is you have to be sure that the task scheduler gets invoked more frequently and therefore a thread is, is the best choice as a way to, to, to start a separate thread of execution and not disrupt this one. Okay. Not block this one. And that, that seems reasonable to me. I don't have experience in this part of Jenkins, so I can't, I can't promise you that you won't later discover Mark Waite was absolutely wrong. Okay. So that was a big confusion, like, you know, should I create a thread or do I use async periodic work or periodic work? That was one thing I wanted to ask. So basically now this thread will have the functionalities of executing the maintenance task. Okay. So that's what is the functionality of this thread. Yeah. And now, so this thread is then going to execute the maintenance task. And is there, do you already have safeguards in place to prevent a create an explosion of threads? Say, yeah, yeah, yeah, I have, I have that thing. I've added it in a statement. Like if it's alive, then you don't add it. Okay, don't create a thread. So, I see. So this here is the safeguard says, hey, if something's already running, then do not create a new another thread. So this is that's how you'll defend against an explosion of threads. Okay. Yeah. Right. And this, this data's report here that you're using for diagnostics, that's reporting the state of this task executor. Yeah. And it could be that in the time between here and here, it may have finished. And if it did, it will say, okay, it's no longer alive. But it at least reports the reality. Good. So, and the thread wouldn't even be created if though, if there are no tasks in the queue, because it wouldn't make sense, right? So I added another safeguard and in the, if like the maintenance queue dot is empty. So if the, you know, maintenance tasks, if there are no tasks to execute it, so there's no use of creating the threat. So that was also added. Right. Okay. Good. Now. Yeah. So now inside this task executor, you know, thread.  So for that, I would, you know, need, so we have discussed, like, there's a get SCM class from which I can get the, what do you tell, part of the caches, but that gives me only one, what do you tell, a path. Okay. And to get that path also, I need to pass the URL of the repository. And how do I get the URL of all the repositories? Is there any way in general? May, we may have to, we may have to extend the get client to give you that information or extend something to give you that information. If it's get client or that's perfectly okay. Right now, you're saying that the, the only access method that there is to the list of caches is indexed by, by URL. Is that right? Yeah. Yeah. So then I would think what we need to do is, is add another method that lets you ask for, let you iterate the list. Yes. Okay. So shall we, shall we open it up and look at that together? Would you prefer to explore it on your own? Yeah, yeah. No, no, I wanted to see how that thing goes. Okay. So let's go looking together and let's look and get client plug in. Before I do that, let me be sure that just a minute, it'll be just moments while I, I need to get my condition set up before I bother to open it, cancel, give me another bash shell. Okay. Okay. So let me get that ready to go just a moment. Okay. So here we go. All right. I just had to see if I had any in progress work that I couldn't show on a recording. All right. All right. So let me get rid of that branch. Pull. Okay. Now. Okay. Now let's open it and we'll go do some looking. Okay. So what we're trying to find is the things that are related to the caches that are involved in see what might be a way that we could find that we could look for the word cash. Check out change law. Okay. It's gotta be. See, I, okay. Oh, unsupported command. So it must be either inside get client or inside CLI get. I thought it would be in the login itself because that client was only for execution. Right. Right. So let's go look there. Very good. Okay. So let's look here. There's a get SCM. Good. Okay. So let's go looking in get SCM, looking at the methods on get SCM. Where would I find those caches? Well, hang on just a minute while I do some other searching, let's do it this way. Okay. So abstract get SCM source, there it is has a cash directory. Okay. So, okay. Here we go. So the thing that holds the caches is abstract get SCM source. So we can certainly look here. Oh, that and that there's a, I think there's a method to get a cache for that you need the UR. So, great. So let's look. And so get cash entry get. Yes, here we go. So get cash, dir and the cash entry that it's looking for is the remote. Okay. Good. So what I assume you're going to have to do is add in abstract get SCM add another method that lets you iterate over all the caches. Yeah. So for that I need the URs. And you know, is there a way to get all the URs like all the remote? Actually, I don't think you need. So I would, I think what you want to do is all right. So notice here that there's this thing that looks at Jenkins dot get root there are caches. So this is the directory where the caches are stored. Okay. Okay. So then I don't even need this function. Right. So I can directly use that path. Well, what, what I think you would want is you want, I think we want to keep all knowledge of where is the cash stored, etc. inside abstract get SCM source. And so you would want to create a method in abstract get SCM source that lets you iterate over the caches. Can you repeat like I think you want to create a method here in abstract get SCM source that lets you iterate over the list of caches. Okay. Okay.  Right. Well, and so that, so that you're not, you're not spreading the knowledge of where are the caches or how are the caches managed beyond this class, because for instance, it's got, it's got a locking mechanism, right. And, and some of the operations you're doing, like garbage collection may need to take a lock. And so, so it may be that you, you want absolutely to, while iterating, you may say, okay, give me, let's, let's walk through the list of caches. And on each cache, you want to get a lock on that cache optionally. Another, wait, I have a doubt here. Why would we need a lock, like in the sense like how would a lock be useful? Or how would it help us?  Okay. Okay. So basically you're like, you're saying that, you know, there can be other plugins which may be using this cache. And when I am running a GC, it shouldn't, you know, those plugins, you know, shouldn't access this cache. Is that what you're saying? Yeah, that's, that's at least the concept that because Git has its own concurrency defenses. It really has its own concurrency defenses. However, its concurrency defenses are based usually on command line Git being the only thing that operates on that repository. And in our environment, we allow either command line Git or JGit to access a repository. And so my thinking was you may need to apply a lock for operations that you know are not, what might you say, that are prone to problems if there's concurrent access. Now, my understanding prefetch, for example, should not have any problem with concurrent access. You should be allowed to do prefetch without disrupting anyone, at least based on the, I think that's what we learned from reading the Gitman pages in project proposal phase, right? Yeah. Okay. So then we'll have to think about what would be needing it. So I think a GC would need it. I don't know, I'll have to explore that part, whether which one needs a cache and which one needs a lock and which one doesn't. Right. And I think you just said it very well that you'll need to explore which things do need to be locked and which things don't, because some of the operations should not require locking. Yeah. So that makes sense. I think I'll, so basically I'll add a method in this, which you know, iterates through all the caches. Okay. And you know, give me the path of that cache and no, and add a lock to it, like based on the condition so that I can learn the maintenance task. Good. Yeah, that sounds good to me. So yeah, that was something on the list.  Sure. That's so task scheduler test. Yeah. All right, so test packages, task scheduler test. Here, this one. Okay. Yeah, I wrote this function which fails one on one, because you know, I'm not able to test this function. Okay. So now I'll be needing a key. How do I, you know, fake a situation where I'm scheduling maintenance tasks? Yeah, so I think, so if you're okay, let's play with a little bit together. Is that all right? Yeah. Okay. So what I would do is I would open up task scheduler here. And at least in my IDE, it's got an option that I can right click tools, create update tests, and it will construct skeletons of the tests for me. Okay. So what it said was, and so it's inserted, the green blocks here are insertions that it made. So it says tests, it's added one new test, schedule tasks. So let's call that. And let's see. So we've got task scheduler, is this, and then we're going to say task scheduler.schedule tasks. Okay. So that now, and it turns out, we don't, we didn't need, although maybe let's take advantage, well, it's since it did this for us, I'm going to do it like this, because we're going to need a task scheduler on every single method, right? Yeah. Okay. And oh, I see. You had already had this test. These are the same tests. Yeah. Okay. Right. Because this one, you were just doing a trivial, do something, so I can assert something. Yeah. Okay. So now the question is, how do we, what are the externally visible things that schedule tasks can do that we could assert? Because the maintenance task present in that class would be private. Okay. So. Right. Yeah. And then any other fields also, I think mostly would be private. So, and I wouldn't want a method, you know, which returns the maintenance task. Okay. So let's, well, so let's, let's take, let's take a look and see what, what we could do. So let's go look at your source code. All right. So here we've got schedule tasks. So one, I guess one option, I see that you've got check is task in queue, but you've made it private. Yeah. We could make it package protected and use it to check that a task has been queued, but not make it part of the public API, just make it package protected for test purposes. Okay. Is this one that you've seen that you'll need to use elsewhere? Oh, you're already using it here. Right. So yes. So, so testing, testing that would probably be a good thing. And so at least a technique I've used elsewhere in the get plugin is say something like this package protected for test for use by tests. And then I take the private off of it. And now I can call it from my test class and, and see, Hey, is this the, Oh, good. And you showed me how to do the streaming thing. Nice. Yes. So nice use of a Lambda. Very good. So, so then if we go back here to task executor tests, oh, not tasks, sorry, task scheduler tests, this one. And, and again, I'm cheating. I'm going to use my, my IDE and let it generate the methods. So it says, Oh, check is task in queue. And I'm pretty sure that whatever IDE you're using likely has the same facility, you may want to look for it because having somebody else generate your test prototypes, at least for me is a real help. It reminds me, Oh, I should have a test for that method and that method. Yeah. Okay. So here, we're going to use task scheduler instead of instance. Okay. Now we need a real task. And that, of course, is the wrong constructor. So you'll, I think you'll have to pass a task type and then yeah. Oh, good. Right. Okay. So we're going to take a task type dot. I want to do prefetch. Yes. Excellent choice. Okay. So now, and I don't need to use the expected result thing. And I much prefer and, and I have to just acknowledge I like what's called ham crest exceptions, where we stated as assert that, okay, this one is a Boolean. So maybe that's a bad choice assert true that. Oh, but you're okay. But then first I need to create a maintain like, you know, have to add it to the median and subscribe. Yeah. Good point. So all right, let's, let's do the, let's do the, let's do something different. Let's do it like this. Right. With that. I think yeah. Okay. So we don't need to call this at all. So I've gone a little longer than I wanted to in terms of not having run this yet. Let me execute this and watch what happens just a minute. And my IDE has some configuration issues right now. So I need to go into my ID, into my command line and recompile. So the whole point of asking this question is, do I have to test every method I can or like, because some, some things are like, I don't know how do you test them if get this guy, you know, the logic to test them. Yeah. And usually, usually if you don't know how to write the automated test, it's a good hint that the logic of the thing may be too complicated. And you need to split it out so that it becomes testable components. Okay. So for example, the, for me, I, and others have different approaches, but for me, I prefer to test with automation as much as I possibly can. So that when I make changes later, I get caught by my tests if I made a mistake. Yeah. So I think I just build this function into multiples of functions kind of thing. That was, that was my assumption so that you could, so that you can test it. Now, if you, if while writing the test, you realize, oh, I can test this with the following easy steps, just write the test then. But if, if you find, oh, well, I'm having difficulty, for instance, oftentimes I may find it difficult to get to something like that. And when I find that, I, I will typically then say, oh, what do I need to do to make that so I can reach it with a test? And it package protected is one of those techniques, right? This technique is, why did I make it package protected? Only so that I could test it. There was no other reason to accept to make it so I could reach it with a test. Because then I don't have to, when, when future releases are happening, I can, I can rely on the test to help me without having to interactively check everything. Yeah, makes sense. So I, I think I'll have to go through this again, you know, try to split it into functions and check whether I can test it or try testing it again. Great. Well, and I wanted to, to, let's see there. I was, I was in the middle of experimenting with one of your other, other things, task executor, doing that same technique. Yeah, no, what I'm saying is I had done the same thing with task executor that we were just describing with task scheduler of trying to add tests for each of the methods that's exposed in the API and then use that to explore the implementation more, more thoroughly. Yeah. Okay, so this one, we say, J unit version three, right? No, no, this is J unit four. This is definitely four. Okay. Now it's not J unit five. And, and the reason it's not J unit five is this syntax right here, this Jenkins rule thing is not available in J unit five. They, they considered rules to be a something they eventually removed from J, they, they removed when they made the transition to J unit four or J unit five. But Jenkins rule is crucial here, because it's the thing. I think that would be a breaking change, right, if you do it to unit version five. Right. So, well, and, and I've used, I've used J unit five in other projects, in other Jenkins plug-ins, but you can't use J unit five with a Jenkins rule. There isn't a Jenkins rule, a J unit five compatible Jenkins rule yet. Okay.  But this one, this one I had to, I think this may have been the one that I had to add J, Jenkins rule to it in order to get it to pass. If you're okay, let's go look and see. Nope, it still didn't pass. All right. So here's, I had, I had pushed to your branch. A change, let's see if, let's see if my change arrived. Use Jenkins rule in task schedule test. Okay. It did arrive, but all the tests did not pass. You're okay if we spend just a minute finding out why. Yeah. A task, task, oh, task test. So the one I changed seems to now, now be passing. Now, if we look at the test history, there it, no, is that right? Okay. If I look at the test history graph, it shows number 17 failed five, number 16 failed three. I actually have more failures, not less. Well, that's terrible, Hrushakesh. Okay. So what did I do wrong? Latest test result shows task, task test is failing. Okay. So why was it passing on the previous build? I don't know what I broke on task test. It's, it's a different failure. So interesting. Task scheduler test was failing. So it's fixed. So, so I succeeded in fixing that. But now we've got a failing test in task test. Okay. So, so if you want, we could go look at that together, or are there other things that are more valuable to you? Okay. Before that, I have a few things. I have a few things. If you finish off with that, then yeah. So there's this thing about form validation. Okay. So like, as you've seen, I once you submit a wrong, wrong, you know, cron syntax kind of a thing. It doesn't, it doesn't let you submit the form. It throws an error on the terminal. Right. So I wanted to show notifications and all those things, you know, but I'm not able to use that design library's notifications. And this, because once I submit the form, I'll get a response from the client and this page would be loaded again. Right. So how do I add a notification to show key to show on the screen that there's an error or something like that? Okay. So let's, let's, let's experiment with that for a little bit and see if we can find something that's already doing that kind of thing for us. You know, something after I submit the form and then there's an error and then it shows. Okay. So, so, so after submitting the form, not while, while working with the form, I would think you want it while working with the form, don't you? You want to check it even before they submit the form. Yeah. But then I'm not able to like, but then assume once they, you know, enter all the details, you know, all the crown syntax data and then they click the submit button or the save button. So there is eventually going to be a request sent to the backend. Right. So I was thinking in that sense. So, so when the request request is sent to the backend, what I'm not sure what you're envisioning, we would tell them. So take me through that again. Let's, so I'm on the get maintenance page and here I've entered a definition. Now I press save. Yeah. So now if you enter a wrong syntax, like can you enter a wrong syntax in any of those? Sure. So let's put here. Yeah. And then now I click save. Okay. Even though this error is being displayed, assume the administrator saves it. Okay. Yeah. Okay. So, so if, if the administrator presses save with, with invalid input here, what are we going to do with it? I think that's your question. Yes. So, so here when I click save in the terminal, it's showing it's, there's a, it's displaying that there's an right. It says here invalid, invalid prawn syntax. Right. So now I have to, you know, so basically what am I doing? I'm read. I have to redirect it back to this page, but then I want to use that notification to show the notification on the screen. So. Ah, right. Okay. So let's, let's see if we can find, find an example like that. So the idea is you want a way to, because if you just return them to this page, if when they press save, they just came back to this page, wouldn't that already be enough? But, but then we'll then like, how will the administrator know like there's an error? Like, he would he just look at it or would they look at it or. Good, good question. So then maybe to improve the experience, what you're saying is after the save come back, you would like to mutate this page. Swear it says has a big dialogue at the top that says you have invalid syntax on this page. Yeah. Right. Okay. So let's, yes. And let's, let's see what we can do with that. So let's, let's see if there's some other examples of ways that's handled. So if I look at, let's try, well, here, let's, let's try it. Here's, here's one. We're going to enter an invalid URL for a Git repository. We're going to say rsync. Okay. So that's what it did. It just changed and said, hey, it tried the operation and stayed on the page. Okay. And if I save this, is there anything like village from saving? It does. There's nothing that stops you from saving it. It just says, hey, that's bogus. Okay. Because why I am trying to do this is because assume if I don't, if I save this internally, you know, around cross attack, there'll be so many errors being thrown in different places. Whenever I try to use that cross syntax, and whenever I'm trying to execute it, there would be errors, which will, you know, so many errors, which would, so, you know, which will be thrown. So I was thinking if I stop it initially only, you know, prevent entering around cross syntax and saving it, then I wouldn't have to check it anywhere, you know, and, and I wish that were the case. But the reality is because you'll be supporting configuration as code, the administrator could by configuration as code give you a completely invalid syntax as well. So I think I think you have to check syntax everywhere. You have to send check syntax at, at any location that accepts the syntax, right? So, so you So basically I'm checking the cross syntax at two places, one when he's when they are entering the data into the input field, and one where when they are submitting the data, you know, when they are submitting to store it internally, those are the two places I'm checking. So if, you know, so basically when you're saying as configuration in configuration as code, and can this enter, you know, like cross syntaxes, can this send it to us? Like, can they enter it? Yeah. So well, so let's I think, I think I can show you an example of a configuration as code defined just a minute. Let's, let's see if I've got one. I think I do. So here is, is that, is that text readable for you? Okay, so if we look at, I suspect that, let's see, get branch. Okay, good. So we've got ref config. So this is, this is a Jenkins installation that I maintain with configuration as code. And here are the definition files. Let's see if we can find one that has a Cron syntax in it. There we go. Ah, that's good. Nope, nope, that didn't help. Okay. Oh, so there aren't any here. Okay, let's see, where would I find a Cron? Oh, oh, no, no, that's, that's not okay. So let me do some continued looking here. Oh, I know what where we can do is, no, is there a thing in global configuration that has a schedule defined? Configure system just a minute. Okay, schedule, fair, the priority sorter. Oh, yes, here we go. Maven scheduled, oh, this is a terrible example, but all right, Maven scheduled repository cleaner. It does not support configuration as code. So that won't help me. Let's see. So, so I apologize. I don't have a configuration as code example that would show it in context. I can, I could attempt to create one, find a plugin that does configuration as code and takes Cron syntax and, and make sure that I can share that example with you the next time we meet. Yeah, sure. I think that would Okay, good. Yeah. So, because when I let's see, well, maybe actually, maybe, maybe there is some, okay, this is mostly agent definitions. And this is the read me. Okay. And this is the security config. And these are tools and the tools certainly don't need scheduling syntax. Okay, unclassified seems like a really likely one to have it. Just a minute, Roushakesh, if you can stand for me to look for just a little bit in case we can find an example priority. Nope. Sorry. Okay, I don't have a good example of, of a configuration as code setup that includes Cron syntax. No worries. So about the architecture of the form submission. So would you like, how would I proceed with that is what I wanted to move. So do you want, yeah, do we want the error being displayed like a notification or is this fine? I think, I think for now, just, just display it here and accept that whatever data they stored, we will put there, even if it's invalid input. Okay, but I think that would cause a lot of, so basically what exactly is happening right now, if you enter a wrong invalid Cron syntax and click save, right? It's just going to throw the, you know, error in the terminal, but it doesn't storing internally. So if you go to that work file, no, there's nothing present there. So all this new data hasn't been saved. So that would, you know, prevent us from having any problems anywhere, you know, somewhere else whenever I'm reading the Cron syntax. Yeah. So, well, okay, let's see. So, so I think there must be, there must be a way to do what you're suggesting. So let's, maybe we can find another example that will let us, because what, what I think what you're saying is it will be much better for the user. If we, for certain classes of mistakes, we tell them you're not, I did not even save what you, what you asked for because it is so broken that I didn't save it. So let's, let's take a look at this and see, see if we can find some examples of a case where something is so broken that we refuse to store it. If you think of it in that way, it would be easier for us also to implement it because if we store an invalid, you know, Cron syntax, then whenever we read it to execute it, we have to keep checking whether that syntax is correct or not. Whereas before only when he's, when they submit the form, if we check it, you know, it'll be a very good safeguard was what I was thinking. Yeah, just, I'm not, I'm not sure that, that your, your desire to not have to check it as far as I can tell, you'll get input from users. And anytime you get input from a user, you've got to check is it valid syntax, don't you? Yeah. Oh, can you repeat what you said? And so anywhere that the code could receive data from a user, you have to check that the data from the user is valid, I think. Yeah, that, that I'm doing it. Okay. And that is storing it in the file. Okay. And, but do, do I have to check it when I'm reading it from the file as well? I think so, because, because, well, I would think that if you don't check it from the user, then you might have people like me who store their XML files into a source control system and change the XML files themselves. Oh, okay, make sense. Okay. And I say people like me, because I am exactly one of those people who does, who does exactly that. And I, I sometimes store my XML files because they're, they're readable data files, I can use them and make them do things that I want. Okay. So, okay, that could be an issue then. So whenever I have to read or whenever I'm executing, I'll have to check the, you know, whether the crown syntax is valid or not. Right. I think so anyway. So let's, let's test. Okay, here we've got a malformed URL reference. It's still malformed. If I save it, it allowed me to save it. And what did it do with it? It, it retained it. So, so it, so the, the general pattern seems to be use, take whatever the user gives us, show them a warning in this red text, but don't reject, don't discard their, their input, even if it's, even if it's wrong. Yeah. Okay. So I think I'll follow that pattern then. All right. Do you, since the two of us are still here, do you have other questions? I guess one question for me to you, are you okay? If I, as a matter of personal pride, go find out how I broke more tests, attempt to, attempt to make changes. Are you okay if I push changes to your code to, to fix that? Yeah, it's fine. I have still two more questions. Okay. I know it's going to be late. Yeah, but it's fine. So two more questions. One thing is I added permissions to that jelly fine. Okay. So, you know, for, so that administrators only can use it. But I don't know whether it's working or not. Okay. I think administrator is by default true or something whenever I'm developing the plugin. So I'm not sure whether, you know, is it only for administrators or are everyone able to use it or not? Well, and so let's try it. Let's first, let's first enable security. Okay. So what I just did was I enabled security. I'm now going to sign up. Okay. So, and it says my password is only moderate strength, nonsense. That's a very good password. Okay. So I just created myself an account. And so now I am an administrator. So first check, I can do get maintenance. There it is. All right. Now I'm going to log out, manage Jenkins, get maintenance. Let's fix the mistake I made save. Did it save? And yeah, it saved in the domain. So as far as I can tell, it did save. So I think that since I am not logged in, let's see if I can let me check. Maybe I've got wrong permissions. Let's check the security configuration because it may be that I've got it. Okay. Authorization is currently, anyone can do anything. Let's change it to log in users can do anything. Okay. So now I'm logged in. As a logged in user, I'm going to change this to 42. Oops. 42 is the wrong value. So I'm going to change it to six. Save. Okay. So now I'm going to log out. And now, oh, see, look at this. It's already proving that it notice manage Jenkins isn't even there anymore. Okay. So just a minute. Now I've got to find the URL to manage Jenkins so that I can, so that I can check that it, okay. So this is the URL that I need. Okay. Remember that URL. Okay. Going to log out. Now I'm going to enter that URL. And hit says, uh-uh. So I don't know if it's your security checks or someone else's, but security checks have blocked me from doing that. Because I've added the permissions, but I wasn't able to test it. So I don't know. Well, and so did you, based on what I just showed you, are you comfortable now that you know how to do the configuration to test it? Yes. Yeah. I'll try it once again. Okay. So just to replay one more time what I did. What I did was I went into configure global security. Okay. And I'll try to post the recording of this really quickly so that you can look at the recording. Then in security realm, it defaulted to none. I said use Jenkins own user database. And I intentionally allow users to sign up because initially there's no user defined. And with no user defined, I would be locked out and have nothing I could do. So I allowed users to sign up. Now I can, having done that, then I also changed instead of authorization, anyone can do anything, make logged in users can do anything. Now, if you wanted to get even more sophisticated, there are other techniques, but for me, logged in users can do anything already shows the example. So did that help? Yes, yes, yes. That helped me. All right. You said there were, were there other questions that we need to Last question was regarding the size of the pull request or whatever. Oh, yes. Oh, yes. Absolutely. Particularly in this, in this mode that we're in right now, right? The mode we're in right now is you need to be able to rapidly explore and experiment with things.  Oh, that failed. And it doesn't matter. You just keep doing that. And eventually we'll probably get to the point where we say, Hey, you've reached a point where this looks quite good. Is it time now to rework the pull request to become something you're ready to submit? And then you may, you may squash merge or you may, you may say, Hey, I want to rebase it. Or you may, you may say, I'm going to just take the contents of the files and create a whole new pull request that just says what I wanted to say. Oh, yeah. This, this very much. And I think, I think you've got it correctly noted already as a draft pull request, don't you? Yeah, yeah, it's a draft request. So, so that's already telling me and other maintainers don't merge this. So, so you're, you're just fine. The, the, the technique you're using works very well for me. I was, I was really grateful that you had done it that way because it allowed me to see, Oh, here are some failing tests. And I could see some of your thinking without having to have a meeting with you to talk about what you were seeing. Okay. So, yeah, okay. That, that, that, that's fine then. I'll go, I'll proceed with that, you know, method only. And again, once again, like the plan, like this Wednesday, the next meet, what I would be working on this, I'll create a, you know, a way to iterate through all the cash is present on the Jenkins controller. I would schedule the already scheduling is done. I'll try working on executing the maintenance tasks, you know, using the get client plugin, a basic version. So I think that, that is what I will be working on these two things. Excellent. That sounds great. Now, when are we, when are we next scheduled? Is that, let's see, tomorrow? Oh, two days. Okay, Wednesday, Wednesday. Okay. So if you, if we need to meet sooner than Wednesday, let me know. But, but congratulations on the progress you're already making on, on how things are going. Thank you. Anything else, Ruchakesh? One minute. I've written everything on the book. So great. I think, yeah, that's it. That's it from I think. Okay. All right. So and I still owe you the, how do we do online help for this? Because I want a question mark right over here. And the question mark. Yeah. It's one small thing. The button, can I put the terminate button beside the save button? I don't know. I feel that, that UI looks better, but I'm not able to do anything with that. In general, I don't think so. Well, let's see. Actually, let's, let's ask, that's a very fair question. I think there is, let's, let's look at the UI samples that are available, because in the design library, I thought that there were some buttons that we could see. So here's the buttons thing. All right. So this, no, that didn't help me. App bars. Yeah. Okay. So I think what you want is, well, maybe, yeah, maybe, maybe what you want to do is consider an app bar that goes at the top of the page where one says save and the other says temper says terminate or one says save. Where is that? Sorry. How embarrassing. Yeah. So one says save and the other says terminate or cancel. Now, now let's, let's see if how that, that might, there, I think there are things like that already in Jenkins that are consistent that way. Yes. Like the save and apply here. Okay. Right. So, so this kind of thing is, is certainly a valid, a valid technique, although I think this concept of the app bar may be better suited for what you're, you're wanting to do. I think the app bar would be on top, right? Right. Which, which for me is actually better, right? Because, because the, the, the user does some data and then they hit the bar at the top. Now, let's see if we got other examples in the maintenance tasks like configuration, configuration as code has a rather old UI. So this one definitely has two buttons side by side. So we could, I tried looking at its code and then I couldn't replicate the same thing on my side. So. Okay. All right. Okay. So, so you, you very wisely went looking for someone else who's done, done the same kind of thing. Good. Very good. Excellent. And this one has just the save and apply. Okay. So, so I think and managed plugins is a whole different user, user definition UI. So how about and this one just has save and apply. Well, should we ask a different question? Should this be save and apply? What does terminate mean? Oh, a dominate. Oh, yeah. Executor's to run and dominate is to, you know, stop running. Right. Okay. Okay. So execute, execute truly is, yeah. I think, see, for me, I think this belongs at an app bar up at the top. Where exactly would it come like on top on in the UI? Is it like beside the design? I think, I think it would appear. I think it would appear. It would, the way it would render would be like this where you would say maintenance tasks. And then there would be a button up here that says save and another one says execute or switches to become terminate. Okay. So I think, yeah, that looks better. I'll experiment with that as well. At least, yeah, by all means, try it and see what you think. You may say, no, Mark, this is totally unacceptable. But for me, the whole set of checks that you're doing here would actually be quite well suited by having a save, execute and terminate across the top for get maintenance tasks. Okay. I'll look into that once. All right. Any other questions? That's it. Okay. I think that covered it then. And thanks very much, Ruchikesh. I will try to get the recording uploaded within the next, I hope, 12 hours. It needs some time to get it processed. Thank you. I'm going to stop the recording now. Thank you.


Hello everyone. I am very happy to be here today with the Vice-Premier-Ministre Freeland and the Minister Anand and Jolie. Before I begin, I want to acknowledge the discovery of possible burial sites at the St. Joseph's Mission Residential School in BC. Today we're thinking of Williams Lake First Nation and everyone affected. As always, we will be there for Indigenous communities as they do the difficult and important work of conducting searches. This is a critical part of confronting the tragic legacy of residential schools. We will be there to support healing and get closure for communities. This week, we had very productive meetings with the Council of Ministers. We discussed our priorities, the fight against COVID-19 and the importance of vaccination and our actions for a strong economic reliance. We're going to keep doing whatever it takes to support provinces and territories, small businesses, frontline workers and families through this pandemic. At the same time, we're focused on the big things that Canadians sent us here to do – grow the economy and the middle class, fight climate change and stand up for global issues important to Canadians and to the world. We also discussed the legislative priorities for when the House of Commons returns next week. On the economy, we have known a strong economic reliance up to now, with 108 percent of the lost jobs that have been recovered. There are still challenges to be overcome – the cost of life, the destruction of the global supply chain, the labor shortages. So we're focused on delivering results, like reducing childcare fees to make life more affordable for families. Whether it's through growing the middle class or supporting small business owners, we'll continue building a strong economy for years and decades to come. We're also continuing our leadership on climate change. To ensure long-term growth, we need to be competitive in the clean global economy of the future. We've been helping industry cut pollution. We're protecting lands and oceans. We're helping Canadians afford electric vehicles. And we introduced a price on pollution right across the country. But now is the time to move Canada forward even further, even faster. We need to seize the opportunities for all workers and businesses, including workers in our resource industries. And we continue to need to take action to keep Canadians safe from wildfires, floods, and heatwaves. Whether it's to fight climate change or end with COVID-19, Canada continues to do its part at home, but also on the international stage. We continue to do our part, too, when it's time to attack the other areas in which the world community is facing. Of course, Ukraine has been an important subject during our meeting this week. With rising tensions and unwarranted aggression, Canada will be there to provide ongoing support to Ukraine so that it can defend itself. Let there be no mistake that Canada, alongside all of our democratic allies, stands strong for Ukraine. And everything we do is motivated by our pursuit of de-escalation and a diplomatic solution. Canada, with its democratic allies, is the leader of Ukraine. All of our actions are aimed at reducing tensions and finding a diplomatic solution. Today, to support Ukraine, I have authorized the extension of the Unifier operation for three years, and to expand this training mission. Today, I have authorized the extension of Operation Unifier for three more years, and the expansion of this training mission, as well as immediate support. This is a $340 million commitment. As part of it, I have authorized the Canadian Armed Forces to deploy 60 personnel within days to join the approximately 200 women and men already on the ground, with further capacity to increase the number of people on the ground up to 400. This also includes a provision of non-lethal equipment, intelligence sharing, and support to combat cyber attacks. Our ongoing commitment to Operation Unifier guarantees the Canadian Armed Forces continued support of the security forces of Ukraine so that Ukraine can defend its sovereignty, security, and territorial integrity. Minister Anand will travel to Latvia and Ukraine to visit with our forces in the coming days. I want to thank the Canadian Armed Forces members of Operation Unifier, who continue to do exemplary work on the ground. Additionally, Canada is providing up to $50 million to deliver development and humanitarian aid. I want to thank Minister Sajin for his work on this. Of course, this support is in addition to the loan of up to $120 million for Ukraine we announced last week. We continue to call on Russia to de-escalate and engage in meaningful dialogue until a peaceful diplomatic solution is reached. This is something I mentioned earlier today in my discussion with President von der Leyen of the European Union. Canada remains a steadfast friend to Ukraine and will continue working closely with the Ukrainian government and partners in the region.


Hey guys, it's Nate, A.K. The Foot Account, and welcome back to the channel. We have some new pack code to look at today relating to team of the season, because I think some of this pack code that we saw added yesterday on Twitter, and some of the leaks that we saw is giving us some insight on what promo might be after-foot captains, but yet before team of the season. Basically what kind of content we're gonna get starting this Friday into next week. I think it's gonna be very similar to one thing that we saw right before team of the year, kind of like that team of the year warm-up series promo, where they try to get us to save up a bunch of packs that they will release through SBCs and objectives. I wanna take a look at that. I also wanna take a look at yesterday's content. Gabrielle Palista and the Canala Showdown, which by the way, this dynamic image is top five in the game for me. With the microphone, that's just sick. That's super duper dope. Unfortunately, the card's not that insane. Maybe with an upgrade it'd be good. Canala's note looks pretty solid. We'll talk about that and the rest of the market movements from the game yesterday and what to expect today on Wednesday with a brand new team of the week coming out, which is supposed to feature, it is leaked to feature Cristiano Ronaldo. So a once-to-watch upgrade, a couple headliner upgrades, also leaked for today on Wednesday with a new team of the week. And we'll talk about potential content that we could see, including big boy icon moments SBC. We'll talk about Vera from yesterday as well. So if you're excited for team of the season, and of course hit the thumbs up on the video and of course subscribe if you're new. Let's look at this pack code, right? This was information released yesterday. So it's not really super duper new. These packs were added to the code yesterday right before the content drop on Tuesday. And again, this just in the moment of seeing as earlier yesterday on stream really just brought me back to that team of the year warmup series promo because a lot of these packs to me seemed like they're either going to be released during team of the season or right before team of the season. So that we can stack them up, save them and hold on to them and then open them when team of the season actually comes out. Let's go over these packs, right? We have a five times 83 plus rated rare players pack which contains five gold rares from either Premier League, League one, Ciriot, bonus Liga and La Liga rated 83 or higher. Now this to me does not seem like a league specific pack. It's just top five league, five gold rare players and they're all 83 and above. That's a pretty dope pack. Again, it seems very, very similar to that team of the warmup stuff that we had earlier. Then we have some other interesting packs in here and 81 times 11, 11 gold rare players from La Liga from Premier League. And if we go to the second page, you'll see also a bonus Liga and Ciriot for the 81 times 11 pack. And then we have a 75 times 15 pack for League one. You're like, Nate, why did they not do an 81 times 11? Well, I think they didn't do that for League one because there's so few League one rares on this game. Of all the top five leagues, League one has the least amount of gold rares. And if they did an 81 plus, that'd be like the chances of you packing a like half of that pack being team of the season cards from 81 plus would be incredibly high. So I think they had to drop the rating, but they did put in more players. So that pack is going to be very interesting as well. But I really think these are going to be packs that your EA is going to release this next week and that we're going to kind of have to save up. Then the very last pack was a five times 85 plus rare players pack. Again, five 85 rated players from the top five leagues. So why does this get me thinking about packs that we're going to have to save, right? Also, we have a double 80 plus pack from the top five leagues as well, right? All of this content is related around leagues. And if you think back to that team of your warm up series promo, which was this loading screen right here. And then these are some of the SBCs that we had. We had an 83 plus attacker upgrade, 83 plus midfielder, 83 plus defender. You guys remember all of those, right? The 80, there was like an 81 times three. There's an 83 times three. There's an 85 times three. All that promo was was EA putting out SBCs to drain coins off of the market and to get us to stack up packs. Everybody loves to stack up packs before a huge promo, right? What would be different about doing this sort of thing with these sort of packs right before team of the season than that was before team of the year? So, I mean, yes, of course, some of these packs might drop during the actual team of the season promo themselves. Maybe they'll release them before and during the specific week that a certain league is released during TOTS. Like if you take a look back to last year and we looked at this in last night's video, there was an 85 plus times five upgrade that was out during a lot of league talks last year. So I would not be surprised if maybe like the 83 plus times five or the 80 plus times two or the, you know, 85 plus times five. I would not be surprised if that's a recurring SBC that we would see during all of the weeks of team of the season. But I also think it would be one that we would see before team of the season as well. And I think that if EA's adding these packs into the code right this week then that even pushes the agenda more for me that it's going to be more related towards a pre-team of the season type of content type of vibe like that and not so much during team of the season. But that's just kind of me thinking through a lot of things again. I don't know if we'll see a warm-up series or like a team and see them warm-up series loading screen today. They released one of these loading screens before team of year on Thursday earlier this year. So either today on Wednesday at the earliest or tomorrow on Thursday we'll probably get some more information about what this promo is going to be. And we had a lot of other content during that warm-up series promo. But again, the main aspect that we're starting to think about and we'll wait to talk more about it until we see more confirmation on what content and what our promo this weekend might actually look like. But with that pack code being added that of course gets us thinking a lot about a warm-up series promo kind of like that. Now also there's a few other leaks and kind of keeping along the same thought train with like a warm-up series promo with a lot of SBCs. Last time we had the team of the warm-up series there's a lot of flashback SBCs. Now since we've had the end of an era defo that has been released and we have a couple other end of an era that have been leaked recently, Aconfeno and Aguero. We had a new leak yesterday for Musa Dembele, the former Tottenham Hotspur player which actually this card could be really, really meta in-game in my opinion. I know it would be really hard to link but EA would probably make this very cheap and they would give him a crazy stat boost. These are predicted stats by the way but this would be a fun card to use 100%. Really high dribbling. He's got four star skills. He probably deserves five star for being honest for how he actually played in real life. In my opinion, of course, being a Spurs fan once again but could there be some sort of like end of an era twist to this promo? We've had Aconfeno and Aguero leaked and now Dembele, you know, maybe they'll be releasing some end of an era SBCs throughout this next week before a team of the season as well because again, if you think about it, right? With all of these pack code all of these SBCs that are being leaked and even the content that we're having right now it is all centered around draining coins from people's clubs before a team of the season. So that's just kind of one thing that we're thinking about. We'll see if we have any more leaks, any more content that looks like it might be dropping that would suggest that that could be the way that this direction is going on the game. Now speaking of SBC fodder and coin drain let's talk about the market right now. Yesterday the biggest news, of course was the Patty Vieira SBC. Now we finally got one of the big boy moments. I mean, Terry Henry is a pretty big boy moments SBC, right? His card was like 2 million coins. The SBC is 1.5 mil. It's a W. Vieira was released yesterday. It's about 1.7 to 1.8 mil to get that Vieira SBC done which is the exact same price as his card on the market. So you're like, Nate, why is this good value? Why is this a deal? Well, let me tell you why. Personally, I think that Vieira being 1.7 mil on the market is really, really cheap. I know icons are not as hyped this year but this Vieira was literally 2.2 million coins before the leak of his SBC came out. So before his price started dropping because of the leaks he was 2.2 mil and now he's down to 1.7. The SBC comes out at 1.7 to 1.8. And again, since we have the 81 plus player pick since we have all of these packs that people are gonna be opening in the next couple of weeks especially if you can wait two weeks and start crafting during the season. You know, even with player picks that are out right now if you're gonna try and craft that way you're gonna be able to get Vieira done for a lot cheaper than 1.7 million coins unless you just went out and bought all the fodder off the market to get him done right away. So that's why I think the Vieira SBC is a W. Now speaking of more of those icon moments SBC leaks today on Wednesday, we might have another one. We honestly could have another one. Foot Sheriff says here with the Vieira SBC I expect to see Cantona and Maldini in the next days. Now notice he's leaving out a couple other cards that have been leaked. Beckham was leaked at the very beginning of this whole thing still has not been dropped and Zedan has also been leaked. But again, if you count down, we only have two more days of the Foot Captains promo and two more days we would expect of daily icon moments SBC. So who's it gonna be? Between those four cards that we have leaked who's it gonna be for these last two days? Is it gonna be Cantona, Maldini, Zedan or Beckham? And as long as we get two of those three big boy like you know of the big four that I mentioned there Cantona, Maldini or Zedan I think that would be awesome and I would really really love to see how they would price those SBCs. That's just something to consider as we kind of talk about market and SBC fodder and content today on Wednesday another big time icon moments player SBC or two of them could be coming still as a part of the end of the Foot Captains promo this week. So that's just kind of one thing to keep in mind as we're getting close to the end again of this promo. Now speaking of the market right now as well it's all about the low tier fodder. If you guys have invested in SBC fodder the low tier is what's doing the best, right? There's no denying that the 85 plus player pick that was dropped yesterday of course it's a bit of an expensive gamble. Technically if you look at it I don't think this is a really worth it gamble but so many people were packing Foot Captains out of this yesterday. It does cost about 60K. So you need a pretty high rated car to make your money back or you have to pack a Foot Captains item but a lot of people were doing that yesterday. 84s are up and to date again on Wednesday you're gonna have the 86 plus double upgrade SBC once more it's going to be repeatable as it comes back again today. You can see the timer on the refresh comes back today on Wednesday. So that's one thing to watch out for so probably some more coin drain and also we haven't seen a campaign bag player pick this week and like we mentioned last week we had a campaign bag player pick that included cards from Foot Captains Team 1. So you would, I don't know if you would say hope but we would assume that they could potentially do that again this week but instead of have Foot Captains from Team 1 they would do Foot Captains from Team 2. So we will have to see what EA Sports goes ahead and does with that today on Wednesday. That could be some supposed content not leaked nothing along those lines just maybe more of an expectation on how EA might want to run things right now on this game but a lot of things on the rest of the market right of course fodder is up and we can take a quick look at this. If you guys have invested in fodder you know the only thing today that we might be a little bit afraid about would be lightning rounds because again we talked about Wednesday lightning rounds do happen when they release big players in team of the week and we have a leak today for Kimmich to be in team of the week which would mean a headliner upgrade but also Holland and Cristiano Ronaldo being in the team of the week this week especially for that Ronaldo card it's actually three weeks in a row with a big name player Neymar and Bape and now Ronaldo three weeks in a row of a big player in team of the week like a headlining star that we most often don't have so maybe they'll run lightning rounds today maybe they won't that might hurt your fodder a little bit but if you still have this stuff I mean look at the 84s man all 84s are about to be 5,000 coins a piece again with the 86 double coming out again today and just a small percentage chance of lightning rounds I wouldn't be like really worried to sell this stuff off and if you honestly think about it as well if next week is going to be a promo built around these packs and we don't have any cards dropping in the game and no lightning rounds fodder for next week would probably keep going up right that's going to be the whole point of next week if it is a promo like this so I wouldn't be really in a hurry to sell your SPC fodder cards at the moment because I honestly think there's a lot more upside here than downside that's just my honest opinion on this SPC fodder as a lot of SPCs are going to be upcoming either today or later on this week and into next week and that's a lot of demand and maybe not as much supply because there probably won't be a promo team in packs with lightning rounds so that's kind of my stuff with fodder informs the same way if you bought informs I know a lot of you guys like Nate I bought informs like I bought Darwin Nunez and he's not really going up in price that much just just just hold on right because it lists for lazies right now and just hold on because at the moment we are we're just waiting we're just waiting for that SPC for EA to drop that will rise these cards up if we get a campaign bag player pick today that would probably require two informs then you would see some informs rise up in price but again fodder is a safe hold in my opinion because unless EA do something super crazy it's it really can't go up that much because there's not very much supply on the game now even though there's been some coin drain a lot of prices have been pretty stagnant too on your meta cards and a lot of these cards are just bouncing around a lot I bought a Unberg at 6 no way what is the price right now 700K these hero captain's cards are so rare it is ridiculous right I traded with a couple more Mario Gomez yesterday I bought a Unberg for 600K coins flat I'm going to list this guy up right now for 690 yeah I'm going to go ahead and do that because I mean he went down a little bit yesterday as EA tweeted out there was compensation but it didn't really impact prices that much Dempsey went down a little bit I think Dean Italian went down a little bit but EA compensated people that packed the wrong version of the hero captain's cards that first weekend of hero captain's team one but it really yeah like Dean Italian went down like 20 or 30K Unberg went down a little bit after he bounced Dempsey went down a slight bit as I mentioned but it didn't really impact the market that much and a lot of the rest of the market was just you know a slight bit of movement yesterday like I bought La Croix for 508,000 coins I sold them at 570 in a moment of rarity just about an hour ago he's 550 right now I know that some cards are still pretty low again we've been using this paqueta card is such a great example for how cards have been moving paqueta is still like what 460 470 so yeah he's still in that low range but maybe up a tiny bit other cards have risen up a little bit other cards are still really low you know it's it's all just a mixed bag of prices right now on this market because the content hasn't been that insane and some people have decided that they want to go out and buy cards because they're happy with the prices and I understand that but if you're buying a card at all for like an investment or for a post team this season rise just make sure that whenever you buy the card this week whatever time frame you choose just make sure it's on a down day right Sunday Monday were down days some people bought these cards have slightly rebounded until then I think there's going to be more down days and I'm going to keep reinforcing that fact with this new pack code that we have as well into this weekend we have team this season loading screens primarily tots vote on Friday there's going to be a couple more time frames where we have panic selling and down prices down trends on the market so just keep again holding out for that but with these cards being so rare it does create incredible opportunities to trade like you see me here with these cards that I've been trading with the phone I got yesterday like 2010 209 or something like that 210 Diaz I got right after Liverpool scored at 205 about these at 200 he went up to like 230 I sold them too early so there's a lot of fluctuations you can do with rare cards right now because a lot of people in these times of the game they just sit there with their coins and they do nothing and that makes cards even more rare when there's not as many people buying and selling and again look at the number of live transfers 1.7 mil right now that is really really really low so it is an opportunity to trade with those cards on the market right now because they're rare they fluctuate and all of that good sort of stuff now let's talk about Wednesday content just a little bit more again though the leaks for the team of the week today really mean to me that's that's going to be the focus of EA's content Holland Ronaldo and we also have a Kimmich right I think Kimmich's card is already been going up because he's going to be getting a plus 2 I believe because he's going to get a inform today that will be 92 rated but also Bayern have achieved the win streak of 4 wins in a row so this card by the end of today might be 94 rated which it might be if you look at his cards statistically and give him a plus 2 stat boost it might be the worst 94 rated card in the game I'm not even kidding because 94 rated overall but he will have no stats he will only have two stats probably that are above 90 rated maybe three if the defense gets a plus 4 that's pretty bad he might not he might not even have 80 pace either so anyways that's besides the point but this card is already up so everything about Nate can I go buy this because it's getting upgraded he was 80k now he's 116 I know that for a fodder perspective he's going to become a 94 rated card so for fodder that's very interesting and Lewandowski's 94 is 100k so I would probably say even in that aspect it's not worth the buy if you bought into one of these hopefully it rises up a little bit more today and then you can cash out before the upgrade happens that would that would be what I would do right now take the safe money on a card like that but also with a Christiana Ronaldo in team of the week that's going to mean that the ones to watch is going to get a cheeky upgrade this this 92 Ronaldo has so many 92 rated cards it's crazy but he's going to get a 93 rated informed today that's going to push this ones to watch to a 93 as well and I think this card yeah he was 500k before the weekend he scored all those goals of course getting united that win and he was 890 862 even earlier tonight he was 849 always 839 right now hold up hold the phone this guy was 900k if this is actually sitting on the market I might have to try to snag one of these for a little bit it be a risky flip but I would sell this 100% into the hype is that 839 sitting there 875 alright I'm going to let that sit and see if I can get like a like a bid or an undercut on that because that might be a risky flip today that would that would pay out because you can see people are starting to list these you see that somebody's listening these overnight trying to get some sales on them trying to get the coins because this card is going to get upgraded today but I would 100% still sell it in the hype with these cards to get upgraded that's the best policy there but if we get a low enough price we might be able to flip that so that's kind of what we're looking into for today's content on a Wednesday and again as I mentioned watch out for the loading screen and you know a loading screen would probably bring some hype depending on what it says on it what it shows and with the pack code that we have seen in the in the leaks today it'll be very interesting to see and follow what the market does but again in general the market is just very stagnant I've been looking at a couple cards they're still really low this Vinny Jr. still really really low he was like 720 at his absolute lowest that was like a really crazy low hour 730 right there on a bid like you know that's a card at 730 I am like okay that's that's way too low and I will buy that and I think that's a good price before a team this season even to sink my coins into that card as looking back on some of his graph so again just continue to watch the market watch these cards because they do fluctuate which makes them good for trading but we're gonna have some more panic again we're gonna have some more prices dip this weekend or even depending on what content drops maybe even a little bit before then so again just keep scouring the market watch these prices and you'll have great opportunities to get in on a lot of cards and there's gonna be a lot more conversations coming up this next week because as we start to see the vote for Prem Tots for Bundesliga Tots in the next basically week today by the way on Wednesday you're voting for a community team this season ends so that'll be interesting to see because that stuff is going to be you know done as well so get your last minute votes in I believe it closes at 6 p.m. today that'll be the end of the community Tots vote so we'll see what EA goes and does with content today on a Wednesday will be live streaming it on Twitch if you want to check that link always down below in the description and my pack stash is just continually growing I don't know if you guys are doing the same prime gaming packs were dropped yesterday and I think actually I'm about to get kicked off the servers because EA tweeted that they're doing some sort of random maintenance today from 3 a.m. to 8 a.m. UK time so as you guys are watching this video you might not even be able to get on FIFA so I don't know what's up with all these maintenance issues that they've been doing it's like twice in the last two weeks not a fan but good luck if you're getting your last few games in for rivals I am so ever so close to that elite division need to get it for the player picks this week just to get those elite rewards get the better packs as well so that's going to be the video for today boys if you did enjoy it smash thumbs up on a common level if you have any questions and subscribe if you knew it's been made to put account I'll catch you guys later peace


Hey everybody, let's make some kalakas. Okay, so we had already built the altar And now we're gonna make some decorations for it. So Obviously the kalakas is a huge symbol for Day of the Dead. Schools are everywhere during Day of the Dead So I've got this one here that we can sort of model ourselves on and some of my colleagues have made little schools and stuff earlier That we can sort of show you how hopefully years will turn out. Okay So out of the kit that you got you're gonna need some of the clay.  Okay So we'll do that if you didn't pick up a kit any white clay will work We just got this Because that's what we've got and you can even do another color of clay if you feel like it. It's your school. Do your thing On the instruction sheet you'll see that the instructions for the kalakas are on the back So we'll follow those. Okay, so the first thing we want to do is open our clay packets should have done this before, huh?  I'm gonna put these two together to make a big one Just so that it's a little easier to see on camera This you want to manipulate a little bit in your hands squeeze it around a little bit So it starts to warm up and soften up and then once you've got it nice and soft and warm We're gonna start to form the actual school. Okay The reason that schools are such a big part of Dia de los Muertos is because originally the goddess of death presided over all of the festivities Dia de los Muertos has been celebrated for over 3,000 years and so in the time of the Mexica, the Aztecs Their goddess of death, Micteca Siewat Was actually the one that presided over the festivities and since she was the goddess of death and her image was a skull Now we have kalakas and skulls all over the place for day of the death So I've got this nice and soft and warm and now you're gonna use your hands to roll it into a ball It doesn't have to be the most perfect ball in the whole world as long as it's a nice ball Got a ball.  My mouth this could take some doing you may have to try a few times, you know, maybe the first time you do it You have to roll it back into a ball because it takes a little a few tries, but it doesn't have to be perfect I mean really it's it's your skull You can even if you want use the edge of the table to help mold it a little bit Sometimes I do that if you want a nice sharp edge. I feel like For what I've got going on today This is a pretty good kalakas shape. So as you can see now It actually looks kind of like a little bit of a dog, but either way Now you've got the skull shape on the top and the shape at the bottom where the mouth is going to be and the nose, okay? So now what we're going to do is we're going to form the eyes So in the instructions it says to take the tip of a pencil and poke holes where you believe the eyes are going to be You may have to rotate the pencil like this a tiny bit to make the holes of the eyes a little bit bigger because obviously just a little The eraser end isn't going to be big enough to where you actually have eyes But as you can see with a little bit of manipulation and a little bit of rotation You actually end up with some pretty good eye holes in this kalakas So now we have the skull part the mouth part the two eyes And what you can do is actually take that tip of the pencil to and form a little nose in the middle of your kalakas If you need a little bit of a sharper point you can take the tip of the pencil to try to shape that a little bit into more of a triangle and Then just use the other the eraser end to sort of smooth it out So now we have a little triangle in the middle there for the nose Some eyes and then you can take the very tip of the pencil and if you want trace some lines Across here to form some teeth Because every school has teeth, right So I just did two lines across some lines down and then another line in the middle there to form some teeth Take your time with this to the clay is going to be pliable for a long time So, you know if you're not happy with how it turned out Smooth it out ball it up again, and then start over. It's not a big deal But now you can see that we've got our two eyes the nose the teeth and now we're going to decorate this Okay, while the clay is still wet is when you really want to press in the jewels if you want to use jewels or sequins And then we're going to let it dry and then after that we'll use markers and the glitter glue to decorate it Okay, so I'm going to take these two blue jewels because they're both around and I'm going to put them over the eyes and press Them in a tiny little bit so that the clay catches them Press them in a tiny little bit so that the clay catches them try not to ruin the work you've done with the nose But as you can see now I've got these two cool Jewel eyes I'm going to take this other red jewel. It's a square and I'm going to put it at the very top of the kalaka To give it a little bit of something on this forehead And now We're pretty much there Normally, I would let this dry for 24 hours before I tried to decorate it with markers or with glitter glue But because we're shooting a little video today. It's not a big deal Next up I'm going to take a marker and I think I'm going to draw some little designs I want a little bit of a you know Thing here along the sort of cheekbone of my kalaka and do the same thing on the other side So as you can see, I've just got a little bit of a line there Maybe I will take my green marker Because I don't have any green on here yet and draw a little bit of something around the nose Maybe some dots, you know This is really where you get to be as creative as you want so I've got some dots around my nose maybe you want to take a marker and actually Do the lines for your teeth so now that we've got them in there We can actually take a marker and really make them jump out You know and this part you want to be kind of careful because once you make the marker marks There's not really any taking it back You know, I've got a little teeth now in there Maybe my kalaka could have gone to the dentist a few more times in his life Who knows and I've got this and then now to add a little bit of glitz I'm going to take my glitter glue and maybe I'm going to put a little bit of glue I don't know.


As a leader, Lisa combines warmth and empathy with a laser-like focus on our education plan. Lisa has a very strong sense of moral purpose and passion for what students need. She's constantly thinking about what is it like to be in that classroom and how can we enhance that experience so that a child wants to be there and is engaged in their learning. When you focus on the learning and we learn more about student learning for those students who are vulnerable, we learn the supports that everybody could benefit from. I think what I love the most about what I do is working on behalf of community and to be able to do that in our context with the support of our board and our families and our students makes it super inspiring and invigorating work.