As an Army captain in 1994, I earned a PhD in chemical engineering here at Purdue where I was afforded the opportunity to learn about the importance of an advanced degree for the Army in terms of applying advanced technology and innovation for our military service. With PMRI, we've proven great success with leveraging military officers with some of our most promising research led by young faculty members at Purdue. To date, we've recruited over 100 military officers from each military service that have afforded us the opportunity to reinforce that important research that Purdue is doing for defense and security of our nation. Our approach attempts to strengthen the military not just by writing a report, a technical paper, or a research paper, but by trying to reinforce the transition of the project with moving the military officer back into military service, which is one of our key points with Purdue Military Research Institute. We want the officers to go back to the military to implement the research that they've learned about here at Purdue. With partners from industry, alumni, and friends, we hope that you'll join us to support our service. The Purdue Military Research Institute, known as PMRI, since its inception, has educated over 100 military officers to go back to their respective services and then use that knowledge in their assignments. The value of an education here at Purdue University, a world-class teaching education and research university, is that military members are immediately connected to Department of Defense research projects, and then they take that knowledge along with their academic degree back to their respective services and use that information and education to protect service members throughout the world. After graduating here from Purdue, my fellow officers in the Navy surprised that this program exists and I really look forward to using some of the skills that I've learned and finding new interdisciplinary ways to look at a problem instead of looking through a small silo, and a lot of those are reaching out networks and Purdue is really big on building that network. Growing up in the Midwest, Purdue has always been on my radar from birth. My godmother was a Purdue alumni and my cousins have went to Purdue as well. Being able to go to Purdue and put that on my resume is something spectacular to me. I have two little girls and it's great to be able to let them grow up in the Purdue West Lafayette community and let them be exposed to all the great, innovative activities that are going on in this area. And so for me, being able to be at Purdue and pursue a material science PhD is really a remarkable thing. Years ago, I wouldn't be able to tell you that this opportunity would have been available to me. So I'm very grateful. I chose Purdue and the PMRI program because it was a one-of-a-kind, once-in-a-lifetime opportunity. It's not often that you get to step away from your military duties for a couple of years and focus full-time on a problem of interest and focus on something that really has direct correlation to your specialty within the military and to common problems that we're facing across the DOD. The military has definitely benefited from me having gone to Purdue for this graduate program and that it kept my analytical skills sharp for those three years that I was away from the Army, which is pretty important for an intel officer. And it also gave me exposure to contacts in academia and industry for working on some of the problems we face right now. The program at Purdue is unique. It's a wonderful way to help our armed services personnel to increase knowledge and be more effective, and we do need to increase our military strength. There have been some real innovative situations which have come forward in missiles, anti-missiles, and so on. Real technical and highly technical. And a lot of engineering know-how, it would be most helpful if someone is going to be put in charge of one of those operations that he has understanding of the basics of it. Therefore, I think it's just mostly important for this to happen, and that's why we support it, and we think other people will support it and should support it as well. An easy way to help out the members of our armed services. There's nothing new about Purdue University's contributions to the security of the United States of America. Our ROTC program is approaching 100 years old, and throughout the years Purdue has contributed human talent as well as great research to the defense priorities of America. In recent years, we have added a program that I'm enormously proud of and always eager to support and participate in when asked, and that is the program in which officers come here to our Military Research Institute for advanced degrees on an expedited basis and then return to their posts and protecting the rest of us. I consider this so central to Purdue's mission. I look forward each year to meeting the brilliant young officers, the men and women who come here for those advanced degrees. I marvel at the grasp they already have. Technology has always been central to military supremacy, but never so much as today. And so I hope that this program is more relevant than it's ever been as we try to expose many of these advanced degree candidates to the technological disciplines that will protect us all looking ahead. So thanks to those who operate this program, thanks to those who participate in it, most of all thanks to those who support this program and make it possible. We certainly look forward not just to its continuation, but to its expansion to the extent that our friends in the military services believe we can be of service.


