In this short silent video, I wanted to showcase a couple of helpers I wrote for a client. Basically, if you expect people to follow steps that are repeatable, then why not get the computer to do it? (Steve Jobs: I'd rather than a lazy engineer than a good one). I want my Rhapsody modeling to be like my iPhone, in that it just does stuff I expect without me having to think about it. In this video I show a couple of helpers that I did to speed up modeling for a client who wanted to use Proxy Ports. Essentially, I just roll the things that I would do manually into a profile plugin, and Bob's your uncle. The interesting thing about automation is that the more you do, the more ideas to speed things up pop out. Also, the market for SysML has matured a bit hence there are a few more new users, with less training and patience. I want to make it as easy as pie to model, so that they stick to the fun and creative stuff, and are able to demonstrate business value first time, rather than flop around like busy bee's unable to find a flower.
Understand the art of the possible. My mission is to make executable Model-based Systems Engineering (MBSE) easy with the Object Management Group's Systems Modeling Language™ (SysML®) and UML® to make simple modeling easy to deploy to the masses. This site provides practical experience of tuning IBM® Rational® Rhapsody® - a precision engineering UML/SysML tool. Rhapsody tips and ideas will be posted with links to videos. You can follow by email (if google app is allowed).
Tuesday, 20 July 2021
IBM Engineering Rhapsody Tip #99 - Making life easier with some proxy port automation
In lieu of TrustPilot, some recent training feedback
I don't really have the volume of deliveries or business to live in the world of trust pilot. However, I do appreciate that it's good to have real feedback from real people.
As such, I thought I'd share some feedback from recent 3 day Rhapsody trainings in the last 2 months. In the following survey, 5 = strongly agree and 1 = strongly disagree.
What did you like most about the training?
- The labs really helped enforce the theory and brought the material full circle.
- It's a new tool for me that can capture big picture ideas and decompose to manageable chunks.
- Labs are great. Good examples.
- Instructor & the labs
- Flexibility to demonstrate tasks on demand, make it easy in this environment.
- Lots of tips and short cuts for action users
- I had no prior knowledge regarding Rhapsody however leaving the training I feel like I'm able to perform task via Rhapsody. The trainer was also very knowledgeable and kept the participants engaged.
Saturday, 3 July 2021
IBM Engineering Rhapsody Tip #98 - Debugging user Java plugins running in Rhapsody
When you write a lot of add-ons for IBM Rhapsody, it becomes very helpful to be able to debug them. This can be a little more difficult when they're running inside the Rhapsody processes, rather than as an external Java application. There are lots of reasons for running in process though, not least because they run an order of magnitude faster, and you can tie them to a profile that adds things like menu commands and properties to control it. In this video I show how it's possible to debug them as remote java applications enabling you to set breakpoints and step through the code in Eclipse, even though the code is running in Rhapsody. You first need to add some changes to your Rhapsody ini file though. The video illustrates. Hopefully, it helps someone out there. p.s. This is a real life example.
The JVM section is where the Java Virtual Machine that Rhapsody will use is specified.
I've added the Debug1, Debug2 and Debug3 options to my .ini file before, hence I just need to include them in Options list for the JVM.
[JVM]
Options=ClassPath,LibPath,Debug1,Debug2,Debug3
Debug1=-Xnoagent
Debug2=-Xdebug
Debug3=-Xrunjdwp:transport=dt_socket,address=6743,server=y,suspend=yNow when I run Rhapsody and an attempt is made to load a plugin into the Rhapsody JVM, it will wait for a remote debug connection.
To get the Eclipse debugger to connect we need to run a Remote Java Application configuration and change the port number for the Remote Java Application to 6743.
Voilà, the debugger connects with the waiting plugin running in the Rhapsody JVM.
It's now possible to run the application as normal, but set breakpoints in the plugin code. E.g., I'll set a breakpoint in the Java plugin.
That's strange...
To reload the plugin code, I need to exit Rhapsody not just close the project.
Doh!! (an unnecessary space, but I can fix it)
Hope that helps. Interested in MBSE/UML or Rhapsody training or customizations then email me.
Friday, 16 April 2021
IBM Engineering Rhapsody Tip #97 - I can't get no Satisfactions (creating a browser view)
I'm keeping towards the magic 100! This IBM Rational/Engineering Rhapsody tips and tricks video shows the simple steps how to create a new browser filter that shows whether requirements have certain coverage in a model. I show that it works with both requirements in the model and remote requirements in IBM Engineering DOORS Next Jazz application. It's silent though hence if you fancy strutting your stuff then feel free.
Thursday, 1 April 2021
IBM Engineering Rhapsody Tip #96 - The Good, The Bad and The Ugly of Label Mode
Tuesday, 16 March 2021
New IBM Engineering Lifecycle Management (ELM) User Group page
IBM have set a new User Group page for Engineering Lifecycle Management (aka Jazz Continuous Engineering platform). They're saying this will be the central point of all IBM ELM activities, hence you may want to check it out:
There will be features allowing IBM to communicate to the user groups and register to events.
It is open to the public. IBM encourages partners and clients to join.
Academia is also welcome.
Tuesday, 9 March 2021
IBM Engineering Rhapsody Tip #95 - Why diagram ownership is important for Internal Block Diagrams
This video covers an area where new users of SysML often struggle, i.e. understanding the differences between Blocks and Parts, and the role played by the diagram frame of an internal block diagram. Fundamentally, in SysML the frame of the ibd is normally a block and the ibd represents an assembly of parts owned by that block. Within my old friend Rhapsody, unlike Cameo, there's not a context selection method on a diagram that defines the context of its frame. The context of the diagram is determined rather by the ownership of the diagram. This means that diagram ownership is critical. This is why I normally recommend that new users are careful to create internal block diagrams as children of blocks rather than at package level. Related to this is that if you drag an element on to an internal block diagram and it is out of context, then it will be displayed with a dashed line, something new users often struggle to understand. This is because it's not owned by the element that the frame represents. This is video #95 of my Rhapsody tips and tricks video channel that I started 6 years ago.
So what we have here is essentially an internal structure with parts. The block definition diagram defines the relationship between blocks but blocks are types of things and parts are named usages of those types, usually within the context of another block.
If I create an internal block diagram where I want to show these parts, then normally the frame of that diagram would represent the element, i.e. Block, that owns those parts. So, if I create an internal block diagram at package level, then we can see in the frame that this is a package diagram of a package called default.
I can put the parts in it and you can see that the dotted notation will tell me where in its nested structure it is.
But the frame here, doesn't represent system A. It doesn't represent anything that's a classifier. Let me just add a port on the boundary of System A here, and another port with a connector.
Now, if I create an internal block diagram underneath the System A block then the frame tells us that this is an internal block diagram of a block called system A.
That means that the frame represents the block System A. This means that you can show a port of System A on the frame, and the things inside that frame then would normally represent parts that are owned by System A.
So the Block Definition Diagram is a diagram that shows relationships between Blocks and blocks are types of things.
Let's see what happens if I have a nested hierarchy that goes deeper. Maybe component C is a child part typed by Subsystem A and component D has a child part typed by subsystem B.
If I put part D here on the internal block diagram, then you can see that it's dashed because part D is not directly owned by subsystem A, rather part D is owned by subsystem B.
So, if I drag something on to an internal block diagram, for example a Block, then it's dashed because it's not owned by the element that the frame of the ibd is representing.
There's two fundamental things here really. One is that blocks are types of things and that parts are named usages of blocks, usually within the context of another block.
In Rhapsody, there's no context setting on the internal block diagram. The internal block diagram frame is determined by the ownership of the diagram. So the internal block diagram here is owned by system A which means that its frame will represent system A. This is why I always create an internal block diagram underneath a block, rather than at package level (unless you have parts which are global - which I tend to avoid anyway).
