{"id":1729,"date":"2016-12-08T15:04:04","date_gmt":"2016-12-08T14:04:04","guid":{"rendered":"https:\/\/blog.mi.hdm-stuttgart.de\/?p=1729"},"modified":"2023-06-07T15:23:52","modified_gmt":"2023-06-07T13:23:52","slug":"snakes-exploring-pipelines-a-system-engineering-and-management-project-2","status":"publish","type":"post","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2016\/12\/08\/snakes-exploring-pipelines-a-system-engineering-and-management-project-2\/","title":{"rendered":"Snakes exploring Pipelines &#8211; A \u201cSystem Engineering and Management\u201d Project"},"content":{"rendered":"<h3>Part 1: Tool Setup<\/h3>\n<p><strong> This series of blog entries describes a student project focused on developing an application by using methods like pair programming, test driven development and deployment pipelines. <\/strong><\/p>\n<p>Welcome to the next part our project, on its way to become the Snake game with the very best underlying code base ever. (If you somehow missed the introduction to our project, you may want to give it a read: <a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2016\/11\/26\/snakes-exploring-pipelines-a-system-engineering-and-management-project\/\">Click<\/a> ) Today, we\u2019ll take a look at the most important tools we use for building and versioning our code: Eclipse, Gradle and Github.<\/p>\n<p><!--more--><\/p>\n<p>Chances are very high that you already have some amount of experience or contact with the Eclipse development environment, if you have a background with software development in general or Java in particular, so it\u2019s probably unnecessary to talk much about it. For now, the important thing is, that Eclipse provides plug-ins for Gradle projects, as well as integration for JUnit from the get-go. (We will need JUnit later on, during the actual development.) And of course, we wanted to use the newest Java version (which is Java 8, at the time of writing).<\/p>\n<figure id=\"attachment_1731\" aria-describedby=\"caption-attachment-1731\" style=\"width: 600px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/blue-krait.jpg\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1731\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2016\/12\/08\/snakes-exploring-pipelines-a-system-engineering-and-management-project-2\/blue-krait\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/blue-krait.jpg\" data-orig-size=\"600,364\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;22&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;Canon EOS 60D&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1345831276&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;54&quot;,&quot;iso&quot;:&quot;100&quot;,&quot;shutter_speed&quot;:&quot;0.01&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}\" data-image-title=\"blue-krait\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/blue-krait.jpg\" class=\"alignnone size-full wp-image-1731\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/blue-krait.jpg\" alt=\"Fun fact: Java (the island, not the language) is home to lots of dangerous snake species, like the pretty \u201cblue coral snake\u201d above. Source: http:\/\/top10reviewspro.com\/wp-content\/uploads\/2014\/09\/BLUE-KRAIT.jpg \" width=\"600\" height=\"364\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/blue-krait.jpg 600w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/blue-krait-300x182.jpg 300w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/a><figcaption id=\"caption-attachment-1731\" class=\"wp-caption-text\">Fun fact: Java (the island, not the language) is home to lots of dangerous snake species, like the pretty \u201cblue coral snake\u201d above.<\/figcaption><\/figure>\n<p>Before we dive into the installation, a quick overview of Gradle and Github:<br \/>\n<a href=\"https:\/\/gradle.org\/\">Gradle<\/a> is a tool used for build automation, mainly for large projects comprising many components which may take a long time to build. It allows to configure the build process, for example building only certain parts of the entire project, and supports parallel and even distributed build processes on multiple CPUs or computers.<br \/>\nAs for the installation, the complete instructions can be found <a href=\"https:\/\/docs.gradle.org\/current\/userguide\/installation.html\">here<\/a> and <a href=\"https:\/\/gradle.org\/getting-started-gradle-java\/#toggle-id-1\">here<\/a>.<\/p>\n<p><a href=\"https:\/\/github.com\/\">Github<\/a> allows you to host your project files online, using the code versioning software Git (surprise!). Chances are high that you\u2019ve already used Github for downloading projects or code during your software developer-career. With it, you can back up your code remotely, create different development branches, and revert to earlier code versions, among others. Git can become extremely complex, especially when the merge conflicts appear in distributed projects, but with some luck, we won\u2019t have to deal with that.<\/p>\n<p>The process for setting up Gradle with a Github Repository:<\/p>\n<ol>\n<li>If you haven\u2019t already, first install Java (JVM, JDK or JRE. Check the gradle instructions for the exact required versions, as those might change in the future)<\/li>\n<li>If you\u2019re on Windows, install Git (if you\u2019re on Linux, it\u2019s already pre-installed, yay \ud83d\ude00 )<\/li>\n<li>Install Gradle (Setting the correct environment variables is important if you want anything to work, take note that the exact process is dependent on your OS. )<\/li>\n<li>Create a repository on Github<\/li>\n<li>Clone the repository into your local destination folder by navigating to it with the command shell, then execute <b>git clone https:\/\/github.com\/\u201dpath-to-repo\u201d.git<\/b><\/li>\n<li>Create a new Java project with Gradle:<br \/>\nNavigate to destination folder, again using the command shell<br \/>\nExecute <b>gradle init &#8211;type java-library<\/b><\/li>\n<li>Create an initial build: <b>gradle build<\/b><\/li>\n<li>Still in the destination directory, create a .gitignore file, so that you can specify files that you don\u2019t want to add to the repository. For now, add \u201c.gradle\u201d and \u201cbuild\u201d<\/li>\n<li>Commit the current state of the project with git:<br \/>\nExecute <b>git add .<\/b> (in order to add all files, for single files use <b>git add \u201cfilename\u201d<\/b>)<br \/>\nCommit with <b>git commit -a -m \u201cinitial commit\u201d<\/b><\/li>\n<li>Push the commit to GitHub: <b>git push origin master<\/b><\/li>\n<\/ol>\n<p>Integrating the Gradle-project with Eclipse:<\/p>\n<ol>\n<li>Open the \u201cbuild.gradle\u201d file, search for the line <b>apply plugin: \u2018java\u2019<\/b> and add <b>apply plugin: \u2018eclipse\u2019<\/b> :<br \/>\n<a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry1-buildgradle.png\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1732\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2016\/12\/08\/snakes-exploring-pipelines-a-system-engineering-and-management-project-2\/entry1-buildgradle\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry1-buildgradle.png\" data-orig-size=\"370,92\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"entry1-buildgradle\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry1-buildgradle.png\" class=\"alignnone size-full wp-image-1732\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry1-buildgradle.png\" alt=\"entry1-buildgradle\" width=\"370\" height=\"92\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry1-buildgradle.png 370w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry1-buildgradle-300x75.png 300w\" sizes=\"auto, (max-width: 370px) 100vw, 370px\" \/><\/a><\/li>\n<li>Use the shell, navigate to the project directory and execute <b>gradle eclipse<\/b><\/li>\n<li>Open Eclipse, choose a workspace, then select File -&gt; Import -&gt; Existing Projects into Workspace<br \/>\nSelect the project folder as root archive<br \/>\nClick finish<\/li>\n<li>Similar to the process above, add the following files to the existing .gitignore:\n<ul>\n<li>.classpath<\/li>\n<li>.project<\/li>\n<li>.settings<\/li>\n<li>bin<\/li>\n<\/ul>\n<p>The final content of the .gitignore should look like this:<br \/>\n<a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry1-gitignore.png\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1733\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2016\/12\/08\/snakes-exploring-pipelines-a-system-engineering-and-management-project-2\/entry1-gitignore\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry1-gitignore.png\" data-orig-size=\"98,137\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"entry1-gitignore\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry1-gitignore.png\" class=\"alignnone size-full wp-image-1733\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry1-gitignore.png\" alt=\"entry1-gitignore\" width=\"98\" height=\"137\" \/><\/a><\/li>\n<li>Execute <b>git add .gitignore build.gradle<\/b> and <b>git commit -a -m \u201ccommit message\u201d<\/b> (-a is the argument for all files)<\/li>\n<li>Finally, execute git push master origin<\/li>\n<\/ol>\n<p>The .gitignore is important in order not to push platform specific files to the repository. If you download the project from GitHub, you have to execute <b>gradle eclipse<\/b> in the project directory before you can use it as an Eclipse project and proceed as described above.<\/p>\n<p>That\u2019s it, now we have wriggled through the initial setup for our project. If you want to take a look at our repository, and especially the \u201c.gitignore\u201d and \u201cbuild.gradle\u201d files, you can find it at <a href=\"https:\/\/github.com\/ina-demarco\/snake.git\">here<\/a>.<\/p>\n<p>In the next blog entry, we will start with coding, and describe the concept and application of unit tests and test-driven development.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Part 1: Tool Setup This series of blog entries describes a student project focused on developing an application by using methods like pair programming, test driven development and deployment pipelines. Welcome to the next part our project, on its way to become the Snake game with the very best underlying code base ever. (If you [&hellip;]<\/p>\n","protected":false},"author":58,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1,22,651,2],"tags":[],"ppma_author":[698],"class_list":["post-1729","post","type-post","status-publish","format-standard","hentry","category-allgemein","category-student-projects","category-system-designs","category-system-engineering"],"aioseo_notices":[],"jetpack_featured_media_url":"","jetpack-related-posts":[{"id":1711,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2016\/11\/26\/snakes-exploring-pipelines-a-system-engineering-and-management-project\/","url_meta":{"origin":1729,"position":0},"title":"Snakes exploring Pipelines &#8211; A \u201cSystem Engineering and Management\u201d Project","author":"Yann Loic Philippczyk","date":"26. November 2016","format":false,"excerpt":"Part 0: Introduction This series of blog entries describes a student project focused on developing an application by using methods like pair programming, test driven development and deployment pipelines. Once upon a time, which was about one and a half months ago, an illustrious group of three students found together,\u2026","rel":"","context":"In &quot;Allgemein&quot;","block_context":{"text":"Allgemein","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/allgemein\/"},"img":{"alt_text":"A python. (Because snakes. Not the language.) Source: https:\/\/rashmanly.files.wordpress.com\/2008\/10\/1439659.jpg","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/11\/0_1-300x300.jpg?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":1740,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2016\/12\/09\/snakes-exploring-pipelines-a-system-engineering-and-management-project-3\/","url_meta":{"origin":1729,"position":1},"title":"Snakes exploring Pipelines &#8211; A \u201cSystem Engineering and Management\u201d Project","author":"Yann Loic Philippczyk","date":"9. December 2016","format":false,"excerpt":"Part 2: Initial Coding This series of blog entries describes a student project focused on developing an application by using methods like pair programming, test driven development and deployment pipelines. Onwards to the fun part: The actual coding! In this blog entry, we will focus on test-driven development. Like we\u2026","rel":"","context":"In &quot;Allgemein&quot;","block_context":{"text":"Allgemein","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/allgemein\/"},"img":{"alt_text":"A snake looking forward towards the next task, after having performed several incremental test-driven programming iterations Source: http:\/\/cdn1.arkive.org\/media\/0F\/0F35A02E-58A1-408B-B259-88C1E319B1C3\/Presentation.Large\/Curl-snake-coiled.jpg","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry2-snake.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry2-snake.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry2-snake.png?resize=525%2C300&ssl=1 1.5x"},"classes":[]},{"id":1758,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2017\/01\/12\/snakes-exploring-pipelines-a-system-engineering-and-management-project-5\/","url_meta":{"origin":1729,"position":2},"title":"Snakes exploring Pipelines &#8211; A \u201cSystem Engineering and Management\u201d Project","author":"Yann Loic Philippczyk","date":"12. January 2017","format":false,"excerpt":"Part 4: Jenkins and Wrap Up This series of blog entries describes a student project focused on developing an application by using methods like pair programming, test driven development and deployment pipelines. Our first blog entry for this year will at the same time be the final one for this\u2026","rel":"","context":"In &quot;Allgemein&quot;","block_context":{"text":"Allgemein","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/allgemein\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2017\/01\/jenkins_code-1.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2017\/01\/jenkins_code-1.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2017\/01\/jenkins_code-1.png?resize=525%2C300&ssl=1 1.5x"},"classes":[]},{"id":1751,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2016\/12\/22\/snakes-exploring-pipelines-a-system-engineering-and-management-project-4\/","url_meta":{"origin":1729,"position":3},"title":"Snakes exploring Pipelines &#8211; A \u201cSystem Engineering and Management\u201d Project","author":"Yann Loic Philippczyk","date":"22. December 2016","format":false,"excerpt":"Part 3: Coding Guidelines This series of blog entries describes a student project focused on developing an application by using methods like pair programming, test driven development and deployment pipelines. An important part of any professional software development process (like ours :D ) are coding guidelines and methodologies, so we\u2019ll\u2026","rel":"","context":"In &quot;Allgemein&quot;","block_context":{"text":"Allgemein","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/allgemein\/"},"img":{"alt_text":"As a visualization of badly developed code: Spaghetti-snakes Source: http:\/\/lh5.ggpht.com\/-Nb0b-coQ1tU\/UsZSC0STOKI\/AAAAAAAAu2I\/F2ehNp977Ww\/narcisse-snake-pits-6%25255B2%25255D.jpg?imgmax=800","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/spaghettiSnakes.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/spaghettiSnakes.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/spaghettiSnakes.jpg?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/spaghettiSnakes.jpg?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":5262,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2019\/02\/26\/reproducibility-in-ml\/","url_meta":{"origin":1729,"position":4},"title":"Reproducibility in Machine Learning","author":"Pascal Fecht","date":"26. February 2019","format":false,"excerpt":"The rise of Machine Learning has led to changes across all areas of computer science. From a very abstract point of view, heuristics are replaced by black-box machine-learning algorithms providing \"better results\". But how do we actually quantify better results? ML-based solutions tend to focus more on absolute performance improvements\u2026","rel":"","context":"In &quot;Allgemein&quot;","block_context":{"text":"Allgemein","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/allgemein\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1782,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2017\/02\/05\/scheme_interpreter\/","url_meta":{"origin":1729,"position":5},"title":"Scheme Interpreter","author":"hb052","date":"5. February 2017","format":false,"excerpt":"Introduction In the the course Software Engineering and Management and Design and implementation progressed programing languages at Stuttgart Media University, I developed an own Interpreter. \u00a0 About the Interpreter The syntax of this interpreter is\u00a0based on the \u201elips\u201c family, a programming language which is structured in lists (definition). This type\u2026","rel":"","context":"In &quot;System Designs&quot;","block_context":{"text":"System Designs","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/system-designs\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_sharing_enabled":true,"authors":[{"term_id":698,"user_id":58,"is_guest":0,"slug":"yp007","display_name":"Yann Loic Philippczyk","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/1417bdd3183c4e56c15d9942de2b27a306ca0e2e6bbd14669933523fd781d806?s=96&d=mm&r=g","0":null,"1":"","2":"","3":"","4":"","5":"","6":"","7":"","8":""}],"_links":{"self":[{"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts\/1729","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/users\/58"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/comments?post=1729"}],"version-history":[{"count":4,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts\/1729\/revisions"}],"predecessor-version":[{"id":1737,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts\/1729\/revisions\/1737"}],"wp:attachment":[{"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/media?parent=1729"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/categories?post=1729"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/tags?post=1729"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/ppma_author?post=1729"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}