How many of you use closure or know what closure is, how many of your testers value to do testing? So what is the problem? So testing real world stateful business logic is very hard. There are a lot of cases to worry about, there are a lot of combinations. So for example, here is the microwave oven state-to-state diagram. And as you can see, there is a lot of transitions that can happen. And it has inherent states built into it, which needs to be tested. Even if you have a functional programming language or any of that sort, you still need to test against the certain states. And it becomes difficult to eliminate all possible combinations. With how many times should you set the timer back? You may not encounter a bug if you set the timer once, but the third time there might be a bug. And because if you try to eliminate all possible combinations, the test becomes really unreadable and they become really hard to use and what this test is really about. So what I am proposing is that using DSL is a way of writing tests which can solve this problem. So what is a DSL? A DSL is a domain-specific language. It's like a programming language designed specifically to express solutions to problems in a specific domain. So this is not a general-purpose language. It's targeted towards the domain. So let's take a real example of that. So at HelpShift, we are embedding, we are making embeddable support desks for native apps. So as a developer, you can take our SDK, put it inside. Each domain can have several apps. Lots of plans, boombies, and Ghana has a Ghana app. Each app can have several sections. Each section can have several FAQs. And each FAQ can have several translations in several languages. Right? So here is a Ghana.com FAQ page. How many of you know Ghana.com? Yeah, full. So that's the domain. This is the app. That's the FAQ section. Within that section, these are the available FAQs, which can be searched by the customers. And here's how you can create an FAQ on our dashboard. Here's you can add a title, a body, and some meta data, like whether the FAQ is available or not. And there are two published meta. So one is that globally, whether this FAQ is available, and each translation can separately be turned on and on. And I need to talk about that because it's important later. So there is a problem, right, in our system, which we were trying to solve, is that currently we could not have one FAQ common across several apps. If you have, say, a privacy policy, you need to create those privacy policy again for a second or a third app. So we needed to solve this, but there was a constraint that they wanted, the customers wanted only the content to be shared, but not the whole meta. They didn't want to share all the meta of whether this FAQ is available or not. So we introduced a feature called linked FAQ. So here is an example of that. So they say, for example, there is one app which has a section called general. And within that there is an FAQ which has this translation with that body in title and there's some meta data. Then there is another app with another section, and we want to sync FAQ one to app two. So this will create another FAQ with the same translations as the body. And if I update one body, the backend will automatically update that. So this was the feature that we were supposed to test, and it quickly became really hard to try different kind of combinations. What happens if I delete one FAQ, does that get deleted or not? Should it get deleted or not? What happens if the app is deleted? What happens if the section is deleted? What happens if I update this one? Does that get updated? What happens if I update that one? What if there are five different apps and so on and so forth, right? So how many combinations would you try? It's really hard to know that. So here is an example test case. So for example, I would like to add one app with only English language. Then add another app. Then add first FAQ under the first app. Then link first FAQ to second app to create second FAQ. Then I would like to test whether the translations of both these FAQs match, right? Then I would like to update the English title. Then I would like to check again whether the content is being actually synced and updated to the second FAQ as well. Then I would like to delete the FAQ and then check whether FAQ is actually deleted in the database. Then I would make sure that second FAQ is still remaining intact. So can anyone see a pattern here? Anyone? There are two different things that are happening, which are complexed, which they should not be. That one is a simulation part where I need to do something and one is verification part. Normally in a test, they are complexed. I am proposing that they do D0P. They can be decoupled into two different things and the DSL can allow you to do that. Let's see how. So part of each action, what are the parts? So say for example, this is an action that I would like to do in my test. I would like to add app one with only English language. So first part is there is a type of action that I would like to do. Adding an app. Then there is a certain name that I'm referring to that's app one. But this app one is something that I am referring to. Internally it will be created some ID which the system will refer like ID one, two, three, four, five. But that's a runtime value that I don't know of. So I'm referring it to in a way that I can understand in my test. Then there is an argument to that that I would like to have only English language in this app. Maybe I would like Spanish. Maybe I would like some Hindi language as well. Then there is a certain expected result as per my spec, as per my understanding, as per my model. And there is an actual result which comes from the database, which comes from the state. So there are five parts to in each action that needs to be understood. So what if we could express this action that we need to do in terms of data? So here we are going to use something called as def record. It's something like basically like a class, but without inherently having functionality built into it. Just think of it as a hash map. It's just a hash map of this is the constructor. And just those are the arguments to this constructor. So I'm saying there is an ad app which will have app one and that's the hash map configuration. Does this make sense? Okay. So here is a similar set of test cases, but in terms of data. Right? So here I'm adding an app. Then I'm adding one FAQ. But here I'm referring to the name. So app one is being referred later. So I'm saying when you added that app, call it app one. And when you want to add an FAQ, call it FAQ one, but add it to app one. And so on and so forth. So this allows me to say the test in exactly the way I would express it to a developer. Add one FAQ, then add create one app within that app, create another FAQ. It's similar, but this is executable. Right? So, but to run this, this series of action, you need a certain context to maintain because it's kind of like a programming language. Right? So to have that context, you need three parts. One is the environment. So the environment contains, when I say app one, I actually internally it will mean the ID of that app, which is 970. Right? So this is, this is a giant hash map. There are three parts to it. Environment. Within the environment, there is apps. Within the apps, there is app one, app two, whatever it may be, depending on what actions you take. And then the app ID of the actually what I need to refer to, to actually do something. Then in second is latest simulated state. So after each action, what is the current expected state of the system? From my understanding. And then there is a log of after each action taken. I want to log what happened for what that action. So if I had added an FAQ, what was the simulated state at that point in time? What was the actually the state of the elastic search? Mongo, whatever, and so on and so forth. Right? So you keep adding to that log history after each action. Make sense? So what is the, let's just have a high level overview of the DSL. So we'll start with an initial context. We'll take the first action. We'll pass it to the run DSL. Then you'll get an updated context with the updated environment, updated log and updated simulated state. Then you'll pass it again back to run DSL with the second action. Again, give it to run DSL. We'll get another updated context after second action. And then so on and so forth till you are exhausted with all the actions. So let's take a more concrete example of that. So here, that's the initial context where the environment is empty, empty hash map. Latest simulated state is empty because there is no state right now. And the log is just a list of, empty list right now. And then you start with one action that I would like to add app, call it app one with language configuration nil. It's seeing nil because by default we always have English language. You give both to run DSL function and you get an updated environment back. The updated context back which has the environment apps with app one with whatever ID. And some log and some simulated state. Now you pass it back again, recurs back. And then you get the second action. And you again give it to the run DSL. And again it adds. So this time the action was add up to, here you have add up to and then the environment. And then you keep going. But what happens inside the run DSL function? So you dispatch on each action, right? First you need to, what do you need to do is first update the variables in actions to its binding. So when I say app one in my argument, I need to understand when I try to add an FAQ what this app one really means. What is the ID of that? And I need to put that back in the action. I'll give a real example of that. And then you actually need to call the actual function which will do the side effect. Which is part of your actual implementation. Which will be done by the run action function. And then there is the result of that. You need to use that to bind the result back into the environment. So when I create an ad app, once the app is created, whatever app one I'm calling, I need to add that back into the environment. And say when I, in future, when you say app one, I mean this ID, right? Then you would like to update the latest simulated state that after adding this, after doing this action, this is what I expect the state to be. And then what actually was the state in the DB? There is no verification at that point. You just collect history. Normally in unit testing or any kind of testing, you do something and then you immediately assert. Here the idea is you don't assert immediately. You store what happens and what you expected. And later all you just need to go through it and just verify that. And then you continue with the next action and then keep going. So each def record action implements a certain protocol, a DSL protocol to be able to do this. So those actions that we saw, those five actions are each part of a protocol called DSL protocol. So this allows me to add behavior to each data. We'll see an example of that. So here is a def record ad app where the, I once I am adding the app, I want to call it app one with the argument lang config. I want to dispatch on the actual implementation of this and called resolve action bars. Here there is no var. There is no variable that I need to refer because I will be creating an app one, but there is no variable or any previous variable that I'm using. So it just returns as it is. Then I want to run the action for to add an app. I need to call some internal implementation of ad app with the argument lang's config. That will return me an ID with which using that I will update the environment. So in the environment, I'm adding apps app one and that ID is 970. This ID 970 I got from run action, which is a side effect that happened and that buying run action, buying is to signify that there is some side effect, right? Then you would like to update the latest simulated state in my test. I don't care about apps. I care about FAQs, right? So I just say I don't care. I don't, I won't say anything about it. Similarly for update log, I don't care. I just return as it is. Next time I would like to add another app. I dispatch on again on ad app, call the resolve action bars. There is nothing to resolve run action, get ad up, add up to add it to the environment. You get a new ID for that. Update latest simulated state, nothing to do. And then you continue. Now here's the interesting part. Now I would like to add an FAQ, call it FAQ one to app two, which was two app one, which was already created previously. I would dispatch on ad FAQ implementation for resolve action bars. So here the war is app one. What is app one? I don't know. So I would look into the environment, see what app one refers to, which is app ID 970. Put it back inside that map, which I need to put it because that will be used by the actual implementation. Am I making sense? Okay. And then I will actually call run action with ad FAQ for app ID 970. I cannot call app ID with app one because that app one is meaningless at runtime. And then I'll actually get an FAQ ID back, which I will update the environment that if from now on, if you call FAQ one, I mean that FAQ ID one, one, two, right? And then I would like to update the latest simulated state. So there is some model that if after this action, this is what I expect the state to be. And I added to latest simulated state. And then I fetch whatever is actually there in Elasticsearch, whatever is actually there in Mongo, or whatever database that you care about, whatever that actual implementation has done, you store that as well. And you store what is the snapshot of that latest simulated state. So that gives you a snapshot history of after each action and whatever action taken. So then I can just run through the whole log and figure out what at what point in time what field. So there is no verification right now. Once you run through the actions, you do verification after that. So verification is straightforward. You compare the result of first action of what I generated, what I expected it to be. And what was there actually in the DB? If they match, you pass for that first action. But say the second action, I got something like this, but actually the title did not get updated. I can just immediately say second action failed. This is what you expected. This is what you got. And this is what you tried. And this can be done later. I can store this whole log history in a database. Look at other things, you know, anything. So let's look at a real example. So here I'm saying run DSL is the function that will take domain is what I need to, what site I want to add an app to. And then I'm saying add app one and call it language configuration. Let's see what it returns. So it returns a context where apps with app one, which has app ID, this, and there is a section ID. And later simulated status empty log is empty because I don't care about it. Let's take a slightly bigger example. So here I'm adding an app and then I'm adding an sq to that app return a huge output. Let's just see what all it has. So it has the environment, a later simulated state and a log like we discussed. So let's only look at the environment that has apps. It has an app ID and that there is an FAQ FAQ one refers to that FAQ ID. And it also says that app one has this FAQ ID. It's a set. So here I'm saying that add an app, then add an FAQ to that app. Then add another app link FAQ one to app two and call it FAQ two up FAQ two here. Link FAQ one, call it to FAQ two and to the app two. Then I would like to update that FAQ two with the new title and the new body. And then let's just not delete the FAQ for now just to see. Got some output back. So here I got this new title, the new body. These two and you can see here linked apps. This FAQ is linked to another app. So how is this being done? So let's first look at the DSL. So here is the protocol. This is the protocol. All it says is these are the five functions you need to implement. These are abstractions, right? There is no implement. It's like interfaces in Java. There is no implementation in this. All you have to say is to implement this protocol. You need to implement these five functions or any data or any death record. So here add app. Here it's saying this death record takes an app var and an app ads. And it implements this DSL protocol. And here is my implementation of that. So in this resolve action vars, I just return the action back. I don't do anything with it, which is what we saw. It was not resolving any vars because that was not required. In run action, I'm actually calling it an actual implementation of adding an app. With whatever app arguments that I need to pass it to. Am I making sense? Okay. And then similarly, you need to have an update environment, update data simulated state, and then update log. Similarly, for add FAQ here, I need to resolve the action vars. So I take the action in the context. From the environment, it gets the app ID back. I get the section ID, put it back into the FAQ config, and then create a new context. A new action, sorry. This is creating a new action back. But how is this being glued together? And there is a death record for context as well. So here is the context that is environment, latest simulated state, and a log. That's it. It's just a simple hash map. But how is this being glued together? What is this? So there is a run DSL function. You can pass it a domain and an action. It will recursively call itself back with an empty context. So here I'm creating an empty context with an environment, log state, and a log, and a latest simulated state as an empty thing. Then I get it come back here. It just makes sure that whatever you pass to it is the right thing. By doing some pre-checks that everything satisfies a DSL protocol. All actions. Then you check whether context is an instance of context, whether it has this key called latest simulated state, it has a key called environment, and whether a log is a vector, and so on. So then within this, I check. If there is a sequence of actions are there, then take out the first action, resolve that action, and get a new resolved action. Then run that action with the resolved action. You will get action result. Then here I will pass this context, and this thread macro will pass it to the last, as a last argument to each function as a result of that. So update environment, which will have the result action and the action result, and this new context, that will return an updated context, which will get passed to this, which will get passed to this. Finally, you have a new context after running the action, and you run the DSL again recursively with the rest of the actions left, with the new context. That's the key. You just need to recurs, pass the environment around, and keep adding to whatever you want, and keep updating the environment. That's it. So I'll just run a test. So here, for readability, I've also been printing what actually happened. So here it's saying action taken is this, and then I print the diff of what I actually expected and what I actually got, and there are three parts to that. Something that is only an actual, something that is only an expected, and what is common. So if this two is nil, then it has passed. That particular action, because there is no difference between them. So this is common, then it has passed. So here it's saying common to both is this, for elastic search data, and so on. Then I can, so this allows me, so this is a very important step in my opinion, because sometimes what can happen is, there is a bug, and you've simulated it in a very wrong way. So what happens is it can return nil, and there is actually a nil, and you might get nil equals to nil, and then you say passed. But actually it's not really passed. So you need to have some kind of inspection of what this dynamically is being generated, is actually what you really wanted to. I have been bitten by that, so that's the reason why I've added logs for this. And then you can see that it says, pass to test one, no errors, no failure. Any questions so far? So what are the approaches that we can take to verify something like this? Well, we can act. So normally what we do in our normal unit test is that we have hard-coded actions and hard-coded expected output. This is what I'll do, this is what I'll expect. But it limits the amount of combinations that you can try. You can have maybe five or six of them, right? It becomes too cumbersome if you really want to try everything. Then there is actions being simulated and expected output is hard-coded. Say for example, I do these five actions and I know that number of FAQs will always be five. I don't care about the result, I just know the count. I can hard-code that, right? And then this simulated and expected output is generated, which is the approach that I just showed you. So there is a simulated set of actions that I take and there is a model that will tell me what I expected to happen. And then I can use it to verify. But there is another level that we can go into using this, which is we generate everything. We generate the actions and we generate the output as well. So what are the advantages and disadvantages of both? If you have hard-coded actions and hard-coded expected output, it requires no knowledge to understand. Any newcomer tester or even a developer can come and just read your code, right? Anyone can read them. And it's very hard to get false negatives because you can really read exactly what is happening. But it becomes very cumbersome to enumerate them and the modification is hard. So this is a good fit when the system to test is not so critical and it's not so big, it's not complicated enough that I can enumerate them easily. Then similarly, list of action and hard-coded final expected output where output is hard-coded but you're still simulated. So it's slightly better. It becomes more readable because it's like a documentation kind of, right? And it's very... One other great thing about this, I can share it with the dev. I don't have to create a gira ticket which describes what needs to be done. So I've done that. I used to just share the code. Just run this. You will get the expected failure case. And they used to run it. Keep running it till it fails. And when they fixed it, just run it again. They know that it's fixed. That was a great win in my opinion. But the problem is that you need to maintain this DSL. You need to tell how to write this DSL. And it can become a problem, right? And expected output may have some runtime values like FAQ IDs which you cannot hard-code. So that can become a problem. So that can be solved by having expected... generating the expected output. Because if you have that, there is no runtime... even you can even work with a runtime value. But there can be false negatives if your model is also incorrect and the implementation is also incorrect. In the exact same way, you may both miss out on some certain bugs, right? And then there is generated action and generated expected output. So one of the great advantages of this is you can generate large number of tests and you can generate large number of combinations. And one possibility you can run into is that if I generate, say, a 100-action test case and it fails, I don't know what exactly failed. What was the failure? Do I really need 100 actions to do this? Or is there a smaller shrink case which will still simulate this bug? So there is a way out. There is something called as stets.check which will allow you to shrink your output into a smaller test case and it becomes really great. But again, it becomes hard. You need to require the knowledge of understanding how to write this. So let's look at an example of this. So we had a feature called issue audit train. So basically we have another feature called issues and we wanted to log exactly what is happening by the agents who are replying or the customers who are replying on that issue. So it maintains a log of who took an action, what action they took and we need to understand what kind of users we have. So at HelpShift we have app user, the customer who is using the app, then there are support users and even the support users, we have two types, agents and admins and what kind of actions they can take while app users can create an issue, reply to an issue, and admins and agents can create an issue, reply to an issue, resolve some issues, edit acts. So there are certain more actions that they can take. So here is an example of such an issue. Here is an app user who has said, hey, I have an issue and here is an admin who is replying to that and here is another agent who is replying to that issue. So there are two things. Here, issue audit logs. These two are the issue audit logs that we are adding and these are just messages, normal messages that are being sent and then we are interleaving what audit log happened. Like my uncle and my uncle added some tag called game, like that. And here when this issue was resolved, here we add a log that this issue was resolved by this agent. This is useful in debugging. This is useful when, say, you have a customer like Supercell who have like 500 agents, right? And they are like, who resolved this issue? I want to know. Instead of going back to the database and figuring out for them, they can just look at this. So this was a critical system. We needed to get it right and they wanted a certain order of audit logs to happen. They didn't wanted logs to be separated from the issue. They wanted it to be interleaved and we can't have logs being dropped because if logs are dropped, it's a problem. So this and there can be any number of messages. I don't know how many to test, right? So this is a hard problem to solve and you can't do this with just unit testing. So we went through this route. So I'll first demo this feature. So to generate actions, you need to have a certain kind of finite state machine of your domain itself that if I start from this action, what can I do next and what can I do next? So in this case, when I start, I can create an issue and only the user can create an issue with these arguments. Here, this thing is just a vector of three things. What kind of user it is, here in case is the app user, what kind of action they are taking and what are the arguments with that. So this is slightly different. This is using multi-methods instead of protocols, but the idea is pretty much the same. So then when I create, when I start, I can go into a new issue. So I should explain this first. So in this map, basically it says all the left keys are from transitions. Within that, there can be several transitions and to go into the transition, there can be several actions for that. So for example, if I want to go from transition one to transition one, I can have action one to n to do that. So the algorithm, what it does is it starts from whatever transition, randomly picks any transition and to go into that randomly picks any of those actions. This did not be random. You can have some kind of weights attached to each action and say it's very likely from going to from transition one to transition two, action two is taken, 80% of the time. That depends on your model. It can be done. So here I'm saying when I start, I need to go into new issue to go into new issue. There is only one action called user creating an action. Once I go into new issue here, there are three states that I can be in. I can still be in new issue. I can go into in progress issue of that state or I can be resolved. To be resolved, either the agent can reply as resolved message or the support can change the status directly as resolved and so on. Say for example, I start with new issue, it will pick that then from new issue it will randomly pick one of these three states. Whatever state it picks a new issue, it will pick randomly one of those three actions and then so on. This will allow me to randomly combine actions and generate expected output without having to know what I'll be generating. Let's run it and see how it's done. So I'm saying create on this domain, create one issue with five actions. I'll add a sleep so that it's easy to see. Here you can see it randomly added some actions and when I try to look at the log activity of it, here it's saying this person reopened issue, here are some actions were taken. This is random. Let's look at a bigger example. Here you can see it added the more actions to it and this is, I don't even know what this issue, what all it's done. But this is the simulation, where is the test? So here I'm saying create an action, one issue with five actions and then check whether the trails are tested and messages that are being rendered on the screen are also correct. So when I run this, I'm printing this. So there are two parts to it. One is that here it's saying this is what I expected the trails to be and this is what I got. This has passed and then what is being rendered? I expected seven messages to come. I expected seven messages to be there and I actually got seven. Here is the table of what I actually expected and what I actually got. And it's showing the table, this count. This count is important as I'll show you. So even if I run this again, no matter how many times, it always passes. But what if I increase the number of messages? So right now I'm only... This is it. So here from five actions, I'll make it ten. It passed. All those messages have matched. Let me remove that sleep. Let me make it 20. Something has failed. So it did pass up till now, but it failed, I don't know why. Right? And it's saying except for the first message, everything else is not matching. So if we really look at it, it's too big, but if we really look at it basically, the order, it's an ordering problem and it happens on a very, very particular specific case. Right? Let me reduce this to say 15. So as you can see, this allows me to kind of dynamically change and again it fails. Right? Here you can see true, true, true and false. Let's see false 23. Okay? And here it failed again, which is 15. Interestingly, we paginate older messages after 15 messages. This can be related. And turns out it is. So this is the original input data that we got for edge case as an example. Right? And this is doing a lot of stuff. It's hard for me to understand what part is actually important. Right? So the DSL, I can either write a function that is simplifying of the test case or I can do it even by hand. After doing it by hand, I realized this is simple enough. But the problem is, this bug only happens for older messages after 15 messages are there. So there has to be at least 15 messages. Within that, it will never fail. That is why if we had a count of 5 or 10 actions, it just passes all this. But after 15 messages, it may fail only if the audit trail happens to be at the border of pagination. If it is before or after that, it will still be fine. Why? Because there are some audit trails which will have two messages combined. And if that message gets stopped at the pagination, that message will come again at the second pagination. And that is why you will have the same audit trail twice. This bug was really hard to figure out and it took us quite a while after we have done loader exhausted testing that we found this bug. Does this make sense? So what are the advantages of writing a DSL? It helps in finding really, really hard to find bugs. For example, we found duplicate issue messages where the order needs to be just right to find it. Finding ordering bugs is something that we found. And it increased the productivity of a developer and tester because I could share this code and directly say this is how you can reproduce the bug. The disadvantage is that it adds a lot of high cost in maintaining the DSL. Right now, I am the only person who understand this DSL. So that's a problem. If you have a team, like 5 or 10 people, you need to teach them how to use this. And another problem is that what I face is if your DSL is just data if you make some mistake you won't get compilation error because it's just data. Unless it's actually being evaluated by a function you won't get any error. That can be a problem. And you have to educate your team about how to use this DSL. So in conclusion DSL can be used for workflows for testing. Separation, I think that's the key. Separating versus verification. Store your results. Don't verify them immediately. You can store it in DB, store it in memory, do whatever but don't verify it immediately. And then you can do all kinds of things with it. And it's a step towards generative testing. If your system is really critical if you really, really need to test all possible combinations then this can be really, really useful. Here are some resources. There is a one follower who is a very well-known person in DSL community and there is DSL in action written by Debashish Ghosh. It's an excellent book and there are some other links for that. Thank you. Any questions? Yeah. Yes, yes, yes. But QuickCheck is a step ahead because it's more of property-based testing. Sometimes it's really hard to define a property. Right? And this is kind of in between where unit testing and generative testing where I don't know the property but I do. I can model myself and I'll explain it in step by step what needs to be done. So this can be also useful in, say, for example, there is a bug that was found by QuickCheck and I would like to fix it. Now I would like to make sure it never comes back again because QuickCheck may or may not check that again. Right? So I'll express that in my DSL and I'll make sure it's always the same. Yeah. Any other questions? Okay. Thank you.


