<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-37338138</id><updated>2026-05-31T17:10:39.779+08:00</updated><category term="web"/><category term="tips"/><category term="practices"/><category term="uml"/><category term="architecture"/><category term="management"/><category term="asp.net"/><category term="review"/><category term=".net"/><category term="agile"/><category term="mindmap"/><category term="sharepoint"/><category term="devops"/><category term="software"/><category term="ws"/><category term="troubleshoot"/><category term="design"/><category term="java"/><category term="leadership"/><category term="database"/><category term="documentation"/><category term="principle"/><category term="wsdl"/><category term="xml"/><category term="integration"/><category term="scrum"/><category term="test"/><category term="cloud"/><category term="datastore"/><category term="insurance"/><category term="wls"/><category term="wsi"/><category term="knowledge"/><category term="lean"/><category term="motivation"/><category term="wss"/><category term="SDLC"/><category term="dw"/><category term="http"/><category term="ipad"/><category term="itil"/><category term="legacy"/><category term="mobile"/><category term="ods"/><category term="pool"/><category term="report"/><category term="warehouse"/><category term="appliance"/><category term="atom"/><category term="crm"/><category term="cvs"/><category term="email"/><category term="infopath"/><category term="innovation"/><category term="multitask"/><category term="oidc"/><category term="query"/><category term="rss"/><category term="scm"/><category term="security"/><category term="servlet"/><category term="smartpart"/><category term="storage"/><category term="thread"/><category term="unit"/><category term="vm"/><category term="waterfall"/><category term="whatsapp"/><category term="xsl"/><title type='text'>SOFTware is HARD</title><subtitle type='html'>Developing software is hard; Maintaining systems isn&#39;t any easier!</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://softwarehard.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37338138/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://softwarehard.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/37338138/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Johannes</name><uri>http://www.blogger.com/profile/15713518355055537665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSI-x4taFLTm8ZKjb0Dmqg3wNtXkrtIXJ2zZQfPCbOnWUeF5Q0kCo1_Kyptpy1jIp2XkObjz9tco7W1qXLgZyV2I0Nwg1SKuXxbCUhB04CE3OmQI554Gw6hTtC6kHYOA/s220/FaceQ1443676797845.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>154</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-37338138.post-8821750234704986693</id><published>2024-08-08T17:54:00.000+08:00</published><updated>2024-08-08T17:54:24.209+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="documentation"/><category scheme="http://www.blogger.com/atom/ns#" term="uml"/><title type='text'>Astah Unexplored &amp; New Features</title><content type='html'>&lt;p&gt;I&#39;m currently trying out the reverse-engineering in Astah and am pleasantly surprised by the available features.&lt;/p&gt;&lt;p&gt;My sample files are taken from &quot;&lt;a href=&quot;https://github.com/PacktPublishing/Full-Stack-Development-with-Spring-Boot-3-and-React-Fourth-Edition&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Full Stack Development with Spring Boot 3 and React&lt;/a&gt;&quot;&lt;/p&gt;&lt;p&gt;I tried importing the downloaded files from GitHub. Remember to check the &quot;include sublayers&quot; to add files from various subdirectories.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;float: left;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhxlewqjjJCqTXcEvuB4bzS5dIDcQ3XBBT-Obx1ecF4WYuedChdxNQOTIPV7Jh59O59ICQVZ_V5sU399PukPJ26nwK2d6VlVORoMUysj7HOb3EBBkT8w-zk-4UdK3rMLmlT0WhYmEj40PazrRe0NaXEFd5GxMyZniKqgmt77dUMZnUdBvYU7_C_FA&quot; style=&quot;clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;835&quot; data-original-width=&quot;1379&quot; height=&quot;389&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhxlewqjjJCqTXcEvuB4bzS5dIDcQ3XBBT-Obx1ecF4WYuedChdxNQOTIPV7Jh59O59ICQVZ_V5sU399PukPJ26nwK2d6VlVORoMUysj7HOb3EBBkT8w-zk-4UdK3rMLmlT0WhYmEj40PazrRe0NaXEFd5GxMyZniKqgmt77dUMZnUdBvYU7_C_FA=w640-h389&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Code to Diagram feature&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Feeling lazy, I used the &quot;Auto Create Class Diagram&quot; function to generate &quot;Simple&quot; class diagrams.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;float: left;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEge-1r5W7pY-abQ_qHllFpRKlPdFho_EHCC0Ezozv-T-ZJ0GWJsGVjDJEWZXOk2iQQUG_CHtoR-Y7DE78Oq0syTQqjOKZ_60T1LhfV8EqnKGLkRTAC02u4v5MpQs8ot6D7TRDsidbLRpxpK5aRtqChDWb5w5TH-vZoiHTF81Yx17_82LAFMdJopkA&quot; style=&quot;clear: left; display: inline; margin-bottom: 1em; margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;271&quot; data-original-width=&quot;648&quot; height=&quot;168&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEge-1r5W7pY-abQ_qHllFpRKlPdFho_EHCC0Ezozv-T-ZJ0GWJsGVjDJEWZXOk2iQQUG_CHtoR-Y7DE78Oq0syTQqjOKZ_60T1LhfV8EqnKGLkRTAC02u4v5MpQs8ot6D7TRDsidbLRpxpK5aRtqChDWb5w5TH-vZoiHTF81Yx17_82LAFMdJopkA=w400-h168&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Accessing the &quot;Auto Create Class Diagram&quot; feature&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;With a bit of a clean-up and elimination of classes that are irrelevant, the auto-generated class diagrams look great!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;float: left;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhjjoM-e5I2lxL6CirvCu2Be5jevbT1GN8TnYRc7ewHo7AR6m5LqgxlHN_d2ssuOdeDQlPiHSGHTC9TetLUuzrYH6MNyq5zCj4DJdmz01QLZfEYm2KJh6diWS3hzUTw9sXZXNJ5qUr7eznZbFWtuIAsIf_l4B4A-cXHIU0GPHd7c2qfPoLx1gkq2w&quot; style=&quot;clear: left; display: inline; margin-bottom: 1em; margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;600&quot; data-original-width=&quot;1313&quot; height=&quot;292&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhjjoM-e5I2lxL6CirvCu2Be5jevbT1GN8TnYRc7ewHo7AR6m5LqgxlHN_d2ssuOdeDQlPiHSGHTC9TetLUuzrYH6MNyq5zCj4DJdmz01QLZfEYm2KJh6diWS3hzUTw9sXZXNJ5qUr7eznZbFWtuIAsIf_l4B4A-cXHIU0GPHd7c2qfPoLx1gkq2w=w640-h292&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Auto-generated Class Diagram&lt;br /&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;float: left;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiu3ruXWoV-K3LVmtEBr-2D3Ao6as2B3MbYAGWXibSt9-dv8NokKFuJGKtvGinxLCuZoVfb77M7Hr8X7wa6UsLzvodxWNQ_-caPnPuSj2fLUevs204cxmUnIANMoHG1o94sgGlbqteChha7eEUCtkgCkRgfRC3rT4hr8slVSKMAw-P64yyLXkqU5Q&quot; style=&quot;clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;288&quot; data-original-width=&quot;851&quot; height=&quot;216&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiu3ruXWoV-K3LVmtEBr-2D3Ao6as2B3MbYAGWXibSt9-dv8NokKFuJGKtvGinxLCuZoVfb77M7Hr8X7wa6UsLzvodxWNQ_-caPnPuSj2fLUevs204cxmUnIANMoHG1o94sgGlbqteChha7eEUCtkgCkRgfRC3rT4hr8slVSKMAw-P64yyLXkqU5Q=w640-h216&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Auto-Generated Class Diagram&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiu3ruXWoV-K3LVmtEBr-2D3Ao6as2B3MbYAGWXibSt9-dv8NokKFuJGKtvGinxLCuZoVfb77M7Hr8X7wa6UsLzvodxWNQ_-caPnPuSj2fLUevs204cxmUnIANMoHG1o94sgGlbqteChha7eEUCtkgCkRgfRC3rT4hr8slVSKMAw-P64yyLXkqU5Q&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;The latest feature allows a Definition Note to be automatically created as an UML note. Definitely a most welcomed feature!&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;Right-Click on a model element (Class) to see the available options for &quot;Show Definition Note&quot;. The available Definition Notes are automatically &quot;picked up&quot; as options to show or elide.&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;float: left; margin-right: 1em; text-align: left;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEirIWxpOHbKk_gl4v9J25VvUtHGSB0j8cVy42dRYnO69m5BO7D7kZx5w_B0MevfYcdQyWZD2yOrFwvoEYcccraJ50L5javIbjkdErqYT74-cr23qQKXGvfpny81HqwV3bwTx7fm4kkcAZoiK0Ee0wonnRaEHeKPNuisVMWaUvG4SgQBKGOsTBijQA&quot; style=&quot;clear: left; display: inline; margin-bottom: 1em; margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;721&quot; data-original-width=&quot;572&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEirIWxpOHbKk_gl4v9J25VvUtHGSB0j8cVy42dRYnO69m5BO7D7kZx5w_B0MevfYcdQyWZD2yOrFwvoEYcccraJ50L5javIbjkdErqYT74-cr23qQKXGvfpny81HqwV3bwTx7fm4kkcAZoiK0Ee0wonnRaEHeKPNuisVMWaUvG4SgQBKGOsTBijQA=w507-h640&quot; width=&quot;507&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Accessing the &quot;Show Definition Note&quot; feature&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;I&#39;ve hidden the &amp;lt;&amp;lt;Definitions&amp;gt;&amp;gt; stereotype for aesthetic purposes. One can see the note for the class as well as the operation.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEirIWxpOHbKk_gl4v9J25VvUtHGSB0j8cVy42dRYnO69m5BO7D7kZx5w_B0MevfYcdQyWZD2yOrFwvoEYcccraJ50L5javIbjkdErqYT74-cr23qQKXGvfpny81HqwV3bwTx7fm4kkcAZoiK0Ee0wonnRaEHeKPNuisVMWaUvG4SgQBKGOsTBijQA&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;float: left;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgTGAqA__z5oAQnGMEH6_ihyJxvsVleQgG6KBEj-28JyHdUcEEMxuinBuMoRaDeU8CSzqu_35PyQrcp9MuhBFnPOGFq-v4-UFiVi_TdQg5c_dvbFTezMv62aVeF8j_RzUaE0MZvY4LsM9rSe06Qzl7rkAU7vuZoZRhx5e-kCjtVGheTEkGUci7HoQ&quot; style=&quot;clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;369&quot; data-original-width=&quot;854&quot; height=&quot;276&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgTGAqA__z5oAQnGMEH6_ihyJxvsVleQgG6KBEj-28JyHdUcEEMxuinBuMoRaDeU8CSzqu_35PyQrcp9MuhBFnPOGFq-v4-UFiVi_TdQg5c_dvbFTezMv62aVeF8j_RzUaE0MZvY4LsM9rSe06Qzl7rkAU7vuZoZRhx5e-kCjtVGheTEkGUci7HoQ=w640-h276&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Class Diagram with (auto) Notes&lt;br /&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEirIWxpOHbKk_gl4v9J25VvUtHGSB0j8cVy42dRYnO69m5BO7D7kZx5w_B0MevfYcdQyWZD2yOrFwvoEYcccraJ50L5javIbjkdErqYT74-cr23qQKXGvfpny81HqwV3bwTx7fm4kkcAZoiK0Ee0wonnRaEHeKPNuisVMWaUvG4SgQBKGOsTBijQA&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;Another useful feature is to be able to &quot;park&quot; the UML Diagrams under the various elements for better organization.&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;In this instance, I&#39;ve created a Sequence Diagram to depict the flow for the getCars operation &quot;parked&quot; under the Operation and a Class Diagram to depict the class structure under the Class&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;float: left;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgOy9H_MFHM-4XXN4h5rj0bdJ5GBkJpG5Yuj7cOXZg6oW5D5OzT3wQZjGoQe76uKlouADG7GIa7knV_nM5rU-oo1HbTjZMwAoz6V8LVx5IFW5sdEYqTNK0kGNikGsquKy76YL4XS9HJ9bReA8MmefWDwdQ3uKNyfElmOmEwYhP7nH9s_M8qb3IrdQ&quot; style=&quot;clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;203&quot; data-original-width=&quot;293&quot; height=&quot;278&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgOy9H_MFHM-4XXN4h5rj0bdJ5GBkJpG5Yuj7cOXZg6oW5D5OzT3wQZjGoQe76uKlouADG7GIa7knV_nM5rU-oo1HbTjZMwAoz6V8LVx5IFW5sdEYqTNK0kGNikGsquKy76YL4XS9HJ9bReA8MmefWDwdQ3uKNyfElmOmEwYhP7nH9s_M8qb3IrdQ=w400-h278&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Diagram Organization&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;float: left;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjYQ5kdwwdMB5-SySej3osewmwFEdl4Ta_w32lCRl6WtOdF1X7KZ4q0-nroZgAcpyNDLPtVNowQ0z6HkqJz6CbrPckJ204iYxb2ps33ZkzyTYDE0h3Dyc2RbE5M6itbYD1rbSgR5oF1Mew8kYyuKELdxQu8ofib3Y_iAg4j46XhSfFJ1daBxPZOkQ&quot; style=&quot;clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;504&quot; data-original-width=&quot;579&quot; height=&quot;348&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjYQ5kdwwdMB5-SySej3osewmwFEdl4Ta_w32lCRl6WtOdF1X7KZ4q0-nroZgAcpyNDLPtVNowQ0z6HkqJz6CbrPckJ204iYxb2ps33ZkzyTYDE0h3Dyc2RbE5M6itbYD1rbSgR5oF1Mew8kYyuKELdxQu8ofib3Y_iAg4j46XhSfFJ1daBxPZOkQ=w400-h348&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;UML Sequence Diagram&lt;br /&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;float: left; margin-right: 1em; text-align: left;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEi3znEfFEKBYJyVPiUgFcv4y3O540BknwjagAg8rH2pvk4DOGTarBUtLCQqJDIrzGiscyGpoZF8eMjimiHMlQMhmkGZmRsv6xR1SPzuv917teP-XmmCkq_skm_Bu9pnl-716UruXkAL714eCFf_q_w7a365NywUW06y9LwhWjajbil3tFmxQ_Bidg&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;129&quot; data-original-width=&quot;383&quot; height=&quot;135&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEi3znEfFEKBYJyVPiUgFcv4y3O540BknwjagAg8rH2pvk4DOGTarBUtLCQqJDIrzGiscyGpoZF8eMjimiHMlQMhmkGZmRsv6xR1SPzuv917teP-XmmCkq_skm_Bu9pnl-716UruXkAL714eCFf_q_w7a365NywUW06y9LwhWjajbil3tFmxQ_Bidg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;UML Class diagram&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softwarehard.blogspot.com/feeds/8821750234704986693/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/37338138/8821750234704986693' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37338138/posts/default/8821750234704986693'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37338138/posts/default/8821750234704986693'/><link rel='alternate' type='text/html' href='http://softwarehard.blogspot.com/2024/08/astah-unexplored-new-features.html' title='Astah Unexplored &amp; New Features'/><author><name>Johannes</name><uri>http://www.blogger.com/profile/15713518355055537665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSI-x4taFLTm8ZKjb0Dmqg3wNtXkrtIXJ2zZQfPCbOnWUeF5Q0kCo1_Kyptpy1jIp2XkObjz9tco7W1qXLgZyV2I0Nwg1SKuXxbCUhB04CE3OmQI554Gw6hTtC6kHYOA/s220/FaceQ1443676797845.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEhxlewqjjJCqTXcEvuB4bzS5dIDcQ3XBBT-Obx1ecF4WYuedChdxNQOTIPV7Jh59O59ICQVZ_V5sU399PukPJ26nwK2d6VlVORoMUysj7HOb3EBBkT8w-zk-4UdK3rMLmlT0WhYmEj40PazrRe0NaXEFd5GxMyZniKqgmt77dUMZnUdBvYU7_C_FA=s72-w640-h389-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37338138.post-3617956684367241500</id><published>2023-08-01T20:04:00.003+08:00</published><updated>2023-08-01T20:05:57.397+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cloud"/><category scheme="http://www.blogger.com/atom/ns#" term="documentation"/><category scheme="http://www.blogger.com/atom/ns#" term="mindmap"/><category scheme="http://www.blogger.com/atom/ns#" term="uml"/><title type='text'>Useful Hacks in Using Astah</title><content type='html'>&lt;h3 style=&quot;text-align: left;&quot;&gt;MindMap Hack&lt;/h3&gt;&lt;p&gt;I&#39;ve been using Astah (download &lt;a href=&quot;https://hubs.li/Q01fQx_n0&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;) more recently for the MindMap feature and felt to share this wonderful &quot;hack&quot; with you.&lt;/p&gt;&lt;p&gt;I jotted some points in NotePad and wish to quickly transfer them into Astah as a MindMap.&lt;/p&gt;&lt;p&gt;The easiest way to retain the hierarchy is to use [TAB].&amp;nbsp;&lt;/p&gt;&lt;p&gt;Therefore I could easily transform this&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;float: left;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEg4UGC7s1KZWGEy30ppahO6zPNNTVh3AnIXyEiYWnDZkx-f-G2lJzlZauatKLjDI0L0oaD8OpKq6_diJm03u0HPB2xFvYcYGKI0mssFN9eWFPvpj5bWppcXMB6b1Vz0xli1dsn2_Hpf3CJUY57tjx-NAz8Kx11Rhl8tmDkkmV-r3iiwgb674dhJKg&quot; style=&quot;clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;299&quot; data-original-width=&quot;787&quot; height=&quot;153&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEg4UGC7s1KZWGEy30ppahO6zPNNTVh3AnIXyEiYWnDZkx-f-G2lJzlZauatKLjDI0L0oaD8OpKq6_diJm03u0HPB2xFvYcYGKI0mssFN9eWFPvpj5bWppcXMB6b1Vz0xli1dsn2_Hpf3CJUY57tjx-NAz8Kx11Rhl8tmDkkmV-r3iiwgb674dhJKg=w400-h153&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Hierarchical List of Points&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Into&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;float: left;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEixbRseoBsk4AOo9mJGPcPhcNe_f3gKvJZ5k2WDZH7vZY9SgvNDaOHOylCEd1F5ZLxhtZ390nMUsqryzSOhsKM_TEI59bJg0i0ZEXmdZ5ZG0An_JQwLxbxgZzwoEjUgRKaqS2DYGxDfXAzjJb84cud4tjrl3eRfytVfBC6tLLKo8SDbfkEng0E0xQ&quot; style=&quot;clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;397&quot; data-original-width=&quot;791&quot; height=&quot;201&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEixbRseoBsk4AOo9mJGPcPhcNe_f3gKvJZ5k2WDZH7vZY9SgvNDaOHOylCEd1F5ZLxhtZ390nMUsqryzSOhsKM_TEI59bJg0i0ZEXmdZ5ZG0An_JQwLxbxgZzwoEjUgRKaqS2DYGxDfXAzjJb84cud4tjrl3eRfytVfBC6tLLKo8SDbfkEng0E0xQ=w400-h201&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Same List of Points in MindMap&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Here is how it&#39;s done:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Select all text in NotePad (or equivalent) and Copy (Ctrl-C)&lt;/li&gt;&lt;li&gt;Go to Astah and create a New MindMap Diagram&lt;/li&gt;&lt;li&gt;Click on Mindmap0 or whatever existing topic and Paste (Ctrl-V)&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;Like magic, the MindMap is created and the hierarchy is retained.&lt;/div&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;UML Deployment Diagram&lt;/h3&gt;&lt;div&gt;You wish to draw professional-looking diagrams using AWS/ Azure icons. Is that possible &amp;amp; easy to do in Astah?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;float: left;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiTNIcXMCqxmatRLuFahRt3Q85LWhGHkS7-JowhxLE9OlxQPxluepA96VcxAoWys1qyN7ZmqTEjary8r-NiR0mNm_j4r2k3B3uxT0jIb-Swy13vbv2p6C36qWqwLkAnlpVYLRiWqRL8sRthvXeN9sYUehcmWyy7fjqzqM1rJGuPqQFvEda3DUrO2w&quot; style=&quot;clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;712&quot; data-original-width=&quot;932&quot; height=&quot;306&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiTNIcXMCqxmatRLuFahRt3Q85LWhGHkS7-JowhxLE9OlxQPxluepA96VcxAoWys1qyN7ZmqTEjary8r-NiR0mNm_j4r2k3B3uxT0jIb-Swy13vbv2p6C36qWqwLkAnlpVYLRiWqRL8sRthvXeN9sYUehcmWyy7fjqzqM1rJGuPqQFvEda3DUrO2w=w400-h306&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;AWS Deployment&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Believe it or not, the above is drawn in Astah!&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here is how it&#39;s done:&lt;/div&gt;&lt;div&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Go to Tools -&amp;gt; Project Settings -&amp;gt; Set Icon for Stereotype (See Custom Icons for Stereotypes Diagram)&lt;/li&gt;&lt;li&gt;Choose Add File and multi-select whatever icons you wish to use&lt;/li&gt;&lt;li&gt;The stereotype name would be the name of the image (by default) and each entry is of Classifier kind&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;float: left; margin-right: 1em; text-align: left;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjIdOrxwNKDKd1jIDuvJCLkPQvBiPV0D-csgn__H-3ICz5I2e8hduc9GnEceIsl-zGzbZob5sKaDDuwki9-yYpA2LbA8jlPIX5rxLjF1D73e18AAnRE93n8l38AtMj5jliHae6Jklxv7hGE3C8OQ0ml9UBM9uW2y7xeCI3y0OfSPI-GgR1rqGgeYg&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;731&quot; data-original-width=&quot;477&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjIdOrxwNKDKd1jIDuvJCLkPQvBiPV0D-csgn__H-3ICz5I2e8hduc9GnEceIsl-zGzbZob5sKaDDuwki9-yYpA2LbA8jlPIX5rxLjF1D73e18AAnRE93n8l38AtMj5jliHae6Jklxv7hGE3C8OQ0ml9UBM9uW2y7xeCI3y0OfSPI-GgR1rqGgeYg=w209-h320&quot; width=&quot;209&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Custom Icons for Stereotypes&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To actually use what has been created, you now need to do the following:&lt;/div&gt;&lt;div&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Depending on what you intend to create, you can create each UML element (icon) to be a Component or a Node - I prefer to use Node most of the time for flexibility. (See Created Nodes diagram)&lt;/li&gt;&lt;li&gt;Add a Stereotype to each Node (based on the new ones created earlier)&lt;/li&gt;&lt;li&gt;Create a UML Deployment Diagram and add the Nodes into the diagram&lt;/li&gt;&lt;li&gt;Do note that some are Nodes within Nodes. E.g. EBS within Web (See Node within Node diagram)&lt;/li&gt;&lt;li&gt;Select all Nodes and right-click to apply to all Nodes&lt;/li&gt;&lt;li&gt;Select Icon Notation -&amp;gt; Customized Icon&lt;/li&gt;&lt;li&gt;The Nodes now have got a new look!&lt;/li&gt;&lt;li&gt;Link them as required&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;float: left; margin-right: 1em; text-align: left;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: left;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgFlEos44E0YJynRSVhJFcbdWY3Su1rV99zVS8mLSFOloDc5clgXwscP_qjuLMqh4zeZim1Dw2yJ5pOTH7KaOCoE4bB5F9nf73lFk06UoLaCowHqjqdqO06Qic5YYuSmgNPgbjkQpcZmDiIhivFwcJM4OBuCQR7hwOyevsWdzV2TNpnTsjYcmFo1A&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;371&quot; data-original-width=&quot;199&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgFlEos44E0YJynRSVhJFcbdWY3Su1rV99zVS8mLSFOloDc5clgXwscP_qjuLMqh4zeZim1Dw2yJ5pOTH7KaOCoE4bB5F9nf73lFk06UoLaCowHqjqdqO06Qic5YYuSmgNPgbjkQpcZmDiIhivFwcJM4OBuCQR7hwOyevsWdzV2TNpnTsjYcmFo1A&quot; width=&quot;129&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Created Nodes&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;float: left;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEijAOrq4RwOz5skNAJ4QinOmvRLHTa0jZsiEYpSFgPFhil-oS55K11lPnSjmavZ7owIRI-SAFyyBDg86jknl38FHyTxnPvPevNmBKWhWUO0WrxmodxEyTjbUtZogu3a0f0-Ir_eNmAcFMOqwFSqpRCfnEI_Ul7BbvdFXNwBX8GbSTYLdjoEVjq0hQ&quot; style=&quot;clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;201&quot; data-original-width=&quot;749&quot; height=&quot;108&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEijAOrq4RwOz5skNAJ4QinOmvRLHTa0jZsiEYpSFgPFhil-oS55K11lPnSjmavZ7owIRI-SAFyyBDg86jknl38FHyTxnPvPevNmBKWhWUO0WrxmodxEyTjbUtZogu3a0f0-Ir_eNmAcFMOqwFSqpRCfnEI_Ul7BbvdFXNwBX8GbSTYLdjoEVjq0hQ=w400-h108&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Node within Node&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjzmXJz_1zWKFlvx9gb1JsSPztCGXfIqDuEaKw3BiTWKXaDgyCR4UhkRXElI_4hf7dGJatDNAroS1Nff1W1WcMeaBlbWZrhZkR4aehls7qDig_LUbi4lU9wLYNu6CIkJ7lwKrPS8qtCmzo8dvmzqyMvY-DP1wReoboQ0A037Yv75deERZlRGZ4KCQ&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://softwarehard.blogspot.com/feeds/3617956684367241500/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/37338138/3617956684367241500' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37338138/posts/default/3617956684367241500'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37338138/posts/default/3617956684367241500'/><link rel='alternate' type='text/html' href='http://softwarehard.blogspot.com/2023/08/useful-hacks-in-using-astah.html' title='Useful Hacks in Using Astah'/><author><name>Johannes</name><uri>http://www.blogger.com/profile/15713518355055537665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSI-x4taFLTm8ZKjb0Dmqg3wNtXkrtIXJ2zZQfPCbOnWUeF5Q0kCo1_Kyptpy1jIp2XkObjz9tco7W1qXLgZyV2I0Nwg1SKuXxbCUhB04CE3OmQI554Gw6hTtC6kHYOA/s220/FaceQ1443676797845.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEg4UGC7s1KZWGEy30ppahO6zPNNTVh3AnIXyEiYWnDZkx-f-G2lJzlZauatKLjDI0L0oaD8OpKq6_diJm03u0HPB2xFvYcYGKI0mssFN9eWFPvpj5bWppcXMB6b1Vz0xli1dsn2_Hpf3CJUY57tjx-NAz8Kx11Rhl8tmDkkmV-r3iiwgb674dhJKg=s72-w400-h153-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37338138.post-2217511401660285781</id><published>2022-06-29T00:25:00.002+08:00</published><updated>2022-06-29T17:30:52.933+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="integration"/><category scheme="http://www.blogger.com/atom/ns#" term="oidc"/><category scheme="http://www.blogger.com/atom/ns#" term="uml"/><title type='text'>Using Astah to Understand &amp; Appreciate Published Standards</title><content type='html'>&lt;p&gt;I&#39;m usually a visual person, hence reading and understanding standards (implementation protocols, etc.) can be quite challenging.&lt;/p&gt;&lt;p&gt;In trying to understand and appreciate OIDC (Open ID Connect) from the &lt;a href=&quot;https://openid.net/connect/&quot; target=&quot;_blank&quot;&gt;OIDC website&lt;/a&gt;, I used &lt;a href=&quot;https://hubs.li/Q01fQx_n0&quot; target=&quot;_blank&quot;&gt;Astah&lt;/a&gt; to model my understanding and summarised by understanding in a couple of diagrams. What was more challenging is that there are several flows in OIDC and each can be slightly different. My goal is to not only understand the protocol, but to appreciate how it is applied in my implementation.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Fortunately, &lt;a href=&quot;https://hubs.li/Q01fQx_n0&quot; target=&quot;_blank&quot;&gt;Astah&lt;/a&gt; makes it relatively easy for me to create high-level models that might not have any implementation elements. Remember I&#39;m &lt;i&gt;not&lt;/i&gt; implementing OIDC protocol and am modeling the flows in order to better understand them. As such, I&#39;m not exactly interested in creating UML Classes, writing Operations, Attributes, Associations, etc., other than what is instrumental in creating the desired diagrams.&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Some of the Sequence Diagrams are here:&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;float: left;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhZaH18C3_R2mXx2TVX0a6BHPynKlP9HidLXQD83zgjGXYVJGQJg-F-D2qerRpRd-ccwXBqQmNFZutGGI6PVoGKBK202gjjcZdiWr9H2kuG8csISbhxKEjEf6Fo9rZaT7rHvQo6RH7eqkN3KUbuGODrRPSVV0soaT33zBx8oTfM41QR_kDtx5k&quot; style=&quot;clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;&quot;&gt;&lt;img data-original-height=&quot;1002&quot; data-original-width=&quot;1354&quot; height=&quot;474&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhZaH18C3_R2mXx2TVX0a6BHPynKlP9HidLXQD83zgjGXYVJGQJg-F-D2qerRpRd-ccwXBqQmNFZutGGI6PVoGKBK202gjjcZdiWr9H2kuG8csISbhxKEjEf6Fo9rZaT7rHvQo6RH7eqkN3KUbuGODrRPSVV0soaT33zBx8oTfM41QR_kDtx5k=w640-h474&quot; title=&quot;Authorization Code Flow (with PKCE)&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Authorization Code Flow (with PKCE)&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;float: left;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;float: left;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjws2A3V9yVcjfTPPqTrrPzgbUCuxJsM6QD4AZDZOyjP2M6tpoGzFnKl8lliHDaUNHUkafrvaZ7ZAp68g2bgwk7NgRrrx9SOkRlYO10UN42koUh8jK5CgoAQI2iQO0rGgpUD5bcGtMorOVnm4oOUmRyVr6_wWAaLZY3mrvOL2agQjOaSc_o5_c&quot; style=&quot;clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;&quot;&gt;&lt;img data-original-height=&quot;825&quot; data-original-width=&quot;1353&quot; height=&quot;390&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjws2A3V9yVcjfTPPqTrrPzgbUCuxJsM6QD4AZDZOyjP2M6tpoGzFnKl8lliHDaUNHUkafrvaZ7ZAp68g2bgwk7NgRrrx9SOkRlYO10UN42koUh8jK5CgoAQI2iQO0rGgpUD5bcGtMorOVnm4oOUmRyVr6_wWAaLZY3mrvOL2agQjOaSc_o5_c=w640-h390&quot; title=&quot;Authorization Code Flow&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Authorization Code Flow&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhDArhRXIc5rb2-3M44qdujw0Citrx7YCN_s-HQvcduRDgGFQ755w4_dDpmyRksTA8sDg8cVMI3nJvznyMGPWAjlRASwmoH-Qm7xp_lZEnco30Ipgd8wWwSRCSOgeF8i7cR4fGbeT8Vj8r1ATtrLHIs_zyAKyPHaJZ_DJSfTQyIE0xRPKqSvHI&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img data-original-height=&quot;660&quot; data-original-width=&quot;1003&quot; height=&quot;422&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhDArhRXIc5rb2-3M44qdujw0Citrx7YCN_s-HQvcduRDgGFQ755w4_dDpmyRksTA8sDg8cVMI3nJvznyMGPWAjlRASwmoH-Qm7xp_lZEnco30Ipgd8wWwSRCSOgeF8i7cR4fGbeT8Vj8r1ATtrLHIs_zyAKyPHaJZ_DJSfTQyIE0xRPKqSvHI=w640-h422&quot; title=&quot;Implicit Grant Flow&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Implicit Grant Flow&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgutPifOnYAYmGpUNTts8u0FaLz8zv39Qy0IVOm8pqJz8ColV95Y_gHVTgQva2LutwNbbSrwraQa1vToEBhatmR_uF3A_RIXlchmWMl2JQkM76FQSM5P-uvV1otYhvOU19-d7IRO17iKuxaV4eGKSzPLY_bUzmsclpRKUTElxJMNWGzV88uC9s&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img data-original-height=&quot;784&quot; data-original-width=&quot;1353&quot; height=&quot;370&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgutPifOnYAYmGpUNTts8u0FaLz8zv39Qy0IVOm8pqJz8ColV95Y_gHVTgQva2LutwNbbSrwraQa1vToEBhatmR_uF3A_RIXlchmWMl2JQkM76FQSM5P-uvV1otYhvOU19-d7IRO17iKuxaV4eGKSzPLY_bUzmsclpRKUTElxJMNWGzV88uC9s=w640-h370&quot; title=&quot;Hybrid Flow&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Hybrid Flow&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;Even more interestingly, what I&#39;m implementing is a Broker Architecture rather than a direct Application-to-IDP (ID provider) integration, I.e., I have an OIDC-compliant broker to &quot;proxy&quot; the OIDC protocol with the IDP.&lt;/div&gt;&lt;p&gt;The Interaction Diagrams look like this:&lt;/p&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEi32A6j3KeKiTefkYSJOYuQAGn8UCSPcvW27N8Vy0uS4tf96cWm1yiVDLZtMuLCv_RUXsOWuSiAppoKbqwZSJcn4fLNr_UsPuTFD_JoR29br0Z_Pxjd3ZlQtwk4CpX9TMxx_0rrcjj6zK4RNe5IKHdICGkUMBpYf_Dlk-v2FoRg5_0H4x6hX9M&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img data-original-height=&quot;498&quot; data-original-width=&quot;868&quot; height=&quot;368&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEi32A6j3KeKiTefkYSJOYuQAGn8UCSPcvW27N8Vy0uS4tf96cWm1yiVDLZtMuLCv_RUXsOWuSiAppoKbqwZSJcn4fLNr_UsPuTFD_JoR29br0Z_Pxjd3ZlQtwk4CpX9TMxx_0rrcjj6zK4RNe5IKHdICGkUMBpYf_Dlk-v2FoRg5_0H4x6hX9M=w640-h368&quot; title=&quot;Normal OIDC Interaction Diagram&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Normal OIDC Interaction Diagram&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgESqyIg9M6M5XLmPwShi9HTjiY2xvSs_9aGWSVrFmre0PEErer3GhuEh5gQ7NNQlv5O1dH4cR7DdS5LixTm87_SnYjYMSkRendrsKm93aERlXFnlVy22V7iKGDBZxtCEk-Sf8TdBFRQKzr0ko9ZLCu8YGIk0Z_UP6ZQHWw0vhrhQLy8H4Gy-4&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img data-original-height=&quot;857&quot; data-original-width=&quot;1006&quot; height=&quot;545&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgESqyIg9M6M5XLmPwShi9HTjiY2xvSs_9aGWSVrFmre0PEErer3GhuEh5gQ7NNQlv5O1dH4cR7DdS5LixTm87_SnYjYMSkRendrsKm93aERlXFnlVy22V7iKGDBZxtCEk-Sf8TdBFRQKzr0ko9ZLCu8YGIk0Z_UP6ZQHWw0vhrhQLy8H4Gy-4=w640-h545&quot; title=&quot;Broker-Architecture OIDC Interaction Diagram&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Broker-Architecture OIDC Interaction Diagram&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://softwarehard.blogspot.com/feeds/2217511401660285781/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/37338138/2217511401660285781' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37338138/posts/default/2217511401660285781'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37338138/posts/default/2217511401660285781'/><link rel='alternate' type='text/html' href='http://softwarehard.blogspot.com/2022/06/using-astah-to-understand-appreciate.html' title='Using Astah to Understand &amp; Appreciate Published Standards'/><author><name>Johannes</name><uri>http://www.blogger.com/profile/15713518355055537665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSI-x4taFLTm8ZKjb0Dmqg3wNtXkrtIXJ2zZQfPCbOnWUeF5Q0kCo1_Kyptpy1jIp2XkObjz9tco7W1qXLgZyV2I0Nwg1SKuXxbCUhB04CE3OmQI554Gw6hTtC6kHYOA/s220/FaceQ1443676797845.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEhZaH18C3_R2mXx2TVX0a6BHPynKlP9HidLXQD83zgjGXYVJGQJg-F-D2qerRpRd-ccwXBqQmNFZutGGI6PVoGKBK202gjjcZdiWr9H2kuG8csISbhxKEjEf6Fo9rZaT7rHvQo6RH7eqkN3KUbuGODrRPSVV0soaT33zBx8oTfM41QR_kDtx5k=s72-w640-h474-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37338138.post-2196063966292737788</id><published>2021-06-21T21:01:00.001+08:00</published><updated>2021-06-21T21:02:19.720+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="architecture"/><category scheme="http://www.blogger.com/atom/ns#" term="documentation"/><category scheme="http://www.blogger.com/atom/ns#" term="mindmap"/><category scheme="http://www.blogger.com/atom/ns#" term="uml"/><title type='text'>Astah - How wonderful you are!</title><content type='html'>&lt;p&gt;I started using JUDE in the early days of UML modelling and have continued using Astah until now. In the day and age of Agile development, emphasizing &quot;communication over documentation&quot;, is UML (and related UML tools) still relevant?&lt;/p&gt;&lt;p&gt;I&#39;ll give a resounding YES! to the question. While we should do away with &lt;i&gt;extensive documentation&lt;/i&gt;, we should still be able to &lt;i&gt;communicate &lt;/i&gt;our intent in forms of architecture, design, workflow, processes, etc.&lt;/p&gt;&lt;p&gt;In the course of my work in an end-user environment, I use Astah &lt;b&gt;&lt;u&gt;extensively&lt;/u&gt; &lt;/b&gt;to communicate with development teams, users, vendors and even senior management.&amp;nbsp;&lt;/p&gt;&lt;p&gt;I find it&#39;s often a lot easier to use a tool like Astah to draw UML (or pseudo-UML) diagrams than pen-and-paper (or even napkins!). For instance, I can easily move things around, redraw and append/ update the diagram using the tool but not with paper.&lt;/p&gt;&lt;p&gt;Some examples of diagrams I&#39;d used in the course of work are below. I used Astah for the following:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Share my thought process, concepts and linkages using Mindmaps (see Pros &amp;amp; Cons Mindmap)&lt;/li&gt;&lt;li&gt;Design Event-Driven Architecture (EDA) Topic Hierarchy using Mindmap (see Topic Hierarchy)&lt;/li&gt;&lt;li&gt;Depict in a UML Class diagram how the ERP and CRM synchronizes data (see ERP-CRM Entity Sync)&lt;/li&gt;&lt;li&gt;Share system-to-system Integration Architecture (including Events, Web and API) in UML Class diagram (see Integration Architecture)&lt;/li&gt;&lt;li&gt;Share flow/ sequence design using UML Sequence diagram (see Sequence Diagram)&lt;/li&gt;&lt;li&gt;Share high-level block diagrams using UML Class diagrams with non-IT folks (see CRM Blocks)&lt;/li&gt;&lt;li&gt;Share high-level UML Class diagrams for Enterprise Application Portfolio and Integration Architecture (see High-level AS-IS)&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;If you:&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;are &lt;i&gt;reasonably&lt;/i&gt; adept at UML&lt;/li&gt;&lt;li&gt;prefer a &lt;u&gt;lightweight &amp;amp; cross-platform&lt;/u&gt; UML tool over using pen-and-paper&lt;/li&gt;&lt;li&gt;enjoy communicating your intent, architecture, design without extensive documentation&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;You should give Astah a try &lt;a href=&quot;https://astah.net/downloads/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;!&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;float: left; margin-right: 1em; text-align: left;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwZm_8bWpQ07ssRntbKqURIooKcfiepK3vSkBHsE5io3tPwngbACGosuYvjaiGrd6LoW2yCXFy_8rcBD7cf1TQCSgf2PmE0a9DmfAXa-dtnCbGKQM7puh8cI7RFFQpZnieMxvpvA/&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;510&quot; data-original-width=&quot;1257&quot; height=&quot;260&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwZm_8bWpQ07ssRntbKqURIooKcfiepK3vSkBHsE5io3tPwngbACGosuYvjaiGrd6LoW2yCXFy_8rcBD7cf1TQCSgf2PmE0a9DmfAXa-dtnCbGKQM7puh8cI7RFFQpZnieMxvpvA/w640-h260/image.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;1. Pros and Cons Mindmap&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;float: left;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJ94_yxw7fgqGck3Z52x2xTLk1hCq-rSsKLahANY76C-52UxBnS1XCIUE04L1bLcdyFd4ri6Y7-VtuYSqS8RloGUndWPZSdLRULkZoz9QSp2MnrH6pzaxEI9YmfTXZcTBE9YcwuQ/&quot; style=&quot;clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;&quot;&gt;&lt;img data-original-height=&quot;793&quot; data-original-width=&quot;1501&quot; height=&quot;338&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJ94_yxw7fgqGck3Z52x2xTLk1hCq-rSsKLahANY76C-52UxBnS1XCIUE04L1bLcdyFd4ri6Y7-VtuYSqS8RloGUndWPZSdLRULkZoz9QSp2MnrH6pzaxEI9YmfTXZcTBE9YcwuQ/w640-h338/image.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;2. Topic Hierarchy&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;float: left;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicBGPaacDyMic5smmc3Bqp1WFO8LHdWx7ZkMBEou6MZXrXaNpzzLmaH6ycvbJSWd-2P73ZLA_hUX9G3ZzeuS2Q7TaeZfdg7T8AmfCfb7wzQ9ertZI0xJoyX-rP_E2ASyyWXPFvsg/&quot; style=&quot;clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;813&quot; data-original-width=&quot;926&quot; height=&quot;563&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicBGPaacDyMic5smmc3Bqp1WFO8LHdWx7ZkMBEou6MZXrXaNpzzLmaH6ycvbJSWd-2P73ZLA_hUX9G3ZzeuS2Q7TaeZfdg7T8AmfCfb7wzQ9ertZI0xJoyX-rP_E2ASyyWXPFvsg/w640-h563/image.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;3. ERP-CRM Entity Sync&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;float: left;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMPetH-3bptbkETwRwB3Y_e4w5BppiAP_Tlj5HZQQs9OcMgo673Y2oERBXrg3j4jVR2ZKkXf49VNLfvmxMGjBi_-TXxbOPMrQTW54QNpx2qcW_qRN4cntNFkIt7xAGHLil0lKhng/&quot; style=&quot;clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;1293&quot; data-original-width=&quot;1280&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMPetH-3bptbkETwRwB3Y_e4w5BppiAP_Tlj5HZQQs9OcMgo673Y2oERBXrg3j4jVR2ZKkXf49VNLfvmxMGjBi_-TXxbOPMrQTW54QNpx2qcW_qRN4cntNFkIt7xAGHLil0lKhng/w635-h640/image.png&quot; width=&quot;635&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;4. Integration Architecture&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;float: left;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHXhqObgBd8GysvGppJNGOWiD0xlvqJbZMTcdesdcvIZpPlC07EMQc4hioiqo55YpfCK49z6Y-N4pvS-qPOE9MP3ygphKm11_lybHvhU10uqInuReuzqTE9uZpYywBlKFQ4LLQXw/&quot; style=&quot;clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;1274&quot; data-original-width=&quot;1280&quot; height=&quot;637&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHXhqObgBd8GysvGppJNGOWiD0xlvqJbZMTcdesdcvIZpPlC07EMQc4hioiqo55YpfCK49z6Y-N4pvS-qPOE9MP3ygphKm11_lybHvhU10uqInuReuzqTE9uZpYywBlKFQ4LLQXw/w640-h637/image.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;5. Sequence Diagram&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/div&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;float: left; margin-left: 1em; text-align: left;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZLQ1M5kqIfHlEGHOUeFeH9BTyY-5CV1ji9EM8fttmtm86H2u-HHUlf7Gn7bAOaA1xv50V6ous2ityxecTmEhEiejfJUVm1kmcaaSyv4_ay8nQUkZKk3dlngFVlGKwasasIm3R2w/&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;521&quot; data-original-width=&quot;1058&quot; height=&quot;316&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZLQ1M5kqIfHlEGHOUeFeH9BTyY-5CV1ji9EM8fttmtm86H2u-HHUlf7Gn7bAOaA1xv50V6ous2ityxecTmEhEiejfJUVm1kmcaaSyv4_ay8nQUkZKk3dlngFVlGKwasasIm3R2w/w640-h316/image.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;6. CRM Blocks&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;float: left;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKAlZNIXD3XO5DdZ1AJhgEjFtiVqza5vkCv3aWJ6pLZwbSg8uikFc-NKrPvEMgMoh0UDxNf7g9C6roYAKxOlwEr67voUkENrjJyRAUNFbXIf9ow3hJmp1Km9-PNrYBHvK4VjbS_g/&quot; style=&quot;clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;1600&quot; data-original-width=&quot;1391&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKAlZNIXD3XO5DdZ1AJhgEjFtiVqza5vkCv3aWJ6pLZwbSg8uikFc-NKrPvEMgMoh0UDxNf7g9C6roYAKxOlwEr67voUkENrjJyRAUNFbXIf9ow3hJmp1Km9-PNrYBHvK4VjbS_g/w557-h640/image.png&quot; width=&quot;557&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;7. High-Level AS-IS&lt;br /&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://softwarehard.blogspot.com/feeds/2196063966292737788/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/37338138/2196063966292737788' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37338138/posts/default/2196063966292737788'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37338138/posts/default/2196063966292737788'/><link rel='alternate' type='text/html' href='http://softwarehard.blogspot.com/2021/06/astah-how-wonderful-you-are.html' title='Astah - How wonderful you are!'/><author><name>Johannes</name><uri>http://www.blogger.com/profile/15713518355055537665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSI-x4taFLTm8ZKjb0Dmqg3wNtXkrtIXJ2zZQfPCbOnWUeF5Q0kCo1_Kyptpy1jIp2XkObjz9tco7W1qXLgZyV2I0Nwg1SKuXxbCUhB04CE3OmQI554Gw6hTtC6kHYOA/s220/FaceQ1443676797845.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwZm_8bWpQ07ssRntbKqURIooKcfiepK3vSkBHsE5io3tPwngbACGosuYvjaiGrd6LoW2yCXFy_8rcBD7cf1TQCSgf2PmE0a9DmfAXa-dtnCbGKQM7puh8cI7RFFQpZnieMxvpvA/s72-w640-h260-c/image.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37338138.post-2955942576339424372</id><published>2020-12-01T15:02:00.002+08:00</published><updated>2020-12-01T15:02:23.304+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="devops"/><category scheme="http://www.blogger.com/atom/ns#" term="itil"/><title type='text'>Template for IT Ops runbook </title><content type='html'>https://github.com/SkeltonThatcher/run-book-template/blob/master/run-book-template.md

