I think we've been spoiled this season a wheel of mud.  We had a beautiful 96 overall Matthew Jude on who got yeeted and Kevin Green is now back in We also had a bit Tonya who really wasn't that impactful So I'm not too mad about that But at least we have a fresh clean slate and we can start brand new and not worry about anything I'm not wasting any time today boys Redemption tours always get me really amped up. I'm just antsy to go in and get a win right now And that's what I want to do. We're gonna get most fear team wheel, which is actually is that how we got you Alexander I think this is how we got you Alexander So I'm hoping we can continue the lock in the same strand. We're gonna get the giants. I wish it was Thanksgiving I could have gotten your bro peppers, but let's see what they got. There's a Logan. Oh, there's a Lawrence Taylor. Oh my god Okay, we got another linebacker is 89 speed.  The only thing is without his power up I don't think I can move in the left outside. So he'll stay at right outside and Fred Warner will go left outside But this is huge.  I didn't even know that card existed. Honestly, our second wheel spin is going right now I'm gonna get him slide in the lineup. I am pumped about that Our next wheel spin is going to land on a team wheel Now if I lose this one, I'll be so sad, especially after resetting the season I need to get a win our second time on the team wheel. We have the giants first Let's get a gnarly team here. The saints new arland saints. There's a jonathan villman 95 overall There isn't 94 chimera, but I'm riding the james robinson train, dude Urban mire would want me to there's not too much that I really want if I can be totally honest But there is a cameron jordan left and and I'm sorry louder milkers But I think cameron jordan is a little more sensitive to this team than you also This is a jackpot which means I can do the power up So take cameron jordan's power up here and uh get moving 93 cameron jordan I don't know. I mean we gotta try something new. We've been struggling these last three or four episodes We got to get on a hot street 81 speed 93 tackle 93 play break 93 block shed 94 power moves. Okay. I like this huge Defensive upgrades. We're in 86 overall nothing like our former glory of last season But we do have 93 cameron jordan and 93 laurence taylor. Let's hope that's enough to finally get us enough I need some confidence right now man. I'm down bad. All right challenge Also, I could complete the challenge real and salvage one of these players at the very least Wow, I have no confidence right now. Shit We need to hold our opponent to less than 175 yards passing to put that in perspective was darin waller on my team and I lost Aaron waller had 203 receiving yards last game by himself and I lost. Okay, so this is a difficult challenge Metcalf Jair and debon white toxu sharp. What do you got buddy?  It's super fun I'm serious because last game the last three games.  But I guess 2k has the problem where people like overall cheese, right?  I have beaten people with a team that looks like this That's pretty much how the start of wheel of mutt goes, right? I think b coming across should be wide open Randy moss. I had to hold them to less than 175 yards passing It's technically true that if he rage quits, I would also get a rage quit wheel I had a challenge with now. I kind of just feel bad.  He got up so fast.  I saw him drop. I thought I had him for sure Get a rifle one to damian harris. Wait, we need james robinson touchdowns We need james robinson touchdowns It's such a win-win if he rage quits we get a rage quit spin if he doesn't rage quit We didn't get as many touchdowns as we want james robinson. This is exactly what we need All right good Blocking on the edge james robinson freaking tackles. He's got the overall for it now Gonna go james robinson inside zone Great. Wow walks in that is one upgrade for james robinson. We'll see if he stays in this game or not Little play action. They're all over lemar.  Ooh little past interference never hurt nobody dk mech f is on defense I do not know why can we get an int with dk mech f? Oh nice throw He just beams one up To the galaxy. Oh, get up. No shot. We were All right, let's see if that's a rage quit that is the rage quit challenge We'll complete rage quit wheel one touchdown james robinson awesome start to this season So one pack from the store for our challenge wheel nick bolton jack doile Are any of these helpful a slightly better kevin green? I think that is a better right tackle also just by a little bit Ooh, I should have taken jack doile.  We need a backup tight end macafrey 87 macafrey It's kind of a cool bull jason pierre paul and it's not a good legend.   How much is robert hunt? How much is that fullback dude? Dude, then I have to get rid of gape neighbors, but I think robert hunt is like less than 50k He's 38k dude. I'm sorry gape neighbors. I'm sorry gape neighbors. I have to do it robert hunt Dude, this guy made the coolest play this year.  He technically can get his first ability, which is literally basically nothing 82 overall james robinson. We'd love to see on the squad buddy. We keep moving him up robert hunt is in Now we go for one more wheel spin. So following a rage quit a quick one like that We get one wheel spin and we hop into the next game.    We just got the training store jackpot We get three of any packs from the training store. This is like a triple challenge wheel There's the bonus players.  How much does that help us? He can go to detackle. Okay, coles Campbell 91. It's not a 90. So that's solid our heavyweight player Is haven't stopped season two that guy wants to say on the squad and don't make it happen No matter what our flashbacks player will we get an offensive skill position? We do it's another player who's seen some daylight before aj green. It's bangles prime aj green That's why it's flashbacks right now not cardinals. I want to sell the game and I don't know what route I'm supposed to be running aj green. Hold on.  So yeah, right and coles camo can't really happen But uh, I feel like he'd be a good detackle.  I don't win this game.  There's like 50 things out here. It's like a 2 chance. No, it's one and 50 to the power of two It's incredibly unlikely that we'd get that twice in a row either way I'm gonna go with it again because we didn't get to play.  Who's he got if I can figure out who's got on oh right here Let's go right here. Let's go right here The check down the checky. Oh reggie wane. Okay. I take it back. It's not it's not it's not No way that's bad pass No shot.  We have to make this tackle. Nice spin I wonder if we can make this stop. Is this up the middle robert hunt? Yep. Yep Oh, you can't go love there, buddy.   I love this play.  Ooh, okay, waller.  Oh, I'm gonna get it into him early We'll just go inside zone james robinson He's waiting there with ebb and bush Oh, robinson is gonna take it in. I'm not going for two. I don't want it to be a two possession game Let's give you guys for here. Uh, the left side cross is probably open. Oh good stop. Let's see what he goes for here Probably a deep corner The crosser right here. I've got it. Get on the qb Campbell Oh, that's not a sec either if it's not a sec. It's a bumble. Are we saying he got that off? I'm expecting a corner out out of kyle pits and I'm gonna follow it myself. Oh, it's not. Oh my god We're right there fourth and ten. That's the stop you need to win the game. He is chewing clock.  It's fourth and five.  He comes up with one of those wants a season Oh, we sack stafford.  What are you doing? He's crumbling before our eyes We might be back boys. We might have our mojo back. Let's dial it back in. Let's think about what we gotta do We gotta hold on to 175 or less passing yards. I can't tell you what he's at right now because I don't know There's no way he's at 175. He has one touchdown We go damien harris underneath. Let's not have a sad drive here. Let's convert for sure Look at metcalf Oh, I hate that animation. Okay, if you use or that you won't see this so i'm fine with that Yep. Yep. Yep set him up. Oh and a great tackle right there. Gonna go double underneath You gotta have somebody right Oh, no, that was actually so open. I just threw that guy who's open in the middle of the field I'm hitting with his own sauce. He sauce me up with this earlier Can we get him?  All right, the game ain't one yet. It's certainly not one yet. It still looks good I just covered the end zone here.  Oh my god friend water has three sacks. Let's see what he goes with Play action for sure. No shot. He really runs it again. Fourth and goal He is dedicated to the run unbelievably dedicated to the run fourth and goal We really can get a goal line stand here. He cannot be running this ball. Okay He's gonna throw underneath.  I was standing there. All right, first the time Let's go score. Uh field goal puts me up by nine. So that's huge too It's gonna die for or keep it real sketchy.  How did you just walk through? I bought seven against three. We're going for it. This is huge I'ma lose the game if I don't get this right here. We don't get this. We lose massive Ice the game now. We just hang onto the ball and don't shoot ourselves in the foot and we'll win here We're gonna go peak zone bubble.  I'm trying to remember how he got the two point on me. Oh, he got it just like this Hey Fred Warner with his fourth sack and six tackle. He might be the mbp today Although we do have a devin white an a jay or alexander pick six So it's hard to say That's mine We are just flooding him right now All right before he quits 150 yards. It's 150 yards passing. Let's go. We held him to under 175 Thank god. I needed to check and I couldn't what's craziest if he completed that pass I would have lost the challenge wheel too doesn't that count as a rage quit He just went to dashboard soon. There's only six seconds left in the game big We are two and oh no two and oh to start this season challenge wheel complete And we have two upgrades for james robinson You know, I'm gonna do a 10 times get a gold player It is technically a pack that you can buy with coins So jivan hard grade and we lock in those three players, which is huge. We do get an elite roquant smith You think he'd be better than kendricks? I doubt it. Hendricks is too good We get a team of the week. Damn. These aren't that bad 85 tyus bowser I do think kendricks is still better. Love my linebackers right now, dude How hard did fred warner go four sacks, dude? What galen rager?  I should have quick sold you and then our final one is a 79 plus It is an elite quandary digs 88 overall that was a huge push We needed that so bad after a really tough season We have two upgrades for james robinson here over that two touchdown game I can't believe we got that last second dude james. I was the king of these last second touchdowns He's at 96 overall with 84 speed. I think he could finally get a pretty good ability. I lied. He still can't get Shit well no egos reach for it and how many touchdowns we need boys I think we really need like three or four more four more touchdowns If we get four touchdowns the next game james robinson is a max that I can finally use this 95 that I've been looking at for So long. I love how it looks mac. He had a big game all the boys played really well today I love you boys. I'll see you in the next episode and uh clap cheeks. I love your peace