ASUS has always been keen on experimenting with its VivoBook brand. Their latest effort is called the VivoBook Pro 16X OLED. Unsurprisingly, the pinnacle of their engineering lies within the display options, as it offers a 16-inch 16-10 OLED unit with a 4K plus resolution. Why is it so special? Well, you get all of the benefits of OLED, like True Blacks and Infinite Contrast ratio, but in addition to that, you are treated to a 100% DCI-P3 coverage, which means that it can show much more colors than most of the displays on the market. Stay with us to see more about it. First, let's take a look at the exterior. The 16X comes in an aluminum outfit that weighs less than 2 kilos and is about 19mm thick. The build quality is good, and we were rather happy with the features. There's a webcam shield for instant and full privacy. The keyboard has a backlight and is comfortable to use. The power button has a fingerprint reader on top of it, and the touchpad sports a virtual knob called Dialpad. It could be a godsend for content creators thanks to its built-in support for the Adobe Creative Cloud products. It allows you to scrub through the timeline of the video you're editing, select the size of your brush, or do other useful tasks boosting your productivity. The VivoBook Pro 16X has a USB Type-C 3.2 Generation 2 supporting power delivery and display board. Same as its smaller brother, the 14X, there are also 3 USB Type-As. One of them is a 3.2 Gen 1, while the other two are 2.0. You also get a microSD card slot, HDMI connector, and an audio jack. The memory here is soldered to the motherboard, so it's best to carefully choose its size based on your needs. You can configure the device with up to 32GB of DDR4 RAM, which works in dual channel, so that should be enough for basically anything you might need. Also there is an M.2 slot for storage, but the big surprise here is the huge 96Wh battery pack. Stay with us to see its endurance, it's worth it. The display of this laptop is exceptional. As we said, it offers infinite contrast as each individual pixel turns off to display true black color when needed. Additionally, the viewing angles are great, and we were impressed by the full DCI-P3 coverage of the panel. That's the digital cinema standard, so the screen is great not just for photo, but for video editing too. Also you get blazingly quick pixel response times, besides the 90Hz refresh rate. Yup, the image looks smooth. Frankly, 4K displays have always been a huge burden to the battery. Here comes the enormous 96Wh unit of the VivoBook Pro, which got us nearly 18 hours of web browsing or 11 hours of video playback, which is an unprecedented result. Great work. We got the Intel version of this laptop, and it features up to a Core i7-11370H and a 50W RTX 3050 Ti. But you can also get a configuration with Ryzen 7 or even the super powerful Ryzen 9 5900HX. Our laptop has the RTX 3050 with 50W of TGP, and it performs pretty well. Playing Shadow of the Tomb Raider with 60fps at high settings and 1080p resolution is not an issue with this one. Since this laptop is aimed at content creators, it is very important for apps like Photoshop that the CPU can reach high frequencies. And guess what? You can reap the benefits since the Core i7-11370 here easily reaches 4GHz in short bursts and gets close to it during sustained load, thanks to the dual fan cooling system. Also the external temperatures remain in check, with the hottest point of the keyboard maintaining pretty much the same temperature as the human body. To wrap this up, this device has enough performance to drive all of your content creating needs. Moreover, the 35W Tiger Lake CPUs offer great efficiency, which is reflected in the battery life. No, browsing the web for 18 hours straight won't be an issue with the VivoBook Pro 16X, and the OLED display makes the visual experience so much better. We hope that more and more notebooks will follow that trend.