https://www.atlassian.com/software/confluence/templates/devops-runbook

https://medium.com/@shawnstafford/ops-runbook-16017fa78733</content><link rel='replies' type='application/atom+xml' href='http://softwarehard.blogspot.com/feeds/2955942576339424372/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/37338138/2955942576339424372' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37338138/posts/default/2955942576339424372'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37338138/posts/default/2955942576339424372'/><link rel='alternate' type='text/html' href='http://softwarehard.blogspot.com/2020/12/template-for-it-ops-runbook.html' title='Template for IT Ops runbook '/><author><name>Johannes</name><uri>http://www.blogger.com/profile/15713518355055537665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSI-x4taFLTm8ZKjb0Dmqg3wNtXkrtIXJ2zZQfPCbOnWUeF5Q0kCo1_Kyptpy1jIp2XkObjz9tco7W1qXLgZyV2I0Nwg1SKuXxbCUhB04CE3OmQI554Gw6hTtC6kHYOA/s220/FaceQ1443676797845.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37338138.post-371856827180096353</id><published>2019-08-13T18:55:00.000+08:00</published><updated>2019-08-14T23:40:35.589+08:00</updated><title type='text'>Astah Productivity: How to quickly create UML Classes from Objects in UML Sequence Diagram</title><content type='html'>I usually begin modelling from a UML Sequence Diagram in order to have a sensing of a list of classes/ objects. However, the downside with starting with the Sequence Diagram is that the classes are not created automatically.&lt;br /&gt;
&lt;br /&gt;
Other than having to manually create classes to link to the object (lifeline) which is rather tedious, I finally found a great &lt;strike&gt;(undocumented?)&lt;/strike&gt; feature in Astah that allows me to create a class (automatically) from an object (lifeline) in the Sequence Diagram!&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
&lt;b&gt;BEFORE&lt;/b&gt;: the usual steps to creating classes from Sequence Diagrams.&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Create lifelines and messages as required&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGQ8uOSIXnXDeXuq9zyPEkv3gPffPxp1ayGqsGquJ_1NYq62NuS_opxYNMSkYmLENrH0JNs947F81EqJkFXzMUjD1Cpm4BUA0S3u3KlzUHXYplOgsvhYJDXlRZx4Wv1oENXBUQwg/s1600/s1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;504&quot; data-original-width=&quot;877&quot; height=&quot;367&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGQ8uOSIXnXDeXuq9zyPEkv3gPffPxp1ayGqsGquJ_1NYq62NuS_opxYNMSkYmLENrH0JNs947F81EqJkFXzMUjD1Cpm4BUA0S3u3KlzUHXYplOgsvhYJDXlRZx4Wv1oENXBUQwg/s640/s1.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;For lifeline objects that need to be created as a Class, click on the object. The properties panel should show the base class as &amp;lt;&amp;lt;Unspecified&amp;gt;&amp;gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4SdS4-dY1IsFtUG1YAmYwxXFIqL0LDllODb3PwpFCKqfx5avWltD2nGkebHK0gF476cPQBdFCrzXXtV3AgLXm4qXdTUevGdnu5HROgyr1PA7pooby9bmxuqeor-xfL2rneMVQ8g/s1600/s2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;598&quot; data-original-width=&quot;355&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4SdS4-dY1IsFtUG1YAmYwxXFIqL0LDllODb3PwpFCKqfx5avWltD2nGkebHK0gF476cPQBdFCrzXXtV3AgLXm4qXdTUevGdnu5HROgyr1PA7pooby9bmxuqeor-xfL2rneMVQ8g/s1600/s2.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;As the class has not been previously created, we need to create a new Class (usually) with the same name as the object. Click on New and rename the Class&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-Cs16wnMx3VEY5ZsGfJUVplzsAQqgPWRMt0KX1l-HMTn4qWdFbtNJN3jt_C0mjMsxmRQoJ7v0WcM9q-7eWbAOZUnscVWZmMuXKOtWUzhy98Br3JpJH24dBvyvyEcyVv4k19EIGA/s1600/s3.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;345&quot; data-original-width=&quot;290&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-Cs16wnMx3VEY5ZsGfJUVplzsAQqgPWRMt0KX1l-HMTn4qWdFbtNJN3jt_C0mjMsxmRQoJ7v0WcM9q-7eWbAOZUnscVWZmMuXKOtWUzhy98Br3JpJH24dBvyvyEcyVv4k19EIGA/s1600/s3.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Press close on the dialog box. The lifeline object is now an instance of the new class&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJrkIxtddOYb0Y1MmwYmcKqSJIpwUXrxvHbwxtvosI7DyQKAlAjno65L8FuPzSZ-EGDiuP2xFIu8Wet7hxazoiCb-ohjNumQL8ItE2QfLB6pSp3r2RcDId-aLoH7ye4vQlCJueQg/s1600/s4.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;504&quot; data-original-width=&quot;877&quot; height=&quot;366&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJrkIxtddOYb0Y1MmwYmcKqSJIpwUXrxvHbwxtvosI7DyQKAlAjno65L8FuPzSZ-EGDiuP2xFIu8Wet7hxazoiCb-ohjNumQL8ItE2QfLB6pSp3r2RcDId-aLoH7ye4vQlCJueQg/s640/s4.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Remove the original lifeline object name (if required)&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjddlw9ztwJ58ieKD-JR8gE13hsHZTwMlSFfONMQINsr9RlovNkBLXUFIqZXXskrUpz9AbdgiSwVZ78YNzQrqGYNVKmvymg2J_aZcpkAsUdhoaxhxFifQuAY1TtHnU20rF3ir2Mw/s1600/s5.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;504&quot; data-original-width=&quot;877&quot; height=&quot;367&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjddlw9ztwJ58ieKD-JR8gE13hsHZTwMlSFfONMQINsr9RlovNkBLXUFIqZXXskrUpz9AbdgiSwVZ78YNzQrqGYNVKmvymg2J_aZcpkAsUdhoaxhxFifQuAY1TtHnU20rF3ir2Mw/s640/s5.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Repeat for each lifeline object&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;h3&gt;
&lt;b&gt;AFTER: a &lt;i&gt;much better way&lt;/i&gt; to do things!&amp;nbsp;&lt;/b&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Create lifelines and messages as required&lt;/li&gt;
&lt;li&gt;For lifeline objects that need to be created as a Class, click on the object&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMkdchUn4XXEP0IfhTdn9gg5BT8Q6FXjLKmIq7h6SavBxzVk2PAkQOiTAq0mENSjiYfLwNig2Chj63UP_4RUKsDyUkjeHTJLdHLfXzD1m3qrZEu64IWuX9QpOb6_9wT3dobsEGbw/s1600/t1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;400&quot; data-original-width=&quot;651&quot; height=&quot;392&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMkdchUn4XXEP0IfhTdn9gg5BT8Q6FXjLKmIq7h6SavBxzVk2PAkQOiTAq0mENSjiYfLwNig2Chj63UP_4RUKsDyUkjeHTJLdHLfXzD1m3qrZEu64IWuX9QpOb6_9wT3dobsEGbw/s640/t1.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Rename the object with a preceding colon (to denote that the object is an instance of a Class)&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDeDGVtbczDabkv6yp_i2gr0kbCV-mRGEON9n8k5TXpfZ0vfyDBVl1unUYQJUI1xOHPkXJ6SEkwHAe6QDn9dcpHJQA4P0gzpY0Fwa80y2t3WfRhPEKS4cO7YXyOKHsUkijM4174g/s1600/t2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;412&quot; data-original-width=&quot;679&quot; height=&quot;388&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDeDGVtbczDabkv6yp_i2gr0kbCV-mRGEON9n8k5TXpfZ0vfyDBVl1unUYQJUI1xOHPkXJ6SEkwHAe6QDn9dcpHJQA4P0gzpY0Fwa80y2t3WfRhPEKS4cO7YXyOKHsUkijM4174g/s640/t2.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;A prompt pops up &quot;Do you want to create a new &amp;lt;&amp;lt;&lt;i&gt;Name_Of_Class&amp;gt;&amp;gt;&lt;/i&gt; for the type?&quot;. Choose &quot;Yes&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTbuIZyI5G5vsJOadKTuXSuhs0OXBKHXQmZdLwcH-trDHyAZmv0ZxmAzsIHE-7GGRIejaOY6F36WssmHtGQp0tVuaqDN75xgRiy6IpDf1UtGwAi-zyBMouaumOto3svvfzacTjSQ/s1600/t3.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;117&quot; data-original-width=&quot;337&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTbuIZyI5G5vsJOadKTuXSuhs0OXBKHXQmZdLwcH-trDHyAZmv0ZxmAzsIHE-7GGRIejaOY6F36WssmHtGQp0tVuaqDN75xgRiy6IpDf1UtGwAi-zyBMouaumOto3svvfzacTjSQ/s1600/t3.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;A new class is created with the name and the original lifeline object name automatically disappears.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHpK0VCah2KEDqzD8RuB4kgIb4URnxTFamwv2JeCr2kEKJooD9TihWHneABkXXmoaxs2HoJjWUn2xtSs_wlvEnytsTaPbx2WNWNsA3pL1v9jquZIcMjYrCGJe44f8Xm3uU7LjE0Q/s1600/t4.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;504&quot; data-original-width=&quot;877&quot; height=&quot;366&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHpK0VCah2KEDqzD8RuB4kgIb4URnxTFamwv2JeCr2kEKJooD9TihWHneABkXXmoaxs2HoJjWUn2xtSs_wlvEnytsTaPbx2WNWNsA3pL1v9jquZIcMjYrCGJe44f8Xm3uU7LjE0Q/s640/t4.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Repeat for each lifeline object&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://softwarehard.blogspot.com/feeds/371856827180096353/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/37338138/371856827180096353' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37338138/posts/default/371856827180096353'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37338138/posts/default/371856827180096353'/><link rel='alternate' type='text/html' href='http://softwarehard.blogspot.com/2019/08/astah-productivity-how-to-quickly.html' title='Astah Productivity: How to quickly create UML Classes from Objects in UML Sequence Diagram'/><author><name>Johannes</name><uri>http://www.blogger.com/profile/15713518355055537665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSI-x4taFLTm8ZKjb0Dmqg3wNtXkrtIXJ2zZQfPCbOnWUeF5Q0kCo1_Kyptpy1jIp2XkObjz9tco7W1qXLgZyV2I0Nwg1SKuXxbCUhB04CE3OmQI554Gw6hTtC6kHYOA/s220/FaceQ1443676797845.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGQ8uOSIXnXDeXuq9zyPEkv3gPffPxp1ayGqsGquJ_1NYq62NuS_opxYNMSkYmLENrH0JNs947F81EqJkFXzMUjD1Cpm4BUA0S3u3KlzUHXYplOgsvhYJDXlRZx4Wv1oENXBUQwg/s72-c/s1.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37338138.post-4886516650152319522</id><published>2018-11-23T18:19:00.000+08:00</published><updated>2018-11-23T18:21:22.850+08:00</updated><title type='text'>Excel &amp; SharePoint</title><content type='html'>&lt;h3&gt;
Objective&lt;/h3&gt;
I needed to prepare an Excel file for importing into SharePoint.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
Excel&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;First, I need an Excel formula to populate a short name (255 characters) from a much longer name ( found in &quot;col&quot;).&lt;/li&gt;
&lt;li&gt;The length of the short name is constrained by SharePoint&#39;s &quot;single line of text&quot; field.&lt;/li&gt;
&lt;li&gt;The challenge is to find acronyms within col or if am acronym can&#39;t be found, to truncate col to 255 characters.&lt;/li&gt;
&lt;li&gt;Example:&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;span style=&quot;background-color: #cccccc;&quot;&gt;GNU is Not Unix (GNU) =&amp;gt; GNU&lt;br /&gt;This is another name =&amp;gt; This is another name&lt;/span&gt;&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;This is the formula to use.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote class=&quot;tr_bq&quot; style=&quot;background-attachment: initial !important; background-clip: initial !important; background-image: initial !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; font-family: sans-serif; overflow-wrap: break-word; white-space: pre-wrap;&quot;&gt;
&lt;span style=&quot;background-color: #cccccc;&quot;&gt;= IF(ISNUMBER(FIND(&quot;(&quot;;[col]));MID([col];FIND(&quot;(&quot;;[col]) + 1; FIND(&quot;)&quot;;[col]) - FIND(&quot;(&quot;;[col])-1);LEFT(CLEAN(TRIM([col]));255))&lt;/span&gt;&lt;/blockquote&gt;
&lt;h3&gt;
Importing into SharePoint&lt;/h3&gt;
The only error free way to do this is to use Excel to export into SharePoint.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Create an Excel table and select it&lt;/li&gt;
&lt;li&gt;Go to &quot;table tools&quot; tab and choose the &quot;export table to SharePoint list&quot; option within &quot;export&quot;.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://softwarehard.blogspot.com/feeds/4886516650152319522/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/37338138/4886516650152319522' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37338138/posts/default/4886516650152319522'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37338138/posts/default/4886516650152319522'/><link rel='alternate' type='text/html' href='http://softwarehard.blogspot.com/2018/11/excel-sharepoint.html' title='Excel &amp; SharePoint'/><author><name>Johannes</name><uri>http://www.blogger.com/profile/15713518355055537665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSI-x4taFLTm8ZKjb0Dmqg3wNtXkrtIXJ2zZQfPCbOnWUeF5Q0kCo1_Kyptpy1jIp2XkObjz9tco7W1qXLgZyV2I0Nwg1SKuXxbCUhB04CE3OmQI554Gw6hTtC6kHYOA/s220/FaceQ1443676797845.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37338138.post-2044749240058396259</id><published>2018-08-14T14:01:00.001+08:00</published><updated>2018-08-14T14:01:57.127+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="datastore"/><category scheme="http://www.blogger.com/atom/ns#" term="uml"/><title type='text'>Unified Data Modelling for RDBMS and NoSQL</title><content type='html'>&lt;br /&gt;
&lt;h4&gt;
The logical model metadata&lt;/h4&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgI7QyI4r9tj1x3RGf3n3mDkX_TgC5QWf1VUnSplxoJHlEtVSzFvm-UCFFi6D1boNZc49OBB31DicjWnPNGVcjLP_yQZCEciWBROAzW4_SJwoD3Sbw2LFUOKrlCWLIiT_ukmE8JgQ/s1600-h/image%25255B15%25255D.png&quot;&gt;&lt;img alt=&quot;image&quot; border=&quot;0&quot; height=&quot;362&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxmGO1UcrCU3GWddI85mbSZGrMMkilhHD-PBtafJdcRX33MAr9R3N1GWUElAZUE2SpDuTFn6G074HD6IIFLPOjl2Lwa_FPMlYhW__Ol-3SGd_ZQwy3LsVVDmIXA1RrNCqLu3ma6g/?imgmax=800&quot; style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-left: 0px; padding-right: 0px; padding-top: 0px;&quot; title=&quot;image&quot; width=&quot;427&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h4&gt;
The physical model metadata&lt;/h4&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmzpXImQkwGZmZ4ttqkFLR5u-WdMtizL22RZPKL9VfNJC2QdkfWlVmr8bO_t1gAO1xlMVbX7ceA2VbN34gBAw8psjpYjrWdQc61eq0yl2hfhOao7wPMQoWvxrc1dXbMmuxcK16fA/s1600-h/image%25255B14%25255D.png&quot;&gt;&lt;img alt=&quot;image&quot; border=&quot;0&quot; height=&quot;424&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5m2lSt9gRxaYq50KPOAdwpiHaDYWWk8sIvZlBq9yQC-1dxphkPhmFCu-Pq-FXJXV-OpPQFgd-3D3c7XCZB4eK9SYh4KFsJ4f5Wen5qNnleSJbJCZmKIGVXfImD2nvgHnVHLZOyw/?imgmax=800&quot; style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;&quot; title=&quot;image&quot; width=&quot;680&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Note that Blue denotes the RDBMS metadata while Green denotes the NoSQL metadata.</content><link rel='replies' type='application/atom+xml' href='http://softwarehard.blogspot.com/feeds/2044749240058396259/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/37338138/2044749240058396259' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37338138/posts/default/2044749240058396259'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37338138/posts/default/2044749240058396259'/><link rel='alternate' type='text/html' href='http://softwarehard.blogspot.com/2018/08/unified-data-modelling-for-rdbms-and.html' title='Unified Data Modelling for RDBMS and NoSQL'/><author><name>Johannes</name><uri>http://www.blogger.com/profile/15713518355055537665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSI-x4taFLTm8ZKjb0Dmqg3wNtXkrtIXJ2zZQfPCbOnWUeF5Q0kCo1_Kyptpy1jIp2XkObjz9tco7W1qXLgZyV2I0Nwg1SKuXxbCUhB04CE3OmQI554Gw6hTtC6kHYOA/s220/FaceQ1443676797845.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxmGO1UcrCU3GWddI85mbSZGrMMkilhHD-PBtafJdcRX33MAr9R3N1GWUElAZUE2SpDuTFn6G074HD6IIFLPOjl2Lwa_FPMlYhW__Ol-3SGd_ZQwy3LsVVDmIXA1RrNCqLu3ma6g/s72-c?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37338138.post-7407487399754796782</id><published>2018-08-14T14:01:00.000+08:00</published><updated>2018-08-14T14:01:03.695+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="sharepoint"/><title type='text'>SharePoint Document Library Folders &amp; Tagging</title><content type='html'>Although I&#39;m aware of the downside of using folders in Document Libraries, I still think it&#39;s one of the best ways to categorise files.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is especially true when migrating from file-shares to SharePoint. Furthermore, it&#39;s a great hassle to individually tag metadata or column information for each file that I wish to dump into SharePoint.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To workaround this issue, the solution is to use automatic tagging in conjunction with the use of folders. See &lt;a href=&quot;http://www.nothingbutsharepoint.com/2011/08/24/automatic-tagging-based-from-a-folder-how-to-get-your-users-to-eat-their-vegetables-without-them-knowing-it-aspx/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
However, if you structure your Document Libraries with many folders and different levels, you will quickly end up with a different problem: Having to set-up the rules (mapping) for each folder using SharePoint.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The easiest way to get around this is to edit the rules directly. This file can be found in the hidden Forms folder as client_LocationBasedDefaults.html. By opening the Document Library using Windows Explorer, you will be able to edit the file. Do so with great care!&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://softwarehard.blogspot.com/feeds/7407487399754796782/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/37338138/7407487399754796782' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37338138/posts/default/7407487399754796782'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37338138/posts/default/7407487399754796782'/><link rel='alternate' type='text/html' href='http://softwarehard.blogspot.com/2018/08/sharepoint-document-library-folders.html' title='SharePoint Document Library Folders &amp; Tagging'/><author><name>Johannes</name><uri>http://www.blogger.com/profile/15713518355055537665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSI-x4taFLTm8ZKjb0Dmqg3wNtXkrtIXJ2zZQfPCbOnWUeF5Q0kCo1_Kyptpy1jIp2XkObjz9tco7W1qXLgZyV2I0Nwg1SKuXxbCUhB04CE3OmQI554Gw6hTtC6kHYOA/s220/FaceQ1443676797845.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37338138.post-966099880755941456</id><published>2018-08-14T01:12:00.000+08:00</published><updated>2018-08-16T21:10:13.306+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="agile"/><category scheme="http://www.blogger.com/atom/ns#" term="architecture"/><category scheme="http://www.blogger.com/atom/ns#" term="design"/><category scheme="http://www.blogger.com/atom/ns#" term="software"/><category scheme="http://www.blogger.com/atom/ns#" term="uml"/><title type='text'>Software Architecture Modelling Using C4</title><content type='html'>UML appears to be dying in the light of the Agile development movement.&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;working software over comprehensive documentation&lt;/span&gt;&lt;/i&gt;&lt;/blockquote&gt;
Many have wrongly interpreted this to mean no documentation.&lt;br /&gt;
&lt;br /&gt;
I recently read up &lt;a href=&quot;https://www.infoq.com/articles/C4-architecture-model&quot; target=&quot;_blank&quot;&gt;C4 model for software architecture&lt;/a&gt; that describes the software architecture of a system from different depth &amp;amp; perspectives and for a different audience. The author promotes the use of a common vocabulary to describe software architecture using simple-to-understand diagrams.&lt;br /&gt;
&lt;br /&gt;
I attempt to do &lt;i&gt;similar&lt;/i&gt; in this post using the same case study as that of the C4 article.&lt;br /&gt;
&lt;br /&gt;
The differences are:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;I do not wish to go into&amp;nbsp;&lt;u&gt;Class&lt;/u&gt; (the 4th C) as that requires too much implementation details&lt;/li&gt;
&lt;li&gt;I replace the&amp;nbsp;4th C with &lt;u&gt;Concept&lt;/u&gt; as I personally find the Conceptual model more relevant and important in appreciating the business domain.&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;
Using &lt;b&gt;Astah&lt;/b&gt;, I figured out how I can model the 4C software architecture efficiently using UML.&lt;br /&gt;
&lt;br /&gt;
&lt;h4&gt;
Mind-Mapping&lt;/h4&gt;
&lt;br /&gt;
I started with a Mind-map to have a good idea of the Context and the main Concepts.&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtTnV3SOOSInu8WppCPYr6qJp4Uud5NzHauJKK54nS1UcFQbJJIFk3AWXErXsH4YLVmLMTAHnp15KlXfT8VyvwSh3BJhNsCupjuheRApobc1wRf-8UAL1rvaXXR0h4igpG1HxXrA/s1600-h/System+Under+Development%255B10%255D&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;System Under Development&quot; border=&quot;0&quot; height=&quot;180&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5oQcyXuVw_xbK-iNtUlzzpjEO6wBKir0MIsqJJepKvOfPMQt9JflNoMBzNi6iYT1yVqFajuQfSBTRb-q2VH9qc50nAZhFydMBTMWH3Gpg7pXSetiJ9zlPT1qjmOcBvHxP6SyCJQ/?imgmax=800&quot; style=&quot;background-image: none; display: inline;&quot; title=&quot;System Under Development&quot; width=&quot;686&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Mind-map&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
In using Astah, I first create the above Mind-map to capture the system &lt;i&gt;Context &lt;/i&gt;and main &lt;i&gt;Concepts.&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
Next, I performed the following steps:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;For every Human Actor and External System, convert into a &lt;i&gt;UML Actor&lt;/i&gt; by selecting them and right-clicking (&lt;i&gt;Convert to UML Model –&amp;gt; Actor&lt;/i&gt;)&lt;/li&gt;
&lt;li&gt;For every use case/ feature (sub-topic of Actors), convert into a &lt;i&gt;UML Use Case&lt;/i&gt; (&lt;i&gt;Convert to UML Model –&amp;gt; Use Case&lt;/i&gt;)&lt;/li&gt;
&lt;li&gt;For every concept, convert to a &lt;i&gt;UML Class&lt;/i&gt; (&lt;i&gt;Convert to UML Model –&amp;gt; Class&lt;/i&gt;)&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h4&gt;
Context Diagram&lt;/h4&gt;
&lt;br /&gt;
Next task is to create the Context Diagram.&lt;br /&gt;
This proved to be rather easy as the Actors were already created in the earlier step.&lt;br /&gt;
I created a &lt;u&gt;UML Use Case Diagram&lt;/u&gt; and added a &lt;i&gt;UML Subsystem&lt;/i&gt; to depict the SuD.&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhB443xNYHjCqsgCLboLLtwpfJ9GL3T8_l1yD3FnAxpLTpaXTkImEPFhokcrOEgMrqB4tcK1Uyt5YL1aVo3yr9Fz0j_CuBGjXeQ7LapTYQ-P0Fg9cL1gupTHqSSyojXzzaPyPuv4g/s1600-h/Context+Diagram+L0%255B11%255D&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;Context Diagram L0&quot; border=&quot;0&quot; height=&quot;535&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgS3gh2R4Ayd31YnZKK_ems8brAor4DuxkT4qsXuzK0OW_UQBNUeB7RxxSpS14rV7YzRaHzUQBm0LqZWuriTvus6BTZewpAbzdjvL_3AXeJVposlDnAW0NL1LkDZ4nKcMSSPfi6iQ/?imgmax=800&quot; style=&quot;background-image: none; display: inline;&quot; title=&quot;Context Diagram L0&quot; width=&quot;685&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Context Diagram&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;h4&gt;
(Optional) Context Diagram (Level 1)&lt;/h4&gt;
&lt;br /&gt;
Call me old-school if you like! I still appreciate the usual&amp;nbsp;&lt;u&gt;UML Use Case Diagram&lt;/u&gt;&amp;nbsp;with Actors and associated Use Cases to depict what each Actor does with the SuD in a little bit more detail. This is optional and would be considered a (more detailed) next level of the Context Diagram (Level 1).&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsJ03jsEZYRYYBZ2PNHheDgXRx6y1xpAOg1SEaJCYDVSXqXRRQ7jnEerSOu9ZKCyvYbPkPEwAbq51dd-yGRKd4tWhLCJ4mDuHEauELOgVPphyphenhyphenOu-JYRzk_SZgPEm47rLgGQk-AJw/s1600-h/Use+Case+Diagram+L1%255B8%255D&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;Use Case Diagram L1&quot; border=&quot;0&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDh6tETDYKwrxd7vYKmuDCVSMlbCC6DIkmVdccgHcRNJD2EL6O0h4EK4niTkli4-iY20aYbH24i3MHDiGJtS4t8aNuTvvbs5cLtXeJoSONhJKZEcTyZ7FYLfAsp-7_MpdHe6BPTA/?imgmax=800&quot; style=&quot;background-image: none; display: inline;&quot; title=&quot;Use Case Diagram L1&quot; width=&quot;684&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Use Case Diagram (Context Diagram Level 1)&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;h4&gt;
Conceptual Diagram (Personal Preference)&lt;/h4&gt;
&lt;br /&gt;
At this point, I deviate from C4 in creating a diagram that captures high-level domain concepts. I find the information/ conceptual model useful in describing the SuD in terms of the data/ information it captures. This diagram is commonly known as the Domain Model and is depicted using a &lt;u&gt;UML Class Diagram&lt;/u&gt;. In keeping with the 4 Cs, I will call this the Conceptual Diagram.&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhEU6pZK1lv11QyxwMwjeKRbOl-5sLk9HloR_TkH3aY7z3-jDy6GOWZHJ9w2LM8jrWqc6fw96-a_ldnzKHy_2-uV6I5Md9spEKklY5PSQGu5fmKh9RPjr4u0l7iAiekRRlKGbOGvg/s1600-h/Conceptual+Model%255B8%255D&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;Conceptual Model&quot; border=&quot;0&quot; height=&quot;594&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihNb9draUx3UqPDRzN9OBn22rpi5at0jO79TGKVu_0CJ4KbPpgY_0-iOHKymlzksdT2Xvgl278JaubmEKgLNQmf_oZmPfec_qO24B3qhtybvjxjDYUu65LWIdPkDx7yJrWuvS8mQ/?imgmax=800&quot; style=&quot;background-image: none; display: inline;&quot; title=&quot;Conceptual Model&quot; width=&quot;683&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Conceptual Diagram&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;h4&gt;
Container Diagram&lt;/h4&gt;
&lt;br /&gt;
The next perspective in C4 is the Container Diagram which is modeled using the &lt;u&gt;UML Deployment Diagram&lt;/u&gt;&amp;nbsp;where every Container is depicted by a &lt;i&gt;UML Node&lt;/i&gt;. &lt;i&gt;Constraints&lt;/i&gt; are placed on each relationship as necessary.&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGQePhQDS475yNYeK6DpgJvWcGD-FCalCic-d0FV7_t4NDUFGDgG-YxUV0L2TRbSp5IQ0Vu1-zcJDI0VDNXqJ_s75IAAumIiBeU0ZZA-L95L6h91v3ILJ9aYboT8QCwG2U8CG4bQ/s1600-h/Container+Diagram%255B8%255D&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;Container Diagram&quot; border=&quot;0&quot; height=&quot;521&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifjsmuxCNQTQzYw0zMgvIo3bMPrrGeS-bkDIJTUC0idOS2Da4bt3dk5KMfoemoW_lja8cFDOx8aIs2cK4oFZHWIT45By41rd7hPjDWNr2bSugbJJijxfsmrmmXmbkV5XOB4z1uEA/?imgmax=800&quot; style=&quot;background-image: none; display: inline;&quot; title=&quot;Container Diagram&quot; width=&quot;685&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Container Diagram&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;h4&gt;
Component Diagram&lt;/h4&gt;
&lt;br /&gt;
This is followed by the Component Diagram. Note that the C4 Component Diagram still uses the &lt;u&gt;UML Deployment Diagram&lt;/u&gt;&amp;nbsp;(rather than the &lt;u&gt;UML Component Diagram&lt;/u&gt;) in order to depict both &lt;i&gt;UML Nodes&lt;/i&gt; as well as &lt;i&gt;UML Components&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHqNWmjWCSX6TBix_mu5P6ANUVnh13UQFi2KfvJ_BifvMHD57WC_LHKxBxY8C_nD5_21KTp27PROxlO2nXVAYqFZLLzHnrJWfTbJJzcyhrwWt6iYeVPug4yqFNuoJd5VQlvLTDZA/s1600-h/Component+Diagram+%2528API+App%2529%255B8%255D&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;Component Diagram (API App)&quot; border=&quot;0&quot; height=&quot;501&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9H5_RPD_J6gRjRIKxLSSEG5FCnfW6qQ-CeGbQR2ZHHYC1ozBAVF5iaXQF2D0geyazCotd-nwcme3z-R7dpj4F_dJBCqZqUpS64i7lnL5ldRJrcUE2vLlfU8PUXorHNDOOFsBVmw/?imgmax=800&quot; style=&quot;background-image: none; display: inline;&quot; title=&quot;Component Diagram (API App)&quot; width=&quot;686&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Component Diagram&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;div&gt;
I hope this post helps to reconcile C4 and UML. At the same time, C4 is likely the way to go forward in documenting software architecture in a lean and minimalistic manner.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The challenge,&amp;nbsp;however, is that the UML diagrams are certainly not as verbose as those used in C4. At this point, the only viable solution is to depict the description in&amp;nbsp;&lt;i&gt;UML Notes&lt;/i&gt; attached to each element.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://softwarehard.blogspot.com/feeds/966099880755941456/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/37338138/966099880755941456' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37338138/posts/default/966099880755941456'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37338138/posts/default/966099880755941456'/><link rel='alternate' type='text/html' href='http://softwarehard.blogspot.com/2018/08/software-architecture-modelling-using-c4.html' title='Software Architecture Modelling Using C4'/><author><name>Johannes</name><uri>http://www.blogger.com/profile/15713518355055537665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSI-x4taFLTm8ZKjb0Dmqg3wNtXkrtIXJ2zZQfPCbOnWUeF5Q0kCo1_Kyptpy1jIp2XkObjz9tco7W1qXLgZyV2I0Nwg1SKuXxbCUhB04CE3OmQI554Gw6hTtC6kHYOA/s220/FaceQ1443676797845.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5oQcyXuVw_xbK-iNtUlzzpjEO6wBKir0MIsqJJepKvOfPMQt9JflNoMBzNi6iYT1yVqFajuQfSBTRb-q2VH9qc50nAZhFydMBTMWH3Gpg7pXSetiJ9zlPT1qjmOcBvHxP6SyCJQ/s72-c?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37338138.post-544026915012882874</id><published>2018-04-06T12:27:00.000+08:00</published><updated>2018-04-06T12:27:28.898+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="sharepoint"/><title type='text'>Setting Default Column Values for Document</title><content type='html'>I had the requirement to map the default column values of documents to the nested folder structure it is created/ uploaded into.&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
As an example, a document uploaded into \Document Library\2018\Jan\DeptABC would have default&amp;nbsp;column values accordingly:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Year: 2018&lt;/li&gt;
&lt;li&gt;Month: Jan&lt;/li&gt;
&lt;li&gt;Dept: DeptABC&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
The column values (metadata) make&amp;nbsp;searches effective and rather than to have users provide the metadata as a distinct step, we determine the metadata based on the logical (directory) location of the document.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
To manually configure this, go to [Library Settings] -&amp;gt; [Column default value settings]&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
See &lt;a href=&quot;https://www.collaboris.com/how-to-set-default-column-values-on-a-document-in-sharepoint/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
However, if there are too many columns to configure, a quicker way to do so is to edit the mapping file directly. This file is found in the root of the library: &quot;&lt;b&gt;Forms\client_LocationBasedDefaults.html&lt;/b&gt;&quot;. It is an XHTML file that isn&#39;t too difficult to comprehend. Do be careful and backup the file before editing.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://softwarehard.blogspot.com/feeds/544026915012882874/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/37338138/544026915012882874' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37338138/posts/default/544026915012882874'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37338138/posts/default/544026915012882874'/><link rel='alternate' type='text/html' href='http://softwarehard.blogspot.com/2018/04/setting-default-column-values-for.html' title='Setting Default Column Values for Document'/><author><name>Johannes</name><uri>http://www.blogger.com/profile/15713518355055537665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSI-x4taFLTm8ZKjb0Dmqg3wNtXkrtIXJ2zZQfPCbOnWUeF5Q0kCo1_Kyptpy1jIp2XkObjz9tco7W1qXLgZyV2I0Nwg1SKuXxbCUhB04CE3OmQI554Gw6hTtC6kHYOA/s220/FaceQ1443676797845.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37338138.post-5836124901706782463</id><published>2017-08-11T23:13:00.001+08:00</published><updated>2017-08-11T23:13:12.716+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="uml"/><title type='text'>How to depict (Professional-Looking) Logical Network Diagrams in Astah</title><content type='html'>&lt;p&gt;I have always had to create (professional-looking) UML diagrams using Visio-like icons. You’ve got to admit that showing a bunch of boring UML boxes hardly interests anyone less technical (like anyone whose designation has the words “manager” or “director”).&lt;/p&gt;&lt;p&gt;This is actually possible in Astah!&lt;/p&gt;&lt;p&gt;I’ve created a template for future projects that allows me to produce logical network diagrams that look like the following:&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpwqUQIpv58xx3blii9ZgHx5DAVNXf_cDm-kQw7lkh7Z4MsETcyRLEbz069HcMcnF23MuAF8qas5EQz0lqBaWsPFTXTGWbhcoxqH5OoCcUZANfgP3Wf2CpGjePX9IU7IYqtqRWKA/s1600-h/image%255B2%255D&quot;&gt;&lt;br&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiafM71MACKkD8Hgay3-CRjT6fRtGW5Z3I3yvHi8wcgRvrZCYdU9EC37R6pTQE7Hj8CPICK5h1CdBGrsFrozI0jelPxdU_koGgfGtbTy2FzTBsVZTeLnvVtv9ltlTXtiQMoCHNPMQ/s1600-h/image%255B7%255D&quot;&gt;&lt;img width=&quot;692&quot; height=&quot;322&quot; title=&quot;image&quot; style=&quot;display: inline; background-image: none;&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjP9M411rfmnLay4Fm0TgvWQ4g-rwnCe_7KtCqGxnxzIsSacjhn5PFVOBZTpuHNaBvHeNdTOE_BeOwwGUNeKa8uPD1ta7B1yYqq5IMIwHRYD6W5qE_ZJwLzhq6OUFmrOl9ot3E6mA/?imgmax=800&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;To create this diagram, you need to do the following:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Assign various icons to stereotypes. I created the following for my use:&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmFTuFncalqKdEzE-irRUk3FIGVCge46DAr1v5DpYVHgAa7CndHCKByXLaXGnf0L5SGm5pD1XFnHQfVm2L6OFAtyhwz5rGn7OcLZa6RTtTLy7fE8GLOcnM41jTVlOift-8JLAOzw/s1600-h/image%255B16%255D&quot;&gt;&lt;img width=&quot;341&quot; height=&quot;607&quot; title=&quot;image&quot; style=&quot;display: inline; background-image: none;&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsjOHWa-WQ8i5iMqkZq7NAs5nkS0vLPhEuZcSPZwbj9i8TXV1Ey1yvMFtal0GWkrNoCUL5DVAC59RZ8GqEiHe86V5saDGEZx5DI28pcRVFJoO4yEeWFEKE9slMnFq6Lhet6-7z4Q/?imgmax=800&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Create a new UML Deployment Diagram&lt;/li&gt;&lt;li&gt;Every element in the diagram is created as a Node&lt;/li&gt;&lt;li&gt;The nodes are subsequently assigned the appropriate &amp;lt;&amp;lt;stereotype&amp;gt;&amp;gt;. E.g. Internet is &amp;lt;&amp;lt;internet&amp;gt;&amp;gt;, WebZone FW is &amp;lt;&amp;lt;firewall&amp;gt;&amp;gt;, Web LB is &amp;lt;&amp;lt;loadBalancer&amp;gt;&amp;gt;&lt;/li&gt;&lt;li&gt;Ensure the “Icon Notation” is set to “Customized Icon” for each node&lt;/li&gt;&lt;li&gt;Instead of the boring boxes, the corresponding icons automatically gets displayed!&lt;/li&gt;&lt;/ol&gt;</content><link rel='replies' type='application/atom+xml' href='http://softwarehard.blogspot.com/feeds/5836124901706782463/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/37338138/5836124901706782463' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37338138/posts/default/5836124901706782463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37338138/posts/default/5836124901706782463'/><link rel='alternate' type='text/html' href='http://softwarehard.blogspot.com/2017/08/how-to-depict-professional-looking.html' title='How to depict (Professional-Looking) Logical Network Diagrams in Astah'/><author><name>Johannes</name><uri>http://www.blogger.com/profile/15713518355055537665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSI-x4taFLTm8ZKjb0Dmqg3wNtXkrtIXJ2zZQfPCbOnWUeF5Q0kCo1_Kyptpy1jIp2XkObjz9tco7W1qXLgZyV2I0Nwg1SKuXxbCUhB04CE3OmQI554Gw6hTtC6kHYOA/s220/FaceQ1443676797845.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjP9M411rfmnLay4Fm0TgvWQ4g-rwnCe_7KtCqGxnxzIsSacjhn5PFVOBZTpuHNaBvHeNdTOE_BeOwwGUNeKa8uPD1ta7B1yYqq5IMIwHRYD6W5qE_ZJwLzhq6OUFmrOl9ot3E6mA/s72-c?imgmax=800" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37338138.post-8632432497735680300</id><published>2017-07-31T00:51:00.000+08:00</published><updated>2018-08-14T13:20:52.841+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cloud"/><title type='text'>AWS Schema</title><content type='html'>&lt;p&gt;From revising AWS Solution Architect..&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAhQ1ujUXn6pdbcBgmaSsTcPAgkSglI9SNoiykQ_ZaFYHwG9cI0QgwcT0M-xZMf3gTY0_SPU7zNH5nSI7Ot38_yA6kIE4JuZ__vzm9KWmmA7zLWDYiYE66s4-_hFOP9XGwT6zuAQ/s1600-h/image%255B9%255D&quot;&gt;&lt;img width=&quot;600&quot; height=&quot;533&quot; title=&quot;image&quot; style=&quot;display: inline; background-image: none;&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9xyoW10nrQhc3Li767a5FmJ2_RCcqu_BOcWGN16N9gDa7y8XRFVRW35s_fcrS3YgGDEbryBAPCGJLU1ydGnSGyXF6_F3EjimBQ3YHafvCvFManP70oendjkSHd60njCyPHHnOrQ/?imgmax=800&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://softwarehard.blogspot.com/feeds/8632432497735680300/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/37338138/8632432497735680300' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37338138/posts/default/8632432497735680300'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37338138/posts/default/8632432497735680300'/><link rel='alternate' type='text/html' href='http://softwarehard.blogspot.com/2017/07/aws-schema.html' title='AWS Schema'/><author><name>Johannes</name><uri>http://www.blogger.com/profile/15713518355055537665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSI-x4taFLTm8ZKjb0Dmqg3wNtXkrtIXJ2zZQfPCbOnWUeF5Q0kCo1_Kyptpy1jIp2XkObjz9tco7W1qXLgZyV2I0Nwg1SKuXxbCUhB04CE3OmQI554Gw6hTtC6kHYOA/s220/FaceQ1443676797845.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9xyoW10nrQhc3Li767a5FmJ2_RCcqu_BOcWGN16N9gDa7y8XRFVRW35s_fcrS3YgGDEbryBAPCGJLU1ydGnSGyXF6_F3EjimBQ3YHafvCvFManP70oendjkSHd60njCyPHHnOrQ/s72-c?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37338138.post-9162244846697486183</id><published>2017-07-31T00:49:00.000+08:00</published><updated>2018-08-14T13:22:15.335+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="sharepoint"/><title type='text'>SharePoint Schema</title><content type='html'>&lt;p&gt;From my research, I’ve made some notes as to the structure of SharePoint 2013.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6qeCJVTKTPnC8CoSoyP78Vp7fl5nNz-eROOt1pRqGbhse2GxtB257JlMMXz2_c1adIk681b1jQaWVVcJQVwvBe0w7Z9HZ0FavSFnnTSJhKciVfZl_BB9lk6sR9v7Ez869F5N3NQ/s1600-h/image%255B7%255D&quot;&gt;&lt;img width=&quot;673&quot; height=&quot;434&quot; title=&quot;image&quot; style=&quot;display: inline; background-image: none;&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFbWL2igym7lF9EOlmUG3aqu6ncNHFhIo2NNoTxJfVmHNR7hqYf0IzG-L-Tg_UmoYWXm2o14DX1r8cKptc1FlBLe2n3bB3dWDQcF6M_58bfpACuTpNCdJbUHrhbjJJAzrEqUG6Bw/?imgmax=800&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://softwarehard.blogspot.com/feeds/9162244846697486183/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/37338138/9162244846697486183' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37338138/posts/default/9162244846697486183'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37338138/posts/default/9162244846697486183'/><link rel='alternate' type='text/html' href='http://softwarehard.blogspot.com/2017/07/sharepoint-schema.html' title='SharePoint Schema'/><author><name>Johannes</name><uri>http://www.blogger.com/profile/15713518355055537665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSI-x4taFLTm8ZKjb0Dmqg3wNtXkrtIXJ2zZQfPCbOnWUeF5Q0kCo1_Kyptpy1jIp2XkObjz9tco7W1qXLgZyV2I0Nwg1SKuXxbCUhB04CE3OmQI554Gw6hTtC6kHYOA/s220/FaceQ1443676797845.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFbWL2igym7lF9EOlmUG3aqu6ncNHFhIo2NNoTxJfVmHNR7hqYf0IzG-L-Tg_UmoYWXm2o14DX1r8cKptc1FlBLe2n3bB3dWDQcF6M_58bfpACuTpNCdJbUHrhbjJJAzrEqUG6Bw/s72-c?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37338138.post-2474293981719478007</id><published>2016-11-23T14:32:00.000+08:00</published><updated>2016-11-23T14:32:16.937+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="sharepoint"/><title type='text'>SharePoint OOTB Workflow</title><content type='html'>Recently, I had the chance to play with SharePoint lists and Document Libraries. I also had the challenge of using SharePoint without the use of Designer.&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
In creating a List or Document Library and associating it with a Workflow, my challenge was to create a View such that I could filter it based on the Workflow status.&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
Thanks to the wisdom of the internet crowd, I chanced upon this article &lt;a href=&quot;http://adayinsharepointv3.blogspot.sg/2012/08/filter-list-view-by-sharepoint-workflow.html&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
The status of each workflow is stored as a numeric value but displayed as a string description as follows:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;NotStarted = 0 &lt;/li&gt;
&lt;li&gt;FailedOnStart = 1 &lt;/li&gt;
&lt;li&gt;InProgress = 2 &lt;/li&gt;
&lt;li&gt;ErrorOccurred = 3 &lt;/li&gt;
&lt;li&gt;StoppedByUser = 4 &lt;/li&gt;
&lt;li&gt;Completed = 5 &lt;/li&gt;
&lt;li&gt;FailedOnStartRetrying = 6 &lt;/li&gt;
&lt;li&gt;ErrorOccurredRetrying = 7&amp;nbsp; &lt;/li&gt;
&lt;li&gt;ViewQueryOverflow = 8 &lt;/li&gt;
&lt;li&gt;Canceled = 15 (to be confirmed)&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Approved =&amp;nbsp;16&lt;/li&gt;
&lt;li&gt;Rejected = 17 (to be confirmed)&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;br /&gt;
To filter, compare the value against a numeric constant. For example: &lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;show only those that are in progress: = 2&lt;/li&gt;
&lt;li&gt;show only those that are not completed: &amp;lt; 5&lt;/li&gt;
&lt;li&gt;show only those approved: = 16&lt;/li&gt;
&lt;/ol&gt;
</content><link rel='replies' type='application/atom+xml' href='http://softwarehard.blogspot.com/feeds/2474293981719478007/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/37338138/2474293981719478007' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37338138/posts/default/2474293981719478007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37338138/posts/default/2474293981719478007'/><link rel='alternate' type='text/html' href='http://softwarehard.blogspot.com/2016/11/sharepoint-ootb-workflow.html' title='SharePoint OOTB Workflow'/><author><name>Johannes</name><uri>http://www.blogger.com/profile/15713518355055537665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSI-x4taFLTm8ZKjb0Dmqg3wNtXkrtIXJ2zZQfPCbOnWUeF5Q0kCo1_Kyptpy1jIp2XkObjz9tco7W1qXLgZyV2I0Nwg1SKuXxbCUhB04CE3OmQI554Gw6hTtC6kHYOA/s220/FaceQ1443676797845.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37338138.post-1319065138079667681</id><published>2016-09-27T10:38:00.000+08:00</published><updated>2016-10-07T00:26:59.679+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="agile"/><category scheme="http://www.blogger.com/atom/ns#" term="practices"/><category scheme="http://www.blogger.com/atom/ns#" term="scrum"/><title type='text'>Agile Requirements</title><content type='html'>&lt;p&gt;Capture &lt;strong&gt;user stories&lt;/strong&gt; in the form of:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;&lt;strong&gt;As a&lt;/strong&gt; &amp;lt;user role/type&amp;gt; &lt;strong&gt;I want&lt;/strong&gt; &amp;lt;some action/ feature/ goal&amp;gt;, &lt;strong&gt;so that&lt;/strong&gt; &amp;lt; benefits from/ reasons for it&amp;gt;&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Capture &lt;strong&gt;acceptance tests&lt;/strong&gt; in the form of:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;&lt;strong&gt;GIVEN&lt;/strong&gt; (some context/precondition) [ &lt;strong&gt;AND&lt;/strong&gt; (some more context/precondition) ...]&lt;br&gt;&lt;strong&gt;WHEN&lt;/strong&gt; (event/action performed by user)&lt;br&gt;&lt;strong&gt;THEN&lt;/strong&gt; (expected outcome - what should happen to satisfy user requirement from the user story statement above).&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;See &lt;a href=&quot;https://www.infoq.com/articles/standardize-requirements-scrum&quot;&gt;https://www.infoq.com/articles/standardize-requirements-scrum&lt;/a&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://softwarehard.blogspot.com/feeds/1319065138079667681/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/37338138/1319065138079667681' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37338138/posts/default/1319065138079667681'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37338138/posts/default/1319065138079667681'/><link rel='alternate' type='text/html' href='http://softwarehard.blogspot.com/2016/09/agile-requirements.html' title='Agile Requirements'/><author><name>Johannes</name><uri>http://www.blogger.com/profile/15713518355055537665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSI-x4taFLTm8ZKjb0Dmqg3wNtXkrtIXJ2zZQfPCbOnWUeF5Q0kCo1_Kyptpy1jIp2XkObjz9tco7W1qXLgZyV2I0Nwg1SKuXxbCUhB04CE3OmQI554Gw6hTtC6kHYOA/s220/FaceQ1443676797845.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37338138.post-3034539816567784023</id><published>2016-07-14T16:03:00.001+08:00</published><updated>2016-07-14T16:03:49.056+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="architecture"/><category scheme="http://www.blogger.com/atom/ns#" term="http"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="pool"/><category scheme="http://www.blogger.com/atom/ns#" term="uml"/><category scheme="http://www.blogger.com/atom/ns#" term="web"/><category scheme="http://www.blogger.com/atom/ns#" term="ws"/><title type='text'>Web Application Security Issues &amp; Solution using UML</title><content type='html'>&lt;p&gt;I was once involved in reviewing our company’s application architecture to identify security risks and recommend possible mitigation solutions.&lt;/p&gt; &lt;p&gt;Since every organisation has its own unique constraints, available resources, and risk appetite, the solution herein might not apply to other organisations.&lt;/p&gt; &lt;p&gt;Nevertheless, this post showcases what one can do with UML to document and explain (pictorially) security flaws in application architecture.&lt;/p&gt; &lt;p&gt;The as-is architecture follows.&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhreQ072Q7Js_e3lPeR1lYVCk419-V2ZyY0kDCOLx6NwxUlPim9UHn5E69oKqN4Nz7NjCiX-UO7AVYbkw4Kce_EvGR8l6sd6vdC1GQ52pYa55AYVwDdlcRcG1rSleloRZde2cB4Uw/s1600-h/Current%252520eBao%252520Deployment%25255B13%25255D.png&quot;&gt;&lt;img title=&quot;Current eBao Deployment&quot; style=&quot;border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px&quot; border=&quot;0&quot; alt=&quot;Current eBao Deployment&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoOhovUu9sSfgnS_lNLWP3TYCwWd1fq00Z1n2SYYBHyfGTZrkpFYmO5QgRvfx4U1TfY9mJAwjGzsuRy8zGgocmTysUDwTtP7oWSsmfOKie1DXgbyVX0yEjF6GdA2afINqN5xjt8g/?imgmax=800&quot; width=&quot;684&quot; height=&quot;424&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;A detailed explanation follows:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;The system (under design) is a Java Enterprise Application that is deployed in AppSvr (Application Server) within the Internal zone.&lt;/li&gt; &lt;li&gt;The deployed application consists of both HTML-based as well as SOAP-based services.&lt;/li&gt; &lt;li&gt;The 2 WebSvr’s ([Apache] Web Server) in the DMZ act as proxies.&lt;/li&gt; &lt;li&gt;There is a load-balancing appliance used to balance requests to the web servers. A request pool has been created on the appliance (WebPool).&lt;/li&gt; &lt;li&gt;The (public) user would access the URL endpoint of the appliance for every request.&lt;/li&gt; &lt;li&gt;Similarly, other applications (Others) deployed on both the WebSvr and AppSvr would access the SOAP web services through the load balancer.&lt;/li&gt; &lt;li&gt;Note that the public.softwarehard.sg is a public URL that is used by both the (public) user as well as other applications (SOAP-based services).&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;The security issue in this architecture is that the SOAP-based services are exposed to the public. What is worse is that these services are not secured by any form of authentication.&lt;/p&gt; &lt;p&gt;Having reviewed the existing architecture, the available resources and constraints, I proposed a solution that suited our risk appetite and incurred minimum changes to all applications.&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTOe6MxLZPcOHB2cTcJ1hzoSvqZcDpTtFjWpXqqh-BQ8mGoBpPM97KFA3iNPgoKjjwxsbowHdnPkib1poyndVTyikUgGFwwFX2oRYEPZHvDv0TeOLjK9UNxnGf7qZD50NvmXupiQ/s1600-h/Proposed%252520eBao%252520Deployment%25255B9%25255D.png&quot;&gt;&lt;img title=&quot;Proposed eBao Deployment&quot; style=&quot;border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px&quot; border=&quot;0&quot; alt=&quot;Proposed eBao Deployment&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZPEaajQIA7khW100Y8NyeMXidfxPrSnr3tDZRXIvG6aXaO5ZQcIQoYy8VThDTg53OsNloF4uqOsKwXuO6d2BKN-Zg7D10vNLLTWIidETbH75ckLobCE9mz9a98b1nl3SSRm_glQ/?imgmax=800&quot; width=&quot;684&quot; height=&quot;475&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;With the use of another load balancing appliance (which we happened to have), we created another endpoint to access the SOAP web services. &lt;/p&gt; &lt;p&gt;This solution allowed us to &lt;/p&gt; &lt;ul&gt; &lt;li&gt;mitigate the security risk&lt;/li&gt; &lt;li&gt;minimise changes to all applications&lt;/li&gt; &lt;li&gt;capitalise on the load-balancing appliances&lt;/li&gt;&lt;/ul&gt;</content><link rel='replies' type='application/atom+xml' href='http://softwarehard.blogspot.com/feeds/3034539816567784023/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/37338138/3034539816567784023' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37338138/posts/default/3034539816567784023'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37338138/posts/default/3034539816567784023'/><link rel='alternate' type='text/html' href='http://softwarehard.blogspot.com/2016/07/web-application-security-issues.html' title='Web Application Security Issues &amp; Solution using UML'/><author><name>Johannes</name><uri>http://www.blogger.com/profile/15713518355055537665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSI-x4taFLTm8ZKjb0Dmqg3wNtXkrtIXJ2zZQfPCbOnWUeF5Q0kCo1_Kyptpy1jIp2XkObjz9tco7W1qXLgZyV2I0Nwg1SKuXxbCUhB04CE3OmQI554Gw6hTtC6kHYOA/s220/FaceQ1443676797845.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoOhovUu9sSfgnS_lNLWP3TYCwWd1fq00Z1n2SYYBHyfGTZrkpFYmO5QgRvfx4U1TfY9mJAwjGzsuRy8zGgocmTysUDwTtP7oWSsmfOKie1DXgbyVX0yEjF6GdA2afINqN5xjt8g/s72-c?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37338138.post-5339954066809844454</id><published>2016-02-22T22:03:00.001+08:00</published><updated>2016-02-22T22:09:03.530+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="agile"/><category scheme="http://www.blogger.com/atom/ns#" term="mindmap"/><category scheme="http://www.blogger.com/atom/ns#" term="uml"/><title type='text'>Prototype Application Development Using Astah</title><content type='html'>&lt;p&gt;I had the opportunity to develop a prototype for a client and used Astah to capture the salient specifications as well as the requirements analysis.&lt;/p&gt; &lt;h4&gt;Mindmap&lt;/h4&gt; &lt;p&gt;To first understand the requirements, &lt;/p&gt; &lt;ul&gt; &lt;li&gt;I used a mindmap to guide the user through the mean features of the application. What worked well in this instance was a role-based model (similar to use case modelling), i.e. list out all the roles involved in interacting with the application.&lt;/li&gt; &lt;li&gt;Next, the features or use cases for each role gets listed out (“as a &amp;lt;role&amp;gt;, I want to be able to &amp;lt;feature&amp;gt;”)&lt;/li&gt; &lt;li&gt;The final mindmap served as a form of an agreement on the scope of work.&lt;/li&gt; &lt;li&gt;The final mindmap looked like the following:&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZavChmhXBtosNrcStVTDT2iUd_illMRCGI3u5g1shoWmSOsQCXBRqPdXiXlsp01luNc6E4p_v5r1kHM71qx2jJB5o3h72ewkCjwbQTeVDTGTQ8EExFEapRICtDnLkhM3AovzD0w/s1600-h/image%25255B14%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiL-QpSLpLEzZ5ZYXWKqYg4RPxnhIG8sZj_lvyUHcFKTeOui1eg3-P3grwi7MgRmmpnkKlkDaB8Mc1rEI8u6gW60c9PHgiTYBmIWdtCdHOjL44WKGMqbD_OkahO-TjQ60IDjYK8ow/?imgmax=800&quot; width=&quot;652&quot; height=&quot;301&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;h2&gt;&amp;nbsp;&lt;/h2&gt; &lt;h4&gt;Use Case Modelling&lt;/h4&gt; &lt;p&gt;Using Astah, I was able to &lt;u&gt;easily&lt;/u&gt; convert the Mindmap into a set of Actors and Use Cases for further analysis. The model follows:&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNAp-9HPmX_hbjKKKG3bvjoOGm9iUCX4sPLsHl6nivP13YPEoPaW5FccWbQUx9SvRd0OxvVbNACubReT4KZF8e2plLiyZoT3PU4LBk-_7rQRr-WB7inKdZAegM3EiuM2O5S_77QQ/s1600-h/image%25255B18%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgE_ANOJ4hPR-4onR079E56iJQKLwxzuHPfErjbw2Pf4COA1JFgJj7BEQ5BS9iFXss72WOeQ2uet_acIoMlizDnw2_3vcozzfwS0G8LzUvpYeD-R9AvUlcpq-IbS7srGIAobfHwlw/?imgmax=800&quot; width=&quot;654&quot; height=&quot;405&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h4&gt;Domain Model&lt;/h4&gt; &lt;p&gt;As the prototype had dependencies on an existing application, some of the domain objects were deliberately taken from the the existing application and fused into the new one.&lt;/p&gt; &lt;p&gt;In order to better understand the application requirements, I needed to grasp the information and data that is captured and used by the application. At the same time, the domain concepts had to be understood and captured. This is best modelled in the form of a Domain Model (&lt;strong&gt;&lt;em&gt;UML Class Diagram&lt;/em&gt;&lt;/strong&gt;). A partial view follows:&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghkwvf0NOa3fBK8i_V0ueDmIZ12sCg2pO3d7dd9SNu8i2Oyi-JQK5qXui8queARjJJLqKowtu9BMVbv6v5ksKPlVd8We7B_paMGhS5NuZx2PI-lTd-R-Tsja556WMCK-OXilLS0g/s1600-h/image%25255B34%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiO1lovYfv3pelkWkxjUrYRQKPk_djOgubw9gZd7lOvEjiU81u2DODt40cyPo10VMaktQwQtaMS4-8Hv0P4Oq6JUgd4jADSdtWS4NHIcIzS-bC7rZ2yb_lsiniWiDGsdL5tpMdXA/?imgmax=800&quot; width=&quot;655&quot; height=&quot;557&quot;&gt;&lt;/a&gt;&lt;/p&gt;   &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h4&gt;Boundaries/ Interfacing&lt;/h4&gt; &lt;p&gt;I was highlighted to a need to integrate with a 3rd party service and decidedly captured the flow for this integration in a &lt;em&gt;&lt;strong&gt;UML Sequence Diagram&lt;/strong&gt;&lt;/em&gt; as follows:&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6exDLUlLA7gizO6QYp8-J5PugQzqI2NRVxI63YXYOOs47J8NTK1QgawrFVObmQkvrYPx5THMK0oMPXga6z5s8gY_TN5quKp2VuGIhMf-2wenFrO-T60VSOZfPzvfeAfHw6yh7EQ/s1600-h/image%25255B35%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgajf7_3qL182jkqHXKePEvUl1jEaRnforlLKgf1FD0eyC3kgHZUJGRyB2Me0vklSPiVRYEXiUGOCsXuJigld5-iOa8wrPQsAyd3nuxCcyo1jt7CLAP7w_VzqVRYV8fA792OigBhw/?imgmax=800&quot; width=&quot;652&quot; height=&quot;318&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h4&gt;Summary&lt;/h4&gt; &lt;p&gt;This is just a sample of what I usually do with &lt;u&gt;Astah&lt;/u&gt; for application development and if you are looking for an agile, lightweight and easy-to-use tool, I highly recommend &lt;u&gt;Astah&lt;/u&gt; as compared to many of the more heavyweight and feature-laden tools. &lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://softwarehard.blogspot.com/feeds/5339954066809844454/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/37338138/5339954066809844454' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37338138/posts/default/5339954066809844454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37338138/posts/default/5339954066809844454'/><link rel='alternate' type='text/html' href='http://softwarehard.blogspot.com/2016/02/prototype-application-development-using.html' title='Prototype Application Development Using Astah'/><author><name>Johannes</name><uri>http://www.blogger.com/profile/15713518355055537665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSI-x4taFLTm8ZKjb0Dmqg3wNtXkrtIXJ2zZQfPCbOnWUeF5Q0kCo1_Kyptpy1jIp2XkObjz9tco7W1qXLgZyV2I0Nwg1SKuXxbCUhB04CE3OmQI554Gw6hTtC6kHYOA/s220/FaceQ1443676797845.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiL-QpSLpLEzZ5ZYXWKqYg4RPxnhIG8sZj_lvyUHcFKTeOui1eg3-P3grwi7MgRmmpnkKlkDaB8Mc1rEI8u6gW60c9PHgiTYBmIWdtCdHOjL44WKGMqbD_OkahO-TjQ60IDjYK8ow/s72-c?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37338138.post-7146595795210612948</id><published>2015-05-14T16:48:00.001+08:00</published><updated>2015-05-14T16:48:45.024+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="itil"/><category scheme="http://www.blogger.com/atom/ns#" term="uml"/><title type='text'>Understanding ITIL Service Management the UML way…</title><content type='html'>&lt;p&gt;I originally had a great deal of difficult reconciling the differences amongst ITIL Change Management, Incident Management, and Problem Management. Having researched on the subjects and understanding them better now, I’ve tried to put the concepts together using a UML class diagram to capture my understanding and to keep it imprinted.&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjThtTUFamycLXyrfzAruCw4MukXAGXyhaPMJ2SyL_PovDOjVXSlqk8duE6emHExCvo8o9P3Naf83dSKdpHaZBkbDwEeLpCvLJ71fSQFQhm0bYdEOZG2en-PSRCCJgeZBPpMZmhdw/s1600-h/image%25255B15%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjt7Mg8a_4COsyhru5klfTgmsmoUWg_9p8EgR04QyU-pBEntoTWZf9xRFtbJ9b5J5M0r7BstP6BU89-1hGQ7I231PI2bstrIvPb9AXv3WxYa4b3_0Vbov3HBF6Gd5A-PR3F5TOjBg/?imgmax=800&quot; width=&quot;667&quot; height=&quot;542&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Similarly, I wanted to differentiate the various categories of changes (Standard, Emergency, Normal) using an easy to understand &amp;amp; self-explanatory manner – a UML Activity Diagram!&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBHgeuNb4JiQZoSygHUltVr-VSkfpfQYU4Wcw6NSrIlcI_YrgqWtVjt2us2FJ8Hbxje2a6oPbrwS1bb7XK9OQuPtXT4NBHp1Dl52xUXVA19yAKkxihuCaQk6tP1kDtaArdqAoveQ/s1600-h/image%25255B25%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_7wsHj7bBFD0-igm1AH1ToynBmafEXqs8U3bAnTyn-RTo0KhVpT9otLX-gAkaipXsKKMMnOz2QQTMb9vseLUUxo-TWMhjR3BwUCnXbo0tYU17soRNhgtimbdVoWFZ6szSuuBWHQ/?imgmax=800&quot; width=&quot;670&quot; height=&quot;341&quot;&gt;&lt;/a&gt;&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://softwarehard.blogspot.com/feeds/7146595795210612948/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/37338138/7146595795210612948' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37338138/posts/default/7146595795210612948'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37338138/posts/default/7146595795210612948'/><link rel='alternate' type='text/html' href='http://softwarehard.blogspot.com/2015/05/understanding-itil-service-management.html' title='Understanding ITIL Service Management the UML way…'/><author><name>Johannes</name><uri>http://www.blogger.com/profile/15713518355055537665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSI-x4taFLTm8ZKjb0Dmqg3wNtXkrtIXJ2zZQfPCbOnWUeF5Q0kCo1_Kyptpy1jIp2XkObjz9tco7W1qXLgZyV2I0Nwg1SKuXxbCUhB04CE3OmQI554Gw6hTtC6kHYOA/s220/FaceQ1443676797845.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjt7Mg8a_4COsyhru5klfTgmsmoUWg_9p8EgR04QyU-pBEntoTWZf9xRFtbJ9b5J5M0r7BstP6BU89-1hGQ7I231PI2bstrIvPb9AXv3WxYa4b3_0Vbov3HBF6Gd5A-PR3F5TOjBg/s72-c?imgmax=800" height="72" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37338138.post-5636304324921328079</id><published>2015-03-08T23:43:00.001+08:00</published><updated>2015-03-08T23:43:48.146+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="insurance"/><category scheme="http://www.blogger.com/atom/ns#" term="uml"/><title type='text'>Modelling the Life Insurance New Business Process</title><content type='html'>&lt;p&gt;This is a simplified diagram that captures the business process for a Life Insurance new business workflow. The high level process is captured using an UML Activity Diagram.&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQbeH2XwlFvripVjAH_zjYrvKpbvDV0ZbX3sWpP7c-aaB8LFIls9OFTNrEBOaqDxq6_vfOPXj-w1dW0AEU_orph9oecXlye1ymk-FrMCudp39efRl1ZrBT267zYSHZ82a4AxmfpQ/s1600-h/image%25255B8%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSc23en7Aey7SA1N2JF9u3j-o2LIDYCtS5sub8cj7Bi107I1C470vO2SkqIz1mOHS1Y00yu_tdyk2bH9p7abtB979wbALipP1-VVoMd6uBZBY4p2S2x0wySCJ9B7rj7G6ROyfUWg/?imgmax=800&quot; width=&quot;661&quot; height=&quot;517&quot;&gt;&lt;/a&gt;&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://softwarehard.blogspot.com/feeds/5636304324921328079/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/37338138/5636304324921328079' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37338138/posts/default/5636304324921328079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37338138/posts/default/5636304324921328079'/><link rel='alternate' type='text/html' href='http://softwarehard.blogspot.com/2015/03/modelling-life-insurance-new-business.html' title='Modelling the Life Insurance New Business Process'/><author><name>Johannes</name><uri>http://www.blogger.com/profile/15713518355055537665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSI-x4taFLTm8ZKjb0Dmqg3wNtXkrtIXJ2zZQfPCbOnWUeF5Q0kCo1_Kyptpy1jIp2XkObjz9tco7W1qXLgZyV2I0Nwg1SKuXxbCUhB04CE3OmQI554Gw6hTtC6kHYOA/s220/FaceQ1443676797845.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSc23en7Aey7SA1N2JF9u3j-o2LIDYCtS5sub8cj7Bi107I1C470vO2SkqIz1mOHS1Y00yu_tdyk2bH9p7abtB979wbALipP1-VVoMd6uBZBY4p2S2x0wySCJ9B7rj7G6ROyfUWg/s72-c?imgmax=800" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37338138.post-4515466241498492513</id><published>2014-07-08T01:22:00.001+08:00</published><updated>2014-07-08T01:22:27.968+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="uml"/><title type='text'>How Much Detail Do You Need to Capture in UML for Code Development?</title><content type='html'>&lt;p&gt;I had a mini-experiment to document my design in UML for a developer to write the corresponding code. The background and assumptions are:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;The application is an insurance quotation system&lt;/li&gt; &lt;li&gt;Design is based on MVC, in particular, ASP.NET MVC&lt;/li&gt; &lt;li&gt;Web caching is used&lt;/li&gt; &lt;li&gt;The basic MVC application framework is in place (with sample codes)&lt;/li&gt; &lt;li&gt;The developer is an intern from a local university&lt;/li&gt; &lt;li&gt;What is designed to be developed is one of the modules in the entire application – this particular module is a dashboard&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Without going into the details of the use case document, I created the basic tenets: certain basic sequence of events as well as the View-Of-Participating-Classes (VOPC).&lt;/p&gt; &lt;p&gt;The mini-experiment &lt;u&gt;proved to be a success&lt;/u&gt; to my surprise.&lt;/p&gt; &lt;p&gt;The following UML &lt;strong&gt;&lt;em&gt;Sequence Diagrams&lt;/em&gt;&lt;/strong&gt; capture the basic flow for the initial web request:&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtqi332qJG8XM-7L7HDuQIl4LrzPW7mEgi3S8iZqfYrdrEF68BBZHKJimicd9bkSVSq-PJg36Q45Kjd0-uJExTIgA6crzJyEhBlXW0BpmDaSv6FdNW35uG6OCzl4Wvsw8PFjf32A/s1600-h/image%25255B25%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYRJ6FJ81LGG0d7i5uRBfh-AC_q5olCd1zMtC2iOG7I272XZjpY1dtytwnbRC3De5V3CUYIGuqfk8EAbUiWbAAUNWcQKeNyhlLWnwV1nD1RBinODD4Oznjcm3PiT02ogj06xA9zA/?imgmax=800&quot; width=&quot;644&quot; height=&quot;391&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEZM6tS5-vMbqdBpkvFbOy-_FD1G0-e6ZqN8fOd_Q6ZWFzpkbW-IWkfCcFMndqAZ4U1qrmRp34AJm8Orzy2zA3K6gveFr6iDmSA38tutcHU5SY8C3pC1l5QCLJ0397-weCLDn8cg/s1600-h/image%25255B24%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYb11Ld6GUz90QXLL-3uw7jsyhgBHmmB46d1oW5NexDLl6LJLpE6wLkTMRZJaaISxbXaOyK2iF6nr8DHxGTtaMGW0OSebQ4vbwgode78pWxh93Ej915Z3beggWPO7R512C6CT9YA/?imgmax=800&quot; width=&quot;646&quot; height=&quot;405&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;The following UML &lt;strong&gt;&lt;em&gt;Sequence Diagram&lt;/em&gt;&lt;/strong&gt; depicts the sequence of events for subsequent access:&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJdm3CHmZXsJCYPrfJvawE0EWGgGfbNLLN5Lc8QRjx1bYDgJ7dtRugsdjWPsFqb0anmCByVY44mYvsSb8fTy9p21OML6aukVVUNJcPyHgp9KQaanjdMxxc0rgdDWkeuzJjdNN_ew/s1600-h/image%25255B37%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKSnmQ8zP7x3KAI40BV5cGpJxiFol8e3T7VfKYhc2R2ZtAUoZ14Niakwmq6JLtTGD-9gG0QmsiGAKBiMm8Vp35a8Iz4nQzRbXK3IqO-MNutd39yEtzbNot_1NteCB9N4d7IcbQSw/?imgmax=800&quot; width=&quot;647&quot; height=&quot;374&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Finally the VOPC UML &lt;strong&gt;&lt;em&gt;Class Diagram&lt;/em&gt;&lt;/strong&gt; follows:&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZN6AxMgw23ep975Zb-WHgQgIBWZYrDM6kCcGBqZxJmhGRXWGK07h9ewdzu-73tm2F26_4j03hI9w4GEPMc5ksPeCj_eAN3lK752KoIEQnlXdPSivFXQgz24b-PZTXoaO5ti83Gw/s1600-h/image%25255B47%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEKt3pHGvhlCtUCnclfYK0cnV6CoAc6Jbue-yTdgty1-dwAR04Ffvl2mikQMoiddn1kd9cgjhzBpjFuKTLg0ND5n7JI81dRIItU1qzmfIKsOPJmm3Tj15Ct4Rb-r1pxT43SuE33w/?imgmax=800&quot; width=&quot;649&quot; height=&quot;461&quot;&gt;&lt;/a&gt;&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://softwarehard.blogspot.com/feeds/4515466241498492513/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/37338138/4515466241498492513' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37338138/posts/default/4515466241498492513'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37338138/posts/default/4515466241498492513'/><link rel='alternate' type='text/html' href='http://softwarehard.blogspot.com/2014/07/how-much-detail-do-you-need-to-capture.html' title='How Much Detail Do You Need to Capture in UML for Code Development?'/><author><name>Johannes</name><uri>http://www.blogger.com/profile/15713518355055537665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSI-x4taFLTm8ZKjb0Dmqg3wNtXkrtIXJ2zZQfPCbOnWUeF5Q0kCo1_Kyptpy1jIp2XkObjz9tco7W1qXLgZyV2I0Nwg1SKuXxbCUhB04CE3OmQI554Gw6hTtC6kHYOA/s220/FaceQ1443676797845.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYRJ6FJ81LGG0d7i5uRBfh-AC_q5olCd1zMtC2iOG7I272XZjpY1dtytwnbRC3De5V3CUYIGuqfk8EAbUiWbAAUNWcQKeNyhlLWnwV1nD1RBinODD4Oznjcm3PiT02ogj06xA9zA/s72-c?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37338138.post-8166012086798322686</id><published>2014-07-08T00:57:00.001+08:00</published><updated>2014-07-08T00:57:56.848+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="uml"/><title type='text'>Reduce the Integration Mess!</title><content type='html'>&lt;p&gt;Sometime ago, I was reviewing the alerts and notifications sent from various applications and systems. We needed to capture and store the content of the messages. I took the opportunity to re-architect the entire landscape by documenting the as-is, as well as the to-be.&lt;/p&gt; &lt;p&gt;The UML &lt;em&gt;&lt;strong&gt;Communication Diagram&lt;/strong&gt;&lt;/em&gt; – an unsung hero – was used for this purpose.&lt;/p&gt; &lt;p&gt;The as-is integration mess:&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBBd-KBoqAnQCIZWdTDC7Xj6iAHrIVpbe7K8TA9_HG-xOiqCJccymVpp9pAO5KQS2ddhc1lBoU3v-1QCnsVrQCeqwXcAPubKlWtzNb2bDNw_7_zl5Jh6fJuMzz_aRFsbpXsZM5Mw/s1600-h/image%25255B7%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhD-l3APnDCFoiDr4JauBFgPVttg_j6uqQLlnMmyRQPNq3tdIj38xSd29SNhZncroMJuxJrhOqHMAQpWdXihEwn6SxbcimysqjSVsqt2O9RMqMAVCQcCaeJJkFChe31_fspZMxb-w/?imgmax=800&quot; width=&quot;653&quot; height=&quot;352&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;The to-be design – looking a lot better:&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7KP50p6lpXcEoL021vfI5JHSpgx8xRCQFm-6FYlBfbfJe8830wuhsX-UC70dgW6nRh22AbqSfF0Fpq6chyEYNOcmaA3ALLs3Uw3PAa_zYHsDTWmeYjTxFePrIlq2l0vyHT4tNTA/s1600-h/image%25255B17%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVtYHa2r-C6HJW1WAQN1TBS4TVL-8zWNjzgoeVh6upuxL3CsMiQpxXFVqszx06XpZgbYlUc1dUSyaC84kO67hocR1ZVu1cllqCnvAJlAJrnxdLIx3yMBW3EhamWS8J8l6b1iOV3w/?imgmax=800&quot; width=&quot;654&quot; height=&quot;386&quot;&gt;&lt;/a&gt;&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://softwarehard.blogspot.com/feeds/8166012086798322686/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/37338138/8166012086798322686' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37338138/posts/default/8166012086798322686'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37338138/posts/default/8166012086798322686'/><link rel='alternate' type='text/html' href='http://softwarehard.blogspot.com/2014/07/reduce-integration-mess.html' title='Reduce the Integration Mess!'/><author><name>Johannes</name><uri>http://www.blogger.com/profile/15713518355055537665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSI-x4taFLTm8ZKjb0Dmqg3wNtXkrtIXJ2zZQfPCbOnWUeF5Q0kCo1_Kyptpy1jIp2XkObjz9tco7W1qXLgZyV2I0Nwg1SKuXxbCUhB04CE3OmQI554Gw6hTtC6kHYOA/s220/FaceQ1443676797845.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhD-l3APnDCFoiDr4JauBFgPVttg_j6uqQLlnMmyRQPNq3tdIj38xSd29SNhZncroMJuxJrhOqHMAQpWdXihEwn6SxbcimysqjSVsqt2O9RMqMAVCQcCaeJJkFChe31_fspZMxb-w/s72-c?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37338138.post-2800109974315135670</id><published>2014-07-08T00:19:00.001+08:00</published><updated>2014-07-08T00:19:32.713+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="uml"/><title type='text'>Incident Response Process</title><content type='html'>&lt;p&gt;Recently, I had been dealing with other areas of IT including operations &amp;amp; governance. The following &lt;strong&gt;&lt;em&gt;Activity Diagram&lt;/em&gt;&lt;/strong&gt; documents how a typical institution might have to respond to security incidents.&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLJu7vn5vXpQmZdqpfg0elVFGm8bmp8R9JqRGfQe7740x_5rGc0K9924NKjyNTj8pWUIH0CJaxMvCPk5PP2u1OHZSMjnx1wyirIuzqpAxddIuaQY7dOP5m7JeqROmpNM9XD4OXaw/s1600-h/image%25255B21%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpymAvRwOnBQ2iBYcW5y5eXB-OeJUztxNrPuz34OtpBOQ_hUAQi0Fh1OyrVFyFZydTbdtdvBFx2K-ELqMYPUFkQn2JZxOacQcOzlFDJh-T1tyo0U3VvNWaNiUaqG95uZRqYnKhxg/?imgmax=800&quot; width=&quot;683&quot; height=&quot;853&quot;&gt;&lt;/a&gt;&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://softwarehard.blogspot.com/feeds/2800109974315135670/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/37338138/2800109974315135670' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37338138/posts/default/2800109974315135670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37338138/posts/default/2800109974315135670'/><link rel='alternate' type='text/html' href='http://softwarehard.blogspot.com/2014/07/incident-response-process.html' title='Incident Response Process'/><author><name>Johannes</name><uri>http://www.blogger.com/profile/15713518355055537665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSI-x4taFLTm8ZKjb0Dmqg3wNtXkrtIXJ2zZQfPCbOnWUeF5Q0kCo1_Kyptpy1jIp2XkObjz9tco7W1qXLgZyV2I0Nwg1SKuXxbCUhB04CE3OmQI554Gw6hTtC6kHYOA/s220/FaceQ1443676797845.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpymAvRwOnBQ2iBYcW5y5eXB-OeJUztxNrPuz34OtpBOQ_hUAQi0Fh1OyrVFyFZydTbdtdvBFx2K-ELqMYPUFkQn2JZxOacQcOzlFDJh-T1tyo0U3VvNWaNiUaqG95uZRqYnKhxg/s72-c?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37338138.post-8124656535464511112</id><published>2014-05-02T01:32:00.002+08:00</published><updated>2014-05-02T01:32:47.148+08:00</updated><title type='text'>Review: Search for Truth - Home Bible Study</title><content type='html'>A mindmap review of the powerful Bible study material.&lt;br /&gt;Flash version can be found&amp;nbsp;&lt;a href=&quot;https://sites.google.com/site/softwareishard/file-cabinet/flash-content/Search%20for%20Truth%20%28Home%20Bible%20Study%29.swf&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhB2joByMZ-_m6IWIq3SlMloCmbCYsWP-z_eooXTxC_R8lu-0WyiZadetad-evVRYrh_oudEGIYp7kGqRPICOtjXosEyR2YCLTRXvNqZh_lj3TkeEhmDY9Vfu_34FyOff4FmHUnnw/s1600/Search+for+Truth+(Home+Bible+Study).png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhB2joByMZ-_m6IWIq3SlMloCmbCYsWP-z_eooXTxC_R8lu-0WyiZadetad-evVRYrh_oudEGIYp7kGqRPICOtjXosEyR2YCLTRXvNqZh_lj3TkeEhmDY9Vfu_34FyOff4FmHUnnw/s1600/Search+for+Truth+(Home+Bible+Study).png&quot; height=&quot;480&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://softwarehard.blogspot.com/feeds/8124656535464511112/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/37338138/8124656535464511112' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37338138/posts/default/8124656535464511112'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37338138/posts/default/8124656535464511112'/><link rel='alternate' type='text/html' href='http://softwarehard.blogspot.com/2014/05/review-search-for-truth-home-bible-study.html' title='Review: Search for Truth - Home Bible Study'/><author><name>Johannes</name><uri>http://www.blogger.com/profile/15713518355055537665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSI-x4taFLTm8ZKjb0Dmqg3wNtXkrtIXJ2zZQfPCbOnWUeF5Q0kCo1_Kyptpy1jIp2XkObjz9tco7W1qXLgZyV2I0Nwg1SKuXxbCUhB04CE3OmQI554Gw6hTtC6kHYOA/s220/FaceQ1443676797845.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhB2joByMZ-_m6IWIq3SlMloCmbCYsWP-z_eooXTxC_R8lu-0WyiZadetad-evVRYrh_oudEGIYp7kGqRPICOtjXosEyR2YCLTRXvNqZh_lj3TkeEhmDY9Vfu_34FyOff4FmHUnnw/s72-c/Search+for+Truth+(Home+Bible+Study).png" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37338138.post-5387477006956935400</id><published>2013-10-20T01:52:00.001+08:00</published><updated>2013-10-20T01:54:23.416+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="review"/><title type='text'>Review: The 5 Love Languages</title><content type='html'>&lt;p&gt;A mindmap review of the excellent book.&lt;br&gt;Flash version can be found &lt;a href=&quot;https://sites.google.com/site/softwareishard/file-cabinet/flash-content/5%20Love%20Languages.swf&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;  &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKfePncZFaZ2zE2Ke2DduXNCzmBYSSn2ojH3GPhBPXZS4idK3-C1DAjD93ieUJNeqPn4Fjn6KVapqssPXBacm5my9bkluDnGiAQMQT17oE8HwMGwckux1ftqXdPC5bWxg20LXsZg/s1600-h/5%252520Love%252520Languages%25255B9%25255D.png&quot;&gt;&lt;img title=&quot;5 Love Languages&quot; style=&quot;border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px&quot; border=&quot;0&quot; alt=&quot;5 Love Languages&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTnM8oNow4GFpBjbJAi_bXYs1mxP2vnZ-AwmXnOnM2Pf3C8V1d8Pq_r-B7PmkYigBu9yKOiE8Yytqg_VAkfoR_6kRzXd6iK5pJ58r9pSApB_GHCmcecWL9i5k59iycBfeMwVsh9w/?imgmax=800&quot; width=&quot;675&quot; height=&quot;365&quot;&gt;&lt;/a&gt;  </content><link rel='replies' type='application/atom+xml' href='http://softwarehard.blogspot.com/feeds/5387477006956935400/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/37338138/5387477006956935400' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37338138/posts/default/5387477006956935400'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37338138/posts/default/5387477006956935400'/><link rel='alternate' type='text/html' href='http://softwarehard.blogspot.com/2013/10/review-5-love-languages.html' title='Review: The 5 Love Languages'/><author><name>Johannes</name><uri>http://www.blogger.com/profile/15713518355055537665</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSI-x4taFLTm8ZKjb0Dmqg3wNtXkrtIXJ2zZQfPCbOnWUeF5Q0kCo1_Kyptpy1jIp2XkObjz9tco7W1qXLgZyV2I0Nwg1SKuXxbCUhB04CE3OmQI554Gw6hTtC6kHYOA/s220/FaceQ1443676797845.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTnM8oNow4GFpBjbJAi_bXYs1mxP2vnZ-AwmXnOnM2Pf3C8V1d8Pq_r-B7PmkYigBu9yKOiE8Yytqg_VAkfoR_6kRzXd6iK5pJ58r9pSApB_GHCmcecWL9i5k59iycBfeMwVsh9w/s72-c?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry></feed>