Hey, what's up guys welcome to our trending reviews. So you may notice here I've got a lot of plugs on my table now I'm gonna be talking to you about Wi-Fi home plugs So this is essentially smart home Wi-Fi plugs that you can control using an app And I just wanted to see some of the use cases and how useful they are around the house So let's get straight into it I've been looking for a mirror and I think I found it in your vibe She's been looking for a reason Right, so this is the VTEC home smart plug. It's controllable via Wi-Fi One thing I like about this one is that it also comes with a USB port Which a lot of the Wi-Fi plugs on Amazon right now don't have there is a few out there But I just wanted to see how useful these are now having a USB port is useful if you're charging your phone For example, you can just turn that on and off while you're leaving it somewhere separate using your phone But you can also control this using Amazon Echo using Google Home or even using if this then that so Let's go ahead and pair this and see how we can use it now Just to give you an idea of how powerful this plug is it comes with 250 volt power and it gives you an output of 2200 watts so let's go ahead and pair this and see what we can use it with So I'm gonna plug this in here now the box comes with a user guide on how to set it up using your phone So I've already gone ahead and done that it's very easy You download the VTEC smart home app and then you register your account And then you just pair it using the button that comes on the front of this So there's a power switch on the plug itself, right? So the first thing I do is turn on the plug and the power switch will start blinking green and then you can start using it to Put any plugs into there and then start using that through the app So what I've done here is I've got a plug here for the nano leaf light panels, which are there behind me So if you haven't seen the video of me setting them up, I'll leave a link in the description below for that So let me go ahead plug that in so It is on at the moment So I'm now going to use the app to actually turn that on so you can see that something is plugged in There's a solid green light on the actual plug here itself So what you do is you go into the VTEC smart app, which you can download from the iOS or the Google Play Store And I've set this up with something called the Wi-Fi plug, but you can give it any name you'd like All I need to do is just hit that switch and it should turn the lights on as such And you can see how quick that was once you've switched it on It gives you a little blue light there on the power to showcase that there is something that is being powered on using that plug And then again, I can just press that to turn it off There you have it So one thing I really like about this is also compatible with Amazon Alexa if I go ahead Open up the Alexa app if you go into skills and Do a search for VTEC you should find it. I have already got it installed It's this one here Now you can just basically use that as you do with Philips Hue Lightings or any other voice-controlled appliances around the house and just call it the name you've given it in the VTEC app. So I'm gonna show you an example. I Have my echo dots here and I am going to turn that on using my voice command Alexa Turn on the Wi-Fi plug Okay, as you can see it's detected it.  It's quick and easy to set up and so far I've been using it for about a week and I haven't had any problems with it So I'm just gonna go around and show you some other use cases around the house that you can use this for Lighting is a really good option and probably the one that you'll use it for most But you can use it for things like the TV your kettle in the kitchen So I'll go ahead now and give you a few clips of using this around the house and hopefully you find it useful and Let's take a look All right guys, so that's about it. I hope you found that really useful So I'll leave a link in the description below on where you can find out more information about the VTEC smart home plugs You can buy them for consumer use you can even buy them for business use if you want to use it around your offices If you've got some warehouse or you work in a building where you want to use these in multiple places Then you can also do a batch order of these so VTEC are an awesome company. They do a lot of smart lighting as well So do check them up. I've got all of the links in the description below So if you have any other questions, then let me know. Otherwise, I hope you subscribe I hope you like this video and I should catch you guys next time. Take care


Even the lack of will power to help humanity is a sick and sinister form of violence. The violence of war is understood by everyone. There is hardly a family which has not been victimized by the effects of war. What a nonsensical and cruel way to try to resolve conflicts. We have come to realize and understand the broad dimensions of violence in our society. The problems of racism, poverty and war can all be summarized with one word, violence, which seems to be fashionable in our society. But we do not stop this madness. We will suddenly destroy ourselves and the whole world. Far too long, far too long, far too long, and we won't be silent anymore.


Rym sounding force social theory. We have a series of exciting occasions planned. A day on the anthropology of play amid the blossom of May, infrastructures, the leaves begin to fall and hospitality in the runup to Christmas. The batting order for this afternoon is long and distinguished. Broadly, play will be divided into two halves. Fabio Gigi will introduce and chair ystafell, a David Moss will do the same for the second. There will be a break for air and thought around halfway through, and we will aim to close it around 6.30. Unfortunately, we spent all the money last night on the wine reception so there are no refreshments. However, there are merchants both to the east and west of here who will provide refreshment in exchange for cash. Promotional copies of the book The Gift were sent for this event by the University of Chicago Press via the good offices and safe hands of a well-known international courier firm. It's the one with the provocative slogan The People Network. The package was unfortunately intercepted and held by customs at Stanstad Airport. The courier firm phoned me to explain it was not possible to receive anonymous gifts, let alone anonymous gifts from overseas. Gifts, the caller said, had to be from people and people with names.


Thomas Wayne Matthews is accused of stabbing his mother, 54-year-old Joy Matthews, multiple times in killing her. She was found dead in her home on November 28. Matthews is now being held in the Crowland County Jail awaiting a court hearing at 1.30 p.m. next Monday in Cass County. Matthews was previously charged with three counts of second-degree assault and one count of fifth-degree assault for a carjacking incident outside a bean-a-bar located less than a quarter mile from the home of where his mother was killed. Matthews was arrested in that incident and was in jail when authorities found his mother dead.


