Rhapsody TechBlog

BLOG about IBM Rhapsody. Contains technical information as well as more private travel stories.

Page 12 of 16

If it ain’t broke, don’t fix it….

Introduction

I’m not a fan of updates. A few years ago I always switched off my automatic updates. On a Mac that was possible and would hardly have other consequences.
Unfortunately, this is not the case anymore. Modern development methods like DevOps, Agile, Continuous Engineering and I_don’t_know_how_it_is_called are forcing you to keep your system up-to-date. Either Apps don’t work with the latest OS or an App requires a certain minimum version of the OS.
Many systems do not even allow you to wait with updates, even my beloved Mac starts whining and will update without asking.
Walter Quote #2: If it aint broke: Don’t fix it!

Rhapsody

The same applies to Rhapsody. Newer versions will have improvements, bug fixes and sometimes new options or features. Since 8.1.3, IBM will at least deliver so-called iFixes that enclose bug fixes for the most serious bugs. (Check our download portal or the IBM website to download the iFix for you Rhapsody version. You only need to install the highest number, it will contain all previous iFixes for that version.
Here is a list with all versions (and Build numbers) since 8.0.
8.2.1

9810341

5 june 2017

Rhapsody Version Build Number Release date
8.3.1

9835533

24 june 2018
8.3

9831308

4 dec 2017
8.2

9803403

1 dec 2016
8.1.5

9728113

25 april 2016
8.1.4

9641846

14 dec 2015
8.1.3

9499822

26 june 2015
8.1.2.1

9278208

20 feb 2015
8.1.2

8254044

5 dec 2014
8.1.1

8200000

5 sep 2014
8.1

8169320

2 jun 2014
8.0.6

7155987

28 feb 2014
8.0.5

7139044

5 dec 2013
8.0.4

6118532

3 sep 2013
8.0.3

6107223

14 jun 2013
8.0.2

5093211

21 mar 2013
8.0.1

5074847

27 nov 2012
8.0.0.1

5071232

8 nov 2012
8.0

5066837

21 sep 2012

De-install the old one?

You don’t have to. You can install multiple versions of Rhapsody in parallel. A few things to consider:

  • Install in the same way as the previous version (Same directory structure)
  • The last installed version is the default version that will start when you double-click a .rpy file.

Models

You don’t have to do anything to update your models. But…. As soon as you save a model it is updated and cannot be opened with older versions of Rhapsody anymore. (Not always, sometimes 2 consecutive versions use the same database version.)
You can, however, use “Save As” to save the model in an older version. You can do that 2 versions back. So not too much.
Here is a list with the Rhapsody Versions and how they can be “saved” back.

Rhapsody Version „Save As“
8.3 8.2.1, 8.2
8.2.1 8.2, 8.1.5
8.2 8.1.5, 8.1.3
8.1.5 8.1.3, 8.1.1
8.1.4 8.1.3, 8.1.1
8.1.3 8.1.1, 8.0.6
8.1.2 8.1.1, 8.0.6
8.1.1 8.0.6, 8.0.4
8.1.0 8.0.6, 8.0.4
8.0.6 8.0.4, 8.0.2
8.0.5 8.0.4, 8.0.2
8.0.4 8.0.2, 7.6.1
8.0.3 8.0.2, 7.6.1
8.0.2 7.6.1, 7.5.3
8.0.1 7.6.1, 7.5.3
8.0 7.6.1, 7.5.3
7.6.1 7.5.3, 7.4

Of course a new version of Rhapsody can have changes in Code Generation. Best is to install a new version, start the old version, generate code, start the new version, load the model, generated code (In a different directory!!) and compare the code. If it is the same, you’re good. If different, first compile, you might still be good. But if it doesn’t work, try to understand the consequences of the changed code.

You will have some “Settings” files in your browser that are named “CGCompatibilityPreX.Y”. These files include the changed properties.

RXF

You MUST re-install the RXF and then during install tell the RXF the right directory for the new version of Rhapsody. (It will usually detect it automatically)
You can load the older models if you do not install the RXF but it will not work.

Eclipse

If you use Eclipse you have to either re-install the Eclipse plugin (first de-install the old one and then re-install the new one!)
If you want to use 2 versions then you will have to install Eclipse twice (I have not found any other way to do it…) and install the Eclipse Plugins/Workflow for the newer Rhapsody version in the second Eclipse.

ReqXChanger

Easy to forget… If you use the ReqXChanger, you have chosen the rhapsody.jar that matches the Rhapsody Version you use to sync your requirements with.
You have to edit the configuration to allow for ReqXChanger to use the new version of Rhapsody!

Happy Upgrading (and modeling) with Rhapsody

Walter van der Heiden (wvdheiden@willert.de)

O….M….G….

The OMG is the keeper of (amongst others) the UML and SysML standard. Today they have released the UML 2.5.1, a relatively small release. As far as I know there are no immediate plans for a UML 2.6 nor a UML 3.0.

The changes are not shocking and you will probably not even notice it. But I wanted to give you a small look into the factory of the standard.

You can read about this on the website of the OMG ( http://www.omg.org ) but also on the special UML website: ( http://www.uml.org )

In spite of what most people think: the standard is much more readable than you would expect. Not all of it, there ar “boring” parts in there but it is readable and it can answer your questions on how to apply the UML to your development.

Interesting Articles

This is an article telling about the UML. Where does it come from, what does it do, how should you use it.  http://www.uml.org/what-is-uml.htm

The past, present and future of visual modeling: http://www.uml.org/Visual_Modeling.pdf

The UML Specification: http://www.omg.org/spec/UML

Happy Modeling with UML (and SysML!) in Rhapsody!

Walter van der Heiden ( wvdheiden@willert.de )

Memory Management in the RXF

Introduction

Many users have asked me how they handle Memory Management when they use the Willert RXF as Framework.

There are 3 types of memory usage in C/C++:

  • Compile time (or static)
    this means that you declare something and the compiler/linker will take care of locating and allocating memory for it. (e.g. char MyArr[20]; will declare a 20 character array)
    You can find variables like this in the linker map file.
  • Heap
    This is what malloc uses and what many RTOSes use when allocating memory for their structures.You cannot find it in the map file specifically, you will find the heap size there. But the variables that use it are located in run-time.
  • Stack
    The most dangerous one… local variables are located on the stack as are function calls. compilers and or RTOSes offer stack check routines but they can be not reliable. Mostly they work with a standard pattern that is written on the stack (0xAA or 0x55) and compare that after each function call.

The RXF uses its own memory management. If you select the <<RXF Component>> stereotype for your current component and generate code for it, there will be „malloc()“ statements in the generated code.
But… this does not call malloc. Instead these calls are mapped (using a macro in WSTmodelling.h) to a function called WST_MEM_getMemory().

This function uses predefined and pre-allocated memory blocks. This shifts the use from heap to compile time.Why are they there and why do we not use malloc?

Easy. We do not use malloc for two main reasons:

  • Memory de-fragmentation
  • Malloc is non-reentrant.

Using our own memory allocation routines solve both problems. Our routines are protected using semaphores and because we only have pre-defined sizes, fragmentation cannot occur. How does this work?

There are a couple of properties that define size and number of these predefined blocks. Here we can define the exact size (in bytes) of each block type.There are 5 different block types:

– Tiny, Small, Medium, Large and Huge

The properties where you can define the number of blocks and the size are called:

- C_CG::Configuration::WSTTinyBufferSize - C_CG::Configuration::WSTInitialTinyBuffers

- C_CG::Configuration::WSTSmallBufferSize - C_CG::Configuration::WSTInitialSmallBuffers

- C_CG::Configuration::WSTMediumBufferSize - C_CG::Configuration::WSTInitialMediumBuffers

- C_CG::Configuration::WSTLargeBufferSize - C_CG::Configuration::WSTInitialLargeBuffers

- C_CG::Configuration::WSTHugeBufferSize - C_CG::Configuration::WSTInitialHugeBuffers

Setting the number of a certain type of blocks to 0 will remove every bit of code used for that specific block type.

NOTE!: make block sizes sequential increasing. So Tiny MUST be the smallest and Huge MUST be the largest. Otherwise the getMemory function will not work properly.

Taming the RXF

The properties for setting these sizes are available in Component and Configuration, we recommend setting them in your configurations. In that way you can easily create other configurations with different sizes to experiment.

Can I check how many blocks I have used and if they have the right size?

Yes you can check how many blocks you have used, check the HighWaterMark section. The size is a bit more difficult.You need to check the map file for the sizes of the elements that you allocate. You can also enter your debugger, set a breakpoint to the WST_MEM_getMemory routine. Each time you enter the breakpoint your application is requesting memory. Check the „requested_size“ variable and write them down.The call stack will reveal which routine requested memory.

As a rule of thumb: use one block type for events, one for events with parameter, and one for small classes. Set the other two to 0 so they won’t be there. Only use them if you want to use a finer use of your available memory. For larger classes use static allocation. If you use tasks, you will need memory for the allocated message queues, calculate their size and use another block type for that.

The best way to check how many blocks you have used is off course to use the Embedded UML Target Debugger, it shows you these numbers directly!

What to do if I run out of free memory blocks?

The allocator tries to use the best fitting block. So if you have blocks of 10, 20,30, 40 and 50 bytes, allocation 8 bytes will normally give you a 10 bytes block.When these are not there, you get a 20, then a 30 and so on.

If there is no fitting block left there are 2 options depending on the defines you set when compiling.

– The program will call the error routine with the Error:WST_ERR_ALLOC_TOO_LARGE.

You can (or actually should) change the error routine and adapt it to your own needs. (e.g write in a logfile or something like that)

– The original malloc routine is called.

This will only succeed if you reserved enough heap space so that malloc can give you the memory that you need. If not you will inevitably run into some kind of trap for using illegal memory.There are RXF versions that run into the error handler (Error:WST_ERR_ALLOC_FAILED) when malloc returns NULL.

What Defines and Properties influence the memory usage?

Using Tasks will also use your predefined memory blocks. Every task has a message queue, depending on the used RTOS there will be memory allocated for that.There are properties for tasks that influence the used memory.

CG::Class::ActiveMessageQueueSize will set the message queue size.There is a default size, this is what the RXF uses if you do not define your own.The size of the message queue is defined as „number of messages“.A message in UML is an event and it is sent by reference so there is only one pointer per message.The size of the pointer depends on the used CPU/Memory model. So on an ARM Cortex with the Keil compiler this means that a message queue size of 20 will use 80 bytes of blocks.

The Timer Array is static, it is depending on the property C_CG::Configuration::WSTMaxTimeouts. The array is allocated at compile time.

WST_CFG_HIGHWATERMARKS.When set to true, extra code is used to keep the largest number of reserved blocks.You can check the number in theWillert Embedded UMLTarget

Debugger or in your own source code debugger by typing „highwater“ in a watch window.This is an array that will show you the actually largest number of used blocks.

NO_MALLOC.When set, this will cause the RXF to NEVER use malloc. Rhapsody generated code can still use malloc, but the framework will not.

WST_FORCE_ALLOC_TOO_LARGE. Causes the RXF to use malloc when it runs out of memory blocks.

 

That’s it for today! Happy modeling with Rhapsody (and the RXF of course!)

Walter van der Heiden (wvdheiden@willert.de)

Happy New Year!

I wish everybody a “model” 2018! I had a little break during the christmas and new year holidays. Traveling is cool, but even a modeling traveler needs some rest once and a while.
But now we started a whole new year, 2018, and we have lots of plans to improve modeling in embedded.
IBM is also cooperating, they released Rhapsody 8.3, a brand new version with lots of changes!

AUTOSAR: migration of models to older versions of AUTOSAR

In release 8.3, for migration of AUTOSAR projects to an older version of AUTOSAR, additional target AUTOSAR versions have been added.

Code-centric mode: roundtripping changes to operation signatures

Prior to release 8.3, in code-centric mode, if you renamed an operation or modified its parameters and then roundtripped the code, the old operation was automatically removed and a new one was created in its place.

Beginning in this release, when roundtripping such changes, you have the option of retaining the existing operation and having it marked with a stereotype called MergeCandidate. After roundtripping, you can then go through these operation and merge them with the new operation that was created. The new operation body and declaration will then be copied to the existing operation, which will retain any other existing information such as dependencies. The second operation will be discarded. To enable this option, set the value of the property MarkMergeCandidateOperations to True.

Code-centric mode: support in 64-bit version of Rhapsody

You can now use code-centric mode in the 64-bit version of Rhapsody. However, code cannot be generated while in code-centric mode.

Configuration Management integration: renaming/deletion of Rhapsody units

Prior to release 8.3, if you renamed a Rhapsody element that was saved as a separate unit, the name of the file representing the unit would always keep its original name. Beginning in this release, if you configured Rhapsody to use the integration with Rational Team Concert (using the CMTool property), then when you rename a model element that is a unit, you will be asked whether you want to also change the name of the underlying file. This behavior can be controlled by the property RenameActivation.

Similarly, if you delete a unit, you will be asked whether you want to also delete the underlying file. The deletion behavior is controlled by the property DeleteActivation.

Modeling: “satisfy” stereotype in non-SysML projects

The “satisfy” stereotype, previously available only in SysML projects, can now be applied to dependencies in all Rhapsody projects.

Modeling: ownership of dependency between two other elements

Beginning in release 8.3, an element can be the owner of a dependency between two other elements. Among other uses, this makes it possible to create a dependency between two read-only model elements.

Modeling: selection of type for flowport

Now, when you try selecting a type for a flowport, the dialog remembers the last location used, allowing you quicker access to the relevant elements.

 

Rhapsody repository files: move to XML format

Beginning in release 8.3, the files used to save Rhapsody models are in XML format. To help differentiate between the new repository files and the repository files used in previous releases, the letter x has been added to the file extensions. For example, the main file for the project now uses the extension .rpyx instead of .rpy. Existing projects that are saved in version 8.3 of Rhapsody will be saved in the new format.

Statecharts: multi-line display of code for entry action, exit action, and internal transitions

Prior to release 8.3, in the graphical compartment used to display the code for a state’s entry action, exit action, and internal transitions, each of these items was allocated a single line, regardless of how long the code was.

Beginning in this release, there is an option to have the compartment display multiple lines of code when required. For individual states, this can be set in the Display Options dialog. If you want to set this as the default behavior in all your projects, you can add the following property to your site.prp file with a value of True: General::Graphics::SupportMultiLineCompartment.

Support for Red Hat Enterprise Linux 7.2

Rational Rhapsody can now be run on version 7.2 of Red Hat Enterprise Linux.

TestConductor/ATG: information about model elements not covered

In TestConductor and ATG, requirement coverage results now also include information about the model elements that are not covered.

TestConductor: testing of private/protected operations

Beginning in this release, TestConductor includes an option for testing private and protected operations by calling them directly. See the example and related documentation in the TestConductor Testing Cookbook.

TestConductor: user guide for assertion-based testing

The documentation for TestConductor now includes a new user guide (TestConductor_User_Guide.pdf) that deals only with C/C++ assertion-based testing mode. The existing user guide (RTC_User_Guide.pdf) now deals only with animation-based testing mode (Ada, Java, and C/C++).

User Interface: enhanced dialog for setting display options

Many element types now use a common tab-based dialog for setting display options.

User Interface: use of new combo box for filtering

A number of dialogs now use a new combo box that dynamically filters list elements as you type.

XMITookit: UML 2.4.1 namespace

XMIToolkit now recognizes the UML 2.4.1 namespace

XMIToolkit: activities with horizontal swimlanes

Now, when importing activities that contain horizontal swimlanes, the swimlanes are rotated so that they can be brought into Rhapsody.

In the next week we will test 8.3 ourselves and check compatibility with our RXF.

Happy modeling with Rhapsody in 2018!

Walter van der Heiden (wvdheiden@willert.de)

Your flight is delayed….. No

Story of my life…

People who fly often, like I do, know that there is always a big risk that something is happening. Either on your airport, or on the airport where your plane came from or the airport where your plane is heading to. Also the plane is a mechanical and electronic device with software in it. I repeat…. with software in it.

There is a lot that can go wrong there and, experience shows, that will go wrong. A lot is mostly safety stuff, flying would be possible but safety precautions prevent that. And that is a good thing. Flying is safe because we care a lot about safety.

That all is apart from other annoyances. Expensive mediocre food, people who think they are alone in the airplane and many more. But in spite of all that…I still love flying.

This BLOG is about Rhapsody isn’t it?

Yes, yes, it is. I mix stories about my life that mostly consists of traveling the world to spread the word about Rhapsody and some technical stories about Rhapsody itself.

Today we had a discussion with my colleagues from development about Container Classes is Rhapsody. Container classes are Classes that have a 1:* relationship with another class. (See picture) So Class ProductDatabase has a 1:* relation with the Class Product. What does that mean? And especially for the Code Generation in Rhapsody. That depends on the language you are using in Rhapsody.

OK. in ‘C’ first.

relationsDiagram.JPG

In ‘C’ the 1:1 association or aggregation between A and B mean that you have a pointer to B in your A class (struct) A composition will have a complete struct B inside A.  The “*” relation will generate a RiCCollection B. What is a RiCCollection? This is basically an Array where items of “B” can be stored. You don’t know where the items are stored so when you are searching through your collection you will have to look in every item in the collections and compare to see if you found the right one. (On average you have to search half of the array) When that is no problem you can use this. There is a property you can set “Ordered” that will create a linked list instead of jus an array (a RiCList). That means you still have to search through half the list (on average) to find a specific item but you can order the items to find them quicker. Here is the code belonging to the 3 relations in C and in C++:

The “qualify” field will allow you to select one of “B”‘s attributes as a key. (It creates a RiCMap). The items are stored in a balanced binary tree, storing takes a while since the tree might have to be re-balanced again, but searching is way faster, on average 2log(n) (For searching 1024 items you need to compare a maximum of 10 times)
You can also just use multiplicity to do this, just create a 1:10 relation and you will have a static array of 10 “B”‘s that you can use in the same way.These constructs doe not only are generated inside the structure that represents your class, there are also functions generated (Yes also in case of the static array!) to add items, to delete items, to delete the complete structure and depending on the kind of container some search functions.

What about ‘C++’?

C++ does not know Container Classes by itself but the Standard Template Library does. Since not all compilers support the STL, tree are also non-STL container classes.

The property:

CPP_CG::Configuration::Containerset

can be set to:

  • OMContainers, OMContainer, OMList and OMMap
  • STLContainers, vector, list and map
  • OMUContainers, OMUContainer, OMUList and OMUMap

As you can see there are even Templateless versions for the poor amongst us that use a compiler that does not support templates. The STL versions use list, vector and map from the STL. The same functions are available, in ‘C++’ they are all inherited from the container type. Something to keep in mind is that searching the structure will have a different way if using iterators.

Now where’s the drawback?

There is no real drawback here, the only thing is that this will use memory. But there are enough properties to limit that to just the amount you need. The routines are consuming some of your ROM as well of course. But they make your life easier. A lot easier. But check your map file to see what is used there. TODO- pictures from the advanced trainings, list of the functions in C and the different iterators in C++.

The model I used to make the pictures is here: ContainerClasses

OK, that’s it for today!

Happy Holidays! And have fun modeling with Rhapsody!

Walter van der Heiden (wvdheiden@willert.de)

Your flight is delayed….. No

Story of my life…

People who fly often, like I do, know that there is always a big risk that something is happening. Either on your airport, or on the airport where your plane came from or the airport where your plane is heading to. Also the plane is a mechanical and electronic device with software in it. I repeat…. with software in it.

There is a lot that can go wrong there and, experience shows, that will go wrong. A lot is mostly safety stuff, flying would be possible but safety precautions prevent that. And that is a good thing. Flying is safe because we care a lot about safety.

That all is apart from other annoyances. Expensive mediocre food, people who think they are alone in the airplane and many more. But in spite of all that…I still love flying.

This BLOG is about Rhapsody isn’t it?

Yes, yes, it is. I mix stories about my life that mostly consists of traveling the world to spread the word about Rhapsody and some technical stories about Rhapsody itself.

Today we had a discussion with my colleagues from development about Container Classes is Rhapsody. Container classes are Classes that have a 1:* relationship with another class. (See picture) So Class ProductDatabase has a 1:* relation with the Class Product. What does that mean? And especially for the Code Generation in Rhapsody. That depends on the language you are using in Rhapsody.

OK. in ‘C’ first.

relationsDiagram.JPG

In ‘C’ the 1:1 association or aggregation between A and B mean that you have a pointer to B in your A class (struct) A composition will have a complete struct B inside A.  The “*” relation will generate a RiCCollection B. What is a RiCCollection? This is basically an Array where items of “B” can be stored. You don’t know where the items are stored so when you are searching through your collection you will have to look in every item in the collections and compare to see if you found the right one. (On average you have to search half of the array) When that is no problem you can use this. There is a property you can set “Ordered” that will create a linked list instead of jus an array (a RiCList). That means you still have to search through half the list (on average) to find a specific item but you can order the items to find them quicker. Here is the code belonging to the 3 relations in C and in C++:

The “qualify” field will allow you to select one of “B”‘s attributes as a key. (It creates a RiCMap). The items are stored in a balanced binary tree, storing takes a while since the tree might have to be re-balanced again, but searching is way faster, on average 2log(n) (For searching 1024 items you need to compare a maximum of 10 times)
You can also just use multiplicity to do this, just create a 1:10 relation and you will have a static array of 10 “B”‘s that you can use in the same way.These constructs doe not only are generated inside the structure that represents your class, there are also functions generated (Yes also in case of the static array!) to add items, to delete items, to delete the complete structure and depending on the kind of container some search functions.

What about ‘C++’?

C++ does not know Container Classes by itself but the Standard Template Library does. Since not all compilers support the STL, tree are also non-STL container classes.

The property:

CPP_CG::Configuration::Containerset

can be set to:

  • OMContainers, OMContainer, OMList and OMMap
  • STLContainers, vector, list and map
  • OMUContainers, OMUContainer, OMUList and OMUMap

As you can see there are even Templateless versions for the poor amongst us that use a compiler that does not support templates. The STL versions use list, vector and map from the STL. The same functions are available, in ‘C++’ they are all inherited from the container type. Something to keep in mind is that searching the structure will have a different way if using iterators.

Now where’s the drawback?

There is no real drawback here, the only thing is that this will use memory. But there are enough properties to limit that to just the amount you need. The routines are consuming some of your ROM as well of course. But they make your life easier. A lot easier. But check your map file to see what is used there. TODO- pictures from the advanced trainings, list of the functions in C and the different iterators in C++.

The model I used to make the pictures is here: ContainerClasses

OK, that’s it for today!

Happy Holidays! And have fun modeling with Rhapsody!

Walter van der Heiden (wvdheiden@willert.de)

Bourbon Street Shortcuts

I have never been to New Orleans before, so for those who read my BLOG more often: I have added State #35 to the state-chart! And I really have to say: New Orleans is pretty cool, It has a flair that you hardly find anywhere else in the USA. I didn’t really know that in most of the US it is not allowed to drink alcohol in the streets openly. Hence the brown paper bags you see everywhere. As a European you don’t notice that, for us its normal that you just drink wherever you like. Bot so in the USA but in Bourbon Street you can openly drink whatever you want. You can also walk around as you please, i saw people there that were “dressed” (or actually showed a lack of dressing) that I normally only see in the capital of my country. (For those that don’t know: I live in the real land of the free, the Netherlands)

That is cool but the coolest thing is the music. Literally every bar has a couple of musicians that play. Mostly Jazzy bout also other kinds of music.Raz and I landed in a pub where the band was building up the stage. they told us the band would start in 45 minutes or an hour and that suited us, we wanted to speak anyway. But after some discussion (Raz and I do, luckily, not always share the same opinion) we looked around us and noticed that we were, by far the youngest people in the bar… I’m 56 so that tells you something. And yes, when the band started we soon figured out that this was definitely not our Jazz…

So we moved to another one where the band was already playing. That was much more OK.

Shortcuts

Rhapsody has a lot of keyboard shortcuts. They are described in the manual but unfortunately this is pretty hidden. there are a few websites where you can find more info on that, I will add some here.

Search (and find)

In Rhapsody 8.1.5, when you were in the Rhapsody editor (or in active code view) the CTRL-F command would give you a search dialog. This would search for the string that you typed in. After that F3 would give you the next search-hit.
This no longer works. the reason for that is that the Rhapsody developers have unified the search dialogs in Rhapsody. There were (historically grown…) four different searches in Rhapsody. None of them worked for 100% so Raz and his crew decided to clean that and make a search app that would not only search but also find…. This comes with a (temporary) price, the search lacks some “hidden” features that were previously there.
Screen Shot 2017-11-23 at 18.33.55.pngThe find-dialog in the editor has a field “Mark All”, that will put a red ball with a white cross before each line where the searched string occurs. Not a prefect solution but definitely workable.

2 Very useful ones…

The shortcuts that are hard to find in the documentation are the Shift and the Alt key. When you are in a Diagram, State-chart or Object Model Diagram or so, as soon as you draw an element inside another element (when this makes sense according to the UML of course) then Rhapsody notices the hierarchy and will treat the outer element as the container of the inner element. That also means that if you want to resize an element that has other elements inside it, resizing seems impossible without also resizing the content. Resizing is done by selecting the element and take one of the dots that surround the element and drag it.
Now try to press the “Alt”-key when dragging, you will see that the content of the element will stay intact. Now that is cool eh?

In a sequence diagram something similar happens. When you notice that you don’t have enough space in the middle of a sequence, shifting all elements down is pretty tiresome. This can also be done by clicking on the place where you want to make space and press the “Shift”-key while dragging down (or up if you want to close gaps!) This will take the entire content and moves it with your mouse.

I hope this will help you in your Rhapsody life! Have fun modeling with Rhapsody

Walter van der Heiden (wvdheiden@willert.de)

 

Even Paradise has Requirements

Just another day in Paradise

Just before flying back to Europe I spend a weekend at my Friend Arno’s place in Florida. The USA contains both paradise and hell. Florida is paradise, Las Vegas is hell. I hate Las Vegas. But I love Florida, especially South-West Florida. Weather is really nice there, nature is beautiful. You can see all kinds of plants and animals that we don’t have at home. Hence the title picture. Normally I buy photo’s, this one was taken by me.

The USA has it’s nice things, Unsweetened Ice-Tea, free Re-Fills, brilliant weather. It has its flaw-backs as well…. But not too much in Florida…

This morning I woke up early to have some time to take a cup of coffee with Arno, who has to work today, before leaving for the airport. When I got out to the terrace next to the pool I noticed that it was not too warm. My friend Arno and his wife were both freezing… they already live in Florida for a long time and think that 14º C is very very cold. My European body reacted totally different, i thought it was nice and almost warm… That was 7am, on 9am it was already way over 20º…. things were back to normal… Also paradise has its requirements…. no temperature under 70ºF….;-)

Requirements

Speaking about requirements…. How do you get requirements in Rhapsody? There are a number of ways to do so. It also depends on what Requirements management tool you are using.

  • Managing them in Rhapsody. You can do that but you will not like it that much. It is tiresome to handle requirements, there is not much overview and linking is a pain in the….. For a small program like a Stopwatch it is OK but anything bigger this is a no-go.
  • Use DOORS to manage your requirements. Wait… Doors is old? Well, that depends. There are a large number of companies out there that use Doors since years and have large databases full of requirements, and mostly a complete workflow around the Tool using scripts and much more. Since Doors is still supported and even developed (to some extend) by IBM it is not a bad choice. You can synchronize your Requirements from Doors to Rhapsody using GateWay (Which is actually a Tool called Reqtify and is being maintained by a french company called Dassault (Yes, the ones that bought NoMagic) It can sync your Requirements between Rhapsody and Doors and it is fully configurable so you can also use it for other tools then Doors and you can select how you sync the Doors information in Rhapsody. It is and add-on tool, you have to pay for it. A cheaper and also very nice way to sync your Requirements between Doors and Rhapsody is the Willert Software Tools ReqXChanger. It uses the ReqIF format to exchange Requirements, it is also configurable so you can determine the exact information that you want to sync. In the latest version it can also exchange diagrams between Doors and Rhapsody!
  • Use Doors Next (DNG) to manage your Requirements. This uses the Jazz Database to store Requirements and something called OSLC to sync the Requirements with other Tools. You would have to use Design Manager or the new Model Manager in Rhapsody to sync your Requirements with that. Design Manager and in lesser extend Model Manager need powerful hardware to run on. So if you are looking for a more “light-weight” solution, you can also consider our ReqXChanger, it is a low-price and low-performance using solution to exchange your requirements. You can still use it in a batch way (For instance in a nightly-build) to automatically keep Requirements and tracing information up-to-date.
  • Use non-IBM Tools (like Polarion) to manage your requirements. Syncing can still be done with ReqXChanger. This is a big advantage of the ReqXChanger, it is very flexible in where you can use it. If you change your Requirement Management Tool (Or even your modeling tool…. but we will not talk about that….) you can continue using the ReqXChanger. If you use another tool then the named one and you would like to sync with Rhapsody, feel free to contact me!

Kicked out of Paradise

So. It’s time to pack and leave paradise… Modeling is definitively nicer if you do it in the sun with a glass of Ice-Tea. But modeling beats text-based programming always. Even when it’s cold outside.

Happy Modeling (and requirements implementing) with Rhapsody!

Walter van der Heiden (wvdheiden@willert.de)

Time to Evaluate!

Getting nostalgic

In the days of Windows XP (Who’d ever thought I would say that I gladly wanted to go back to XP…) installations were easy. Your PC basically belonged to you and the OS would not interfere in anything you do.
How different is that now. Since Vista (may it burn in …..) we are plagued with an OS that tries to force its will upon us. And installing a complex environment like Rhapsody and a few add-ons becomes a nightmare.
We used to let people install everything during a one day training. INstall took about 30 minutes and would work 99% of the time.
Now it takes hours and the success rate is 50% or so. Even with our own installer, install manual and physical presence of somebody that “knows what he is doing” it is just too difficult to get everything running reliably. Have I already mentioned that I hate Windows?

Brave new world…

At Willert we use Macs. Since 10 years, give or take, we have kicked out our Windows laptops and buy expensive Macs, just to prevent us from hiring multiple sysadmins to keep our stuff running.
Unfortunately, IBM, (a large Apple user itself ! ), does not deliver Rhapsody on a Mac. Yes there is an Eclipse plugging but that is just a “facade” plugin. It calls the Rhapsody DLL’s to do the real work. It won’t work on Linux or Mac OS. Duh…
So we use VmWare (we kicked out Parallels because they’ve become too greedy) to run Windows on our Macs. Works OK. So we are used to virtualize.
IBM has now taken this virtualization to a new level. You can have images that you can instantiate and distribute.
So after installing all tools and testing that they work correct, we can now let other people access it using Remote Desktop Connection. This will work from a Windows PC (It is built-in there) and from a Mac (download Microsoft Remote Desktop for free from the App-Store) And apparently even on a Linux Computer, you have to download a 3rd party tool there but it works.
Using RDC requires an internet connection but not an extremely fast one, it only transfers the screen using compression.

Provisioning an Image

Once an image is provisioned, you will receive data on how to access it:

  • IP address, mostly 169.x.y.z
  • Login name, mostly administrator
  • Password,8 character random generated

On a Windows PC

It is pretty easy on Windows, everything that you need is built-in. In the menu under “Windows accessories” you will find “Remote Desktop Connection”.

RDC1.JPG

This is how that looks. First you click on “Show Options”.

RDC2

After “Computer” you type in the given IP address, 169.x.y.z:3333 (Important, the 3333 is a port number and needs to be there.)
After “Username” you type “administrator” (Or the username that was given to you.
The password will be asked when you connect. As you see it is possible to store the login credentials on your PC. You might want to do that, it is easier to restart your image.
Click on Connect and RDC will now ask you for your password. Copy it from the data you have received.

rdc3

Then Windows gets suspicious about the certificate of the WebSite. It will display it. You have to tell Windows that it is OK, otherwise…. no go… so click on “View certificate”

rdc4

Then click on “Install Certificate”

rdc5

This is OK, click “Next”

rdc6

Again click “Next”

rdc7

 

And now on “Finished”.

rdc8

The Certificate is now installed, you only need to do this once.

rdc9

On a Mac

You first need to download and install the RDC App from the App store. App Store iconApp store RDC

Click on “install” and then on “open”. Confirm that you trust Microsoft and RDC starts.Mac RDC1.png

Click on “+” (“New”) and fill in the credentials you were given.MAC RDC2.png

  • Connection name, You can give your connection a logical name.
  • PC name, the IP address that you were given, i.e. 169.x.y.z:3333 (The 3333 is mandatory)
  • User name, the name given, mostly “administrator”
  • Password, what you were given
  • The rest can be changed if you like. Lower resolution and colors mean less data.

Now just close the window and press “Start” with your image selected.

And now?

Your image will be ready and started. Login is automatically, you can start using the tools that are installed in the image.

Images are valid for a certain period of time, I’m still trying out the facility so I can not say how long this is exactly.

So contact me when you want to try Rhapsody and our tools, I will provide you with an image.

Happy evaluating with Rhapsody!

Walter van der Heiden (wvdheiden@willert.de)

 

 

A380

I have spent a lot of my time in airplanes, certainly more than a whole month. That is a lot of time. I used to be afraid of flying due to an “unlucky” experience when flying from Austria back to Rotterdam.
That flight had everything, storm, and I mean a real serious storm, a broken of landing, emergency landing on anther airport, crying flight attendants, not to mention the other passengers.
It took me a while to get over that but since the first US flight I don’t care anymore. Or better, I like flying. In spite of hundreds of flights, I still like it very much.

As said I’ve seen lots of different airplanes, Boeing 737, 747, 767, 777, 787, Airbus 319, 320, 330, 340 and the 380. Also Embraer, Fokker, Dash, Ilyushin, Bombardier and even some smaller ones.

But the A380 is something special. Very very silent and of course: Huge. And I mean, really huge. I’m an engineer, i know hoe planes fly but even I am wondering how something this size can just fly.

My Facebook timeline told me this morning that it was exactly 5 years ago since I went to India. The flight was via Dubai so I’ve flown with the A380 of Emirates from Schiphol to Dubai and back. I was already impressed that time.

This time i flew from Paris (CDG, the worst airport in the world) to Miami with Air France. But… Business Class (Yes!!!) So upper deck and a real lot of space.

So… back in the USA. After just a bit over 3 weeks…. This time I have an AUTOSAR conference in San Jose (November 7-8) and the IBM IoT CE Conference in New Orleans (November 14-17)

I will be speaking on both events and on November 17 we will have a Rhapsody Workshop.

I hope to see you there!

Happy modeling with Rhapsody

Walter van der Heiden ( wvdheiden@willert.de )

« Older posts Newer posts »

© 2025 Rhapsody TechBlog

Theme by Anders NorenUp ↑