Everybody forced here ripping 2022 Donner's football hobby three bucks number 23 pick your team style got Andrew P. Jets Anthony C. Seahawks and Antonio M with Cardinals Blake B Packers Carlos F Broncos and Chargers David H Vikings Derek I Washington and Carolina Eric J. Texans Gary H Ravens Honnab with the Cowboys Jacob P Eagles Jeff H with the Bills Jesse L. Browns Jesse W with the Dolphins Joshua W Raiders Saints Justin O Bears Kenny S Steelers Matt G with the Rams Nathan J. Has the Patriots Patrick G Colts Paul R Chiefs Ray G Niners Scott C. Lyons Bucks Titans Sean M. Giants Thomas B. Jags and William S. Bengals. Oh wait, there's the team missing. Hang on Falcons. I forgot And then the Falcons. Sorry. There's a thing I had to uncheck here for it to show up the Falcons are Kenneth all right. Let's get started here Roger Roger It's officially official official All right three boxes. He's done. We'll just join us when he pleases Brandon Smith to a power plus Red Press Roof Trubisky Truby Long-ass Lynn Kyle Hamilton Carson Strong the rookies Eagles Sonhousekins Portrait Red Pressor Michael Brockes Brockes Great start team USA Yeah, we got a cushion this time. Oh, we got a Jets night moves a breeze haul Breeze the Beast Congrats Jets. We'll get that one magged for sure Hutchinson elite series fans of the game Chuck Norris freaking Chuck Norris great star. We got sky more Also starts in this three-boxer Dominator sake one Chris Carter James and Williams The rookies Isaiah Spiller who might get a lot more touches coming up this season Portrait ready to remain Johnson the second and a press proof die cut Walter Payton the 75 bear sweetness Drake London rated rookie Hunter Renfro Jersey Kings for the Raiders number two three ninety nine West Welker red press through Logan Hall bucks rated rookie Yeah, Chuck Norris fans of the game insert feel as Jones Jr. Press for Fred Jamal Adams classic Mookie Jeremy Rucker Hey an elite series Drake London road to the Super Bowl Mahomes press proof to Sean Watson red some mere white Dominators DK Metcalf Trey McBride portrait Cardinals rated rookie Carson strong for Kway Walker Packers rated rookie auto Packers Kway Walker Did I say Josh would W? Yeah, I mean if it's you it's you. You don't go by what I say I Davis George Pickens Press for Fred G. Wayne to 100 for the Colts. Oh, yeah, Josh will be I Saw Jesse W. Yeah, Josh will be yep Raiders Saints Dave on tibidoo No name for the Browns is Nick Chubb. I'll press for Fred Josh Allen What's up This make the Ambo assist the Terence Ross Hey, maybe you can make it make it the magic miss them right now. That's for sure Jordan poyer Octavius test fields dominators picket portrait for the Steelers Red press through to Sean Watson. Yeah, can you portrait Trey McBride there? red press through It's in Patrick Kings of my 13 on the Bucks Kings are a good team too though Lisa the Bucks was it'll be a good team the rookie Skymore chiefs George Pickens Gotta get Milton back in shape kind of a few weeks to get that rust off Dominator Stafford David Bell portrait and Ed Reid Redar and Kings the 100 for the Ravens Dominators Russell Wilson a gold die-cut rated rookie Patriots Pierre Strong Jr. 7 to 25 Solid a card there for the Pats Patriots running back will always play at some point James Cook Gabriel Davis red press through Marcus Peters George Colofta's portrait press through Fred Austin Eckler or shot a white rated rookie a Premium rated rookie Kenneth Walker the third nice K9 Good stuff Seattle. That's a premium edition K9 Wandaille Aaron Donald Super Bowl right a rookie press from Kyron Williams a sawn Haskins The rookies McBride Red iron Kings Skymore Christian Watson Godwin scurronic The rookies Malik Willis Titans Hamilton portrait rated rookie gold press through to Marvin leal 46 to 50 Steelers All pro Kings Ravens Justin Tucker on the Jersey card to 349 brow rated rookie Dominators Jamar Chase Reese Hall rookie gridiron Kings red press through snoop Conor rated rookie Snoop Reese Hall elite series rookie Red press through Felvin Bethea James Williams the rookies Lions Stingley pre-portrait there. I'll see a big auto here Bailey zappy rated rookie Kenyon green on the rated rookie auto Horn fans of the game rain Wilson Seahawks sauce Gardner the rookies John Metzsche press proof to a number to 100 dolphins a known a variation Michael Carter Jets Calvin Austin the third rated rookie press proof Steelers Reese Hall Aquius test of Peyton Manning Colts Danny Gray red press proof was Eddie George Nice smack Did it get to you today or a shift today lead series James Williams? Red press through Dak Prescott Action all pro Shaquille Leonard All time Michael straight hand The lead series Tannehill wrote of the Super Bowl Jamar chase and one more box everybody Nice good stuff smack always gonna have a male day, especially when we've been waiting for it in a national Dominator's Debo Trayvon Walker portrait rated rookie for Jags Rayquan Davis to 98 for the Dolphins Vila stone Junior or v12 as he goes by Kyle Hamilton press for Fred a Keem Hicks Yeah v12 about v8 sauce Gardner the rookies for the Jets Great Iron Kings a lobby rookie press for Fred Devin McCordy Spiller rated rookie base CD lamb and oh no, these are not full names Cedarian Dillion lamb and Zachary Capone Wilson Jason Capone Dominators Parsons Deserita portraits Nice Jesse's his first break right you lead series Devontae Smith a Stafford wrote of the Super Bowl come on now is Cowboys fans of the game auto Chuck Norris is Texas rain sort of a second third The Texas second second yeah, he is Love to see it Love Says see it big card for the Cowboys congrats congrats Devontae Adams Petra Mahomes George Pickens very nice 12 out of 50 gold press proof rated rookie What a box only a third of the way through a it's like one Thornton rated rookie no-name variation Doesn't read her elite series Red press for Brandon Smith rated rookie for the Panthers Aquias test was his easel Jolari Giants the rookies breeze hauled Jets a Romeo Dobbs Packers portrait press for Fred Chris Carson Desmond Ritter fans of the game Mark Wahlberg. I pulled the Mark Wahlberg auto. I think last week Dominators Jalen Hertz So 49 I cannot walk on the third rated rookie portrait auto for the Seahawks Yeah, I think those are like inserts Like truly inserted autos 22 of 49 Seahawks congrats on that. What a box man. It's a great box It's a great break too. Also had a night moves Go some sweet autos here Christian Watson the rookies Packers Demian Pierce portrait cordial Patterson to 153 for the Falcons Yeah, Jesse most the time hobby is the way to go If you want like substantial stuff All pro Kings Cowboys Michael Parsons jersey number to number to 349 press proof red Jamar Chase I just hear the dolphins nice John Meche Tucker action all pros Meche and a press proof red of McCordy again Nasa ice man, that's Kyle More of a goose Yeah, more of a goose press proof red Derwin James jr. Dobbs rated rookie That's 11 to 1 now What is the mercy rule tap the shirt about innings, right? Yeah, definitely different game tonight Mexico fans had the had the team rattle. They're loud All right quick recap what a break that was All right, relics of Hunter Renfrow Michael Parsons Justin Tucker redemption auto Packers quay walker rated rookie Canyon Green Texans Kenneth Walker the third Seahawks to 49 portrait rated rookie auto Night moves Jets breeze hall Hey, and fans the game auto Chuck Norris Cowboys Very very nice one more three bucks are coming up. Thanks everybody


