{"id":683,"date":"2022-01-16T15:31:02","date_gmt":"2022-01-16T14:31:02","guid":{"rendered":"https:\/\/caipirinha.spdns.org\/wp\/?p=683"},"modified":"2022-01-16T15:31:02","modified_gmt":"2022-01-16T14:31:02","slug":"colored-network-diagrams-part-2","status":"publish","type":"post","link":"https:\/\/caipirinha.spdns.org\/wp\/?p=683","title":{"rendered":"Colored Network Diagrams (Part 2)"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Executive Summary<\/h2>\n\n\n\n<p>This blog post is the continuation of the blog post <a rel=\"noreferrer noopener\" href=\"https:\/\/caipirinha.spdns.org\/wp\/?p=565\" target=\"_blank\">Colored Network Diagrams (Part 1)<\/a>. In this blog post, I describe some improvements and enhanced capabilities of the scripts that have been presented in Part 1 already. The new set of scripts can now additionally color network graphs (<strong>PERT charts<\/strong>) according to:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>&#8230; <em>remaining<\/em> durations<\/li><li>&#8230; <em>remaining<\/em> work<\/li><li>&#8230; criticality based on <em>remaining<\/em> duration<\/li><\/ul>\n\n\n\n<p>Before reading this blog post, you need to read the blog post <a rel=\"noreferrer noopener\" href=\"https:\/\/caipirinha.spdns.org\/wp\/?p=565\" target=\"_blank\">Colored Network Diagrams (Part 1)<\/a> first to fully understand the context.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Preconditions<\/h2>\n\n\n\n<p>In order to use the approach described here, you should:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>&#8230; have access to a Linux machine or account<\/li><li>&#8230; have a <a rel=\"noreferrer noopener\" href=\"https:\/\/www.mysql.com\/\" target=\"_blank\">MySQL<\/a> or <a rel=\"noreferrer noopener\" href=\"https:\/\/mariadb.org\/\" target=\"_blank\">MariaDB<\/a> database server set up, running, and have access to it<\/li><li>&#8230; have the package <a rel=\"noreferrer noopener\" href=\"https:\/\/graphviz.org\/\" target=\"_blank\">graphviz<\/a> <span style=\"color: initial;\">[<\/span><a rel=\"noreferrer noopener\" href=\"https:\/\/www.graphviz.org\/doc\/info\/colors.html\" target=\"_blank\">2<\/a><span style=\"color: initial;\">]<\/span> installed<\/li><li>&#8230; have some basic knowledge of how to operate in a Linux environment and some basic understanding of shell scripts<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Description and Usage<\/h2>\n\n\n\n<p>In the previous blog post <a rel=\"noreferrer noopener\" href=\"https:\/\/caipirinha.spdns.org\/wp\/?p=565\" target=\"_blank\">Colored Network Diagrams (Part 1)<\/a> we looked at a method on how to create colored network graphs (<strong>PERT charts<\/strong>) based on the duration, the work, the slack, and the criticality of the individual tasks. We also looked at how a network graph looks like when some of the tasks have already been completed (tasks in <span class=\"has-inline-color has-vivid-green-cyan-color\">green<\/span> color). We will now enhance the script sets in order to process <strong>remaining duration<\/strong> and <strong>remaining work<\/strong>. In addition, this information shall also be displayed for each task. For this, the scripts <strong>create_project_db.sql<\/strong>, <strong>msp2mysql.sh<\/strong>, and <strong>mysql2dot.sh<\/strong> require modifications so that they can process the additional information. I decided to name the new scripts with a &#8220;-v2&#8221; suffix so that they can be distinguished from the ones in the previous blog post.<\/p>\n\n\n\n<p>Let us first look at the script <strong>create_project_db-v2.sql<\/strong> which sets up the database [<a rel=\"noreferrer noopener\" href=\"https:\/\/docs.microsoft.com\/en-us\/office-project\/xml-data-interchange\/introduction-to-project-xml-data?view=project-client-2016\" target=\"_blank\">1<\/a>]. Compared to the previous version, it now sets up some new fields which have been highlighted in <span class=\"has-inline-color has-vivid-red-color\">red<\/span> color below. For the sake of readability, only parts of the script have been displayed here.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">...\n       task_duration          INT UNSIGNED      DEFAULT 0,\\\n       task_work              INT UNSIGNED      DEFAULT 0,\\\n<span class=\"has-inline-color has-vivid-red-color\">       free_slack             INT               DEFAULT 0,\\\n       total_slack            INT               DEFAULT 0,\\\n       finish_slack           INT               DEFAULT 0,\\\n       rem_duration           INT UNSIGNED      DEFAULT 0,\\\n       rem_work               INT UNSIGNED      DEFAULT 0,\\\n<\/span>       <code><code>`%_complete`<\/code><\/code>           SMALLINT UNSIGNED DEFAULT 0,\\\n...\n       successor              SMALLINT UNSIGNED NOT NULL,\n<span class=\"has-inline-color has-vivid-red-color\">       link_lag               INT               DEFAULT 0)<\/span> ENGINE=MyISAM DEFAULT CHARSET=utf8;\n...<\/pre>\n\n\n\n<p>In addition to the fields <strong>rem_duration<\/strong> and <strong>rem_work<\/strong>, we also prepare the database for 3 out of the 4 slack types that tasks have (<strong>free_slack<\/strong>, <strong>total_slack<\/strong>, <strong>finish_slack<\/strong>), in order to be able to execute some experiments in future releases. Furthermore, we can now capture the <strong>link_lag<\/strong> between two linked tasks; this information will not be used now, but in a future version of the script set.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 1: Parsing the Project Plan<\/h3>\n\n\n\n<p>The script <a rel=\"noreferrer noopener\" href=\"https:\/\/caipirinha.spdns.org\/~gabriel\/Blog\/msp2mysql-v2.sh\" target=\"_blank\"><strong>msp2mysql-v2.sh<\/strong><\/a> parses the <strong>Microsoft<sup>\u00ae<\/sup> Project<\/strong> plan in <strong>XML<\/strong> format. It contains a <a rel=\"noreferrer noopener\" href=\"https:\/\/en.wikipedia.org\/wiki\/Finite-state_machine\" target=\"_blank\">finite-state machine<\/a> (see graph below), and the transitions between the states are XML tags (opening ones and closing ones).<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"451\" height=\"1024\" src=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/msp2mysql-v2-451x1024.png\" alt=\"\" class=\"wp-image-690\" srcset=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/msp2mysql-v2-451x1024.png 451w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/msp2mysql-v2-132x300.png 132w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/msp2mysql-v2-768x1745.png 768w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/msp2mysql-v2-676x1536.png 676w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/msp2mysql-v2-902x2048.png 902w\" sizes=\"auto, (max-width: 451px) 100vw, 451px\" \/><figcaption> Finite-State Machine (v2) parsing the Project Plan<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"> Step 2: Generating a Graph<\/h3>\n\n\n\n<p>Now we can extract meaningful data from the database and transform this into a colored network graph; this is done with the bash script <a rel=\"noreferrer noopener\" href=\"https:\/\/caipirinha.spdns.org\/~gabriel\/Blog\/msp2mysql-v2.sh\" target=\"_blank\"><strong>mysql2dot-v2.<\/strong><\/a><strong><a rel=\"noreferrer noopener\" href=\"https:\/\/caipirinha.spdns.org\/~gabriel\/Blog\/mysql2dot.sh\" target=\"_blank\">sh<\/a><\/strong>. <a href=\"https:\/\/caipirinha.spdns.org\/~gabriel\/Blog\/mysql2dot-v2.sh\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>mysql2dot-v2.<\/strong><\/a><strong><a rel=\"noreferrer noopener\" href=\"https:\/\/caipirinha.spdns.org\/~gabriel\/Blog\/mysql2dot.sh\" target=\"_blank\">sh<\/a><\/strong> can create colored network graphs according to:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>&#8230; the task duration<\/li><li>&#8230; the work allocated to a task<\/li><li>&#8230; the total slack of a task<\/li><li>&#8230; the criticality of a task<\/li><li>&#8230; the remaining task duration<\/li><li>&#8230; the remaining work allocated to a task<\/li><li><span style=\"color: initial;\">&#8230; the remaining criticality of a task<\/span><\/li><\/ul>\n\n\n\n<p><a rel=\"noreferrer noopener\" href=\"https:\/\/caipirinha.spdns.org\/~gabriel\/Blog\/msp2mysql-v2.sh\" target=\"_blank\">mysql2dot-v2.<\/a><a rel=\"noreferrer noopener\" href=\"https:\/\/caipirinha.spdns.org\/~gabriel\/Blog\/mysql2dot.sh\" target=\"_blank\">sh<\/a> relies on a working installation of the <a rel=\"noreferrer noopener\" href=\"https:\/\/graphviz.org\/\" target=\"_blank\">graphviz<\/a> package, and in fact, it is <a rel=\"noreferrer noopener\" href=\"https:\/\/graphviz.org\/\" target=\"_blank\">graphviz<\/a> and its collection of tools that create the graph, while <a rel=\"noreferrer noopener\" href=\"https:\/\/caipirinha.spdns.org\/~gabriel\/Blog\/msp2mysql.sh\" target=\"_blank\"><a rel=\"noreferrer noopener\" href=\"https:\/\/caipirinha.spdns.org\/~gabriel\/Blog\/msp2mysql-v2.sh\" target=\"_blank\">mysql2dot-v2.<\/a><a rel=\"noreferrer noopener\" href=\"https:\/\/caipirinha.spdns.org\/~gabriel\/Blog\/mysql2dot.sh\" target=\"_blank\">sh<\/a><\/a> creates a script for <a rel=\"noreferrer noopener\" href=\"https:\/\/graphviz.org\/\" target=\"_blank\">graphviz<\/a> in the <em><a rel=\"noreferrer noopener\" href=\"https:\/\/graphviz.org\/doc\/info\/lang.html\" target=\"_blank\">dot<\/a><\/em> language. Let us look close to some examples:<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Example 8: A real-world example<\/h2>\n\n\n\n<p>Example 8 was already mentioned in the blog post <a rel=\"noreferrer noopener\" href=\"https:\/\/caipirinha.spdns.org\/wp\/?p=565\" target=\"_blank\">Colored Network Diagrams (Part 1)<\/a>. It is a fictious simplified project plan with development, verification, and validation activities where some tasks have already been completed.  The <span class=\"has-inline-color has-vivid-green-cyan-color\">green<\/span> vertical line in the plan shows the status date.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"724\" src=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_8-1024x724.jpg\" alt=\"\" class=\"wp-image-666\" srcset=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_8-1024x724.jpg 1024w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_8-300x212.jpg 300w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_8-768x543.jpg 768w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_8-1536x1087.jpg 1536w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_8-2048x1449.jpg 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>Example of a Development Project <strong>with<\/strong> completed tasks (Status Date <strong>1<\/strong>)<\/figcaption><\/figure>\n\n\n\n<p>Tasks that have been completed 100% are colored in <span class=\"has-inline-color has-vivid-green-cyan-color\">green<\/span> color across all network graphs indicating that these tasks do not require any more attention in the remaining project. While the network graphs had already been shown in the blog post <a rel=\"noreferrer noopener\" href=\"https:\/\/caipirinha.spdns.org\/wp\/?p=565\" target=\"_blank\">Colored Network Diagrams (Part 1)<\/a>, they shall nevertheless ben shown again as the new script <a rel=\"noreferrer noopener\" href=\"https:\/\/caipirinha.spdns.org\/~gabriel\/Blog\/msp2mysql-v2.sh\" target=\"_blank\">mysql2dot-v2.<\/a><a rel=\"noreferrer noopener\" href=\"https:\/\/caipirinha.spdns.org\/~gabriel\/Blog\/mysql2dot.sh\" target=\"_blank\">sh<\/a> shows additional information (<strong>remaining duration<\/strong>, <strong>remaining work<\/strong>) for each task. For completed tasks, those values as well as total task slack are 0, of course.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"216\" src=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_8-duration-2-1024x216.png\" alt=\"\" class=\"wp-image-700\" srcset=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_8-duration-2-1024x216.png 1024w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_8-duration-2-300x63.png 300w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_8-duration-2-768x162.png 768w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_8-duration-2-1536x324.png 1536w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_8-duration-2-2048x432.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>Network Graph colored according to task duration (Example 8-v2)<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"216\" src=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_8-work-2-1024x216.png\" alt=\"\" class=\"wp-image-701\" srcset=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_8-work-2-1024x216.png 1024w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_8-work-2-300x63.png 300w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_8-work-2-768x162.png 768w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_8-work-2-1536x324.png 1536w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_8-work-2-2048x432.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>Network Graph colored according to task work (Example 8-v2)<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"216\" src=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_8-slack-2-1024x216.png\" alt=\"\" class=\"wp-image-702\" srcset=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_8-slack-2-1024x216.png 1024w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_8-slack-2-300x63.png 300w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_8-slack-2-768x162.png 768w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_8-slack-2-1536x324.png 1536w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_8-slack-2-2048x432.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>Network Graph colored according to task slack (Example 8-v2)<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"216\" src=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_8-criticality-2-1024x216.png\" alt=\"\" class=\"wp-image-703\" srcset=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_8-criticality-2-1024x216.png 1024w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_8-criticality-2-300x63.png 300w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_8-criticality-2-768x162.png 768w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_8-criticality-2-1536x324.png 1536w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_8-criticality-2-2048x432.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>Network Graph colored according to task criticality (Example 8-v2)<\/figcaption><\/figure>\n\n\n\n<p>The new script <a rel=\"noreferrer noopener\" href=\"https:\/\/caipirinha.spdns.org\/~gabriel\/Blog\/msp2mysql-v2.sh\" target=\"_blank\">mysql2dot-v2.<\/a><a rel=\"noreferrer noopener\" href=\"https:\/\/caipirinha.spdns.org\/~gabriel\/Blog\/mysql2dot.sh\" target=\"_blank\">sh<\/a> offers 3 additional graphs (menu choices 5&#8230;7):<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"900\" height=\"562\" src=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Shell-1.jpg\" alt=\"\" class=\"wp-image-696\" srcset=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Shell-1.jpg 900w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Shell-1-300x187.jpg 300w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Shell-1-768x480.jpg 768w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><figcaption>Script <a rel=\"noreferrer noopener\" href=\"https:\/\/caipirinha.spdns.org\/~gabriel\/Blog\/msp2mysql-v2.sh\" target=\"_blank\">mysql2dot-v2.<\/a><a rel=\"noreferrer noopener\" href=\"https:\/\/caipirinha.spdns.org\/~gabriel\/Blog\/mysql2dot.sh\" target=\"_blank\">sh<\/a> executed in a shell<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"216\" src=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_8-remaining-duration-1-1024x216.png\" alt=\"\" class=\"wp-image-704\" srcset=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_8-remaining-duration-1-1024x216.png 1024w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_8-remaining-duration-1-300x63.png 300w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_8-remaining-duration-1-768x162.png 768w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_8-remaining-duration-1-1536x324.png 1536w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_8-remaining-duration-1-2048x432.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>Network Graph colored according to <em>remaining<\/em> task duration (Example 8-v2)<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"216\" src=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_8-remaining-work-1-1024x216.png\" alt=\"\" class=\"wp-image-705\" srcset=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_8-remaining-work-1-1024x216.png 1024w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_8-remaining-work-1-300x63.png 300w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_8-remaining-work-1-768x162.png 768w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_8-remaining-work-1-1536x324.png 1536w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_8-remaining-work-1-2048x432.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>Network Graph colored according to <em>remaining<\/em> task work (Example 8-v2)<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"216\" src=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_8-remaining-criticality-1-1024x216.png\" alt=\"\" class=\"wp-image-706\" srcset=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_8-remaining-criticality-1-1024x216.png 1024w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_8-remaining-criticality-1-300x63.png 300w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_8-remaining-criticality-1-768x162.png 768w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_8-remaining-criticality-1-1536x324.png 1536w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_8-remaining-criticality-1-2048x432.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>Network Graph colored according to <em>remaining<\/em> task criticality (Example 8-v2)<\/figcaption><\/figure>\n\n\n\n<p>Let us have a closer look at these graphs and compare some of them:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"465\" src=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Color-Shift-8-8-Duration-1024x465.jpg\" alt=\"\" class=\"wp-image-708\" srcset=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Color-Shift-8-8-Duration-1024x465.jpg 1024w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Color-Shift-8-8-Duration-300x136.jpg 300w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Color-Shift-8-8-Duration-768x349.jpg 768w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Color-Shift-8-8-Duration.jpg 1271w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>Network Graphs colored according to task duration [left] and <em>remaining<\/em> task duration [right] (Example 8-v2)<\/figcaption><\/figure>\n\n\n\n<p>The comparison of the graphs above show two tasks whose colors have changed in different directions of color shades:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>The task with <strong>UID=116<\/strong> changes to a lighter color shade. This is because the left graph takes the duration into account (D=72000), and the right graph takes the <em>remaining<\/em> duration into account (rD=36000). As the <em>remaining<\/em> duration is less than the duration, we can expect that change in the color shade.<\/li><li>The task with <strong>UID=92<\/strong> changes to a darker color shade although the values for the duration (D=14400) and the <em>remaining<\/em> duration (rD=14400) are equal. Why is that?<br>The explanation is that the spread between the color shades (the variable <strong>${color_step}<\/strong> in the script <a rel=\"noreferrer noopener\" href=\"https:\/\/caipirinha.spdns.org\/~gabriel\/Blog\/mysql2dot-v2.sh\" target=\"_blank\">mysql2dot-v2.sh<\/a>) is computed based on the <strong>maximum <em>remaining<\/em> duration<\/strong> in the graph on the right side, different from the <strong>maximum duration<\/strong> in the graph on the left side. Consequently, if there is a task with a very long duration in the left graph and this task has a significantly lower remaining duration, this might occur in a smaller spread (a smaller value of <strong>${color_step}<\/strong>) when the network graph for the <em>remaining<\/em> duration is computed.<\/li><\/ol>\n\n\n\n<p>I am personally open to the discussion of whether a different spread as seen in example (2) makes sense or not. For the moment, I decided to proceed like that. But there are valid arguments for both approaches:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Leaving the spread equal between both graphs makes them directly comparable 1:1. This might be important for users who regularly compare the network graph colored according to task duration with the one colored according to <em>remaining<\/em> task duration.<\/li><li>Computing the spread from scratch for each graph sets a clear focus on the tasks which should be observed now because they have a long <em>remaining<\/em> duration, irrespective of whether the tasks once in the past had a longer or shorter duration.<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"457\" src=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Color-Shift-8-8-Work-1024x457.jpg\" alt=\"\" class=\"wp-image-709\" srcset=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Color-Shift-8-8-Work-1024x457.jpg 1024w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Color-Shift-8-8-Work-300x134.jpg 300w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Color-Shift-8-8-Work-768x343.jpg 768w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Color-Shift-8-8-Work.jpg 1278w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>Network Graphs colored according to task work [left] and <em>remaining<\/em> task work [right] (Example 8-v2)<\/figcaption><\/figure>\n\n\n\n<p>The shift of color shades in the graph above seems logical and corresponds to the case (1) of the previous example. For both the tasks with <strong>UID=100<\/strong> and <strong>UID=116<\/strong>, the value of the <em>remaining<\/em> task work is half the value of the task work, and therefore, in the network graph for the <em>remaining<\/em> task work, both tasks feature lighter color shades as they are &#8220;less problematic&#8221;.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"455\" src=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Color-Shift-8-8-Criticality-1024x455.jpg\" alt=\"\" class=\"wp-image-710\" srcset=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Color-Shift-8-8-Criticality-1024x455.jpg 1024w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Color-Shift-8-8-Criticality-300x133.jpg 300w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Color-Shift-8-8-Criticality-768x341.jpg 768w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Color-Shift-8-8-Criticality.jpg 1272w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>Network Graphs colored according to task criticality [left] and <em>remaining<\/em> task criticality [right] (Example 8-v2)<\/figcaption><\/figure>\n\n\n\n<p>As already explained in the blog post <a rel=\"noreferrer noopener\" href=\"https:\/\/caipirinha.spdns.org\/wp\/?p=565\" target=\"_blank\">Colored Network Diagrams (Part 1)<\/a>, criticality is computed based on the information of <strong>task slack<\/strong> and <strong>task duration<\/strong>. Whereas the script <a rel=\"noreferrer noopener\" href=\"https:\/\/caipirinha.spdns.org\/~gabriel\/Blog\/mysql2dot.sh\" target=\"_blank\">mysql2dot.sh<\/a> used the <strong>task finish slack<\/strong> for this calculations, I decided to change to <strong>task total slack<\/strong> in the newer script <a rel=\"noreferrer noopener\" style=\"font-size: revert;\" href=\"https:\/\/caipirinha.spdns.org\/~gabriel\/Blog\/mysql2dot-v2.sh\" target=\"_blank\">mysql2dot-v2.sh<\/a>; that seemed to be more adequate although in my examples, both values have been the same for all involved tasks.<\/p>\n\n\n\n<p>In both versions of the scripts, logarithmic calculations are undertaken, and their outcome is different from the calculations based on the square root for the network graphs according to (remaining) task durations. As a result, we only observe a color shift in the task with <strong>UID=116<\/strong>. As the <em>remaining<\/em> task duration is half of the task duration, this task is less critical (hence, a lighter color shade) on the right side of the image above.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Example 9: Same project plan (more in the future) <\/h2>\n\n\n\n<p>Jumping to the future, more tasks of the same project plan have been completed either entirely or partially. Again, the <span class=\"has-inline-color has-vivid-green-cyan-color\">green<\/span> vertical line in the plan shows the status date.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"724\" src=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_9-1024x724.jpg\" alt=\"\" class=\"wp-image-712\" srcset=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_9-1024x724.jpg 1024w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_9-300x212.jpg 300w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_9-768x543.jpg 768w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_9-1536x1087.jpg 1536w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_9-2048x1449.jpg 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>Example of a Development Project <strong>with<\/strong> completed tasks (Status Date <strong>2<\/strong>)<\/figcaption><\/figure>\n\n\n\n<p>The resulting graphs are:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"216\" src=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_9-duration-1024x216.png\" alt=\"\" class=\"wp-image-713\" srcset=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_9-duration-1024x216.png 1024w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_9-duration-300x63.png 300w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_9-duration-768x162.png 768w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_9-duration-1536x324.png 1536w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_9-duration-2048x432.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>Network Graph colored according to task duration (Example 9-v2)<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"216\" src=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_9-work-1024x216.png\" alt=\"\" class=\"wp-image-714\" srcset=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_9-work-1024x216.png 1024w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_9-work-300x63.png 300w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_9-work-768x162.png 768w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_9-work-1536x324.png 1536w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_9-work-2048x432.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>Network Graph colored according to task work (Example 9-v2)<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"216\" src=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_9-slack-1024x216.png\" alt=\"\" class=\"wp-image-715\" srcset=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_9-slack-1024x216.png 1024w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_9-slack-300x63.png 300w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_9-slack-768x162.png 768w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_9-slack-1536x324.png 1536w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_9-slack-2048x432.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>Network Graph colored according to task slack (Example 9-v2)<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"216\" src=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_9-criticality-1024x216.png\" alt=\"\" class=\"wp-image-716\" srcset=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_9-criticality-1024x216.png 1024w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_9-criticality-300x63.png 300w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_9-criticality-768x162.png 768w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_9-criticality-1536x324.png 1536w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_9-criticality-2048x432.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>Network Graph colored according to task criticality (Example 9-v2)<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"216\" src=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_9-remaining-duration-1024x216.png\" alt=\"\" class=\"wp-image-717\" srcset=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_9-remaining-duration-1024x216.png 1024w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_9-remaining-duration-300x63.png 300w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_9-remaining-duration-768x162.png 768w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_9-remaining-duration-1536x324.png 1536w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_9-remaining-duration-2048x432.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>Network Graph colored according to <em>remaining<\/em> task duration (Example 9-v2)<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"216\" src=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_9-remaining-work-1024x216.png\" alt=\"\" class=\"wp-image-718\" srcset=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_9-remaining-work-1024x216.png 1024w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_9-remaining-work-300x63.png 300w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_9-remaining-work-768x162.png 768w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_9-remaining-work-1536x324.png 1536w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_9-remaining-work-2048x432.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>Network Graph colored according to <em>remaining<\/em> task work (Example 9-v2)<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"216\" src=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_9-remaining-criticality-1024x216.png\" alt=\"\" class=\"wp-image-719\" srcset=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_9-remaining-criticality-1024x216.png 1024w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_9-remaining-criticality-300x63.png 300w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_9-remaining-criticality-768x162.png 768w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_9-remaining-criticality-1536x324.png 1536w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Example_9-remaining-criticality-2048x432.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>Network Graph colored according to <em>remaining<\/em> task criticality (Example 9-v2)<\/figcaption><\/figure>\n\n\n\n<p>We will now look at some of the graphs and compare them with the equivalent graphs in Example 8. Apart from tasks being colored in <span class=\"has-inline-color has-vivid-green-cyan-color\">green<\/span> color once they have been completed, there are only differences in color shades of tasks belonging to the network graphs of:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><em>remaining<\/em> task duration<\/li><li><em>remaining<\/em> task work<\/li><li><em>remaining<\/em> task criticality<\/li><\/ul>\n\n\n\n<p>as completed tasks have their <em>remaining<\/em> values set to 0 and therefore diminish the set of tasks that are considered for the calculation. In contrast to this, there are no changes in the network graphs of:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>task duration<\/li><li>task work<\/li><\/ul>\n\n\n\n<p>as the respective values do not change for completed tasks. We could, however, in theory experience changes in the network graphs of:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>task slack<\/li><li>task criticality<\/li><\/ul>\n\n\n\n<p>as complete tasks have their slack values set to 0 and therefore diminish the set of tasks that are considered for the calculation. This was not the case in our examples, though. It should also be mentioned that there might be changes in the color shade for a task where the duration or work is increased due to a revised assessment of the project manager from one status date to the other.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"472\" src=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Color-Shift-8-9-Remaining-Duration-1024x472.jpg\" alt=\"\" class=\"wp-image-720\" srcset=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Color-Shift-8-9-Remaining-Duration-1024x472.jpg 1024w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Color-Shift-8-9-Remaining-Duration-300x138.jpg 300w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Color-Shift-8-9-Remaining-Duration-768x354.jpg 768w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Color-Shift-8-9-Remaining-Duration.jpg 1279w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>Network Graphs colored according to <em>remaining<\/em> task duration from Example 8 [left] and Example 9 [right]<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"470\" src=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Color-Shift-8-9-Remaining-Work-1024x470.jpg\" alt=\"\" class=\"wp-image-721\" srcset=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Color-Shift-8-9-Remaining-Work-1024x470.jpg 1024w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Color-Shift-8-9-Remaining-Work-300x138.jpg 300w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Color-Shift-8-9-Remaining-Work-768x352.jpg 768w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Color-Shift-8-9-Remaining-Work.jpg 1278w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>Network Graphs colored according to <em>remaining<\/em> task work from Example 8 [left] and Example 9 [right]<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"469\" src=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Color-Shift-8-9-Remaining-Criticality-1024x469.jpg\" alt=\"\" class=\"wp-image-723\" srcset=\"https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Color-Shift-8-9-Remaining-Criticality-1024x469.jpg 1024w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Color-Shift-8-9-Remaining-Criticality-300x138.jpg 300w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Color-Shift-8-9-Remaining-Criticality-768x352.jpg 768w, https:\/\/caipirinha.spdns.org\/wp\/wp-content\/uploads\/Color-Shift-8-9-Remaining-Criticality.jpg 1276w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>Network Graphs colored according to <em>remaining<\/em> task criticality from Example 8 [left] and Example 9 [right]<\/figcaption><\/figure>\n\n\n\n<p>As mentioned above, the changes in the color shade of the highlighted tasks in the comparisons above are due to the fact that either the remaining duration or the remaining work of the respective tasks change between the earlier and the later status date.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>The scripts <a rel=\"noreferrer noopener\" href=\"https:\/\/caipirinha.spdns.org\/~gabriel\/Blog\/create_project_db-v2.sql\" target=\"_blank\">create_project_db-v2.sql<\/a>, <a rel=\"noreferrer noopener\" href=\"https:\/\/caipirinha.spdns.org\/~gabriel\/Blog\/msp2mysql-v2.sh\" target=\"_blank\">msp2mysql-v2.sh<\/a> and <a rel=\"noreferrer noopener\" href=\"https:\/\/caipirinha.spdns.org\/~gabriel\/Blog\/mysql2dot-v2.sh\" target=\"_blank\">mysql2dot-v2.sh<\/a> and the examples provided above show how, using the powerful <a rel=\"noreferrer noopener\" href=\"https:\/\/graphviz.org\/\" target=\"_blank\">graphviz<\/a> package, traditional project plans created with Microsoft<sup>\u00ae<\/sup> Project can be visualized in a set of graphs that can help a project manager to focus on the right tasks. Compared to the set of scripts in the blog post <a rel=\"noreferrer noopener\" href=\"https:\/\/caipirinha.spdns.org\/wp\/?p=565\" target=\"_blank\">Colored Network Diagrams (Part 1)<\/a>, the improved set of scripts additionally allow the examination of the task duration, task value, and task criticality based on <em>remaining<\/em> values of the tasks, and so can answer the question &#8220;How does the project look now?&#8221; more adequately.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Outlook<\/h2>\n\n\n\n<p>In the near future, I plan to rewrite the script <a rel=\"noreferrer noopener\" href=\"https:\/\/caipirinha.spdns.org\/~gabriel\/Blog\/mysql2dot-v2.sh\" target=\"_blank\">mysql2dot-v2.sh<\/a> into PHP because I want to incorporate an algorithm which I developed back in 2010 that can show the first <em>x<\/em> critical paths of the project using a recursive PHP function and several large multi-dimensional arrays.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Sources<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>[<a rel=\"noreferrer noopener\" href=\"https:\/\/docs.microsoft.com\/en-us\/office-project\/xml-data-interchange\/introduction-to-project-xml-data?view=project-client-2016\" target=\"_blank\">1<\/a>] = <a rel=\"noreferrer noopener\" href=\"https:\/\/docs.microsoft.com\/en-us\/office-project\/xml-data-interchange\/introduction-to-project-xml-data?view=project-client-2016\" target=\"_blank\">Introduction to Project XML Data<\/a><\/li><li><span style=\"color: initial;\">[<\/span><a rel=\"noreferrer noopener\" href=\"https:\/\/www.graphviz.org\/doc\/info\/colors.html\" target=\"_blank\">2<\/a><span style=\"color: initial;\">] = <\/span><a rel=\"noreferrer noopener\" href=\"https:\/\/www.graphviz.org\/doc\/info\/colors.html\" target=\"_blank\">Graphviz Color Names<\/a><\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Files<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li><a rel=\"noreferrer noopener\" href=\"https:\/\/caipirinha.spdns.org\/~gabriel\/Blog\/create_project_db-v2.sql\" target=\"_blank\">create_project_db-v2.sql<\/a>\u00a0sets up the database in\u00a0<a rel=\"noreferrer noopener\" href=\"https:\/\/www.mysql.com\/\" target=\"_blank\">MySQL<\/a>\u00a0or\u00a0<a rel=\"noreferrer noopener\" href=\"https:\/\/mariadb.com\/\" target=\"_blank\">MariaDB<\/a>. The script works with the user\u00a0<em>gabriel<\/em>\u00a0who assumes to have access to the database server without password; you might have to adapt the script to your environment and needs.<\/li><li><a rel=\"noreferrer noopener\" href=\"https:\/\/caipirinha.spdns.org\/~gabriel\/Blog\/msp2mysql-v2.sh\" target=\"_blank\">msp2mysql-v2.sh<\/a>\u00a0reads a Microsoft\u00ae Project plan in XML, parses it and writes the data into the\u00a0<a rel=\"noreferrer noopener\" href=\"https:\/\/mariadb.com\/\" target=\"_blank\">MariaDB<\/a>\u00a0database.<\/li><li><a rel=\"noreferrer noopener\" href=\"https:\/\/caipirinha.spdns.org\/~gabriel\/Blog\/mysql2dot-v2.sh\" target=\"_blank\">mysql2dot-v2.sh<\/a>\u00a0reads from the\u00a0<a rel=\"noreferrer noopener\" href=\"https:\/\/mariadb.com\/\" target=\"_blank\">MariaDB<\/a>\u00a0database and creates a script for\u00a0<a rel=\"noreferrer noopener\" href=\"https:\/\/graphviz.org\/doc\/info\/lang.html\" target=\"_blank\">dot<\/a>, a tool of the\u00a0<a rel=\"noreferrer noopener\" href=\"http:\/\/graphviz.org\/\" target=\"_blank\">graphviz<\/a>\u00a0suite.<\/li><li><a rel=\"noreferrer noopener\" href=\"https:\/\/caipirinha.spdns.org\/~gabriel\/Blog\/Example_8-v2.zip\" target=\"_blank\">Example_8-v2.zip<\/a><span style=\"color: initial;\">\u00a0contains all files with respect to Example 8 (created with the current set of scripts).<\/span><\/li><li><a rel=\"noreferrer noopener\" href=\"https:\/\/caipirinha.spdns.org\/~gabriel\/Blog\/Example_9-v2.zip\" target=\"_blank\">Example_9-v2.zip<\/a>\u00a0contains all files with respect to Example 9.<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Disclaimer<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>The program code and the examples are for demonstration purposes only.<\/li><li>The program code shall not be used in production environments without further modifications.<\/li><li><span style=\"color: initial;\">The program code has not been optimized for speed (It\u2019s a bash script anyway, so do not expect miracles.).<\/span><\/li><li>The program code has not been written with cybersecurity aspects in mind.<\/li><li>While the program code has been tested, it might still contain errors.<\/li><li>Only a subset of all possibilities in [<a rel=\"noreferrer noopener\" href=\"https:\/\/docs.microsoft.com\/en-us\/office-project\/xml-data-interchange\/introduction-to-project-xml-data?view=project-client-2016\" target=\"_blank\">1<\/a>] has been used, and the code does not claim to adhere completely to [<a rel=\"noreferrer noopener\" href=\"https:\/\/docs.microsoft.com\/en-us\/office-project\/xml-data-interchange\/introduction-to-project-xml-data?view=project-client-2016\" target=\"_blank\">1<\/a>].<\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>In this blog post, I describe some improvements and enhanced capabilities of the scripts that have been presented in Part 1 already. The new set of scripts can now additionally color network graphs (PERT charts) according to:<\/p>\n<p>1) remaining durations<br \/>\n2) remaining work<br \/>\n3) criticality based on remaining duration<\/p>\n","protected":false},"author":1,"featured_media":723,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[35,36],"tags":[94,93,95],"class_list":["post-683","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-it","category-pm","tag-graphviz","tag-ms-project","tag-pert"],"_links":{"self":[{"href":"https:\/\/caipirinha.spdns.org\/wp\/index.php?rest_route=\/wp\/v2\/posts\/683","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/caipirinha.spdns.org\/wp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/caipirinha.spdns.org\/wp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/caipirinha.spdns.org\/wp\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/caipirinha.spdns.org\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=683"}],"version-history":[{"count":6,"href":"https:\/\/caipirinha.spdns.org\/wp\/index.php?rest_route=\/wp\/v2\/posts\/683\/revisions"}],"predecessor-version":[{"id":731,"href":"https:\/\/caipirinha.spdns.org\/wp\/index.php?rest_route=\/wp\/v2\/posts\/683\/revisions\/731"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/caipirinha.spdns.org\/wp\/index.php?rest_route=\/wp\/v2\/media\/723"}],"wp:attachment":[{"href":"https:\/\/caipirinha.spdns.org\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=683"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/caipirinha.spdns.org\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=683"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/caipirinha.spdns.org\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=683"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}