My name is Robert Ficalia. I'm here to talk about policy governance with Oskow. The first pro tip I realized as I walked to the door, long titles don't fit well on these boards. So I've shortened it. Just a little bit about who I am. I'm the co-chair of the Kubernetes Policy Work Group. I've been working for the last several years with the CNCF tag and the Kubernetes SIG security. I do have a day job and in that job I help companies through their SOC2, HIPAA audits, and things like FISMA and CGIS FedRAMP. And in that journey, that's where I encountered something we'll be talking about today, Oskow. And then in my copious free time, I do play a lot with machine learning and especially with graph databases. And you'll see some of those touch points in the presentation. Just a quick pitch for the Policy Work Group itself. We started 2019.  So Big P is kind of the human readable, human understandable policy concepts. And Little P policy is that configuration policy. More if you're in the DevOps and working in manifests and Kubernetes, these are the types of policies you're probably referring to. We have created a CRD and we're working on a cap for that. That is aligned with Oskow. And I'll get into what Oskow is for those of you who don't know. And that helps standardize the output. Our CRD and cap is to help standardize the output of various configuration and policy checking tools and policy enforcement engines. So you can get a consistent aggregation data structure. We've done several white papers working on a governance white paper. And some of the folks in the room I know are contributing to that. And there have been some open source dashboards and adapters for the various scanners and policy checkers. So more to come. We are working as best we can with NIST and trying to do more with Oskow in Kubernetes and provide real world examples. And of course, many of you might be aware of a common expression language cap that was recently, I think it's alpha, maybe it's beta. Anyway, it's a new expression language for admission control in Kubernetes. So we're definitely trying to drill down on what we can recommend around using that, best practices, patterns, et cetera. So let's jump into this talk though. So all of you are probably familiar if you're at this talk with basic policy questions. So these are questions that you probably deal with, especially managing a team or interacting with auditors or compliance subject matter experts. These are the type of questions you might get at that big P policy level about your Kubernetes cluster or even your infrastructure as code or infrastructure broadly.  There's this lack of trust in what they see, what the data they're presented with is, the documentation. And so this is a foundational concern for how can you build a governance program around your policies and controls, which we'll get into and build that trust so that they can trust how you're presenting the system to the auditor, how the auditor can trust that you're giving them the correct information and vice versa. At the lower level, the Kubernetes level, those configuration policies are where you see a lot of the tooling that you've probably seen at the conference. You're talking about checking admission control, you're checking configurations against baselines like CIS benchmarks, you're checking resource limits, perhaps you're even looking at cost controls, all expressed at the Kubernetes manifest level in some way or form or operators and other ways to automate that. You might be interested in what your workloads are doing in aggregate and how you're isolating those, how you're defining network policies around those. You may be interested in verifying the identity and contents of those workload images. So these are the policy, little P policy issues that we'll be wrestling with. And then again, I'll call it that last as Kubernetes itself is deploying Kubernetes and deploying infrastructure as code and is becoming kind of a meta provisioning or meta admin entity. There's that kind of bootstrapping process and then kind of the ability to meta manage things. As Kubernetes itself becomes the control plan for other control plans. My basic view of how I look at the model here is we're gonna stick to that declarative configuration idea that Kubernetes brought to the forefront wasn't the first but has certainly arguably been the most successful. And I apply that in the realm of compliance by comparing what you might be able to do with GitOps and what I have seen done with GitOps versus what a traditional GRC is the de facto reality today. So I'll talk a little bit more about what that future state might look like. So obligatory slide on what OSCAL is. If you're here, you might know it a little bit but OSCAL is an initiative from NIST. They've been developing a standardized schema for expressing controls. So these are configuration checks or requirements at the framework level for what you must do as a system owner or a system implementer to make sure that you conform with something like NIST 853. It's not necessarily specific to NIST 853 or any particular compliance framework but they are NIST so they started with that. And it has a broad acceptance in the US federal government and even elsewhere in healthcare, high trust is also based on NIST 853. So it's a good place for them to have started and they essentially layer on different schema models, a catalog of all of the controls that you might need to apply to your system. A profile, we'll talk about what that is. Component model is kind of the functional things in your system, the elements, the subsystems. You have to coalesce all of this into a system security plan. And today, before things are all get ups and automated, a system security plan might be a thousand page word document that expresses all of the diagrams and all of the controls that you have collected from your catalog and your profile and verbose human descriptions of how all of those controls are implemented referencing other documents, referencing technical specs, referencing things that only the subject matter expert might be able to express. So one of the goals is to put that in machine readable format and then allow organizations to exchange that internally with auditors, reuse that system security plan to get authorizations to deploy a system. And then quickly, just auditors have to be able to assess this. So you need an assessment plan and then after you've scanned things, you're producing an assessment result, essentially a report. And then you'd have to track your risks. So they have a plan of action milestone. So those of you familiar with the government led con-law and activities and know and love poems and managing those risk logs. The Every Osco file has a hierarchical set of elements, lots of linking across different elements and they have a universal unique ID that is essentially the identifier that you can link across components to. And you can add various supplemental Rata in the back manner. So when you kind of merge Kubernetes policy, both kind of the big P and little P policy with Osco, you get essentially compliance as code. If you can express your system in a machine readable Osco form and you can merge that, we'll talk about various ways, merge that in with your policy as code and all that is very traceable. Now you get compliance as code and you have a governance structure that is standardized and reusable and shareable and auditable. And just to call out, the policy report CR that I mentioned earlier, we aligned that with Osco and Red Hat and IBM contributed some code to extract from that an Osco assessment report. Those of you might be familiar with platform one out of the DOD, they extensively use Osco and Kubernetes and they've got a lot of GitLab examples of Osco for various CNCF or Kubernetes related projects. Call it some of the folks from Defense Unicorns who are working on open source as well, both with a tool they're building in the Coverno open source engine. And then myself and a number of the CNCF projects are open sourcing more Osco and more tooling around Osco and we call that sledgehammer, state local education, government enterprise and healthcare. So not necessarily specific to government but highly aligned and likeness will be focusing on this 853. And I've got a link at the end of the slide to that for those who are interested. If you don't know why you would need to manage your policies, then you may not have tried to run a Kubernetes cluster under a compliance regime like FedRAMP or FSMA. Over time, these policies change, the requirements change, incidents happen, vulnerabilities happen and so you have to be proactive in how you govern and create and curate these policies. Reacting to that, it just amplifies the problem. And so especially if you're talking about making changes to kind of a steady stream of vulnerabilities, you're never gonna catch up. I think, again, situations almost on a daily basis where folks are trying to exchange information securely and is that again, sending an Excel file or sending a Word document, sending YAML or JSON, I mean, this across boundaries, across agencies, across organizations who may or may not have different levels of clearance. You know, this is a real problem. So, you know, having a standard format where you can exchange over APIs is very important. I guess last point there, I don't have to convince anybody that, you know, it's much more cost effective to identify where your policies are gonna need to change and control that change early in the process than later when you're trying to operate under, you know, time pressures and cost pressures and everything has to be reported out on those monthly con loan calls. Yeah, and policy at large, it gives you consistency. The policies code gives you guardrails. I think most of you have seen this and there are various reasons that you want to centralize, control is the wrong word, but centralize governance of those policies so that you have consistency across your workload, identities, your access, and then again, this notion of having a continuous assessment of those controls and those implementations. And a number of other things here, all the interest of time, skip forward. And then I think one real world problem that I see often is that, you know, as their communities clusters grow, certainly the apps in those clusters grow, you know, the challenges become exponential and policy itself reduces that and kind of bends the curve, but policy governance taking that to the next level really kind of helps you wind up that complexity and control it in a more linear fashion. And if you're, I kind of think of that, maybe not exponential growth as I've looked at real world complexity grow over a number of clusters, it's more like a Fibonacci growth curve, but you kind of twist that by meta managing your policy, you can hopefully get into a positive spiral. This was just a quick kind of textual heat map that I put up. Just the idea being that governance of policy, policy itself has different utility at different time and I would point out that, you know, there is some very obvious negatives as you're going through the early phases, right? You're gonna take a hit on the ability to deploy things quickly by having to reason through all the controls that apply, by having to map this to different frameworks, by having to build that security in at the beginning, obviously it will have benefits on the tail end, especially as you start talking about sec ops and incident response. But it's not always a silver bullet and it's not always fun. I'm gonna let everyone take a deep breath and kind of channel their inner bob before I show you what I'm calling the compliance canvas and we'll dab and take from the pallet as we kind of work through this mess. But at a high, high level, you kind of want to understand your system from the user view. So, you know, on that left, you've got the mission, how are we gonna accelerate this? You know, then we have to worry about our threats and I'm gonna talk through each of the different policy ops that we observe as being essential and make sure that we cover at least some high level. It's gonna be impossible to go through all the deep dives and talk through various concrete examples and everything, but I'll try to call it a couple. And then on the bottom, you know, the substrate is, you know, as OSCAL tooling becomes better. So whether it's through the policy work group or some of the other open source projects I mentioned or commercial tools, the tooling is gonna enable the generation and consumption of these various models, the catalogs, the component definitions. We'll talk about different variations of that. And then ultimately kind of that system security plan, really system model becomes, I think, the central governing resource that unifies everything together. And in terms of security operations, those, you know, the assessment plan, assessment results, that's where you're gonna kind of live on a daily basis. So I'll try to connect all these together as we move through the rest of the presentation. I would, you know, remind everyone, probably everyone here has this experience that this is a journey, you're not gonna go from zero to everything in one step. Folks who try to do that often find out that it kind of implodes and you have to argue for trying again. So let's talk about these essential ingredients that I've called out. So first and foremost, you have to collect and curate a policy library, right? And this very much maps to your control catalog, that's an OSCAL artifact for enumerating all the different controls and different families or groups. And we'll talk a little bit more about the profile, but essentially it's a tailoring of the different controls that you might have under different frameworks or for different systems or for different use cases and you can parameterize that. The current benchmarks like CIS, even some of the more cloud specific benchmarks are useful fodder for starting this curation process. They've typically mapped all their cloud specific or Kubernetes specific controls to NISC 853, EKS, AKS, Google config, they've all done some mapping to NISC 853, but more broadly they've mapped it to other control catalogs, be it PCI or others. So that's a great way to kind of bootstrap your catalog review process and start using the tooling to generate OSCAL catalogs. And then in those control sets, you're gonna obviously look at preventive controls, detective controls, I'll have a little bit more about the kind of threat modeling around that. And ideally, again, getting back to that idea of GitOps versus GRC, all of this is being managed from day one in a Git repo, you're managing PRs to change the OSCAL catalogs to manage your profiles. And there may be some challenges with Mono repos for those of you who love those. I don't recommend that folks to Novo create policy from scratch, copy and paste when you can. There are various strategies for this, this should be maybe commonplace for Kubernetes resources or manifest themselves. So there are different mechanisms of the policy engine support, the policy languages, and then there are different API and tooling frameworks they can use with those. I'll also show an example of how you can kind of use generative or transformation code to kind of create OSCAL on the fly from one of those policy engines. And of course, there are many other DSLs or you can use Python or other things to generate your OSCAL.  And we'll talk about parametrization next. So those profiles, remember, selections of specific controls and then you're parametrizing those so that the variables are not defined statically, those can be defined at deploy time or even at post-deploy. And so in support of that, all of the major policy enforcement engines and languages support some form of templating with parameters. So gatekeeper as a constraint template allows you then define constraints that invoke specific parameter values. Coverno has rules that support kind of open API V3 and OCM, which is open source cluster management project, has policy templates as well. Now that you've got kind of all these templates and parameters, you've got to kind of bind it together. That's what I call policy assembly. So you can map controls. And the example I'll show you is kind of mapping it to threat indicators. So you can annotate your controls with threats. You can then annotate your policies by mitigating different threats. And then that way you can kind of use that to bind the two together. You could do things and projects like GovCar and others have kind of used keyword regex or search and replace or even NLP to match up kind of descriptions of your controls, description of your system and kind of do that mapping. And they might add real world threat indicators from real systems and kind of build a scoring rubric, build a heat map of which attack patterns match which components and which mitigations. So that's another option for kind of building an automation framework to generate your policy to control mapping. Let me just see if this will cooperate just to show you kind of what that could look like. So here, those of you who are familiar with Rego, it's from the open policy. So essentially just, you can think of Rego and OPA as transforming one JSON to another JSON. So here, for example, you might have your control catalog and this is very kind of demo Oskow, pseudo Oskow I'll call it. But this is kind of a typical JSON look for what a control might look like. And then what we've done is broken it out into different components. And some of those components are functional components but some of those components we actually define as security capabilities. So there's a good publication if you've never read it, NISTIR8011 goes in a great detail around this but you're defining the capabilities, the security features that you would need to implement. So encryption could be one, RBAC could be one, right? Checking integrity could be one, signature verification. In this case, you have something like preventing unauthorized containers. You would connect that to different threat IDs or TTP name, hopefully you can see that. Mitigation or defensive techniques like execution prevention. And then you'd map that up with your controls. So let me just go to the next set. Here's where I was talking about kind of mapping with heuristics or you can use different types of modeling for threats but you're going to want to define in Rego your different threat scoring, that heat map and then you can actually express how you're doing that threat mapping in code. So here you're looking, now this is fairly demo hard coded but you can easily call this from external data or call an API but you're looking for a specific set of TTPs and you're matching that up to the security capabilities and controls and then you can classify that further into is this a protective control? Is this a detective control? Or is this a responsive control? And then you can map that to your particular framework. And then after you have that, where is the, sorry. Yeah, you can add some validation rules. Oskal, this was fairly new. I think in the last four or six months the validation rules has become a new part of the schema. And then I think if I run this, let's see. Yeah, so here and now on the output side it's spitting out what would be components that you would insert into your Oskal, typically as a component model and then ultimately will generate a full SSP in the next step. But here you're describing how you enumerated the protect, the respond, the different rules that were triggered and then what the threat coverage might be and you're feeding that into the SSP. Here you're mapping those control implementations based on those scores that were generated in the previous step and then you're making sure it has the right amount of coverage. And then this should produce, yeah, now we've combined the security capabilities that address those different threats with different levels of scoring with the functional control components who needed those controls and now we've created our control implementation in Oskal in this bottom output. And so it kind of maps it all the way back up to the control ID. What were my big P policy requirements? What rules did I use to actually determine that this threat and this capability match that control? And then I get an actual Oskal readable definition of that control implementation and then at the very end you put all that together. You can actually use that to generate your assessment plan. And so this again as another Oskal artifact gets you to the audit phase where now you're defining how am I mitigating those threats, how are those controls providing that implementation and how as a tester can I write validation rules to support that. And I just as an aside, that is the one cool thing about Rego that I like is it can generate JSON from JSON. It can generate Rego from Rego. So just something you guys might be interested in in other use cases. So let me go back to the palette here. We talked about those profiles and base and parameters. I think the thing to call out all of the languages and engine support, some sort of variableization, parameterization. But again, managing the variables gets very complex very quickly as well. So while it helps bend that Fibonacci curve, it can quickly get two out of control. I wish there was a silver bullet answer for that. I think it's something we still wrestle with because I've seen templates that are just nothing but variables. And it's like how readable is that, how maintainable is that? You obviously want to do policy validation like any other coding exercise. You want to do local tests, Coverno, Opa, Gatekeeper or do some dry run. I'm sure Qboard and others do as well. Conf test, all these have some sort of local test capability. Unit tests, usually in a pipeline. That way you're consistently, before you're updating your policy, distributing policy, you know that it's being tested. All of them support some sort of mocking and replay testing. And I'm not sure all of them have kind of a convenient coverage output, but I think at least Gatekeeper or Opa has a convenient coverage metric report. And then so now that you've curated and mapped your policy library to specific controls, you've got to distribute this out. And again, Opa, Gatekeeper, Coverno, others do support either an OCI bundle or kind of not proprietary, but they're project specific bundling. You could obviously manage all these things in Git. I think again, it goes back to that branching strategy and how you're going to connect that up to your policy enforcement point. I'd say OCI bundles, probably the thing I'd recommend. Racko, sorry, OCM has their version of this is just placement and then they have a policy generator component. And then there are cloud specific ways you can do this. Again, Google config, you can use S3 as that bucket for, from pulling everything from Git into the bucket and then Opa and Coverno can pull it from there. And there's an Azure policy extension as well. I would note that as you distribute out policy, be sure to sign, digitally sign, cryptographically sign, and then make sure verification happens that the engines support, Coverno, Opa, I should say Opa at least, Gatekeeper support it. All of the engines support some form of enrichment where you can, instead of statically, as I showed in my demo, statically saying, I'm looking for this TTP idea, I'm looking for this resource attribute, I'm looking for this namespace label. You can pull external data and enrich the decision-making process. There are various ways to do this, kind of similar to the policy bundling itself, you can layer it in, you can have separate bundles, you can put it in secrets. But I think the interesting thing in kind of real world situation is that you can, if you have a multi-tenant environment, multi-cluster environment, you can now really tailor those policies to different deploy time and even operational time policy choices. So this becomes a big thing, if those of you have had to wrestle with, say, data isolation for GDPR and across different country boundaries, this is a very helpful pattern to use. The policy assessment reporting, I think there are lots of tools out there. We obviously, the policy work group, like the ones that support the policy reports, we've tried to build some adapters for those that don't have it. We're trying to get it into that cap, so hopefully it will become a standard Kubernetes API and then everything will support it. There are Prometheus metrics, other ways to manage your assessment, execution, and aggregate data about what violations you have. As I mentioned, there's an open source policy dashboard, but there are a number of other open source and commercial dashboards that can roll up the policy violations. And as OSCAL support becomes more prevalent in things like EMAS and other GRCs, we expect to see more of that display, the dashboard display of your assessment results. Gosh, time-wise, this is really more of what I call policy adjacent. This is not policy, per se, to remediate. Obviously, if you have everything controlled and on these guardrails and constraints, it makes remediation a lot more manageable and a lot more deterministic. But I think you can use that policy report output or the gatekeeper audit output and you can then generate PRs and then that would create new sandbox rules, network policies. You can add different labels in response to different attack indicators through admission control, mutation. Yeah, and then you're obviously gonna have to track your poems and risks over time. There are some cross-cutting concerns that will obviously be touched multiple parts of that policy management process. So those heuristics that I mentioned, they really do cover that whole MITRE attack framework. So you're looking at this some, slice through many different pillars. It's not always kind of neat and compartmentalized where you can build a policy snippet for your volumes and a policy snippet for your image management. A lot of these are gonna have cross-cutting concerns. And this where having a good model to drive that policy generation helps. So static analysis, very infrequently, but starting to see some interest in formal methods for that. My personal area is graphs and kind of using ML to do graph embeddings and graph mappings. And actually even lower-level large language models for machine learning have actually been recently shown to be able to model out different attack paths and defense sequences. So that's interesting area of research. So what's next? We need more real-world examples. So I mentioned open-source project that we have a number of CNCF projects contributing sledgehammer. We'll be open-sourcing Oskal for component doubts, there's Rego policies that do the generation or the actual low-level policies. And yeah, we need more tools. Thanks to, again, folks like Defense Unicorns and others who are building open-source Oskal tooling. And we really wanna see some real-world audits and we're gonna try to surface as much as we can within the context of sensitive host-specific data. But we're gonna try to surface all of the assessment plan, assessment result artifacts and sledgehammer and more meta information about the processes that got us through that audit. And I think that audit community is right now even less aware of Oskal. Oskal is new for everybody but the audit community is not well-tuned and ready to receive Oskal. And certainly not in a Kubernetes cluster environment or a cloud-native environment even. So we're hoping that this will be a resource for auditors. And if there are any in the audience, please, I'd love to talk to you. But getting them trained up and familiar with Oskal, with Kubernetes and Oskal and then how to consume these artifacts. And with that, I will open it up to questions. Yes. I think there's gonna be a lot of competing approaches. Everybody's looking at the same problem and feeling it from different perspectives. And so there will be a lot of competing ideas. Oskal is very new, it's very open, developers are very flexible. I think in a very specific segment, i.e. government, it has a very strong endorsement in that NIST is the standards body that most agencies use. And I don't think it's any surprise anyone that FedRAMP is a very popular framework for cloud-based services that government are procuring. And FedRAMP has officially adopted Oskal as it's emerging and very soon required format. So I think that the vendors, the open source projects, enterprises, homegrown, if you're going to play in that area, you're going to have to embrace Oskal. But the good news is they're very flexible. So lessons learned from other projects and other approaches should be incorporated in that. And I think they would welcome that. From the CNCF policy work group, I mean, we're agnostic to the tooling, the specific frameworks. But again, we just look at Oskal as a very nice fit to the problems that come up in our work group. Yes? Yeah, so Jemar, I'd say if I can go back and if it will pull up here and if it will show. Yeah, okay, so here we go. We're going to re-home that. That's in my current GitHub. So when we file the sandbox ticket, we'll be putting it in a kind of a .org or .io, but oh gosh, is that going to be readable? Probably not. But yeah, so essentially we want to deliver all of the Oskal and any tooling that we create or any configuration for other open source tools so that one couldn't, in theory, generate all the Oskal or use the templates that we create. Apply it to a fairly vanilla Kubernetes cluster and then use that either in an agency or as a host and go through an audit. And like I said, we plan to put as much as we can from a real world third party, we call them three pals, a third party audit organization. As much of those artifacts out onto the open repo de-identified from any actual IP addresses or sensitive vulnerability scan output, et cetera. So that in theory, especially agencies, we talk to a lot of agencies who are just getting caught up on dev ops and getting their heads wrapped around how to do Kubernetes at all. The lift to go from nothing today or very little today to a full, reliable production ready Kubernetes operation is pretty huge both in terms of staff and money, but really it's staff. So they're looking for a bit more of an easy button that they can say, give us some best practices that we can take and play with in our lab or another ATO cloud provider can deploy. Again, similar to Platform One, Platform One is pretty restricted and who can use it and it has some significant costs, which again may price out some of the smaller CIV agencies. So again, I wouldn't, and I would just as a coded to that, I wouldn't see this as being competitive in any way. I think it's more a way for someone to dip their toes to really understand what they're getting into and then make a very informed decision, maybe with a couple of pilot projects, get success and then say, okay, we wanna go to Platform One, we wanna go to a commercial kind of software factory, DevSecOps platform engineering substrate. Now we know what we're getting into and more important, our AO, our authorization folks know what to expect and how to consume that Oscar. We know if our GRC can support it. So they do the discovery with Sledgehammer, get really comfortable with the operating model and then can scale up into something more, I guess, enterprise scale or enterprise grid. Anything else? I'd say the, I mean, as we're planning to generate the Oscar and the corresponding policies and I think in kind of a similar way, the Coverno effort you guys have, and which we'd love to collaborate on that because again, we're not picking OPA versus Coverno or any particular tooling. I'd say we'd wanna take it one step further from just the policy generation and actually the Oscar generation. So deploy, maybe to answer your question. Deploy the cluster, run the Oscar generation which then will generate the little P policy, run your Conf test for lack of a better word, your assessment and then generate your SAR and then figure out what you have to fix. Could that be done in GitHub actions or some other CI CD or Hargo? Sure, I don't see why not. So as long as because it's gonna be generated code as much as possible through, the idea is that you wouldn't have to do point in time updates and kind of that branch and merge PR change. But TBD, it's early days. Anything else? Yes, please. Yeah, and that's the kind of Rosetta stone we were using was that threat model, right? So if you can model the specific of a particular framework, map that to your threats, right? So TTPs or you can use other frameworks but specifically, right? Annotate those to specific threats and on the mitigation side, right? You're annotating those with specific mitigation techniques, defense techniques, right? Then all you have to do is maintain that mapping of these threats are mitigated by these defense techniques. And of course, MITRE is doing that for you if you're using their framework, right? So that becomes the glue. So if you wanna drop in, if I understood your question, if you drop in PCI, you wanna drop in HIPAA, as long as you've annotated your requirements and then the specific controls for those requirements with those threats, then in theory, you can just assemble the OSCAL and the policies from that mapping of threat to defense IDs. There's no formal, I mean, something that we can consider with the devs for OSCAL to introduce, but there's no formal kind of threat to control mapping. We just kind of added extra properties to the OSCAL. Yeah, so we could, but we should maybe submit a PR to get that formalized. We wanna get more comfort, again, through the Sledgehammer real world testing to before we probably stand up and say, this is the exact way to do it, let's codify it in OSCAL. I know you've had your hand up a couple times. Yeah, the first epic, if you will, is that we're gonna go through threat modeling exercises, something I've personally been involved with the TAG and with security. So we'll do project specific threat modeling, those artifacts will be released then from that we'll do the mapping, those OSCAL generation tools and artifacts will be released and then I think everybody's welcome to participate in those processes to create, review and curate those. But I think it starts to get interesting for the operator community and maybe other projects who are looking to emulate the process. Once we've got that full OSCAL component model, the policy libraries and we can demonstrate how those are actually running. So I think, I hope that answered your question. Basically we need a little bit of dev time from the team and go through some reviews of what the OSCAL looks like for their project. Okay, and I'm told to stop, so thank you.