Well, I, I recently was at a conference on emotions and someone asked me, well, what do you do. Well, I wasn't doing anything on emotion so I told her I'm doing early modern legislation but obviously that's the wrong answer. Because I got scrolled by a colleague for telling that person that because I do a lot of cool stuff with digital humanities and as soon as I say that I'm working on early modern legislation people start to try to find a way to the exits and they won't invite me to talk whereas my agenda is kind of full with giving workshops on transcribes. So, in a way research comes a lot sexier when you're working on transcribes or when you're using transcribes because well, that's something people are willing to get a lot of interest in and start understanding it. So, even though I can write some pretty interesting articles, I think, on how governments function and on legislation. That's not something that most people seem to be interesting in, although this one did get a few hits in three weeks time. Yeah, I wanted to share some experiences on using transcribers for a little bit over four years now. And I figured that I put them into 10 lessons, and that still allows me to show you some of the pictures of the stuff that I'm dealing with. So, when I work with early modern legislation, and when I started this endeavor of learning to work with digital humanities, I had no idea what I was getting into, which may have been a good thing. It was a long learning curve, but an interesting one and I started that with the KB National Library, where I was doing a fellowship, and I was working with a computer scientist and they also assigned me a project manager and I had no idea why I would need a project manager. But it turned out I spoke an entirely different language than my computer scientist colleague. So, the first question, or basically, the starting point is what are you going to do. And that may sound like a really easy question, but I wanted to segment a legal text, and then figure out how to automatically metadata them. What I didn't know. And that's bringing me to the second thing is that layout matters because the computer doesn't understand what layout is for me it's obvious where there is a title. If there's an exercise or then anything in between happens to be the body of the text, but apparently the computer is stupid, and I have to tell them everything, which I didn't know. So I started using transcribes after a couple of workshops by Louise Seaworth back then. And I was kind of enthusiastic about creating models and running them over my pages, which was nice. I could easily read them I could search for words, but then the computer didn't know my titles so layout really matters and it's important to pay attention to it and even though two years ago the computer couldn't. You could not do the text recognition first and then the layout analysis that has been improved by now. So that's a good thing. So that make life a lot easier but it's so important to think about whether it matters for your output and whether you need to pour time into it, because play out analysis is, in my opinion, the most boring part and you want to start with the boring part because then the good stuff still has to come. One of the things I learned, especially when giving workshops is that you need to keep your transcriptions in a loop. So even though we keep saying you need to have 30 pages of transcriptions that's a really cool thing, but it's also bloody annoying if you have a very hard handwriting. So I start with five pages and then create a very small model and hopefully it works a little bit on my next pages and I can save a little bit of time, and I keep trying to do that. Even though the model is pretty easy. It makes my life quite a lot easier in the long run because the 30 pages is something I really do not like having to do. But I also learned, especially from my computer scientist colleague and that programmer, and that project manager, but also within the Institute where I now work is that it's very important to talk to various disciplines because understanding what is going on helps you also think about that process and makes you adapt to it. Plus it makes you sound smart. And that also gets you invited sometimes. And then bridge between disciplines and what I tell my students these days is that that is really the key in our future jobs. No one's going to, well, I still have some hope that someone's going to hire me as a historian who knows a lot about legal history, but chances are quite limited. So in order to increase my chances, knowing a little bit about digital humanities might help. And again, if you just look at your research, it helps you to anticipate on what you might be expecting as outcomes or what you could try to meddle with. Yeah, well, kind of obvious teach what you preach. It's a fun thing to do workshops because if you talk to people and you get to teach them how to use a tool or anything about digital humanities. It's kind of helpful to also have that settling your own mind and have that trickle down in your system and not just okay I click this button and click this button but you have to think about that whole process. It really helps just also for your own understanding. So even though if you're using it and you're explaining it to a colleague that can be really helpful for your own thinking process. The fun part is obviously that people tend to have the idea of understanding that you are working on all hands writing, and that the computer can help you. So I did it with the people I was in the train last night, and they actually came up with the idea so I can read my grandfather's handwriting. Yeah, you can. But as soon as I told them that I normally work on 17th century handwriting of legislation they were like, Okay, so that's interesting. Also cool, especially if you're still at the early stages of your career publishing models and data counts as a publication. And when I did my dissertation I did a lot of transcriptions by hand. And that didn't count as publications, but now I'm training models and I'm learning the computer how to read a certain and, and that does count as a publication so that looks cool on my list. And then, well, you history may be a slow science because while writing book is taking your four years at least for dissertation and then it takes a couple of years more to rewrite the whole damn thing. And then, if you're working with the digital humanities, then using transcripts, then you have data sets, and you have models and as some of you heard with the workshop, we can still make that output and figure out smart ways of referencing that. So, that's cool. What you need to be aware of is that techniques changes so we just heard this morning that expert is going to get out of the system and we have to get used to light which, well, that's a bit traumatic for me to hear this morning. Given the number of webinars I gave on expert and how many times that has been viewed. And there are new options as well, like a named entity recognition which is very interesting that we can now adopt that within a model. And that also needs to be something that you put in a footnote that you created the model like two years ago and you couldn't do named entity recognition yet. So that's not incorporated in your model because otherwise you will get comments from your reviewers that, oh boy you didn't incorporate named entity recognition. So, you kind of need to be aware and be aware that that technique changes and that you need to account for the moment that you wrote or created a model, or created the data set and what you could not yet include, but something from hindsight you could now do. So that's something to be aware of and you might want to go back on your steps and change it later on. And then, yeah, it's worth investing your time in, because, well, when I was applying for the grant that I'm currently working my project on.  I hope they are not in the digital crowd because I know they are not here, but I had this professor asking me why I didn't put transcripts in my timetable. Because I was going to take a lot of time to put everything into a computer program and then use that well guess what it saves a lot of time, but somehow I do manage to get my agenda filled anyway, so I'm not saving, I'm not entirely saving time I'm still doing more stuff that's also fun. But yeah, working with transcript is certainly made doing research, lots more interesting. And I'm not sure if you would have listened to me if I were giving a talk about the early modern legislation. So thank you for your attention.


