3:35
2024-12-16 13:15:46
41:29
2024-12-16 13:22:05
48:13
2024-12-16 13:27:55
13:32
2024-12-16 15:19:39
16:25
2024-12-16 15:19:40
9:39:05
2024-12-16 16:37:54
12:47:46
2024-12-16 16:38:02
19:48
2024-12-18 11:57:41
Visit the Ai Assisteed MBSE course recordings page
WEBVTT--> It looks like everybody's either with me or close, so I'm going to go back here, and now --> I'm going to make a requirements table in that package. --> So that is create diagram requirements table. --> Now for the scope, I'm just going to drop my requirements package on the scope. --> And you see that they're here. --> And now I can just type the text in. --> I can type it in either on the diagram or in here, but if I go back to my --> requirements diagram, that should be populated. --> So there is a way where you can go directly from chat GPT and paste into either Word or Excel --> into a CSV, and there is a capability for CSV import or copy and paste. --> But I'm probably going to leave that to your own devices unless you want me to poke at it a little more. --> I will show you one other thing about the requirements numbering. --> So again, to get back into that numbering dialog, I click these three little dots. --> Couple things you should know about this numbering. --> One is it's really easy to get gaps in your numbering sequence. --> So I can, for example, increase that number or decrease it. --> But in practice, what often happens is that, you know, you add some, you delete some, and they're not numbered the way you want, and you get gaps in the numbering. --> So there's two important things to know about the numbering in here. --> One is that this information about the prefix and the separator works on a package by package basis. --> So if you want different numbering on one set of requirements than in another, you basically sub-package them here. --> And the other is there's a really useful feature in Cameo for resolving gaps in the numbering. --> But it's hidden very carefully. --> So watch closely now. Do you see there's this little button called details? --> If I click that details button, it unlocks a bunch of hidden functionality. --> And if you get to where you have, you know, your numbering is going one, two, three, four, six, seven, eight, and I guess I can create that condition and then show you this, okay? --> So let's suppose I delete this requirement five. --> And you don't necessarily have to follow me here, but you want to at least watch me. --> So I deleted requirement five. --> And then I'm going to create three more. --> Requirement six. --> Requirement seven. --> Requirement eight. --> And I'm going to re-enter the name real-time display here. --> Then I'm going to go back and delete six and delete seven. --> Then I'm going to go back into my requirements numbering. --> Which I have to get into this way. --> And now I have a problem one, two, three, four, eight. --> Well, I can decrease eight. It'll go to seven. --> And I can do that a whole bunch of times. --> But a lot of times you're going to get to where, like, the numbering is just messed up. --> And what you want to do is use this function called renumber recursively. --> And that will remove gaps in your numbering scheme. --> The other thing I can show you about requirements in Cameo is if I use a containment relationship. --> OK. So let's suppose I decide that real-time display is actually something that belongs to user interface. --> So I can use containment, which shows up here, and I can make real-time display be part of my user interface. --> So I'm going to show you another useful trick in Cameo. --> You may want to follow me on this part. --> So first of all, if I just pick containment off here. --> So in this case, when I'm drawing it top down, it's the correct direction on the containment. --> But a useful feature to know, and that actually doesn't work on my keyboard because I'm on a Mac keyboard, --> but the control key will reverse the direction of that if you do it while you're drawing it. --> So now you notice when I did this, it changed my requirement number from eight to be 3.1, --> which in most cases is kind of what you want it to do. --> So when I say that this requirement is contained within that requirement, it'll actually renumber it. --> If I look at my table now, what you see is that three now has this little plus sign underneath it, --> and I can expand that to see 3.1. --> So those are just useful things to know about working with requirements in Cameo. --> I can now, yeah, you're a little bit faint, but I can hear you. --> So you said the control key will reverse the direction while you're drawing the relation on there? --> I think it's a control key. It's either option or control or one of those. --> Okay, yeah, control just adds a pivot point for me. --> Yeah, it might be the option key. It might be the, you know, unfortunately, this working on a Mac and having a PC keyboard in here. --> It looks like it's the alt key. --> Yeah, and I don't have an alt key on my Mac keyboard. That's why. --> So, yeah, you can, and there's two kinds of containment. --> Like if you try and draw it from here, from the little quick link menu, there is generally a containment that way. --> And there's also usually a second one that goes in the other direction. --> In fact, usually when I work with it, there's a little menu here. --> Maybe they kind of, so we're running 2024 instead of what I usually run, which is 2022. --> And maybe they finally decided that's really confusing having two containment and they just switched it. --> So just as well, because this one is the one that you usually want, because you usually want to draw them top down. --> Yeah, none of my keys are working for that. --> So I kind of left that lab to be a little bit free form. --> But I think if you've done this and made a table and you see how the table works. --> Oh, I should also show you about the columns field in the in the table. --> This field here called columns lets you add or remove columns from the table. --> So if I want to put like satisfied by in here. --> Now I've got another column here. --> So you can use columns to control. --> These are these are kind of all the fields that you have built in to to your requirements element. --> And so you can also create new columns and do things like that. --> But but as a quick intro to the requirements editor, that's probably sufficient. --> One thing that you want to be aware of, see if I can manage to do this. --> If I shrink my cameo window. --> If you shrink this window horizontally, this little columns tab will disappear to save space. --> And it'll be replaced by like two little carrots. --> And you have to know that to to find that table. --> So something to be aware of. --> Anything else you would like me to tell you about requirements? --> Otherwise, I'm about ready to move on to talking about use cases. --> And if there's anything else that you would like me to. --> To tell you about requirements, I am happy to do it seems to let me. --> Stretch my window down, but not not horizontally. --> That's probably just a feature of the amazing Mac book stuff. --> Yeah, I mean, their their virtual PC environment seems to work pretty well. --> So I have I have no complaints about it so far. --> It's been working. --> Really pretty well, I think. --> All right. --> Anything else you would like to discuss with. --> With requirements here. --> Mostly that chapter is about how to use AI to to discover the requirements. --> So would the way how you're like discovering requirements, you would just like copy paste that table into the requirements table. --> Yeah, that's probably the fastest way to. --> To get them in there, I think you have to get it into a. --> A CSV kind of. --> Representation like out of Excel or on a word. --> And then I've seen them paste in after you do that. --> So you sort of have to go from. --> Chat GPT into kind of a comma separated file. --> And then. --> From there into the cameo. --> And you probably have to match the number of columns. --> In your requirements table. --> To the number of columns that you have in. --> In your table out of chat. --> Okay. --> Does anybody need another break before we go into use cases? Are you guys good? --> Okay. --> All right. --> So if anybody if no one has objections, I'm going to go into our next. --> Slide deck here, which is on. --> Use case model. --> Sort of slide zero in this slide deck. --> Is that if you just ask. --> AI to tell you about use cases. --> You might get. --> Business use cases. --> Okay. --> So when I just said, give me the use cases for an electron microscope. --> It told me all the ways that you could use an election. --> And that wasn't what I want. --> What I wanted. --> So I asked it to tell me about software system use cases. --> And you'll notice now. --> It's giving me software slash system. --> For our electron microscope and. --> When you write use cases, they really should be verb phrases or when you name use cases. --> They should be verb phrases. --> So what goes on your domain model are nouns. --> Things. --> What goes on your use case diagram are verb phrases and. --> What goes in your requirements are shell statements. --> And so. --> We'll come back and draw this diagram in a little bit. --> In cameo, but here's the top level use cases that gave me for. --> Operating. --> Our electron microscope. --> And as I said, we'll. --> I'm going to go through the PowerPoint and then we'll do this as a lab. --> At the end of the lecture. --> And then that'll be about as far as we go for today is to. --> To get through use cases. --> We've got. --> 12 slide decks to get to in three days. --> And this is slide deck number five already. --> So we're just fine in terms of. --> Time and coverage. --> And. --> So you'll see that some of these use cases are for. --> Hardware related things like moving the stage around. --> And adjusting the beam parameters. --> Easily using the operator control interface. --> And then some of these use cases relate to image processing. --> Which is more the user of the electron microscope from a. --> Science standpoint, right? Someone who wants to actually. --> Look at an image and do something with it. --> So there's kind of two sets of use cases in here. --> And then actually a third set. --> Which is to calibrate the system and make sure everything is working right. --> So there's admin stuff. --> To update the software, manage users, things like that, right? So. --> These are the scenarios of the system being. --> Operated. --> So this is one of the first things I tried with chat. --> Gbt was I tried to just. --> Ask it to write the narrative for a use case. --> And I was kind of stunned. --> Because. --> My reaction was like, holy crap, this thing writes these cases. --> Really fast and at an amazing level of detail. --> And if you've ever tried to get systems engineers to write use cases. --> It's like pulling teeth. --> Okay, it's systems engineers. --> Basically don't like to do this. --> And one of the reasons they don't like to do it is it's kind of a lot of work. --> Right. It's real work to actually. --> Write this. --> Write all this stuff then. --> And so by default, what chat Gbt will use. --> Is a very long and robust use case template. --> That was originally proposed by a guy named Alistair Coburn in his book about use cases. --> And he calls these fully dressed use cases. --> And one of the reasons that people like this template is because. --> It has sections in it for preconditions. --> And post conditions. --> And it seems very complete. --> Well, I never liked this template myself because it's too much work. --> And when I started asking AI to write the use cases. --> It was kind of like, wow, this isn't really a lot of work anymore because AI will just spit this out. --> But I decided I still don't like this kind of big huge template. --> Because it's actually a lot of work to read the use case descriptions when they're written in this template. --> And I could tell you from some 20 or 30 years of teaching people how to write use cases. --> That what people typically do with this. --> Long template is they kind of get the most important part, which is. --> The sunny day scenario in the rainy day scenario. --> Well, I didn't skip it because. --> The sunny day scenario here is my main success scenario. --> And. --> Here's my extensions. --> Here's my alternate flows. --> So it kind of covers all the detail. --> But it's still a lot of work to read it. --> And so. --> I sort of. --> Poke a little fun in my book at what. --> Alastair Coburn calls a fully dressed use case template. --> And I raised the question about whether. --> This guy is fully dressed or if he's overdressed. --> And. --> If he's walking on Waikiki Beach in his snowshoes and parka. --> Then he might be overdressed. --> Although. --> If you believe that the ice age is coming, then he might be fully. --> So fully dressed or overdressed is kind of a subjective question. --> And one of the cool things about AI is I can say, make me a picture of a guy. --> In snowshoes walking on a frigid Waikiki Beach and it'll do it. --> So I had a little fun doing that. --> But I like a shorter, more concise use case template. --> And so. --> I wrote I had it rewrite the use case template after. --> Reading my books about use cases, and I said, I want you to use the template. --> That I used in my book and told it what page. --> And now it writes the use case in a. --> Shorter, less verbose style. --> And one of the things that I noticed, which I found was really interesting and curious. --> Is you notice there's seven steps. --> In the sunny day scenario of this use case. --> Well, I guess this is a different use case. --> So but there's 14 steps in it. --> What I noticed is when I asked it to write the use case. --> In a shorter template, it omitted about half the steps. --> And what it was doing before was it was. --> Specifying a bunch of kind of internal details like I don't know if you can read this. --> But in step number eight here, it says the software communicates the focus settings to the instrument. --> That's kind of internal detail within the use case. --> That you can really leave out of a use case description. --> So. --> I continue to like the use cases better. --> Using a less verbose style and. --> One of the things that I noticed here when this use case came out came out of chat GPT. --> Was that there was no exception behavior in this use case. --> And having taught use cases for many, many years. --> That's always a red flag for me when I see no exception behavior. --> So in fact, what it did. --> Is it kind of misnamed my exception behavior to be alternate behavior. --> But you always want to be suspicious. --> Of a use case that. --> Has no exception behavior in it. --> So basically, I will write the use case narratives in any style that you like. --> And you can pick the style that works for you. --> You're taking the class from me, so I get to inflict my opinion on you about what I like. --> But I think a use case written at this level of detail is much more readable. --> Than the big verbose one. --> And what typically gets done on most projects. --> Is because people hate writing use cases, they just skip it. --> They skip writing the narrative English version. --> And they go directly from the use case diagram. --> To usually activity diagrams. --> So you can elaborate a use case on. --> Either an activity diagram or a sequence diagram. --> But usually it's done on activity diagrams. --> And if you follow magic grid, they will tell you to start doing functional analysis. --> Immediately underneath these cases. --> So they basically treat. --> The use cases as high level functions of the system. --> And then start drawing activity diagrams and decomposing activities into child diagrams. --> Sub sub diagrams. --> And in my experience, that's where you start spending a lot of your modeling time on activity diagrams. --> So if you have experienced. --> And I think at least one of you said, yep, we got this problem. --> Where the activity diagrams take up all your modeling time. --> It's probably because they are treating your use cases as. --> System functions. --> And not actual proper use cases. --> And then using those high level system functions to do functional. --> And so we're kind of in philosophy land here. --> But. --> I think it's worth talking about. --> What's the difference? --> Because a lot of people don't understand. --> What is the difference between a functional decomposition and a scenario decomposition? --> And so what a use case model is supposed to be. --> Is a scenario decomposition where you're talking about. --> The system from the perspective of the user. --> As opposed to a functional decomposition. --> Where you're talking about the system from the perspective of the system. --> And what its functions are. --> Everybody clear on that? --> Because I think it's a really important. --> Distinction. --> So when you. --> Attack use cases. --> From the user perspective. --> Then what you focus on is. --> What actions can the user take. --> That are different from that main. --> Basic. --> Typical usage. --> Sunny day scenario. --> That's your alternate behaviors. --> And then what errors can happen. --> What exceptions can happen. --> During that use case. --> And it's really identifying the alternate and exception behaviors from the use case. --> That. --> Kind of. --> Set it apart from a functional decomposition. --> If I pop back to my. --> Requirements lecture here for a minute. --> Remember we were talking about zigzagging to use cases. --> And focusing on alternate and exception behavior. --> And. --> That was this chart here. --> Where we identified all the alternate and exception behavior requirements. --> So if you go straight to a functional decomposition. --> And you don't use your use cases. --> To identify this alternate and exception behavior. --> Then what happens is in your requirements model. --> You don't have the requirements for the alternate exception behavior. --> Of these cases. --> And. --> So there are. --> Big advantages to. --> At least in my mind. --> There's big advantages to. --> Actually using the use cases properly. --> Any questions on this? --> I. --> I tend to get up on my soap box about it. --> But I do think it's really important. --> So. --> Whereas the typical. --> Usage of activity diagrams in SysML. --> Is to decompose functions. --> What I like to use activity diagrams for in SysML. --> Is to detail out the alternate and exception behaviors. --> So it's a. --> It's a difference in usage. --> You know it's still a yellow use case bubble with an activity diagram inside it. --> But what's on that activity diagram is going to be a little different. --> Depending on whether you're treating your use case as a system function. --> Or whether you're treating your use case as a scenario. --> So I'm not hearing any comments. --> I don't know. --> I don't know what you're thinking about this lecture but. --> I'm just going to continue with it. --> You can tell me after the lecture what you thought about it. --> Or you can interrupt me at any point. --> So. --> And I kind of mentioned this during the requirements chapter. --> Is when you're putting your requirements together. --> You don't want the requirements to be all full of holes. --> It's. --> It causes a lot of trouble if your requirements. --> Are incomplete. --> And if you don't analyze the sunny day and rainy day. --> Behavior in your use cases. --> Then you're going to get Swiss cheese. --> So you're really not done. --> If you haven't considered. --> The rain nation areas. --> Mark you're going to say something. --> Sorry you have that activity diagram was interesting. --> I have not seen that before. --> The structured branching. --> To handle the fail. --> The rich capture fail. --> Yeah so I actually there's a feature in cameo. --> That no one ever talks about and no one ever uses because the feature itself. --> Is buddy. --> I'm going to show it to you and then I'll suggest that you don't use it to draw your activity diagrams. --> But it actually generates them this way. --> So. --> If you don't write your use cases to consider. --> Alternate and exception behavior. --> You're going to miss all these requirements. --> And you can try this prompting yourself. --> But or you can take my word for it you miss a lot of stuff. --> If you don't consider your rainy day scenarios. --> You can also. --> Do your activity diagrams and put requirements on them. --> And then you can say you know if the position of my stage. --> Is not correct. --> I have to adjust that stage position. --> And I have a requirement here that says I need the ability to reposition the stage. --> And I can say that this thing. --> Refines that requirement. --> Okay. --> So you don't always have to put. --> The requirements on the activity diagrams but you certainly can if you want to verify. --> That you're covering all you know everything that you need to cover. --> You can also elaborate your use case. --> With a sequence diagram instead of an activity diagram. --> And if you do that in an object oriented design approach. --> It will help you link your. --> Functions to your box your operations and I'll show you later when we get into. --> Sequence diagram lecture. --> How to do this. --> But how I what I like to do is I like to use. --> The activity diagrams to. --> Make sure I've identified my alternate and exception behavior. --> And then I like to use sequence diagrams. --> To actually put that behavior on the appropriate blocks. --> So. --> Here's a template. --> That I like to use. --> And. --> Remember when I trained my agent Obi Wan. --> This is one of the books that I had him read. --> And then later I found the page number in that book and I said. --> See how the use case is written in this book. --> On page 270 whatever. --> I want you to always write your use cases that way. --> And I learned. --> Very quickly. --> And so now. --> In Obi Wan's training he knows. --> That whenever I ask him to write a use case narrative he's going to write it in this format. --> And just to understand what the format is. --> 2A is an alternate off step 2. --> And after I finish 2A. --> It rejoins at step 3. --> 4E is an alternate off step 4. --> And when it's resolved it rejoins. --> Back at step 4. --> And tries it again. --> So this format allows you to basically. --> Generate an activity diagram for your test team to use. --> Where they can step through all the branches of the use case. --> And test the system behavior. --> And you can do something as simple if you're training chat GPT. --> Yourself you can create a custom GPT file. --> Take a screenshot of this PowerPoint slide. --> A screenshot of the little white block with the format in it. --> And say I want you to use a template like this when you write a use case. --> And pretty much it will do it. --> So you can teach it. --> And you don't have to use my template. --> You can make a template for your own. --> Maybe you like to always show the preconditions and post conditions. --> But you can basically train AI to write use cases. --> In the style that you want them written in. --> And that's really pretty cool. --> Having trained some thousands of people on how to write use cases. --> It's a lot faster to train AI. --> Just like say do it like this. --> And it will figure it out and follow it. --> It will just write them in there. --> So AI is really cool for writing use cases. --> And the number one objection that people have to writing use cases is that it takes too freaking long. --> And it doesn't with AI. --> It will write them very quickly. --> Now you still have to check it. --> But it is a lot faster than starting from scratch. --> So another thing that you can do with it's not exactly part of use case modeling technically. --> But it kind of goes hand in glove with use case modeling. --> Is you can start asking it to identify all the screens of your system. --> And it will be just like show me the screens for image processing. --> And it will tell you exactly what screens you need. --> What each one of them is for. --> What kind of UI widgets you want on it if you want to do that. --> But it will tell you what screens to build. --> And it will make you wire frames or story boards of those screens if you just ask it to generate a wire frame using HTML, jQuery, mobile, and CSS. --> Because AI generates HTML very well. --> And jQuery, mobile has been around long enough that AI understands how to generate web pages with jQuery and HTML. --> So when you're modeling your use cases, especially if they're software use cases, it's really useful to let AI mock up your screens. --> And then you can check what's on this screen, like what buttons are on here. --> And what menu options are on the screen, all your user interface widgets. --> You can check that against the use case narrative and make sure that that's working the way you want it. --> So that's going to bring us to the last lab of the day. --> And that lab is going to be, to start with, to draw this use case diagram. --> So I'm going to go back over to Cameo and start doing that. --> And here's how we're going to do it. --> Use case diagram in the PowerPoint somewhere? --> Yeah, it is that slide. --> Slide, four of these. --> Okay, got it. --> Got it. --> Thank you. --> Yep. --> So here's how we're going to make this. --> We're going to, and actually Maria had a good idea, which is make sure your model is saved at this point. --> So hit the little floppy disk icon there. --> And then we'll save it again after this lab. --> So when we come back tomorrow, you'll have your conceptual model done pretty much. --> So we're going to create a new package in here. --> And we're going to call it Use Cases. --> And you'll notice, by the way, that my package structure is starting to fill up here. --> So now we're going to go make a use case diagram inside of that package. --> That's a SysML use case diagram. --> And then I'm going to count for you so you don't have to. --> We got five, ten, I got like 14 bubbles on there. --> So clearly this is a job for the sticky button. --> There is an alternative that's potentially faster. --> If you were to, if you had all those typed out, so it might be easier to type them out into a text file or Excel file or something like that, you can just copy and paste them in as use cases. --> That way you don't have to paste them in and then type in the names. --> I'm sure you're right, but I don't have them all typed out. --> And I want to show you how to write them anyway, which is something that most SysML training courses don't even bother to do is teach you how to actually write a use case, which of course bugs me no end. --> So now I've got my diagram kind of laid out here. --> And most of the time I'm just going to use regular associations to connect these guys. --> So we might as well start naming things. --> This is my operator. --> That is control instrument. --> This is process and analyze images. --> And there are a couple of other relationships that are the standard ones to use on use case diagrams. --> One is called include and the other is called extend. --> This diagram doesn't have any extends on it. --> But I'll probably show you how to use it anyway. --> Extends is one of the most confusing elements of use case modeling. --> Also, I don't know how much I've shown you the layout techniques, but if I haven't shown them to you, I can show them to you now. --> So on this layout menu item, I have an option to center all these vertically. --> And it's actually quite amazing, but neatness really does count in your SysML models. --> So it's a good idea to get into the habit of using those layout tools. --> So now I'm going to use include relationships between my top level use cases and the ones on this side. --> And I'm going to have a whole bunch of includes. --> And I'll explain to you what includes means in a minute. --> But I'm going to use my sticky button and draw these includes. --> One of the things that I hope comes out of this class is that you kind of come away with a feeling of --> how to be pretty efficient in drawing with Cameo. --> So it is perhaps a big enough exercise to do that. --> I got to go back and use regular associations for these two. --> It's getting close to the end of the day. --> I'm getting a little punchy here. --> But we'll be done in a few minutes. --> So we can manipulate the stage. --> We can select an imaging mode. --> So by using includes, what we're basically saying is that these use cases are kind of part of this use case. --> Okay. --> I had one I had one extra one. --> Okay. --> Looks like you're doing good. --> We'll give you a minute and then I'm going to show you how to use extends. --> All right. --> So I'm going to assume that you're either done or close enough to done to let me introduce --> something new here. --> So we kind of already introduced includes and that just means that these are parts of the higher level use case basically. --> The reason includes got the reason includes exist is mostly for reusing a scenario that's going to appear in multiple use cases. --> So that didn't happen in this case, but we can still use includes to do it extends tends to be a very confusing construct in in modeling use cases. --> But it's normally used for exception. --> And the best way I can give you to think about it is suppose I'm trying to store data here and my storage is full. --> Okay. --> Or maybe I'm trying to retrieve data and my connection is down. --> Okay. --> So those are two different ways that this use case might need to be extended. --> So I'm going to use extends and show you how to model that. --> So first of all, I'm going to make two use cases here. --> And I'm going to call them and all full storage. --> And recover from lost connection. --> So when you use extends, there's a concept called extension points. --> And it means that when you're writing this use case, you have to handle there. --> There's a point where this use case might get extended with whatever's in here, and it's not in your normal behavior. --> Sunny day scenario, but it's something that's going to require handling. --> So when you draw the extends, you generally draw it in the backwards direction from the includes. --> So let's see if I do this right. --> If I start this from here, I'm going to draw the arrow this way. --> I start from the child and I draw to the parent. --> Once I click, it says, hey, there's no extension point here. --> Do I want to add one? --> And I'm going to say yes. --> And the extension point is storage is full. --> And so the way you read this is that when I'm executing this use case, --> if I run into the condition that my storage is full, --> then I'm going to go jump into this extended use case for handling. --> So I'm going to do it once more just so you've seen it twice and you can try it. --> So now I'm going to recover from a lost connection. --> So I'm going to take my extends arrow, start it here, draw it there. --> And in this case, it's not the same extension point. --> So I have to create a new one. --> And this is connection loss. --> And now my use case has two extension points in it. --> One for when the storage is full and the other for when my connection is lost. --> And then how I handle that error condition is going to be described in here. --> I can't quite see if you guys have done that already. --> So this is going to be the last thing that we do today. --> Okay, I think in the slides we've kind of written out the detail for this acquire images use case. --> And so I want to show you how you can go and specify that. --> You guys all done with extends at this point? --> Okay. --> So let's go do acquire images. --> So now we get a bunch of options. --> So I've opened up the use case spec. --> And probably what you're going to wind up doing is just typing the use case in here in this documentation. --> I do want to show you this other feature and then I'm going to recommend that you don't really use it very much or you don't use all of it. --> And I'll show you how to use it and then tell you that unfortunately the tool is buggy. --> And if you use this this feature, it's kind of at your own risk and I don't recommend it. --> But I'm going to open up this thing called the use case scenario sketch. --> And the reason it's worth showing you is that this is actually the right idea about how to specify use cases. --> Unfortunately, their implementation is pretty flawed. --> I'm going to show you how to do it anyway. --> Because I'd rather you know how to think about writing a use case. --> And then once you understand how to think about it, you can just go back and write it in here. --> I have not heard, but this is my first time using 2024 so we can find out. --> I I suspect it hasn't because I actually met like the so project manager for cameo over at that and cozy conference in Hawaii about a year and a half ago. --> And I kind of leaned on him a little bit saying, hey, this feature is almost really great. --> Can you fix it? --> And he was sort of like, no, nobody writes use cases anyway. --> We don't want to bother. --> We got more important stuff to do. --> So I don't really expect it to be fixed, but we'll try it and see. --> And so now what we're going to do and again, I'm working kind of from from here. --> I wonder if I can leave this on the screen. --> Maybe I can leave it on the screen. --> Well, at least if I do it this way, I can just pop back and forth. --> So I want these seven steps in my basic course. --> And if I use this feature, it's going to number them for me. --> So I'm going to click plus in here. --> And it says the S.M. operator initiates the acquired images. --> And I'm going to hit plus again. --> And it says the system prepares the imaging subsystem. --> But kind of just keep hitting plus here. --> And you notice it's numbering these steps automatically. --> And now it says. --> Imaging parameters. --> It has a system validates the parameters. --> So I'm going to pause here. --> And now, if I go back and look at my description. --> Add this. --> This behavior, which says it's an alternate flow, but it's really an error message. --> So it's really an exception flow. --> OK. --> And so what I'm going to do is with step four selected. --> I'm going to select that and then go to exception flow here. --> And now I can add the type or a step. --> So the type is invalid parameters. --> Now I can specify the step here. --> And the step is operator fixes the parameters. --> And then my next step is going to be. --> Rejoin at step five. --> So now I've done this. --> And now I'm going to show you what would be really cool about this particular feature if it worked right. --> But this is where it's buggy. --> OK, so if I click open and update here. --> What it's done is it's actually created. --> This activity diagram. --> So. --> What's cool about it is that I only have to type it once and it actually creates a diagram. --> Unfortunately. --> It is. --> Kind of. --> Almost correct, but not really correct. --> OK, so it'll say rejoin at step five, which would be here. --> But if I try to actually correct this diagram to have this link up here. --> It's liable to mess up my use case text. --> OK. --> And if you do any kind of serious editing on this diagram, it's liable to crash cameo and. --> Destroy your use case text. --> So because of that reason. --> I kind of recommend that you don't use this, even though it's kind of. --> Very tantalizingly close to working correctly. --> This capability is something that. --> I don't know if you know about sparks enterprise architect, but it's sort of a competitive. --> Tool to cameo and when I wrote my book design driven testing. --> Which I think I have the book cover here in my slides. --> I actually went down to Australia and met with the sparks people. --> And. --> I guess I don't have it there. --> But they actually built this capability to generate. --> An activity diagram from the use case text in sparks. --> They call it a structured scenario. --> And the sparks implementation of this works correctly. --> So I kind of tried to copy that feature. --> And then I suppose just lost patience. --> With it and never really finished it correctly. --> So. --> It's a really cool idea. --> But I sort of recommend that. --> Instead of and now by the way. --> I just go straight to the activity diagram if I click on that. --> So to get into this use case specification I have to go back here. --> It will let you. --> Change the text here. --> So if I click on for. --> Exception you see it's there. --> I click on two it's not if I click on four it is. --> So this is a really good way to think about use cases. --> And if cameo worked better it would be a really great feature to use. --> But. --> The world being what it is. --> It's kind of like I can show it to you but not really recommend that you use it. --> I would recommend that you write the use case in this format. --> And you just do it here in the documentation. --> And I wouldn't number any of your steps until the end. --> And I kind of write it in a block of English. --> Just that looks like. --> That. --> You know from here you can draw an activity by hand an activity diagram by hand pretty easily. --> And. --> It's the best guidance I can give you. --> I can't in good conscience. --> Tell you to use this feature because I think you'll wind up unhappy. --> And I don't want you unhappy with me for telling you how to you know that you should use a buggy feature of cameo. --> But it is really in my estimation the correct way to think about use cases. --> So that is all I plan to cover for today. --> We are nine minutes. --> Before five. --> I'm going to stop sharing my screen. --> And then if there is anything else you would like to cover. --> I'm happy to chat about it. --> I really wish I could tell you that feature worked. --> Because it would be really cool if the feature worked but it almost works. --> Sometimes almost working is better than not working at all. --> I feel like it would be just one more parallel option that would kind of compete with sequence diagrams and activity diagrams. --> And there's just so many, you know, so many diagrams and views that you can create. --> You know, the same thing that just becomes this massive program with all these different opportunities and options for representing a system that, you know, --> makes it difficult and I guess very artistic in which way you decide to go. --> Yeah, well, if it worked right, it would save you a ton of time drawing activity diagrams. --> Because it does generate the activity diagrams from the use case narrative. --> But because it doesn't work right, generating these case diagrams is not quite viable. --> So you can basically draw your use case diagrams by your activity diagrams by hand. --> But you're better off, in my brain, you're better off writing the use case in that style and then using that to draw your activity diagrams from. --> That's how I would do it. --> But, you know, I have another comment slash question. --> You mentioned earlier that, you know, people spend a lot of, when they do the functional decomp, that's something that I know our company does a lot. --> You know, you just get into this endless cycle of decomposing activities into lower level activities, into lower level activities. --> And then at some point, you know, for us, we're trying to cut off drawing these lower level activities into, okay, now the next level of lower level activities are going to be software activities. --> Do you have any thoughts on that? To me, it's just, it is this ever extending arm of activities that just goes, you know, in levels deep. --> Yeah, well, a lot of your activities are going to be software activities, and they don't necessarily have to be very deep down the tree. --> But what's what takes a lot of time in cameo is once you start putting object flows on your activity diagrams, then it puts pins on all the activities. --> And then you have to name all your pins with input data and output data, and they get propagated onto the child diagrams as activity parameters. --> And you're spending all this time thinking about inputs and outputs. And that's where it starts to chew up lots and lots of your time. --> So it may be that even, you know, your higher level activities are software activities. --> But there's faster ways to figure out your input and output parameters than doing it with object flows, pins and activity parameters. --> The pain level goes up a lot when you start putting object flows on your activity diagrams. --> So what would you suggest as an example to, you know, as a more efficient way, that's definitely something we have a problem with. --> Because, you know, once you start doing that, especially when you have a whole lot of modelers in there, and somebody goes through an object, updates one object flow on one diagram, --> and then that causes a problem on the next level up and the next level down, and then you got to go through and modify it on that. --> What that causes, you know, just pushes that error all the way up and all the way down. --> Yeah, and you spin your wheels literally for months on that stuff. --> And I wish I was exaggerating when I say months, but I'm not. --> Okay. You can spin your wheels on that for a long time. --> So the way I do it personally is I don't put object flows on my activity diagrams at all. --> I just use control flows. --> And that's kind of back to the original intent of activity diagrams, which is kind of like to put a little flow chart in there. --> Right. And so it's kind of a radical proposal maybe to some people. --> But you'd be amazed how many problems it solves if you don't put the object flows on the activity diagrams at all. --> Then you don't have the input pins, you don't have the output pins, you don't have the activity parameters. --> And when you turn your activity into an operation, you just put in the parameter list of that activity, what are the inputs and what are the outputs. --> And I'm actually kind of right now, my co-author Brian and I are actively considering writing another book, which is going to be called Pain-Free MBSC. --> Okay. And that's one of the things we're going to propose in Pain-Free MBSC is since this is where you burn all the schedule time, just don't do it. --> That's a great idea. If you can somehow get a hold of money saved by using that approach, I would love to use that as ammunition to change the system. --> Well, it's going to be different for every company and they're probably not going to share that data with me. --> But, you know, if you just kind of think about it intuitively, do you need to specify your inputs and outputs? Yes, of course you do. --> Do you need to do that on activity diagrams with object flows, pins and activity parameters? No, there's other ways that you can specify the inputs and outputs to your functions. --> That is the slowest and most painful way that I know to specify inputs and outputs. And it's because, you know, I'm a software guy, right? --> And as a software guy, you would just never do that. You would never draw a diagram because just to specify an input parameter, okay, I have to rename the input pin. --> And then I have to go and, you know, look at a child diagram. And then I have to give it, you know, a type. And it just freaking takes forever. --> Okay. So, you know, and then what you get, and it's just what Daniel is describing, you get all these item flow violations. --> And somebody renames one somewhere and everything breaks. And everybody's just like running around. --> I'm going to use a politically incorrect term, if you'll forgive me for using it. But we used to call this a Chinese fire drill. --> Okay. And it's like everybody's running around fixing these errors. And it wastes incredible amount of time. --> So for me, I like doing activity diagrams. And I kind of just say no to the object flows, right? --> I just think that in theory, it's a good idea to do all this with object flows and activity parameters in practice. --> It takes forever. So I'm kind of radical, you know, about some things. --> And but what I've been thinking recently, and this is kind of a new idea, like a couple of days old, to write this thing called pain-free MBSC. --> It sort of hatched on me when I was teaching, I was in New Mexico last week teaching an on-site class because I'm doing some teaching for Caltech now and they sent me out there. --> And I was kind of going through this with people. --> And then somewhere as the class was wrapping up that day, one of my students said something about, oh, you have this nice pain-free way of doing it. --> And I was actually on the airplane flying home. And it dawned on me that pain-free MBSC has kind of a nice sound to it. --> And I thought, well, maybe it's time for the next book and maybe the next book is pain-free MBSC because there's a similar thing that you'll see with IBDs where there's a way to avoid wasting all your time with IBDs. --> And it's, you know, my experience is I taught hundreds of people at Boeing and other companies teaching from DeSoe course materials, from Boeing course materials, from Enola course materials. --> And everybody always got stuck in the same places. And it's usually with the object flows and it's usually with item flows on IBDs. --> And we'll talk about that one tomorrow because it's when people try to do their item flows and they haven't defined their interface blocks, they get in trouble and they wind up chasing their tail around item flows again. --> But that's, you know, when I've taught classes like this where we have labs, I know where all the students get stuck. --> And then when I worked at that company with Brian, they didn't really know what to do with me when they hired me. --> So they put me on helping a couple projects clean up item flow violations. --> And it was just horrific. You know, they would give me these diagrams all full of red ink and tell me like, go fix all these violations. --> And I tried to say, you know, you can evaluate all of these item flow violations, but they didn't want to hear it. --> So I wound up not working at that company very long, but happily I met Brian when I was working there. --> But there's like two or three places in System L where the practices people follow result in 80 percent of the wasted modeling time. --> And so when I built this course, I left out those places where you get stuck. --> I just didn't put them in the methodology and the process at all. --> And those are the two main ones. One is the object flows on activity diagrams and the other is trying to do item flows before you defined all your interface blocks on IBDs. --> And I'm telling you, 80 percent of the trouble with the System L models come in those two places. --> Well, you know, I always write books when I when I have a battle to fight and I don't want to, you know, go butt heads with anybody. --> I just write another book. This is my ninth one. --> So, you know, so you can do it the pain free way or you can add your pain back in if you're really, you know, so so in love with the painful way of doing things that you can't give it up. --> But it really doesn't buy you anything extra. --> You still get the inputs and outputs on your functions. --> You just do it in a less painful way. --> Thank you. Yeah. --> So I hope that helps. We are four minutes after five. --> So I think it's it's time for us to wrap up. --> We'll pick up tomorrow again at same time at 10 o'clock and we'll start talking about logical architecture. --> And we'll go from that domain model into a logical architecture. --> That's the third place where people waste a lot of time is trying to do logical architecture on a black box. --> It's like I have this black box. Tell me what the architecture is. --> I knew that. That's hard. Right. --> So we'll do that the easy way tomorrow. --> Sounds good. Thank you very much. --> OK. You guys feel like this is on track? --> You getting useful information here? --> Yeah, I'm really, really enjoying the last 30 minutes. --> That was a great conversation. --> And you really have some some great ideas that would tremendously help us. --> Well, you know, the old cartoon, right, is the guy goes to the doctor and he says, doctor, every time I bang my forehead against the wall, it hurts. --> And the doctor says, well, stop banging your forehead against the wall. --> That's pretty much the way I teach this stuff. Right. --> It's like, don't do the things that cause you all the pain and you'll have less pain. --> So that's my two cents. --> Elena, you good? --> All right. We'll see you all in the morning. --> All right. --> Good night. Oh, save your cameo models before you before you leave. --> I'm going to leave my connection to that virtual machine open overnight. --> Save your cameo models. --> Thank you. --> Thank you. --> Thank you. --> Thank you. --> Thank you. --> Thank you. --> Thank you. --> Thank you. --> Thank you. --> Thank you. --> Thank you. --> Thank you. --> Thank you. --> Thank you. --> Thank you. --> Thank you. --> Thank you. --> Thank you. --> Thank you. --> Thank you. --> Thank you. --> Thank you. --> Thank you. --> Thank you. --> Thank you. --> Thank you. --> Thank you. --> Thank you. --> Thank you. --> Thank you. --> Thank you. --> Thank you. --> Thank you. --> Thank you. --> Thank you. --> Thank you. --> Thank you. --> to let him back into the fight. --> Pan presents Alexander with a bold plan of attack. --> While Laji fights his way towards Messina from the south, --> Pan will lead the 7th Army on a dramatic race --> towards the capital city of Palermo --> along the northern coast of the island. --> If taken, Palermo will offer the allied fleet --> a vital base of operations. --> Alexander doesn't trust the American capacity --> for waging war, really. --> But he's thinking, if I say no, --> I'm happy to do it anyway. --> So he says, okay, he says, --> you can take a reconnaissance force, --> which in military terms means --> a large scouting party. --> It's the beginning of what becomes --> a great sweeping movement --> towards Messina. --> Pan divides his forces into two major fronts. --> General Omar will lead one American corps --> to the north of the town of Nicosia, --> splitting the island in half. --> At the same time, --> a second corps of armor and infantry --> will begin on charge of Palermo itself, --> with Pan in the lead. --> The first capital we want to get access --> to a controlled country, --> taken by Patton, was a prize --> that George Patton could not --> have possibly imagined. --> If Patton's army succeeds, --> the capital city and the entire --> western half of Sicily --> will be in American hands, --> and victory will be his own redemption. --> Patton's army heads for Palermo, --> loaded for bear, and ready to meet --> the enemy in battle. --> Finally, Patton is leading the kind of attack --> he craves, a swift assault --> and a full strike on the heart of the enemy. --> ...technology to prevent thieves from --> stealing your wallet and stealing your info. --> Having your information stolen --> is a nightmare, but with --> Slythmin, I know I'm going to die. --> With bunny clips, cash can easily fall out, --> but with the auto-locking Slythmin, --> your cards and money stay securely in place. --> Then just press the button to release the lock. --> Slythmin is ergonomically designed --> to optimize space and keep your belongings --> organized. It has a built-in cash clip --> and a flexible outer band --> to securely fit your additional cards --> and your extra cash. Even with everything --> you see here in the Slythmin, it's still --> ultra-thin. Both key wallets --> are fun and comfortable, but the Slythmin --> is so compact it fits in any size --> pocket. Plus, it keeps everything easy --> to access. The Slythmin holds everything --> from pictures to credit cards to --> driver's licenses. Yeah, it's still so --> fit. Same vibe I do, --> bent cards and damaged magnetic strips. --> Slythmin keeps them protected, gets --> crush resistant, and can really dig a --> beating. Similar wallets over --> $100. But color-clipped now --> against Slythmin were just $29.99. --> Over the next five minutes, they'll --> get an instant $10 discount. --> So it's only $19.99. --> But wait, due to pricing costs and --> supply chain shortages, this may be your --> last chance to get Slythmin at this --> low price. There's a strict limit of --> free Slythmin wallets, while supplies --> last. You still have time to get your very --> own Slythmin wallets, but you must --> act fast. Talk with --> order now. Call --> 1-800-841-3505-05. Call --> businesslythminwallet.com. --> So call --> 1-800-841-3505-05. --> Order now. --> Attention! --> If you or a loved one were diagnosed --> with mesothelioma or lung cancer --> after being exposed to --> asbestos, even if you smoked, --> call the victim's justice group now. --> You may be entitled to money damages. --> A $3,000,000 full-order trust fund --> has been set aside for mesothelioma and --> asbestos patients and their families. --> Since the 1970s, many companies --> did little or nothing to protect workers --> from dangerous asbestos exposure. --> Asbestos exposure can be devastating --> and may have occurred while performing --> work in these industries and trades --> listed on your screen. If you worked in --> many of these industries and were diagnosed --> with mesothelioma or lung cancer, --> call the victim's justice group now. --> The average mesothelioma claim is more --> than $1,000,000 and often --> received in less than a year. --> If you or someone you loved worked in --> many of these industries and trades listed on your screen --> and was later diagnosed with mesothelioma --> or lung cancer, even if you smoked, --> call the number on your screen --> right now to get the help and financial --> compensation you deserve. --> The M1A1A-1 main battle tank --> is one of the toughest --> and most lethal killing machines --> on the battlefield today. --> Yes, sir. It's main objective --> is to go out and rip holes in the enemy's armor --> like a can opener and then attack them. --> Fire! --> From the teachings of growth to the modern --> ruling, experience the soul --> that is based on modern materials. --> Just days after fighting his way --> off the beaches of Sicily, --> General George Patton's army --> is on the move. --> Leading an armored charge --> on the cattle city of Palermo. --> Albert Kessler has no intention --> of sacrificing the cream --> of Sicily. --> He orders the German forces --> back to the northeast --> to build on the high ground --> around Almeda. --> Now other --> tanks between Patton and Palermo --> are disheartened to be --> fully trained. --> But to the east, as the more --> rallying troops push farther inland, --> they once again come face to face --> with a hardened killer --> to return to battle positions. --> As the big red one --> fights its way through a small town, --> Andrew Jameson and his rifle --> continue to make their way --> up one of the narrow streets --> searching for enemy infantry. --> Suddenly, --> as they approach the town square, --> they run right into a Mark VI --> Tiger tank. --> We saw the AA --> coming out of that --> street before we saw the tank. --> So he comes out --> and he takes a look around, --> sees what's going on, --> and we're all down. --> Jameson's platoon leader --> calls for a bazooka --> to take the Tiger out. --> Thinking he might get him out, --> Jameson volunteers. --> Oh, that thing up there --> is so starved. --> So they hide that bazooka --> and unload it up. --> Jameson takes a position --> ready to hammer the Tiger --> with an explosive round from the bazooka. --> Suddenly, --> the turret slowly turns towards him. --> Jameson finds himself staring down --> at the Tiger's muscle. --> And I knew he saw me. --> So I take off the cover --> My role model tells us --> you want me to get your silver star now. --> Okay. --> That was an incident, wasn't it? --> Yeah. --> Go start your tank and see what I can do. --> Years later, --> American Union tanks and artillery --> come with a ring and cut loose on the Tiger. --> Another town --> falls to the G office --> of a big red line. --> 60 miles west --> a black and silver heart --> is all sharing in its glitter heart. --> I mean, --> there's only a matter of time before you're going to give up. --> I mean, who's going to stop? --> George S. Patton. --> Friday, --> on July 23, 1943, --> four days after getting off --> on his cattle recharge, Patton --> had a tryout at 75 --> Orange Hill, there. --> It has garnered great headlines. --> As Patton --> bests in the glory of his triumph, --> word reaches the allies from Italy. --> The dictator, Danito Mussolini, --> has been ruled from power by --> King Emmanuel III. --> Mussolini is under arrest and has been placed --> in an isolated prison. --> The Italian-German alliance --> is threatened. --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> the battlefields of Sicily for himself and the U.S. Army. --> And once you have success, you get very hard stuff. --> And once you got happy with having success, it was impossible to stop. --> Despite the horrific friendly fire tragedy in the skies over Sicily, --> that can't be redeemed. --> In less than two weeks, we have led the largest American invasion --> of World War II yet. --> Faced off against the Tigers and the Herbans. --> Captured the Captain's second body. --> The battle for Sicily is just getting started. --> Most of the Germans have gotten by. --> And the reason for that is all wrong. --> The plan is to fight a retreat that falls back on a series of defenses. --> At last, Patton is ready to face whatever castlery and something you have to offer. --> In a letter to his wife, Beatrice, Patton writes, --> The war is far from over. --> We are going to end in a big way. --> I have not the least notion what will happen next time. --> But I don't care where men or women fight. --> So long as I keep fighting, --> it is the greatest of all games. --> In a matter of days, --> the Herbans' army will face their greatest challenge yet. --> As the battle for Sicily continues, --> its troops must go up against the Athali, --> 50 miles off fortified enemy highland. --> Here, the Germans can block every move that they make. --> It will be a race to the finish line of the scene. --> The Herbans' army is digging in, --> ready for a final test. --> From the battlefront to the home front, --> the discrete conflict is well-being in Sicily. --> In studying the city line, --> in dramatic detail, --> I saw the heart and I saw the body. --> I knew the greatest dream. --> Thank you. --> Thank you. --> Thank you. --> Thank you. --> Thank you. --> Thank you. --> Thank you. --> Thank you. --> Thank you. --> Thank you. --> Thank you. --> Thank you. --> Thank you. --> Thank you. --> Thank you. --> Thank you. --> Thank you. --> Thank you. --> Thank you. --> Thank you. --> Thank you. --> Even when the North Africa and Russian fronts began to turn against them --> and millions of German bodies littered the desert sand and Russian plains, --> Hitler steadfastly ignored the obvious. --> His empire was overextended and had far too many powerful enemies. --> The German high command was so --> that Britain and the United States would eventually launch an attack on Medan, Europe. --> The question was never if, but only when. --> Despite intelligence reports about massive buildup of Allied troops in India, --> when D-Day came, Hitler's defenses along the French coast were unable to contain the advancing tide. --> In the initial assault, more than 6,000 Allied ships, --> 13,000 aircraft, and over 160,000 troops swarmed across the English Channel. --> Within a month, a quarter of a million additional men --> and an equal number of vehicles were hammered into the water. --> With their efforts now split between the Allies in the West and the Russians in the East, --> the Germans simply could not resist the onrushing wave of destruction. --> Although it must have seemed like an eternity to the Brits and the Allies doing quite well, --> success came relatively fast. --> By the end of July, the Allies had broken out of Normandy. --> Now, British and Canadian forces drove through Belgium --> on their way to liberate the Dutch port of Antwerp. --> Simultaneously, the Americans fanned out east and northeast across central France --> towards Belgium and Luxembourg. --> On August 25, 1944, parrots were liberated after all the years of German occupation. --> By September the 3rd, less than three months after D-Day, --> Brussels was liberated by the British, --> and a week later, Americans reached Aachen and the German border. --> France had been free, and American troops were poised to cross the sea-free line, --> a massive wall of defensive works protecting the Germany's western border. --> This is the end of the video. --> Thank you for watching. --> See you next time. --> Thank you. --> Thank you. --> Thank you. --> Thank you. --> The Allied invasion is counting the Russian front --> and cost Germany more than a problem. --> The attacks field up and it's severely crippled the low bar. --> The German industry could no longer replace the lost equipment. --> Hitler's Germany was being led dry. --> This was the monster of shrieking military. --> Germany called on every man between the ages of 16 to 60 --> and shrewdly into the fight to save the party. --> But still the Allies came. --> By the end of September, --> the British had opened the port of Antwerp to Allied shipping, --> and less than a month later, --> French troops moved through the Alsace region --> and stood on the backs of Germany's right wing. --> If the German infantry was not unwrapping fast enough in the field, --> strife in the high command only made matters worse. --> Three weeks after D-Day, --> General von Rundstedt, --> Hitler's commander of all troops in Western Europe, --> resigned in this case. --> Two weeks later, --> the massively popular General Erwin Rommel also resigned, --> leading German troops in occupied France --> with virtually no experience in the US. --> If Adolf Hitler could not reorganize his army within a few weeks, --> his thousand-year life would collapse before Rundstedt. --> But there was an array of hope next to the Saskatchewan party. --> If the Allied invasion sat straight from the journey, --> the speed of their advance would have stretched allies to by-lines --> and now passed to the Germans. --> The German army would have been defeated --> in the fall of 1915. --> Addy, to our left France, --> by September the days grew shorter --> and sunny weather returned constant rain, --> reducing their ability to keep pressure --> over the retreating Germans. --> In November, General George Patton's 3rd Army had reduced its number of missions from an August high of 12,000 a month to fewer than 3,500. --> Six months of relentless fighting in marching, followed by months of rain, slowed the Allied advance to a halt. --> Hard to believe you can get all this in just... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> It kind of just sort of reinforces that you should always check what AI is telling you. --> You're certainly not all redundant. --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> ... --> Are you still with us? Did you get called to a meeting or something? --> Nope, I'm here. --> Do you have the signals done? --> We'll just a second. --> Okay. --> So while you're still working, is there anybody here who's brand new to IBDs and hasn't done one before? --> ... --> Okay. --> So I see you're putting them all on the same diagram, the signals and the flow properties. --> I might put them on separate diagrams, but that's okay if you want to do that. --> Probably a little bit more maintainable if you have your signals and your flow properties in separate packages, but that's fine. --> Elena, are you ready to go on to IBDs? --> Yeah. --> Okay. --> So everybody ready? --> Then here's what we're going to do next. --> So I'll do a little bit of theory discussion on IBDs. --> I'm kind of going to assume you mostly all know what they are already, but what you show on an IBD is the interfaces. --> And in this case, it's interfaces across subsystems. --> Okay. --> So you can put lots and lots of stuff on an IBD, and the more stuff you put on it, the more difficult it becomes to read. --> So something that I consider to be good practice is to make different IBDs to show different aspects of the interfaces you're developing. --> So in the interest of time, we're only going to do one. --> And the one that we're going to do is basically to show power coming out of the power supply and feeding into all the other subsystems. --> And we're going to show that using the iPower interface. --> Okay. --> And so we're going to be adding proxy ports to all these other subsystems. --> We're going to type the proxy port with the name of the interface block, iPower. --> And then we're going to show the actual power distribution flowing across those interfaces. --> That makes sense to everybody? --> Yes. Yep. --> All right. --> So how are we going to do that? --> We're going to go back to our subsystem diagrams. --> You know, looking at this again, it's been a while since I looked at this. --> I think some of these signals are the types on the flow properties. --> And we maybe need, we might need to go back and add those types, but we can leave them type free for the moment. --> So how do we make this IBD? --> Again, if this is new to anybody seeing it for the first time, please speak up. --> But we're going to go to our BDD, our subsystem BDD, and then we're going to right click on the system block. --> And we're going to say create diagram, and it's going to be a SysML internal block diagram. --> Now, when we do that, we get this dialog, and it's going to show all the subsystems that we have that we can put on this IBD. --> So I'm just going to say OK. --> And what I get is I get my subsystem diagram. --> Now, we haven't gone and put the parts in the power supply yet. --> So let's just not worry about that for the moment. --> But I'm going to put my power supply on the left, and I'm going to take all my other subsystems and put them over on the right. --> I'll line them all up. --> So we'll get a little zoomed in view. --> And so what we decided to do, or what I decided to do when I made this example, is to only show power on here. --> Because with so many subsystems, if we start trying to show all the different flow properties across all the different interfaces, it's going to really become hard to see. --> So I'm going to now go put proxy ports on all of these subsystems. --> I'm going to do it with my sticky button, because I like to draw fast. --> So I'm going to put proxy ports on all of these. --> And then I'll line these up on the edge. --> Now the next thing I'm going to do, so I'm going to call this one power out. --> And I'm going to call all of these power in. --> I'm just going to copy that name. --> My command keys don't work. --> So when you use ports, proxy ports, and most of the time you're going to use proxy ports, the type of the proxy port is an interface block. --> So the interface block that's going to type all these proxy ports, not surprisingly, is going to be the IPower interface. --> So when I drop IPower on here, it is going to type those interface blocks. --> And you can kind of immediately see that I have a problem with direction here. --> So I don't know if you all know about port conjugation or not, but the way you fix this direction problem is you check the is conjugated box. --> And then you see this little tilde symbol. --> So what port conjugation means, if you think of it, any interface has kind of a sender and a receiver. --> And you usually write your interface blocks, you define your interface blocks from the perspective of the sender. --> So if I look at my interface block, all these flow properties are coming out of the interface block. --> That's the perspective of the sender. --> And when I'm receiving the power in all my different subsystems, I have to switch the direction of the interface from sender to receiver. --> And the way you switch that is by opening the port specification and checking the is conjugated box. --> So we'll connect the first one here. --> So this one's going in the right direction and all these are incorrect. --> So I can click this port and interface it to there. --> And I'm OK. --> But if I do that, you see that my cameo tool gives me an error. --> OK. And so if you haven't seen these errors, you can click on this little red X here and say it'll tell you it's an incompatible flow and it'll give you some possible suggestions. --> So what I have to do is reverse the direction of this port power in. --> And that just conjugated the ports. --> If I open this one up now, now is conjugated is true. --> So I can either go through and set is conjugated or I can kind of just wire them up like this. --> And when I get rid of the red ink. --> It'll conjugate all the ports. --> So, again, I can do that and say reverse direction of the port power in. --> And I'm pretty much good to go at this point. --> And so this is one of those time consuming errors that happens all the time when you draw I.B.D.'s. --> And the technique that I'm attempting to teach you here is to always define your interface blocks. --> Before you start drawing I.B.D.'s and before you start putting item flows. --> Oops. Something wrong on that one. --> And it looks like I screwed it up a couple times. --> Accidentally deleted my port. --> And then finally to put the item flows on here I just take my flow property. --> That's interesting. --> Maybe I have to put a type. --> Where do I want to go? --> Interface blocks. --> Signal. --> So if you haven't seen item flow manager before. --> Item flow manager is a very confusing user interface compared to most things in cameo. --> But what you have to check when you put the item flow on there is that it's going in the right direction. --> So I'm going from the power supply to the image processing subsystem. --> And when I say finish it will put that on there. --> Okay. --> So the first thing that I did. --> And I now realize remind myself why I had to have all those signals defined. --> So when I tried to drop the flow property onto the connector. --> And the flow property didn't have a type on it. --> Cameo wouldn't let me do it. --> So the first thing I did is I took the signal power distribution. --> And I dropped it on this outflow property on iPower. --> Okay. --> And then the next thing that I did. --> Was I took this flow property. --> Power. --> And I dropped it on my connector. --> And I said set as item flow. --> And I click finish. --> And if I would have drawn these a little bit differently where this was off of that. --> Then you can kind of see that it's putting the item flow on the right one. --> Now I'll show you I'm going to make a mistake intentionally. --> And show you what happens. --> So I'm going to drop it on that connector. --> But this time I'm going to change its direction to be backwards. --> And as soon as I do that. --> It should light up in red. --> And now if I go here. --> It's going to say. --> Okay I see that one. --> I just. --> You edited the one of the interface. --> You edited the iPower interface block. --> That's what I think I'm missing. --> Yeah so what I did. --> When I created these flow properties they were untyped. --> Okay. --> And. --> I typed it. --> With the signal that we created on the signal diagram. --> So the signal is called power distribution. --> And I have a flow property called PWR. --> Now it has a type on it called power distribution. --> And once I put the type on it. --> That's when cameo let me drop the item flow onto the diagram. --> How did you type it? --> I typed it by. --> Here let me do another one. --> So. --> We have a signal that we made called power regulation. --> Right. --> And so how I typed it was I dropped the signal. --> Onto the flow property. --> And said change type. --> And that's how. --> All those types got on all those interface blocks. --> And then once. --> My flow property is tight. --> Then I can put it on there. --> Now how do I get rid of this. --> Now we got to go look at the item flow manager. --> So if you haven't used item flow manager. --> It is. --> Here. --> And. --> I've got this item flow that's basically wrong. --> And one of the confusing things about this interface for item flow manager is that the delete button is kind of hiding up here. --> OK. --> So I want to delete my incorrect item flow. --> Now I can close item flow manager. --> And now I can go back and grab power. --> Drop it on there. --> And the direction is correct. --> And I can finish it. --> So if you've ever spent much time doing IVDs. --> Your experience may be that this IVD. --> And it got put together. --> A lot more smoothly. --> And with a lot less red ink. --> Than what you've seen before. --> If. --> If you're already doing your. --> Your IVDs and don't have any trouble with item flow manager. --> Then I will say congratulations. --> Your experience may not be typical. --> But if you do them this way. --> Where you define. --> The flow properties and the signals and the interface blocks first. --> Then getting your item flows on here. --> Should just be a question of dragging the flow property. --> Onto the connector. --> And. --> Checking the direction and it should work out. --> Maybe smoother than what you've seen. --> Before. --> I hope so. --> So my point is. --> There is a sequence of steps that you can follow. --> That will keep you out of trouble with item flow manager. --> And personally for me the less I have to use item flow manager. --> The happier I am because. --> I find that it's. --> User interface is not much fun. --> I actually did these in exactly the wrong. --> Order here so I'm going to reorder my diagram a little bit. --> I think the cameo user interface is challenging everywhere. --> Well. --> It is challenging everywhere. Two of the most challenging places. --> Are requirement numbering and item flow manager. --> Having taught cameo for quite a while now. --> Everybody gets stuck with item flow violations. --> Everybody gets stuck with requirement numbering. --> It's just kind of how it is. --> But. --> Really the only. --> The only red ink I got here was trying to show you the mistakes that you're typically going to get. --> I didn't get lots of other red ink. --> And having completed this IBD. --> This movie is something that personally I'm very happy about. --> And the tricks are. --> Define your interface blocks first to find your flow properties to find your signals. --> And then do your IBDs where people get in trouble with IBDs. --> Is very much just trying to add item flows like I can take this connector. --> And I can go here and say new item flow. --> And then pick something from somewhere. --> And I'm going to get in huge trouble if I try to do it. --> So I never make item flows by clicking here and using new item flow. --> I always. --> Check my directions on my ports carefully. --> Check my directions on my flow properties carefully. --> And then just drag the flow property onto the connector. --> And it usually works pretty smoothly if you do it that way. --> Now of course. --> We cheated, right? --> And how we cheated was that before we tried to draw this. --> We asked AI. --> Tell me the interfaces. --> Show me the interface blocks. --> Show me the flow properties on the interface blocks. --> Make the signals which type those flow properties. --> And I'm not going to make you go back and type all the flow properties on here for your lab. --> But if you do it that way, define your interface blocks first. --> Then define your flow properties. --> Define your signals to type the flow properties. --> Then making the IBD becomes much easier. --> And you have a lot less red ink to fight. --> So. --> Let me snoop on you guys and see how you all did. --> Or are doing. --> So. --> Yeah. --> Look at that. --> I see three IBDs and no red ink. --> I'm very happy about that. --> Because when I have taught this class, not this class, but taught other SysML classes before. --> I always spend like half the lab debugging item flow violations. --> So. --> When I talk about writing a book on pain-free MBSE, there's going to be a whole section on what you just did. --> Which is how to do all this and not get trapped in all the red ink. --> You have to understand the relationship between a port and interface block. --> A flow property. --> And a signal. --> And once you understand all that, you can do these IBDs without red ink. --> Sound alright, everybody? --> Okay. --> It is 1213. --> Seems like a good time for lunch to me. --> Any objections? --> So let's come back at 1.15. --> And we'll continue going through logical architecture. --> Is all this stuff making sense as I do it? --> Because I didn't put lots of tutorial slides on here's what an IBD is and try to explain it that way. --> I just sort of explained it in the lab. --> All right. --> Well, then we will reconvene in an hour. --> And if any questions occur to you over the lunch break, save them up. --> And we'll talk about them then. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Okay. --> Hello. --> Everybody here? --> Everybody's here in the meeting. --> So, before we continue with logical architecture, which as you're seeing is a pretty big module --> in this course, any questions about anything we did this morning? --> That means it's all crystal clear, right? --> I hope so, actually, because this is meant to be kind of a very simple, easy to follow, --> straightforward process that steers you around the time and schedule of things. --> All right. --> So, just to kind of review really quickly, we crossed the boundary between conceptual modeling --> and architecture when we started talking about subsystems. --> And then, in addition to listing the subsystems, we started defining interfaces between subsystems. --> Signals needed to type the flow properties on the interfaces and then IBDs to show those --> signals crossing the interfaces. --> Next, so we're still kind of working at the top level of the electron microscope --> now. --> And the next thing we want to do is a top level state machine that connects the subsystems. --> And I basically got ChatGPT to describe this state machine with the prompt that --> you see in orange, which says, describe the top level state machine that connects --> all the subsystems of the SEM. --> And ChatGPT told me what you see in white here. --> It's going to initialize. --> From initialization, it goes into idle. --> Excuse me, are you sharing? --> Oh, I'm very sorry. --> Thank you for that. --> Let me get that. --> Apparently, I'm brain dead after lunch. --> So let me go through that again while sharing the screen. --> So we started by identifying all the subsystems. --> Then we started identifying interfaces and defining interface blocks. --> Those interface blocks have flow properties and the flow properties are typed by --> signals. --> And here are the signals. --> And then once we put that structure in place with the interfaces being defined, --> then it's much simpler to draw our IBDs and show the interfaces. --> And I think where a lot of people get in trouble is that they try to make --> those interfaces up as they're doing the IBDs instead of defining their --> interfaces first. --> And that causes a lot of trouble. --> Next, what we're going to talk about is state machines. --> And so I asked AI to give me the top level state machine that connects all --> those subsystems. --> And the response I got was we start out by initializing and that sets everything --> up. --> Then we go into idle. --> And then we can transition into different operations from the idle state, --> really different states from the idle state. --> When we're scanning the image, we go into imaging. --> After imaging, we go to image processing. --> After image processing, we're going to analyze the images that are produced. --> And after they're analyzed, we can generate reports. --> And then we can go back to idle. --> So I was particularly interested in both imaging and stage control because --> later chapters in the book are going to do things with those two subsystems. --> And so I asked it to describe substates within those two higher level states. --> And I got this result. --> And, you know, you can if you start looking at SysML version two language model, --> you'll realize that the gap between what's being produced here and what's in a --> SysML version two language model is really pretty small. --> And it's just a question. --> It's all the same information. --> It's just a question of changing the format of it to basically generate this state machine in --> SysML version two. --> But we didn't have that available when I was writing the book. --> And so manually, I basically constructed this state machine from what AI gave me. --> And what we are now going to do is you're going to draw this state machine and then we're going to simulate it. --> And just I'll give you a really, really quick review on state machine syntax and notation. --> And is anybody new to state machines? --> Anybody hasn't seen a state machine before or hasn't built one? --> I have not. --> OK. --> So anybody else? --> All right. --> So the yellow bubbles on here or the round cornered rectangles that are in a column represent states of the system. --> And what you can see, because we can have states within states, is that we can have hierarchical state machines with nesting in them. --> And there's a bunch of different ways to do nested states. --> I kind of kept it pretty simple in this example. --> But the black dot or the black circles that you see are the initial state. --> And you'll notice that when we're talking about substates, each substrate has an initial state. --> And then the little bullseye, black and white bullseye looking state is the final state. --> And so for our substates, we have both initial states and final states of the substrate. --> When you hit the final state of a substate, like this one here, then what you do is you follow the unlabeled transition out of that substate. --> OK. --> And the transitions take you from state to state. --> And what triggers a state transition is basically a signal. --> So I'm going to guess that we have a signal called position stage. --> Let me go back and look, actually, just to make sure. --> So do we have a signal called position stage? --> Yes, we do. --> So right up here in the top center is the signal composition stage. --> And when you draw a state machine, you can just drop that signal right on the transition so that, you know, and if you don't have the signal defined, --> you can create new signals by just typing, basically draw the transition and without clicking anything, just type the name of the transition, --> what you think is the name, but it's actually the single name and not the transition name. --> What else? --> So state machines get more complex than this. --> You can put on any state what's called entry behavior, exit behavior and do behavior. --> We're not going to do that on this particular state machine. --> Any questions? All right. --> So we're going to get ready to draw this state machine in cameo then. --> And I will draw it with you. --> So here we are on the desktop again, and I think this is my desktop, which it is. --> So at this point, if you haven't used this, used cameo very much before, you can start to see that I'm getting to have a lot of tabs open. --> And it sort of starts to get a little hard to follow, which is open. --> And so there's kind of an easy thing you can do, which is to just close tabs. --> So I closed all of them. --> And now I'm just going to close some stuff up here, go back to my top level electron microscope diagram. --> And what we want to do next is make a package in our logical model that I'm going to call top level state machine. --> So I'm going to do this here. --> Going to create a package. --> I'm going to call it top level states state machine. --> And now I'm going to create a diagram in my top level state machine, which is a sysml state machine diagram. --> And you'll notice that when you create a state machine in sysml, it automatically gives you the initial state or the initial state and the first state that you transition into. --> And I think I'm not going to bother using composite states. --> I'm just going to make all these simple states. --> I don't think I'll get in trouble by doing that. --> I may be wrong, but I don't think I will. --> I've heard that that can cause problems, but I've not fleshed out how that causes a problem. --> Well, it might cause a problem when we're simulating, but I kind of don't think so. --> So there's lots of different ways to do substates. --> But I'm going to just start with just making everything a simple state, and we'll see if I get in trouble. --> And I'm going to introduce you to the cameo simulator at this point as well. --> So I'm just going to make another state here and a little bit bigger state over here. --> And I'm going to put my state final over there. --> And then we're going to do this top level composite state here. --> And then we'll simulate it, and we'll see if we get in any trouble. --> So we can label these. --> This is initialization. --> That's error. --> And then we're going to wire these up with a couple transitions. --> Now the question is, do I have a signal called initialization error? --> If you haven't used the little magnifying glass here, so it looks like I don't. --> When we did our signals before, we didn't make one for initialization error. --> So let me show you how to do that. --> So this search tool here is really useful, and that's this little search tool there. --> So to label this transition initialization error, and you want to maybe watch this carefully, --> I select the transition, and then without touching anything else, I type initialization error. --> And what you can see over here in the containment tree is that it made a signal for me called initialization error. --> So the quickest way to create signals in Cameo is actually to just label a transition. --> So here's initialization error. --> If I don't get the initialization error, I'm going to get initialization complete. --> And I didn't notice that. --> I'll just check again. --> Do I have initialization complete? --> No, I don't. --> So I'm just going to select that and start typing initialization complete. --> And then this state is called system ready. --> It's easier to read. --> And now I have a state called stage control. --> And I think now we're going to get to a signal that we do have. --> So I'm going to draw a transition from system ready into stage control. --> And again, I'm going to check. --> And here I have a signal called position stage. --> So I'm going to take that signal and drop it on that transition. --> So in all these cases, I want to point something out to you. --> If I open this transition, the name of this transition is blank. --> When I typed the name of that signal, it created a signal element called initialization error. --> And then it created the trigger on the transition and said it's a type signal event and the signal is initialization error. --> So I don't ever put anything in the name field on these transitions. --> If you double click on it, like if you open the specification and type the signal name here, it's not going to work. --> So just make sure you're clear about that. --> The syntax on a state transition is you have trigger, guard, and effect. --> The trigger is generally a signal. --> It could be a different type of event. --> So types of events that it could be are a change event or a time event. --> But in this case, we want a signal event, and that's the most typical one. --> The guard is a Boolean condition that gets specified here. --> And then the effect is usually going to be an activity. --> So what that means is that as this transition is firing, it can actually launch an activity that we've identified on an activity diagram. --> All right. --> So we're going to put three substates in here. --> And then within this stage control state, we're going to put an initial and a final. --> And then we're going to draw a transition back to system ready out of here. --> And then we're going to connect these. --> So technically speaking, this initial state is not really a state, but it is something called a pseudo state. --> And the difference between a pseudo state and a regular state is that you can never rest in a pseudo state. --> You always have to follow the transition out of it as soon as you enter it. --> So my substates here are idle, moving, and stopping. --> And again, if you remember our, let's just go back and look at the domain model to remind you what the stage is. --> So we finally decided to call it sample stage instead of just stage. --> But the stage sits inside the sample chamber and the sample sits on top of the stage. --> And the stage is going to move back and forth because it has motors in it as an X motor and a Y motor. --> We haven't specified those yet, but we will. --> So you can call it sample stage or just call it stage. --> But the stage is where we put our sample and then we move the stage underneath the electron beam. --> So we have position stage coming in here. --> Now we have move stage and we want to check if we have that signal already. --> And we do not have that signal. --> So we're going to create it. --> And then we have another transition called position reached. --> And we don't have that. --> So the reason we don't have these signals yet is that when we asked for all the signals at the top level, --> we didn't get the signals down inside the subsystems yet. --> So this thing, position reached, is really a signal that's going to exist inside the stage subsystem. --> Alright, so is everybody with me where I am on this diagram now? --> Because the next thing I'm going to do is simulate it. --> I got a yes from Mark. --> Yep. --> I haven't dropped my signals. --> I'm building everything twice. --> Okay. --> Maybe when you build it twice, build it on the virtual machine first instead of on your local machine first. --> Are you okay if I start simulating this now? --> I'm good. --> Okay. --> Alright, so if you haven't used – well, first of all, is there anyone who has not used the Cameo simulator? --> I have not. --> Okay. --> So this is going to be your introduction to the simulator. --> Got it. --> Alright. --> So you should have this little triangle button up on the top of this little ribbon. --> That is your simulator button. --> So when you click it, you get this other window, and there's a lot of detail to be had in this simulation window. --> And this isn't the only state machine we're going to do. --> But a couple things you should know. --> One is – somebody put something in the chat. --> It says BRV. --> You're right back. --> Well, I'm going to hope that he knows how to use the simulator. --> I think he probably does. --> So one is you have a little – I'll date myself and say VCR control panel, more like a DVD control panel here. --> And this little play button starts the simulator, and the little red square stops it. --> The other thing that you'll find is that there's this thing called the trigger menu. --> And what's on that trigger menu is all the signals that we are using on this state machine. --> And we're going to give those signals to step through, stimulating the state machine. --> Okay, so I'm going to – there's a bunch of other stuff here. --> Console, variables, all kinds of stuff that we're not going to worry about right now. --> But we're going to start this simulation. --> And what you see is that when you start the simulator, it starts lighting things up. --> And so this state that you see in red, that's not an error. --> That's just where we are in the state machine right now. --> So what signal do we want to give it? --> We want to give it initialization complete and watch it go into the ready state. --> So when I give it initialization complete, now I've advanced – excuse me, I've advanced to ready. --> And next we want to go into stage control. --> So I'm going to give it position stage. --> And now what you see is that it's gone into the stage control state. --> And it's dived in, dove in, drilled down into the internal details of this state. --> And now we're looking at the substates. --> So now we're in stage control, but our stage is idle. --> We're going to move the stage. --> And now the stage is moving. --> And while the stage is moving, it's going to check if it's at its desired location or not. --> And if it is, it's going to send back a signal that says the position has been reached. --> In which case we stop, we get to the state final in the substate, and transition right back to the system ready state. --> So that's your first quick introduction to the simulator. --> Elena, how did you do? Did everything simulate okay? --> That's great. --> Good. --> All right, so we're going to stop the simulation now and finish up the state machine. --> And I'm not going to narrate this every step of the way. --> I'm just going to draw it. --> And then if you have questions, just shout out. --> In this case, I have a signal called scan, and I'm going to use that instead of scan sample. --> You want to be careful not to redundantly create some. --> Yes. --> If you go and you start just like naming that transition and that already and that signal already exists, it won't select it. --> It will just create a redundant one. --> I'm actually not positive. --> You can try it. --> What was the question again? --> If you start typing scan here and there's already a scan sample, will it search for it, find it and pop it up? --> I think you have to search first, but I'm not 100% positive. --> I think it will create, if you don't already have something that is a scan, I think it automatically sets a new signal to scan. --> Yeah, that's what I think too. --> Sure, yes, it already exists, but I'm just asking if it doesn't already exist, but I'm asking if it does already exist. --> It doesn't let you select the one that is not looking to see if something already exists and selects that. --> I think you're correct, and it doesn't. --> I think that due to naming conflicts, it might cause an issue because if you've already got something called scan and it's a signal, --> you're trying to identify, you're trying to name another thing the exact same thing as a signal. --> I think with signals, it might cause an issue. --> It might grab the previous one you got created. --> Yeah, I'm just not sure. You'll have to test it, Elena. --> I'm not certain of the answer, and so the safe thing to do is test it. --> But from a best practice standpoint, before you type a signal name, it's a good idea to search for it up here. --> That's the way I've been doing it. --> So I've got my top level states there. --> I'm going to have one of those. --> Sorry, sometimes I mumble to myself. --> Probably very distracting. --> Okay. --> Daniel, you've got a hand up. Is that a question or you're done? --> I'm done. --> All right. --> And it all simulates. --> Oh, well, let's see. --> Yep, all good. --> Cool. --> Okay. --> And you can kind of see why I'm really looking forward to the day when I can just ask chat GPT to go create my state machine. --> Because there's a fair amount of work involved in drawing these. --> And it looks like I haven't put any signals on those. --> So and you'll see when you simulate it, if you don't put any triggers on these transitions, the simulator will just zip right through them. --> Without stopping. --> Cool. --> All right. --> So I'm going to go simulate mine now. --> First I'm going to save it. --> Okay. --> Okay. --> So here's where all the years since I took high school grammar fail me. --> So these aren't exactly nouns. --> They're not things. --> And they're not exactly verbs. --> Okay. --> And if you ask me what part of speech they are. --> I'm going to be stumped for an answer. --> Yeah. --> Well, what they represent is they represent states that the system can be. --> So it's either waiting for something or doing something and. --> Yeah, I don't know that I would say that it's necessarily a verb of anything. --> I mean, think about some of the most simple ones. --> Just, you know, you could have a power on state. --> You can have a power off state. --> You can have a bit state. --> You can have an initialization state. --> So there's not one answer for that. --> It's just going to be dependent on your system. --> So I'm going to cheat and ask Google here on my phone. --> Like what? --> Grammatically, what part of what kind of element is the word analyze? --> What part of speech is the word analyze? --> It says it's a verb. --> All right. --> Let me try another one. --> What part of speech is the word completed? --> Part of speech is the word completed. --> Completed is the past participle of the verb complete. --> So it is considered a verb when used in a sentence. --> So I guess they're kind of verbs. --> You know, moving is a verb. --> Stopping is a verb. --> So, you know, but usually with state machines, --> you don't really think so much about nouns and verbs. --> They are states that the system can be. --> But I guess most of the time, like ready, you know, what is ready? --> I don't know. --> So it's a good question. --> And it's been way too many years since I took English in high school. --> I apologize. --> But let me check. --> How's everybody doing with getting these state machines to simulate? --> Lana, looks like you're still diagramming. --> I am. --> OK. --> So we'll wait a minute or two and let you get that done and simulate it. --> But I guess while you're doing that, I'll kind of go reinforce a little bit --> what this approach is that I'm teaching you, the domain-driven logical --> architecture approach. --> And it's basically to do everything at the top level first, --> going across the various subsystems. --> And then when you get all that done the way you want it, --> then you start diving down into each subsystem in turn. --> And you kind of repeat the same process, --> but it's within the subsystem instead of across the subsystem. --> And, you know, in parallel with while you're doing this, --> you're probably discovering new requirements, --> and you're probably going to have subsystem level requirements as well as --> the system level requirements. --> So all the while that you're kind of modeling what the system does, --> the basic approach is to get it right at the top level first. --> And then you dive down to each subsystem in turn and get that right. --> And, of course, if you're working on a team, --> once you get the top level stuff correct, --> then you can task different people on the team with going down into each subsystem. --> Right. --> So, does that all make sense just from a philosophical standpoint? --> Yeah. --> And another beautiful thing is it's just a few boxes and lines, --> but it's so good at making clear when things happen at certain times, --> but just in the space. --> You know, imaging only happens after system ready. --> And these are the three things. --> Yeah, me too. --> They're really powerful. --> Yeah, in fact, that may be. --> Not yet. --> We still got some more to go, but you can. --> And this is a really cool thing, which you may want to try. --> Is just save that state machine as an image. --> Go drop it onto Chad GPT and say, write me the C++ code or microcontroller --> and watch it go, because it's really cool. --> In fact, this was the diagram I was working with Brian on a Zoom call. --> And I had done this state machine, which, you know, doing it the first time --> took a little bit of work to transcribe what Chad GPT did. --> Once you see the answer, it's pretty quick to draw it. --> But it took a little while to get this, you know, to simulate correctly --> based on what AI gave me. --> But then from there, when you just say, write the code for this, --> boom, done. --> You know, I just started playing with Chad GPT as of, you know, yesterday and today. --> And I just tried playing around with it after I saw you generate some images. --> And I tried to generate an image and I don't know, I kept running into an error --> or something because I asked it to generate an image, you know, for my family vacation, --> which is, you know, me and my wife and three daughters. --> We've been ready to go to Columbia. --> I was like, hey, show me an image of, you know, a man, a woman and their three daughters. --> And for some reason, I don't know if it's some kind of politically correct thing or something. --> It kept sticking a little boy in there. --> And I'm like, please replace the little boy with a little girl. --> And it said, yes, this is this. --> And it could not get rid of the little boy. --> I'm like, like, it would add a little boy or something and then add a little girl. --> I don't know if that's like a common thing or that's just me. --> Well, that's called an A.I. hallucination. --> And they do happen fairly frequently. --> They happen a little more frequently with image generation because with A.I. --> there's actually like a creativity setting. --> And when it's trying to be creative, it has more latitude to change things. --> But there is a whole political correct wokeness about chat GPT. --> And this is going to vary from different A.I. models. --> You know, Grok is less woke than chat GPT is. --> It has to do a lot with, you know, who owns the company that built the A.I. package. --> I tried so many times to get it to just remove the little boy. --> And it would not do it. --> And I'm just like, I don't have a little boy. --> I would love to have one with a little image, you know, just like that. --> I told it the first time. --> I was like, oh, it's perfect. --> I'm like, that's a perfect image. --> I love it. --> It's in the place where I'm going. --> It's actually like an image of like the amusement park we're going down there. --> And I was like, just please replace the little boy in the image with a little girl. --> And it won't do it. --> Yeah, I understand. --> I actually made a video. --> It's up on YouTube called multimodal hallucinations. --> And I don't know if you guys follow baseball, but I live in Los Angeles. --> And we have a kind of a superhuman ballplayer, Shohei Otani. --> And I noticed last summer watching a Dodger game that Shohei holds his bat kind of like a samurai holds his sword, like kind of up like this, straight up and down. --> And so I had to start generating images of Shohei and of a samurai. --> And I tried to get the samurai and Shohei like the samurai standing behind Shohei in the same batting stance. --> Shohei bats left handed. --> And it kind of just started refusing. --> It would always make the samurai in a right handed stance and not a left handed stance. --> There was nothing I could do to stop it. --> It was I made a whole video about it. --> Why do you think that was? --> Well, OK, at the next break, I'll go find my video and then I'll show it to you after the break. --> But it basically got very confused between left handed and right handed. --> It just like totally confused those concepts. --> How are we doing, Elena? Are you done with your state machine? Does it simulate? --> I'm done. --> Cool. All right. --> So we're going to move on then. --> So this particular slide deck has a lot of stuff in it. --> There's like five or six different labs all rolled into logical architecture. --> But architecture is complicated. --> So that's that's why it's like that is because architecture is it's complex and difficult. --> All right. So now what we're going to try to do is illustrate this recursive subsystem decomposition, --> which means we start taking the subsystems subsystems apart one at a time. --> And then then kind of becomes lather, rinse and repeat. --> You just do it once at the top level and then you do it at as many levels as you need to to get down. --> And what we're not doing just to be clear is what we're not doing is starting with one top level function and decomposing it into sub functions and sub sub functions. --> OK, that's just not in this process that I'm teaching you. --> And so it goes back to the stop banging your head against the wall if it hurts when you do it right philosophy. --> So what we're going to do now is we're going to go decompose the stage subsystem and we're going to go make this BDD. --> And so if you guys are ready, we're going to do that in the lab. Does anybody need a break before? --> I would say let's get this BDD done and then take a break. --> But if you guys need a break, let me know. --> And we can take one now. All right. Not hearing any requests for breaks. --> Off we go. --> Into detailed BDD labs. --> Save my model here. --> Close up a couple of tabs. --> And now inside subsystems. --> What we're going to do is go into the domain model. --> Excuse me. --> I want to go into subsystems. --> And I want to look at the sample stage subsystem. --> And what we're going to do now is we're going to make a child BDD right inside of this subsystem. --> So I'm going to click on the block sample stage subsystem. --> And I'm just going to go create a diagram in here, which is a BDD. --> And then I always count how many of them I have to make. --> Hey Doug, have you ever tried typing them all out and then piecing them in there that way it kills two birds with one stone? --> Because then you just type it once and you paste it and it automatically creates another block. --> So you don't have to do all the clicking and rename and click and rename. --> Well, let's try this. I think I could probably just type it in a note, right? --> And then just copy and paste it from the note. --> So let's try this your way. --> I always learn what I'm teaching, so I'm happy to learn a new trick here. --> So I'm going to just start typing the names of these. --> I may never teach the same again after this. --> All right, so here they are all typed in in a note. --> And I'm going to copy them. --> I can't use my keyboard to do copy, but I'll do that. --> And then if I click on the diagram, I can say paste. --> Sorry, it's a pain when your keyboard doesn't work. --> I actually can't delete that thing now. --> Do you have like a notepad? --> It's not in the containment tree. --> So I've selected the... --> Every time I do that, it selects the whole note. --> You can just copy the text, paste it onto a sticky note on your computer or Word doc or notepad, and then just paste it back in. --> Let me see if I just... --> I've got one note open, so I've got all the images there. --> So I just type out all the text there right next to the image, and then I just paste it in. --> So I'm copying it. --> Let me see if I can find... --> Oops, notepad here. --> I'm a Mac guy, so... --> If I use OneNote, that would work fine. --> Did you open up OneNote for Windows there? --> OneNote for Windows 10. --> That's what I use. --> Oh, but I don't have a... --> I don't have a Windows account. --> Click on the Windows button and then type in Word. --> If you just click on the button, then you start typing Word. --> Yeah, Wordpad. --> Then Control-V there. --> Alright, I assume I have to... --> I would say... I've not tried it like that, but yeah, usually I put it as a list. Yeah, just like that. --> This would probably be faster if my keyboard worked. --> Alright, so... --> No, I'm on a Mac keyboard, and it's a Windows virtual machine. --> That's the problem, right, is that... --> Alright, so I've copied these. --> And now what you're saying is if I go here... --> Just click there on the diagram. --> Just click on the diagram, and then there you go, Elements. --> Then Block. --> That's it. --> Well, that's pretty cool, actually. --> You can do the same thing with any of the properties of the block. --> I just usually type out all the properties, and I paste them on the Containment Tree. --> On the block itself. --> Well... --> Yeah, you can just click and say Control-V if you're on a PC, but on mine... --> Yeah, that's cool. --> So I've got X-Motor, Y-Motor. --> X-Position Sensor. --> So... --> Yeah, it's funny because I literally can't... --> Well, maybe I can. --> Now I got rid of them. --> Yeah, not being able to use your control keys is kind of... --> A little bit frustrating, so I appreciate your bearing with me. --> I actually don't need Stage 5. --> Oh, there it is. --> Okay. --> Okay. --> So, one thing that I just did is I converted my Move algorithm from a block into an activity. --> And I'll show you in a few minutes why I did that. --> Okay. --> So basically now instead of having done a bunch of nested activity diagrams to figure out what my functions are, I'm just going to add the operations to the blocks. --> And how you do that is you click this little button here and say Operation. --> Just say Control-Stage. --> And... --> So what you're doing is you're still uncovering all of your functions, but you're just putting the functions on the parts. --> And I can add values here as well. --> If it's a real, I can type that it's a real right in that string. --> So we don't miss any of the functions by doing it this way. --> It's just, at least to me, a lot more efficient than drawing all those trees of activities. --> I just find this to be... --> I'm not sure if you know, Doug, or if you've ever used that wizard, but you can actually generate a BDD with activities in the form of a block. --> It just happens to be a separate activity. --> Have you used that feature? --> I have not. --> When I'm done drawing, I'm going to ask you to explain it to me. --> Okay, yeah, I'm not a master at it. I've used it a couple times. --> I can't listen and draw at the same time. --> It's like walking and chewing gum, you know. --> Man's got to know his limitations. --> That's what Clint Eastwood said. --> What movie was that? Dirty Harry? --> Probably Dirty Harry, yeah. --> Man's got to know his limitations. --> But I'm always happy to learn new features of Cameo. I pass them on to the next group of students that I teach. --> Just an endless amount of features in Cameo. --> Totally. --> The only way I know how to do it is teach the ones that I use and don't teach the ones that I don't use. --> But I will let you give me a demo of that in a minute. --> Sure. --> The values you're just adding, the type of value it should be, you can just type it in there. --> Yeah, it should. --> Let's take a look at this one when I do it. --> I believe if I open this value up, it's going to give me the name and you see it filled in the type of Boolean. --> From after the colon it takes it as a type. --> Okay, got it. --> Now, this one is kind of an interesting communication interface because it has a signal reception on it. --> And so to add my signal reception, if I go find my signal, assuming I have one. --> No, I actually don't. --> Never mind. --> Because if I had a signal, I could just drop it on there. --> All right, I think I'm done drawing. --> Okay. --> So again, it's a subjective opinion, but I find it a lot faster to work this way than by using activity diagrams and object flows and pins and activity parameters. --> I think this to me is just kind of one step and I find it simpler. --> All right, do you want to show me what you are talking about here? --> So let me try to remember how to just open your screen. --> I double click this. --> Maybe I need to.