When you look at the end of the year, the news reaches about 98% of audience. And in the news, about 70% of audience will be in audience. Hindi GC on the other hand, which most of the people we can all of us watched, reaches about 6% of audience. So, slightly less than Hindi GC, but news is in any number. Why people are not watching it? At the end of the year, you will get so many audience, but at everyday level, people are only getting about 5-6% of market share. So, my question is, are you entertaining enough in your shows? And there's more readers and anchors and news makers as a team. Second one is, I'm in shock, but I will not play that right now, because it may be embarrassing. A new news channel got launched, it has exporting all of our countries, where all the anchors were standing in Abhishek. If you compare that, it was the same, Anchor Dresden, same way of looking, and it was all over India. There was no differentiation between the two news channels, because the anchors were dressed, they were standing alone, with a boarding omai, and unless you notice the omai, the chances are you won't get to switch any of the days, because most of the anchors do a job from one channel to another. So, my big question is, are the anchors having real value to the audience? And are there the reasons that you don't have one question in your channel? There was a very interesting episode, which Kavish on the internet, we learned that the national world has faced so much, that I don't know what to do in news. Because the first, so news has become a super fast express training, where the first news is that, a particular minister is going about, second news is that he is wearing this particular dress, while Kavish is here, third one is that he is there in the rain, and this way they speak to the public. Now, unfortunately, that's the news item, which is generating the maximum rating of the international news channel, which reflects that what kind of talent, or what kind of news that you put on the channel. I will give you an example, which is my basically important point. Is that that, is the what is responsible for creating such news, or is it a question of talent? I will give you an example. Satyajayate created more news in the media, and created much deeper impact on society, as a program on Star Plus, than many news channels ever managed to do. Satyajayate originally was launched on Star News in 2005. It had a backup, it had a story, nobody would come back. Three years later, or maybe four years later, Satyajayate was launched with Amir Khan, spending crores of rupees, and the show as we know it, is on the financial and television industry. And why it was like that? Because the investment that went into producing Satyajayate, and Star Plus was far, far higher than what could be in Star News. So it's actually a such kind of story. So you have low market share, you don't get enough money, you produce graphic content, and you don't get talent. What Ravish rightly pointed out, that the show begins with saying it should work. So Bhanchanti is available just to catch him somehow. In the morning there is a rush to catch this sports person. And rightly he said in the Hindi language, we will do the real thing. There is no preparation. And most of the time, the show is to put what is happening on the street. Now can you imagine as a business, if we are trying to develop a business where we are just a job, it is to produce something on air, which any business person in a shop outside, if we are not adding any value to the person who is going to listen to you, why should somebody be doing this 20 minutes in a day? Unless you are really adding a value that is not going to date the others. And that's a question that we will ask from the news channel. More what content is running on the news channel, that's what editors and anchors have to think. We can catch over ball by ball currently running on the news channel. Somebody by accident also comes on the channel to tell the world what's going to happen. And there is a rush. They say if we don't do it, we don't get it. We don't get the audience. A movie getting released on Thursday and Friday, there is a huge show on every news channel. These producers and anchors are very smart. You can do it from one anchors. You can do it from another channel. Just a promoter movie. And what TV channels are doing, telling the audience what's going to happen. And third one, most of our politicians are thrilled including my friends of the television news channel. Where can you see my message? I can tell you no matter how ideas are ideal, we would like to believe that nowhere else in the world it is like this. The news media is very legitimate. We will not do that. But that's a serious loss to business. If you put on what you call what is happening on the street, you plan your day, there is nothing serious to be done. What do you expect the advertisers to pay? And what business are they? Are they in a business of showing news and asking consumers to pay? Can each channel hear demand? Even if it means from a consumer for a month, I can tell you next year, shut up. And why it is like that? If they are in a business of news you can't ask consumers to pay. And that's the business model that I think all the industry needs to think about that if our business is actually then serving advertising to content, then there is a rush now amongst the many large news channels not to run ads at all. And one of the studios that I discussed, he said that that's not part of my strategy right now to run ads. Then I don't know what the business model is and why I am doing this business. The seventh point is this, there is a bunch of Fox News that will play a small video towards the end of my speech which I will tell you in this video. One particular program on that channel gets about over 2 billion dollars in revenue. That's a size, maybe of the size of the largest TV network and maybe a little more than that. One particular program on a news channel in Nevada what we get is nothing. If you advise a news channel and consider the kind of rush that the partition has to appear on different news channels propagate the view, one side view, this side view and then they can access something. The news channel looks so hard to get to lawyers they get what 100 of the days of their GC channel. Is it fair? Is it fair? The whole world today is discussing about the TVI which will destroy the news industry and forget about TVI. The world is changing so fast amongst us that I am not even here in this audience. You should know more about the news broadcasting award it should be actually the news event and news people are watching the news broadcasting. We are already taking content and people are watching. Abish is my example here that you are inversely popular by your channel. The kind of popularity that he is and the way it comes so people are watching him not necessarily to see the news channel. Maybe the man who the ex-CEO of HDB has launched a site called TVI there is one billion dollar of funding in just one month of March and you know what they are doing they are curating news they are curating news issues like it does not cross in more than 6 minutes. The real media the millions are already on the phone and tablets watching the news and people like us would be working in those 6 minutes for you. Think about it how many of us have got the dialogue to work there. And if you have to change the way things are going to come in the broadcast business I would like you to see the last 3.5 minute video that I am going to play and just understand why even after being one sided show which people can play the program itself does more than a million dollar savings. This was the video I liked. We will make them Asian when they apply and why would he do that he does that because colleges don't want too many Asians and you know this really well and if you are defending it I don't understand that at all they are discriminating as Asians they are open about it and everybody knows it and yet that is okay because why? Well like I said there is no photo system because the numbers have actually increased not proportional but my question is the same is it okay to discriminate on the basis of race I was raised to believe it's not you apparently think it is is it? No I think that we have to recognize that we don't live in a vacuum and that racial discrimination still exists and that we have to account for the fact that some people have it at the start and if you are going to advocate for a racial policy you are basically reinforcing that at the start and you don't say that it isn't perfect but it's needed as far as the solution is it racial discrimination to not let somebody in the college face on this race don't you agree on that? if that is the sole criteria that someone is not admitted into a college then there will be something wrong with that but that's just not the way that colleges work they are not admitting to face holding on race and you know I've talked about a lot of others that have benefit if you just let it be whether I am going to go private school if you are going to go to school and you know a lot of the things about those you are just burning some of the questions and you know that you don't have an answer to this but if racial discrimination is wrong and I believe it is then it's just wrong I mean that's not a wall element here I agree that racial discrimination is wrong but to think that you are starting out from a piece late as an applicant when you know if you are a Mexican American student and you are worried that your parents are not getting deported by the next president they are like occasionally said children are not responsible for the sins of previous ages okay no 18 year old Asian from black Hispanic kids responsible for slavery for Jim Crow or the sins of America I'm starting to promise you that you agree with that right I would agree with that then why do that things need to happen disproportionately to these races that will subject to racism in the past we want to say that racism doesn't exist but first of all that is because you know African Americans are being you know killed I mean if you look at it the answer is not more racist that's why okay thank you I was just imagining the show that we are having there will be a fight happening and I know the jumping from this chair and going up and down and all kind of drama is fight and without having any substance I think that's what we need to bottom up this business for next 10 years we need to rethink the way we do our business thank you very much