Greetings to all Saint Lucians. I wish everyone a merry and safe Christmas and a happy 2022. I would like to remind us that acts of criminality continue to plague our peaceful and beautiful island. We must all play our part to contribute to our own security. Always have full awareness of your environment and always be in total control of your actions. Do not allow emotions such as anger and substances such as alcohol and narcotic drugs to diminish your level of control. Serious and organized crime continue to pose a formidable threat and COVID-19 is no less. The number of deaths in both cases make a convincing argument. Our way of life, even our survival, is being adversely affected. Existing with COVID-19 does not mean that we should take risk, which may result in us becoming ill or dead. Wear your mask, keep safe distances and numbers and sanitize frequently. Event organizers and business and home owners, you are called to a higher standard in ensuring that the law is at head two at your events and on your premises. Always do the right thing. Therefore, individuals, families and friends, let us continue to abide to all the laws whilst we spread feelings of joy and happiness. The Special Services Unit wishes you a safe holiday season. Fellow Senutians, as we usher in 2022 and say goodbye to 2021, we at the Royal Senutia Police Force wish to say compliments of the season. It is Robert Peel who said that the police are the public and the public are the police. At this point in time, we wish to thank you so much for your support and in 2022, we want you to be there with us even more and we want to tell you that we love you. Just a few tips for you. You can help to prevent it by one, lock it, two, light it, three, hide it, four, remove it, five, close it and six, report it. Don't leave your doors unlocked. Ensure that your lights are turned on. If you have any valuables, please hide it. If you have your vehicles parked in areas that it should not be, please remove it. Do not leave your garage or open and if you have a crime or you see a crime, please report it. Thank you so much for your support and remember we are here to save you. We are in the festive season and our wood network is very very busy. We encourage all road users to take care on our wood network. We do not want another fatality because it could be your loved one or your work colleague. We road safety is our responsibility. We all are an important part to play. Be mindful of the five fatal signs. Speeding, intoxication, drivers fatigue and destruction. As we go commuting on our road network, let us eliminate destruction. Always wear your seat belt. Do not drink and drive. Cross the road like your life depends on it. Drive at safe speed levels. We must work together to make a safer environment for all road users. We can do it. Thanks for playing your part with the traffic department. Wish all a Merry Christmas and a productive 2022. Music plays a pivotal role in balancing your spiritual, your mental and your physical health. The music and the beat that you dance to let it determine a positive outcome in conflict resolution. As we usher in this festive season, let your music resonate and let it be one of peace, love and harmony. From all of us at the Royal St. Lucia Police Band, we salute you and we say let your music play on. Season's greetings. The Marine Unit would like to wish everyone a safe season. To those who choose to use the seas over the season, we encourage you to observe the small craft and swim advisory from the Met office before venturing out at sea. Also to those who choose to use the sea for illegal purposes, we want you to know that we will be out there during the season full force. Let us all play a part in keeping St. Lucia safe. We at the Marine Unit would like to wish everyone a Merry Christmas and a Happy New Year. Fellow citizens, once again, we are in the festive season. It is also a time to be even more aware of your surroundings. The police are from the community working with the community for the betterment of all within the community. Ensure at all times that your home is safe and secure. When on the road, be aware and mindful of who is around you at all times. Do not display valuables in your car or leave your car unattended for long periods. Always ensure the safety and security of your children and those who are in your care. Guard against the risk of fire hazards in and around your home. Don't just look, observe. Don't be a target to criminals. Be aware, stay safe. La bonne nouvelle toute ma mai, cette lycée. As we enter the festive season, I wish to take some time to thank all personnel of the Rails and Lucia Police Force for their commitment through the year. 2021 has definitely been a year of unique challenges. From a pandemic to increases in crime, you have demonstrated incomparable dedication to duty. To the public, without you our efforts would be futile and as such, I wish to express my sincere gratitude and implore continued support of our initiatives. With the ushering of the season, it is prudent that I highlight the need for better mannerisms of conflict resolution. This year's incomparable homicide rate should serve as an eye opener to all that not only our responses to situations should be reassessed, but our social interventions and support systems require significant augmenting. To those tempted by acts of criminality, I ask that you seek out the existing aid programs to develop skill sets to be more productive citizens. Each committed crime places our country further from our developmental goals. We each have our path to play, none can succeed without the order's engagement. To those committed to a lifestyle of criminality, I say your journey will end. I remain assured that as an organization and as a people, we are resolute. Crime can and will be controlled. In the interim, let us safeguard ourselves, adhere to the precautionary measures, build stronger community ties that foster an environment of neighborhood security and become each order's keeper. To this end, I bid you all a merry Christmas, a prosperous new year, and most of all, a safe environment to enjoy it all. Thank you.


The Guinyu Force, a group of cold blooded, highly trained space mercenaries that act as the direct right hand to the evil emperor himself. And they're definitely not silly either. They're definitely not. That's why today we've decided to create a modern parallel quest in Xenoverse 2 that accurately depicts just how strong of a team the Guinyu Force really are. Will me and my friends Rhyme Cell and Siriax be able to actually overcome these foes? To be honest, I actually give us a pretty good shot over everything else we face. But boys, are we ready to take on the Guinyu Force themselves? Why do you Dino stance to charge? Let me charge, bro. Yeah, why? Bro is not moving at all. I'm going to find him. Dada, you go. That's all you, bro. That's all you. All right, bro. You have me to go. Hold on. Dino got the PTSD. That's all you, bro. I'm not fighting him. Bro, I'm already styling on him. God slicer. There you go. He's not even walked on to you. All right, now the fight begins. Now he's walked on. Bro, you say the fight begins. I say the fight's about to... Why are you struggling?  Why? Bro, I say the fight's about to be... Hey, where'd he go? Bro, he's like... He's got me up against the wall. Bro, he's got me lovingly up against the wall. Bro, I just... He's not going to keep on your training anymore. He's frozen.  I just got out of time freeze.  What's he doing? Dada! You're fine. You're fine. You're fine. You're fine. You're fine. You're fine. You're fine. You're fine. You're fine. You're fine. You're fine. All right, yeah. You're lucky he was looking the wrong way. Damn, I can't even speak. Where'd he go? Where'd he bro?  Whoa! Bro, just win! What? I keep freezing in time!  I just won't go back. I was sick of it. Flex my power just so they didn't know. What is Silver Dragon Blitz? I don't remember putting this on. Whoa! Bro, I don't even know what that move is. I'm not training that. Yeah, it's just Goldo. Whoa! He just threw a rock at you. Bro, he threw a rock at me. High speed edition. Yeah, look at all these rocks floating around us, bro. I was going to say, why are you all charging? No, no, no, no, no, no, no. We're not even charging. We're just waiting. Just sitting here. Dog, just win! Bro, it's Goldo, man. He's tough. I'm going to transform. I'm going to fight him full power, dog. Bro, I don't go full power until they force me to go full power. Why is he being no accident? It seems like he's forcing it up. He just froze me in a cut scene. What's that? What was that? No, no, he's trying some cheap shit, bro. Goldo don't normally do a move like that. Silver Dragon Blitz! Bitch! Oh, I don't know.  I rocked him. Go around him.   That's just what I did. Oh, he got me. Oh, I forgot to tell. My Super Soul wasn't on. Bro, can you get him up? I mean, I just nailed him. Yeah, yeah, yeah.  Hey, bro, give my Michael Phelps on, man. That was kind of embarrassing out there, man. You got to perform a little bit. Oh, it's only embarrassing because Goldo cheated. And I got the wrong Super Soul. Go ahead. Go ahead. The host was watching. They weren't watching, bro. Let me finish him. Let me finish him. Bro, how do you get stopped by the time? He's so slow. Why are you loving with Brad and what are you doing to him? Come on, man. Go to sleep. That's all you have to do, Donald. Bro, come on, man. Bro, toss them into trying to loosen it, bro. Also, I did not equip the right Super Soul. I got to kill somebody to gain some health back. I was in space. It's as if I told you all of this stuff before we start recording, but, you know, OK. Hey, bro. Dang, he's not dead. That ain't my fault.  I watch you. My game, bro. Oh, there we go. Hold on. Oh, he just took a cheap shot at me. Wait, how did he put it? All right. No, no, no. Wait, you just... No, no, no. Get to the middle. Get to the middle. Get to the middle. Let me get Raku. Me and Raku got that same energy. Come here. It's just Goldo into the entire force. Not somebody popping out from the board. I thought we were going to build up for this. Damn, they jumped at me. Bro, Raku is beating the bright side of me. I wish I told you all of that. Wait, should we not just focus Goldo? Because he can freeze time. And I think that might be a little OP. Who has a lot of health, wow.   I'm going to just take Jace out real fast. He's kind of weak. I'm not going to go full power for this fight. Oh, my God, with this Goldo man. I had to remember how to play the game for a second.   I'm using the regen. I'm using it all.   He did die his life? No, I saved my own life, bro.  Listen, I ain't got no stamina. What? What's up? Raccoon Ultra Fighting Bomber, I think was bigger. I was far away unless it hit me. Wait, are they? They're not healing. No, no, no. My eyes were tricking me, bro. Goldo was killing me. No, no. What's happening? No. What happened? What did you get by? Well, I don't know what happened, bro. I don't have any Senzu beans. Wait, there's no Senzu beans on this mission. Wait, no Senzu. Yes, there are. You just don't, you can't afford it. Oh, it's bigger. It's bigger. I told you. Bro, get up. Bro, you can't both do this to me, man. Hold on. How? How? I don't know what the- Help me. Help me. I'm unnavigrated for my life. Did you get it by Raccoon Ultra Fighting Bomber? I did. I was even in a rage of it. No, me too. I like flew away and thought I was in a safe position, but then I just wasn't. Jesus dead. Jesus dead. Jesus dead. It's fine. Let me get back up. Hold on. I'm going to go full UI. If you got transformed, we're just going to- We're going to do this. Let's do this. Bro, just help me out, man. They've been chasing me for the last eight minutes. Hold on. Hold on. I'll heal us. I'll heal us. Shadow's just been running all night. Krillin. Krillin, go hard. If you guys are out there hiding, now would be a good time to help us. I'm going to finish that bull, though. Hey, jump in me. All right, there we go. Let's do this. I'm going to fight. Let's fight. I'm getting my sense of beam, bro, because Raccoon cheated me. All right, cool those down. Cool those down. Bro, Raccoon, I'm trying to hit you with the Terry Bogar, bro. Hey, Raccoon. Are you okay? Please get up. Are you okay? Are you okay? Whoa, bro.     Yeah, I got him. I got him. Don't even worry about him. Go ahead. All right, go ahead. I'll let you catch him then. Let me go get- Just run away from that.  I gotta go ahead and just charge my keyboard fast, and then we're good. Bro, the manateve. A power dunk does not have the range. Yeah, can you break the stamina? Oh! I got him. I got him. I got him. I got him. I got him.  Go ahead. Starter's fall. No way he's more. I just took Raccoon's stamina. He's getting pissed. Raccoon's in his fighting stance. This is fine. This is fine. This is fine. This is not that bad. All right, Dotto, redeem yourself. You finish up with Raccoon. Wait, hold on. Easy enough, fellas. Give me the stamina. Wait, hold on. Like, Raccoon, Jace, I'll have like one power level. Gula has zero. What'd you do to him? Hey, bro. What a combo. I don't even remember how I killed him. I think I just backhanded him. Oh, God. He was plotting something. All right. You guys are taking too long. Yeah, it's been too long. No, let me just stern check, stern check, stern check, stern check. Got him. See, when we use our full power, this is actually easy. This is pretty free. Oh, you guys are using full power? I mean... I was saving that for my second run, but you know what? You guys got a point. I pissed. Why do you make those noises when you transform, bro? Sorry, bro. I had an RP. Hey! Fine. I guess it's my turn to RP. So you're meaning to tell me, getting you by himself is supposed to be... He's going for it. He's going for milking. What is that? Oh, that's just vacation, though. I don't know. It's like a... Oh, does he know he's facing two Xenoverse pros and Machiato, bro? He's going down. Damn, bro. Not me. Whoa! He just clashed with me. What is that? Wait, why are we beamclashing? Why are we beamclashing? Yo, what's happening? Yo!  Wait a while. Why see the protagonist? Whoa!   I don't just lost the first ever beam struggle in Xenoverse. Hold on, hold on. Let me show you what she's done. This is a beam clash. No, what a monumental loss, bro. I said beam clash. Like, I had a choice in the BMI use.  Finish them off. Let's go home. Let me talk to you real quick. I'm holding your test that you always do. I got you all the way. Watch the teamwork. Watch the teamwork. Big bang! I'm not going to knock them out. I saved him. Classic. Bro, I had to hit him with the R yoga. He's going to do another. Never mind.   You just made me use a beam clash. Come here, bro. Just getting you to know I don't lose beam clashes. Leave my friends alone, man. Explode, bro. That's how you know that was a non-canon game. He's getting excited as he takes damage. Be careful. Oh God, what's happening? Who's next? Frieza? I don't know. Wait, what? Does anybody going to stop him from fighting me? Bro, they call the time out. Maybe we should have killed them. We didn't kill all of them. Maybe we should kill them afterward. I call the time out. You beam clashing mother. All right. All right. I regret not killing these three. We probably should have killed them. Somebody's... The question actually stopped him. Let's go. You have to watch all these guys get up. No, Gudo's dead.  We crushed his head. Gudo's the only one we crushed. Honestly, Vegeta was kind of spitting, bro. Watch these guys next time. I'll finish up. I'll finish up.  Die! Take one of them. You know, casually throwing a sun at somebody. Just some Machiata of casual strength, by the way. Power scalers. In case you're wondering, Machiata of scales with galaxies. By the way.  You got me pissed, man. Oh God damn, what? Hello? I couldn't move. What happened to you?  Damn, there's so many of it. Wait, can I hit Raging Dragon all three of them at once if I'm God? Like, I know he's almost dead. I feel like if we killed Ginyu, it's going to be game. Let's do three. Bro, I'm trying, bro. He's going down.  I'm about to finish up, Burder. I do want to get you up. I honestly don't know where you are, to be honest. I got you, Dino. Please die. Appreciate it. There you go.  There you go. And then a little bit of a God sl- That'll just keep all their attention just like that. Yeah. There we go. A little regen. I'm going to call my spirits. Goodbye, Ginyu. Wait, whoa, whoa, whoa. Crush him. I'm out. I'm out. They're all doing a little something to me. They're all doing a little something. They're all on a piece. This is free. This is free. This is free. Honestly, Jaycee here first. Honestly, he's just the Ginyu force. Revenge, bro. God. Yeah. I'll take that. I'll take that every day of the week. He's twirling. He's twirling.  Knock him into me, Ryan. Knock him into me, and I catch him. I got you, bro. Oh, God. Nice try. Oh, I already took off. Hold on. Hold on. Hold on. Hold on. Hold on. Hold on. Look at that beam. Look at the quality of the beam. He gets erased here. Oh, he blocked it. He just ate that. Are you okay?  That's the dog that I know. Don't get hit by that.  That's fine. I got hit by most of it. Uh-oh. Thank you. We're going to clash here. Oh, now he's doing yours. All right. Oh, now it hit me for something. It was literally behind him, but whatever. I'm literally the Vegeta roll. I'm just killing all of these fools. Die. There you go. Bro, just running away. He is running away, bro. Get up, guys. Freeze us. I'm popping a regen, because I know he's coming back with somebody. No. Wait. What is that? What is that?   Oh, you changed your bodies with Ed? Wait, wait, wait. How strong is he? How strong is he? I don't know. I'm not trying to find out.  Look at that, man.   What is happening? He got me in a cutscene. I got him.   He's got the dude force. Bro, hold on. He just one shots you. What's- Better question. Why was Ed here? What? No, no, no. Get up.  Get up, man. You remember when we were talking about this? I said I could pretty much find a thumbnail for any idea. Yeah, bro. I was not accounting for this. I'm going to be out. Who's taking no damage, too? If we kill him, he's going to swap with another cartoon character. He's slow. Don't let him hit you with any hole. He's trying to just flick. He's trying to flick you to death. Hold on, hold on. What is all beam clashing? Hey, y'all double beaming at him. Yep. I'm holding it. I'm holding it. Hold on. What is he? What form is this? What is this? What is he? What is that? What is that? What is that? Oh, you're dead, Adam. What is this costume?  I'm trying, bro. I don't even know what this form is.  I'm up. I'm up. Dotto, get Dino up. I'll take care of that, boy. Good lord. Ed boy. Ed boy. What even timeline are we in? Even loosely canonically. I'll pop a heel. I'll pop a heel. I'll pop a heel. Just kidding. Never mind. Just a knee heel. All right. Dumb. Why? Is this so stupid? Man. I guess I'm going beast. I guess. And can take on beast. It's just one cartoon character. We can win here. I mean, yeah. No. He's got him in the green. I feel like we could easily get this. And maybe there's new for me. I'm probably going to run our stamina. Exactly. Oh, my God. God's like, sir. God's like, sir. God's like, sir. What is the power level all in? I mean, bro. He's looking pretty. Damn.  I'm going to take my time over here. I'm going to take me with all. I love that combo. I love that combo. Oh, look at the combo, Dotto. Look at the combo, Dotto. Oh, my God. I can't believe we got to fight him, man. Oh, dude. We just gave this guy the combo trial. Not forget him, bro.   But I can't be here all day. What is that attack? He's trying somebody. What is that? What is that? I don't know. I can't tell. I can't tell. Oh, it's the one you did. What did he hit me with? He just held you a blast to the hole in his stomach. I already see the animation. Dotto, why are you just staring at me? Go heal Dino. Oh, right. Sorry. I forgot that happened. Bro, sorry. I'm focused on Kyokin Ed Black, bro. Like, I don't know his technique. Whoa. He's just trying to take me out back. Take me out back. Oh, God Slicer. God Slicer. What is after? Is there something he's like, are we going through, like, all the bodies in the cartoon world?  No way. We just first shot.  I mean, Ed got to be one of the strongest characters in, like, cartoons.  Oh, no. He has him. It's in his face. Why is his mouth like that? Is that it? All right. We won, at least. What? In your bingo book? I don't I never expected that to be honest. All right. I don't know why didn't you went to him, but I guess mission accomplished. What was he doing? There's a better question. Hey, this is us running to your channel, bro, to participate in this video. I didn't start. I didn't come. Non-partase.