Welcome to this new Calyx webinar. I'm Renato Cabocanti, principal engineer at Light Bands, and today I'll talk about Choreography Sagas. So there are two types of Sagas, Choreography and Orchestration Sagas. Today I will only cover Choreography Sagas. In an upcoming webinar I will talk about Orchestration Sagas. But in both cases it's about implementing a long-running process in distributed season. We'll talk about a process that spends over more than one transaction. When we think about Calyx entities, they live in their own transaction boundary. You cannot mutate two entities at the same time. You mutate the first one and then you have to move to the second one. And they live isolated in their own transaction boundary. Now when we are building Choreography, the abstractions that we have in Calyx to allow us to build Choreography are the entities on one side, your strict consistent domain model. And the other side you can use subscriptions. Those are actions that you add a subscription annotation telling Calyx that you want to receive the events, if you are subscribing to an event source entity, you want to receive the events from your entity, that action and that method, or you want to receive state changes from a value entity. So in both cases you can use an action, you add a subscription and tell Calyx, I want to receive updates or we can say, you want to receive new action, the facts that happened in your application. And you want to do that because you want to connect, you want to react to the facts and connect, let the facts flow through your system and mutate other entities. So you can imagine that you modify one entity at a place, and then you listen to the events from this entity, for example. And when you see an event is delivered to your action, you then can send a comment to another entity, as such you can connect them and make sure that when one mutates, the other will be mutated as well. They are mutated in different transactions, but it's guaranteed because of the subscription that this fact will traverse your system. So in a nutshell, we can say that choreographies are about building the pipes that will allow facts to traverse your application. Let's see a more graphical example. Imagine that here we have a Calyx service, and I have three nodes in production, and I have three kinds of entities that are spread over my nodes. I have the A type depicted here with a yellow circle, and I have the B type, it's yet another kind of entity that I have, and the C one. So in my business, I need to react whenever something happens to A, I need to listen to that and generate some comments that will hit entities of type B. So for example, something happens in A1, then I'm listening to those events, and I will then generate a command that I will send to B1. And something happens in B1, I want to generate something C1. And here we can see that those entities, they are in different nodes, they could be on the same machine, doesn't matter much, for us, this is something that Calyx will take care of for you to spread the entities, but the abstraction that we need here is to have is the subscription that will allow us, give us the guarantee that when something happens, I will get notified and then I can move forward and execute another action. In the case here, something happens in A1, I'm listening to that using the subscription, and then I send a command to B1. B1 is now producing more events that I'm also listening to them, and then I will react and send another command to C1. So there are different steps here, from entities to subscriptions to subscriptions, back to entities. Let's see another more concrete example. I have here a shopping cart, and the user added already two items, and then it removed an item. So that's what I have in my journal, item added, item added, an item removed. The content of the payload of those events are not important for our example here. So at some point, the user decided to check out the event, the shopping cart. So a checkout event, it's emitted, and I have in my system a checkout subscriber that is listening to events from shopping cart and taking actions from that. And the user case here is whenever checkout is emitted, I want to create another. So now I have one individual entity, shopping cart, that got checkout, and this event will trigger an action in my system. Under the hood, the subscriber will receive this checkout event, checked out event, and will create another. Of course, here the other will also emit its own events, and I have another action here, another subscriber receiving events from other entity, and also is a good sum action. In the case here, whenever checkout is done, the checkout subscriber gets notifies, it creates another. Whenever another is created, the other subscriber gets notified and it creates, initiates a payment. So as we can see here, there are three entities, but one action that happened in the shopping cart trigger cascaded a few other commands down the road. So we start with checkout, we react to that, we create an order, we react to that, we start, we initiate a payment. But when we are working with subscriptions, it's important to understand how it works behind the scenes, so you are prepared to understand what are the possible errors that we can have when subscribing to events. So one important error is what we call a head of line error. In that case here, I have some events, event one, two, three, four, and five, doesn't matter much what is inside those events, they belong from an entity called user entity, and the letters next to it are the identifiers. So I have three different instances here, and the events are all together in the journal, and I'm subscribing to those events. So I have an action with a subscriber notation saying, I want to receive events from a user entity. When you deploy that in production, Calix, so you define your action, you have your event handler which contains your business logic, and you deploy that into Calix, and what Calix will do behind the scenes for you, it will start to read the journal, and it will pick event one, and will deliver to your event handler, and when you finish processing this event, Calix will save the offset. So I search that if something happens, if you restart that machine for some reason, if you redeploy it, it will start on the next event, because event one was already processed. We save the offset, we save that event one has already been delivered to your event handler. But then this process keeps going. It keeps consuming the events and delivering to you the events in the order that they are found in the storage in the journal. But imagine that when Calix tries to read event three, it fails to deserialize it. So we have the event persisted in storage, but for some reason you change the format, you change your code, and now what is in storage cannot be deserialized back to the type, to the model that you have in your code. So now it fails, it fails to deserialize. This is a kind of problem that you can only solve by fixing your deserialization, bringing back the type that you had before. If you need to do a migration of your format, you have to add it. And because otherwise Calix won't be able to read back this event, it will always fail. And when the subscription fails, it crashes and then it waits a little bit and it starts over again. When it starts over again, it will go back to event three and then it will fail again. So you need to fix it. See if you have a serialization issue when reading events from your journal, you have to fix deserialization. In such a situation, you are kind of blocked here. Calix won't be able to continue delivering events to your event handler because it stuck on event three. So you have to fix it. Another kind of error that you also have to fix is when your event handler has some programming error that is just failing whenever it sees event three here. So Calix picks the event from the journal, deserialize, okay, we succeed to deserialize it, we deliver that to your event handler, but then your event handler has a bug and it fails. Again, here, this subscription is failing. It will keep failing and Calix will keep trying to deliver this event tree to you and it will continue failing. So here again, you have to fix your code and re-deploy. The third kind of error is when we read the event from the journal, we deserialize it, we deliver to your event handler, you do your processing there, you return it, and then Calix needs to save the offset and for some reason, network issues or you just shut down the application at that moment, you de-deploy it, everything, you remove all your nodes. Something happens that Calix are not able to persist that offset. When this process gets back to life, it will try to re-deliver the event tree because for Calix, this event was never delivered. We missed the chance to save the offset. So for us, it was never delivered. So we delivered it again to your event handler. And that's why when you're building subscriptions, you have to make sure that your event handlers are either potent. Whatever you do there inside, you need to be protected and be sure that you can receive this event more than once and that it won't impact your data because of that, that your data is protected, is either potent. So we imagine that you're receiving the event and sending commands to some other entity that entity must be able to react and detect that this command was already sent. Now, in all those three cases, this case here, the first case and the second case, they are kind of blocking because it blocks your flow here. The subscriber cannot move forward until you fix your code. The third one, it's more intermittent error. It happens. If it happens, it will just recover but with the consequence that your event handler may see that event number three more than once. So this is an important aspect when you're building choreography sagas because subscriptions are an important part of choreography sagas. That's how we built choreography sagas. So I have a little demo so we can navigate a little bit through the codes and you can see how it works in a real application. As a use case, I will show you how you can solve one of the major challenges in event-sourced applications and it's called the set-basic consistency validation. And it's like that. You have, let's say, that we have a user entity that it's an event-sourced entity and in an event-sourced system you don't have a table with columns, user ID, name and email. What you have is a journal with events. So let's say that the user ID here is the unique identifier for this entity and you have the name, okay, fine. And you have the email address but you want the email address to be unique across all the user entities. You don't want two users using the same email address. So how can I build this uniqueness? How can I have this uniqueness constrained if what all that I have is a journal with events? I don't have a column email in a table where I can say here there is a constraint, this column needs to be unique, has a unique constraint. I cannot have that in an event-sourced system. And by the way, all the entities they leave their own transactional boundaries. So I cannot go into create an entity and say, before create it, have a look on all the other entities in the system and check out if any other user is using this email address. So it's not possible to do such a thing. So we need to think of our application in another way. We need to solve this problem using something quite different than what we usually would do with a relational database. So for this example, we're going to use a choreographer saga. And what are the pieces that we're going to have here? First, we're going to have a user that will be an event-sourced entity. Then I will have another entity. In that case, we'll be a simple one, a value entity. That will be a kind of barrier for me. It will be just a unique email. The idea of this value entity will be the email address. And I use that as a barrier to control the fact that if it's already used it or not. If it was already created, it's in Calix, it's in the storage, I will detect that and I will be able to say, no, I cannot create this user because this email is already in use. Otherwise, if it was not yet created, I will be able to create a value entity for this email address and then I can move forward and create the user. And I will have two actions with subscriptions, subscribing to the events from the user entity and to the state chains from the unique email value entity. And I also use a timer because there is an error condition, there is an error situation where it will be possible and we will simulate that, that we reserve an email but we don't create the user. So now, because some error happens in the system, so now I reserved the email that's one transaction, I need to create the user but let's imagine that the user is not created for some reason. Now I have a reserved email that I need to free. So I will use a timer for that. So let's first have a look here. We're going to have an application controller that will get income request from the outside and request to create a user. But before creating the user, it will try to reserve an email address. And for that, we're going to have this unique email entity that we will first call it and if it doesn't exist, we will reserve it, we will create it for the first time and we reserve it and then we create the user. Let's have a look at the code. So here is my application controller in which I receive a request to create a user. Here's the command but before creating the user, I will send the commands to this other entity, the unique email entity. I sent this command which is reserve email. That's the ID, email. That is the user ID. Again, here I will use calyx clients to talk to this entity and the unique identifier for this entity is the email itself. So that gave us the guarantee that there is only one entity with this email address, one unique email entity. In my whole calyx system, there is only one associated with this email address. It's the unique address of that. Let's have a look at reserve methods. So first, let me scroll back here. So this is my value entity. It's not an event-sourced entity. It's like a key value entity and it holds the state of a unique email. The unique mail has an address, the unique ID of this email, this status and eventually it will have an owner. This status can be not used, reserved and confirmed. When I start, it has an address because it's the unique ID. It might not be in use. When I start it for the first time, it's not yet in use and therefore it does not have an owner. When I hit the reserve methods, I will check, okay, if it's already in use and it's already assigned to another owner, then I will emit this error. If it's assigned to another owner, okay, it means that this email was already created and it's assigned already to this owner, so I have nothing to do. But the last case is, okay, I'm creating this. I'm making this reservation for the first time. So when I take the email here, I will update the state of my value entity, saying, okay, that's the address. It's reserved that the state and that's the user that is trying to reserve that is trying to use this email. So this user here, this owner ID is reserving this email address. Once that finish, I execute this call here and then when it completes, I will go further and will create the user. And what I wanted to achieve here is first reserve the email, I created the user and then I will have a subscription listening to user events and then it will see, okay, our user was created. There is an email that was assigned to this user. So now from my subscription, from my, there are two choreography sagas here. The first one is this one that we are seeing now. So this small saga will say, oh, I saw that the email was assigned to this user. So it's time for me now to go to the unique email address and confirm it. Let's see the code. So here I have a user event subscriber. It's an action subscribing to events from user entity. And for the moment, we will look only to this method here. Whenever an email assigned event is emitted by the user entity, this code will be colored. And what we'll do here is say, okay, an email was assigned to this user. So let me hit now the value entity using this email and let's confirm it. Let's see what this method does. So here I'm back into the unique email entity and I will call this method confirm. And if it's reserved, so if it's still in that state, oops. If my email is on the status of my email is reserved, well, it's time to confirm. I just got the information that in my subscriber here, I just got the information that this email got assigned to a user so I can confirm it. So here I changed the status of my email. I saved the states and I'm done here. Here I changed it to confirmed. Now, if for some reason, when this method is colored, my email is not confirmed. It's not reserved. It has some other state. I just ignore it. I just move forward because I don't want this method to fail. Remember, the potency that I was talking about, whenever this event is delivered, it might be delivered more than once to this method. So either I confirm or I do nothing, but I don't fail. I don't let it fail. Now, back to the slides. This is the sunny day scenario. Everything worked as expected. But of course, life is not like that. Sometimes it will happen that we reserve the email address, but we fail to create the user. So what can we do here? So for that, we need to build another small saga that will make sure that this email gets unreserved. So what we'll do here is we'll create yet another action, but this time, this action will subscribe to unique email chains. And whenever it sees that the email was created or isn't status reserved, it will schedule our time saying, okay, if it stays like that, I will unreserve it. Let's have a look at this code now. So here is the other subscriber I have, yet again another action, subscribing to value entity of this type. Here I won't get events, but I will get the full state of this value entity will be delivered to me. So the first thing that I'll do here is to create a timer ID using the email. The email is unique, as we know, and I'm just prefix it with timer just to make it easier to follow in the logs. So if the email isn't status reserved, reserved here, then I will schedule a timer. Look here, I'm creating a call, but I'm not calling that yet. It's the third call in Kalex. I'm not executing this. It's not being called. It's lazy. I create this call and I will ask Kalex to create a timer now for me using this ID, using this delay and with this call. So what will happen here? For demo, I put it on 10 seconds, but you can put like five hours if you want. You can put a very large number. And just to make sure that this email gets unreserved far in the time. You don't want to immediately unreserve it because you want your system to be able to process the request. So here what we are saying is we are telling Kalex, look, this is the timer ID. In 10 seconds, please come and call this unreserved method. Let's have a look here on the unreserved method. I'll say, okay, if the state is reserved, I will move it back to not use it, the empty state that I have. If the state is confirmed of not in use, I don't touch, I just return done. Because I don't want this method to fail either. I'm in reserved state and I want to bring it back to the initial state or I just move on. Here the empty state is just, I erase the user. There is no owner anymore and it's not to use it. And that covers the situation where the user, we fail to create the user. So after some time, the subscriber here, the scheduler, the timer that we schedule will unreserve this email address so it can be used by another user. Now, what we really want is to create the user and then we have the timer in one side. And then, sorry, we create the unique mail and then we created the timer to eventually clean up. But then we created the user and but when we create the user, we will have the user event subscriber that will confirm the email address. And when the email is confirmed, the unique email subscriber, we also see this change. We'll see that an email was updated and now it's confirmed. So what it will do, at that point it can say, okay, I had a timer. I had a timer that I scheduled to unreserve this email, but it's already confirmed. So now I can remove the timer. So let's go back here. And that's what the second here is when I scheduled the timer. And here is I receive yet another update of my unique email and say, oh, it's confirmed. So okay, good. I can just now cancel the timer. It's important to understand here that imagine that you don't do that. Imagine that you just return here like that. I could eventually even comment out this part and say, if it's reserved, I create the timer. If not, I just ignore it. And that will also work because what's going to happen here is imagine that you don't cancel the timer and then at some point, because you register a timer before, Kalex will run this timer and we'll call this method. Your email address is confirmed. Kalex calls this method here and it will say, oh, it's not reserved. It's confirmed. So it will move to the else and say, okay, I have nothing to do. Your code will say, okay, if you're confirmed, I don't have anything to do. I don't need to change the state of my unique email address. So you just move on. And so the timer, you can leave it there and it will fire and your system will still be in a correct state. But it's of good practice to just clean up timers that are not necessary anymore. So if it's absolute timer, just remove it because you are saving resource. You are saving calls in your system and all that has cost, no? So it's better to just remove it. What else that I can show here? Let me see, yeah, that's the flow. We can see here that I have actually two subscriptions and they are not one. I can say here that we have two sagas, two tiny sagas, one between that, make sure that the interaction that data flows from user back to the unique email entity to confirm it. And there is another one based on a timer in which I listen to something and I take a decision. Okay, I have an email that is reserved and in a few minutes I will unreserve it. And if it's already confirmed, the unreserved will be ignored. And if it's still reserved, I will free that email address. So let's go back to the calls and I want to run it to show what happens in this application. I want you to see the saga being executed in the background. So the application is running. The first thing that I want to check out is this call here. I want to check what is the status of this email address. So basically it's saying, I hit this email address and ask, okay, give me the status and it's saying, okay, it's not in use. There is no owner, not in use. This email address is free. So let's reserve, let's create a user. This one, 001, John Doe living in Belgium and it will use this email address. If I check here, I can see that the saga didn't complete yet because this email address is on status reserved. Let's go back to our diagram here and what happens here is that we are at that point here. No, yeah, this one. We created the email address. I believe that at that point the email subscriber got ready, the notification that a unique email address was created, was reserved and it created a scheduler to unreserve it and the user was created but the user event subscriber, when I did this call here, it didn't yet receive the information that the user got an email assigned it. So it didn't yet confirm my email address. So we are actually in this point in time. Of course, while I talk here, everything completed already. I can now check this one and as we can see, it's confirmed. And if you check the logs, you'll see that the application controller got an email request to check it. Then I tried to reserve the email address. I hit the unique email entity to reserve it. Then I move forward to create the user ID, the user. I created the user here. Again, it's me here, interact with the controller. The email subscriber received the information that an email was reserved and then it will schedule a timer to unreserve it. But then in the meantime, the user events subscriber received the information that an email was assigned to a new user. So it goes back and hits the unique email entity and confirm that it's in use. Further, now the unique email subscriber receives the information that this email is confirmed, meaning that it doesn't need the timer to be unreserved. It doesn't need the timer anymore. So you say, okay, email is already confirmed, deleted the timer and the timer is deleted. So that flow happened and we end up in this situation. The email got confirmed, we marked the unique email as confirmed and then we cancel the timer. So the two sagas here are working in cooperation with each other. Now, let's simulate an error. I have this other email address here. It's not in use. I call it invalid.acme.com, not in use, and I try to create an invalid user. So here I'm using a random ID and as you can see, the payload is missing the name. Here I don't have the name. If I do this call, if it's a good call, what we're gonna happen here is we first reserve this email address. But then when we try to create the user, it will fail because I'm missing the username. I have a condition here when I create my user that the name needs to be filled. I did that on proposed so we can simulate an error. So if I go back here and I try to create this user, let's see what happens. Let's check. It's invalid, so it's reserved, sorry, for this random ID and in the meantime, my, here is the error because I had a wrong payload for my user. In the meantime, the timer kicks in, kicked in. And now the email is unreserved. Let's check again the status of the email and now it's back, not to use it. So what happened here is that we got this situation. I reserve the email address. I fail it to create the user and then that other saga, the unique email subscriber will unreserve it. And I have here another user. So we remember that this user was created, its email is there, it's confirmed, so its picket, this email is confirmed to be in use by this user, user 001. Let me try to create another user using the same email address. And that will fail because if I go back to my controller, what happens here is that I try to create the second user. I try to reserve the email and this method here will fail because my, this email is already in use. That's what we're gonna have here. It's in use and it's not for this user that I'm trying to create. So I return an error and I search, this is, this fails. And because this call fails, this block here won't be executed and I will move to the exception handling where I will emit a message. Okay, this email is already reserved. Now there is another call here and I let that for you to, if you want to explore a little bit more, how can I change an email address? It's a similar situation. Here I'm trying to modify user 001 by changing its email address and here is the same. I will first need to reserve this email address and if it's confirmed and if I can reserve it, I can move and change my entity. And once I change my entity, I need to unreserve the previous email address, the John Doe. The previous one is Doe at Acme and I want to move to this other one. So I need to first reserve this, I change the user and then I unreserve the previous email address so it can be used by someone else. There is also a Saga logic for that here in this project but I won't show. I will leave it for you to explore. And so let's go back here. A small recap of Choreograph Sagas. We built Choreograph Sagas by composing entities, being that event source entities or key value entities. We listen to events or to states changes using subscriptions and we let the data flow through our applications. One important characteristic of Sagas is that once it triggers, it's a flow that propagates through your system, like a wave of actions that and commands and events and subscriptions that got chained in each other and produce a final result. So it's something that runs in the background for you. You have to encode everything. Something happens, something triggers the first action and then the first command let's say that creates a wave of changes in your system. It's very important to make sure that each part, each interaction is well tested and that you have thought about all the possible error conditions because since it's a background process, you don't want it to keep fading the background because when it starts to fade in the background, it will block your saga but it also may block other sagas as well because the subscriptions, if you have a head of line error, it's not that single event that may be blocked, all the events that happen after this event will also be on hold because your subscription first needs to finish processing that event where it's stuck now. So head of line errors blocks everything and you have to be aware of that and make sure that you don't let them happen. Now what are the drawbacks of choreograph sagas? I think it's already implicit in what I just said. There are two things here. They are hard to debug, background process. You don't have a total visibility of what is happening there. You can have your tracing, you can have your logs but you don't have a place where to go where you see okay my saga is at that point in time and basically the fact that it's hard to track is what makes it difficult to debug. So if you want to have more fine-grained control over your sagas then it's better to implement it using orchestration and that's what we're gonna see on the next webinar. In the next webinar I will talk about orchestration sagas and I use exactly the same use case but I will implement it using Klex workflows which allows you to build orchestration sagas. If you want to check out the source code and explore a little bit more you can scan this QR code. It points to a GitHub page, a GitHub project where you have the source code. Okay thanks for your time. We invite you to join our Slack channel. If you have more questions you can reach out to us there otherwise you can also scan that other QR code and discover more about Klex. Thank you very much.