A photo of Susie Zuzek, an older white woman in a large studio surrounded by her paintings, appears. She is holding a plate with paints in one hand and lifting a painting of flowers and a vase in the other. Between 1962 and 1985, textile designer Susie Zuzek created over 1500 designs for Key West handprint fabrics. Two of her daughters reflect on her vision, passion, and legacy. Video footage of a seagull landing in water. The text appears Key West, Florida. Brightly colored houses with palm trees line a canal. Seagulls take off from the water and fly off screen. The video dissolves into details of one of Zuzek's repeating pattern prints. The print has sky blue background with weighted line drawings of varying birds including a pelican and seagull. Suns with faces drawn in the center are placed in between the spaced birds in multiple sizes. The outlines of the birds and suns are done in black and white, the details done in blue. When astrologically themed print appears next, the print has a lime and yellow-green background tightly arranged to illustrations and words. Astrological symbols and words like Libra, Pisces, Capricorn are placed in between illustrations of their corresponding representations. The name Lily is written in the same loopy script as the astrological signs. Leaves are used as flourishes throughout the print. Martha Dupu and Catherine Dupu, two of Zuzek's daughters, sit on a couch in a room surrounded by colorful paintings and tropical ornamentation. She was constantly, constantly creating. I just thought everybody's mother did that, you know, just wasn't unusual.  And of course her love for animals.  Martha speaks first.  There are large lions, fish, butterflies, chickens and giraffes. Superimposed on the animal drawings are yellow illustrations of sunflowers.   Then a purple backgrounded print appears with repeating framed portraits of varying animals wearing suits and hats. There are portraits of cats, dogs, seagulls, pigeons and raccoons. A drawing of two bears raising martinis appears surrounded by leaves, flowers and mushrooms. A baby bear and more bears engage in human-like behavior. One bear sits in a log, drinking out of a decorated jug. Another stands resting its paws on a hoe. She could let that whimsical creativity come out and it resonated with people. It's like a childlike quality almost and it would connect in a real way. The daisy and butterfly-themed print appears. The daisies with yellow centers and white petals pop out of the black background. Warm yellow butterflies with green detailing are painted above the flowers. Then a black and white photo of a middle-aged Zuzek bent over a table painting a butterfly print. A pelican flies across a blue sky. A print of gray pelicans with orange yellow beaks and black eyes. Pelicans appear in varying positions. Some of their wings are spread out. Some of their wings are tucked into their bodies. Filling in the space between the pelicans are short black curved lines. She was very gracious with sharing anything she knew or how to do it. A print with yellow monkeys with long tails that spiral at the end. Yellow-leaved vines with pink flowers fill the spaces between the monkeys. Martha and Catherine sit on the couch. She would say, make it beautiful and put your heart into it. And to me, when you look at any of her work, including the designs, that's what you see. You just respond. Two prints appear. The print on the left has a blank line illustration of cats and rats on a black background. Yellow and orange swirls overlap the animals. On the right is a print of hippos and a long-legged bird on black background. The hippos are outlined with closed dots and have small flowers on them and are painted in dusty pink color. And between the hippos are green leaf-like shapes. For me, as a daughter who always appreciated her art, I thought she made beautiful things. And I'm so glad that's not lost and I'm so grateful. A print with black and white pandas surrounded by bamboo and a blue background appears. The panda in the center of the print has a stick in its mouth.   The dogs have an orange circle of paint over their left eye. An African wildlife theme print appears next. The background has teal, colored leaves, grasses and flowers. On the print illustrated in black and white, brown and orange are lions, giraffes, tigers, zebras, monkeys, mice, birds and ostriches. The animals overlap each other. A black and white print appears with weighted line drawings of overlapping flowers, chickens, turtles, oranges, suns with faces, pelicans, flowers, starfish, shells and leaves.  She is sat at a table looking at a print with a paintbrush in her hand. She looks down at the painting.