John Merrick is treated as a freak show meant for people to gawk at for his severe deformities. It isn't until a doctor takes notice and brings him to a hospital where the audience sees actor Stephen Mayer transform into the elephant man. I have to start out as a normal person and then transform myself on stage. It adds more to having a normal person transform into the character and it's very interesting. One of the most unique takes of the midgy community theater's adaptation is the lack of prosthetics for the role. Disfiguring your body and keeping that in a way it can be quite painful but it adds to the character. But there are plenty more transformations for the audience to look forward to. Even an actress who is at first paid to be John Merrick's friend can see beyond his exterior. And then I start to actually develop feelings for him because unlike everyone else that I've met in my life he's actually true and honest and sincere the whole time. I'm there to evade your acquaintance, Mr. Merrick. It's this message that shines through for the play's cast and crew. But even nowadays how people who are different are seen as freaks and are made fun of and displayed. And what we're trying to come across is it does not matter who you are or how odd you feel everyone is beautiful inside. Director Julie Kaiser hopes that people will leave the theater with a renewed sense of hope. We are as a people very very quick to judge and we look at things on a superficial level and don't always look deep enough to find dignity and humanity and this story really asks us to do that. The theater group will be holding six performances of the Elephant Man here at the Chief Theater. In Bemidji with this week's in focus I'm Mal Meyer, Lakeland News. If you've enjoyed this segment of Lakeland News please consider making a tax-deductible contribution to Lakeland Public Television.