{"id":456,"date":"2018-07-02T04:24:37","date_gmt":"2018-07-02T04:24:37","guid":{"rendered":"https:\/\/www.wpvs.de\/iot-2018\/?p=456"},"modified":"2021-05-14T10:07:03","modified_gmt":"2021-05-14T08:07:03","slug":"smartlock-8-der-ganz-normale-projekthorror","status":"publish","type":"post","link":"https:\/\/www.iot-embedded.de\/iot-2018\/projekt-smart-lock\/smartlock-8-der-ganz-normale-projekthorror\/","title":{"rendered":"SmartLock (8) &#8211; Der ganz normale Projekthorror \ud83d\ude0a"},"content":{"rendered":"<p>In unserem letzten Blogpost konntet ihr bereits die in unserem Projekt verwendete KI kennen lernen. In diesem Blogpost geht es nun um die Zusammenarbeit innerhalb des Projekts. Hierbei haben wir einige Produkte und Tools verwendet, um unsere Zusammenarbeit zu unterst\u00fctzen. Im Folgenden werden die Tools und unsere Erkenntnisse innerhalb des Projekts genauer vorgestellt.<\/p>\n<h2>Quelltextverwaltung mit Git<\/h2>\n<p>Zur Verwaltung aller Quelltexte haben wir Git verwendet. Wir haben uns dabei f\u00fcr Gitlab als Hoster unseres Git-Repositories entschieden, da wir dort private Repos anlegen konnten. Nach dem initialen Set-Up konnten wir dann unseren Code teilen, verwalten und versionieren. Au\u00dferdem stellt Gitlab ein Tool zur Verwaltung von User Stories bereit. Dieses haben wir daher zur Verwaltung aller im Projekt angefallenen Aufgaben verwendet. Somit konnten jedem Gruppenmitglied Aufgaben zugeteilt werden und der Status dieser getrackt werden.<\/p>\n<p>Gitlab stellt au\u00dferdem interessante Diagramme zur Analyse des Quellcodes bereit.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-459\" src=\"http:\/\/www.iot-embedded.de\/iot-2018\/wp-content\/uploads\/sites\/3\/2018\/07\/git.jpg\" alt=\"\" width=\"976\" height=\"462\" srcset=\"https:\/\/www.iot-embedded.de\/iot-2018\/wp-content\/uploads\/sites\/3\/2018\/07\/git.jpg 976w, https:\/\/www.iot-embedded.de\/iot-2018\/wp-content\/uploads\/sites\/3\/2018\/07\/git-300x142.jpg 300w, https:\/\/www.iot-embedded.de\/iot-2018\/wp-content\/uploads\/sites\/3\/2018\/07\/git-768x364.jpg 768w\" sizes=\"(max-width: 976px) 100vw, 976px\" \/><\/p>\n<p>So sieht man auf der obigen Abbildung, dass der gr\u00f6\u00dfte Teil unseres Projekts aus JavaScript Code bestand. Das passt auch dazu, dass wir unser Backend und Frontend mit JavaScript umgesetzt haben. Den restlichen Teil bildet die Bilderkennung und alle hardwarenahen Funktionen mit Python und Adruino. Die Summe der geschriebenen Codezeilen ist auf alle Bereiche gleichverteilt.<\/p>\n<p>Au\u00dferdem k\u00f6nnen wir anhand der Verteilung der Commits sehen, dass wir in den Pr\u00e4senzstunden am produktivsten waren.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-460\" src=\"http:\/\/www.iot-embedded.de\/iot-2018\/wp-content\/uploads\/sites\/3\/2018\/07\/git2.jpg\" alt=\"\" width=\"560\" height=\"237\" srcset=\"https:\/\/www.iot-embedded.de\/iot-2018\/wp-content\/uploads\/sites\/3\/2018\/07\/git2.jpg 560w, https:\/\/www.iot-embedded.de\/iot-2018\/wp-content\/uploads\/sites\/3\/2018\/07\/git2-300x127.jpg 300w\" sizes=\"(max-width: 560px) 100vw, 560px\" \/><\/p>\n<h2>Abstimmung innerhalb der Gruppe<\/h2>\n<p>Eigentlich wollten wir am Anfang keinen der Pr\u00e4senztermine wahrnehmen. Daher haben wir beschlossen alle Arbeiten remote durchzuf\u00fchren. Zu Abstimmung wollten wir (Video-)Konferenzen verwenden. Schnell war eine WhatsApp-Gruppe zur allgemeinen Diskussion und ein Discord-Channel zur Durchf\u00fchrung von Konferenzen erstellt. Aber nach den ersten paar Wochen merkten wir, dass die Zusammenarbeit so nicht ganz funktioniert.<\/p>\n<p>Also beschlossen wir, dass wir uns jeden Montag zur gemeinsamen Abstimmung und zum gemeinsamen Vorantreiben des Projekts treffen. Gesagt, getan: Wir machten schnellere Fortschritte und konnten uns bis ins kleinste Detail abstimmen. Insbesondere die Kombination aller Komponenten in eine erste lauff\u00e4hige Demo bereitete uns dabei viel Kopfzerbrechen.<\/p>\n<h2>Hardwarechaos<\/h2>\n<p>Innerhalb unserer Zusammenarbeit erkannten wir immer neue Fallstricke. Pl\u00f6tzlich funktionierte der MySQL-Server auf dem RaspberryPi nicht mehr. Ein anderes Mal mussten wir eine M\u00f6glichkeit suchen ein lokales Netzwerk aufzubauen, innerhalb dem wir per SSH kommunizieren konnten. Das DHBW Netzwerk konnten wir dazu nicht verwenden, da die Kommunikation zwischen den einzelnen Clients in diesem untersagt war. Zum Gl\u00fcck konnten uns schlie\u00dflich die Mitarbeiter des WI-Labors einen HotSpot zur Verf\u00fcgung stellen, mit dessen Hilfe wir unser Projekt weiterentwickeln und testen konnten.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-large wp-image-461\" src=\"http:\/\/www.iot-embedded.de\/iot-2018\/wp-content\/uploads\/sites\/3\/2018\/07\/smartlock-578x1024.jpg\" alt=\"\" width=\"578\" height=\"1024\" srcset=\"https:\/\/www.iot-embedded.de\/iot-2018\/wp-content\/uploads\/sites\/3\/2018\/07\/smartlock-578x1024.jpg 578w, https:\/\/www.iot-embedded.de\/iot-2018\/wp-content\/uploads\/sites\/3\/2018\/07\/smartlock-169x300.jpg 169w, https:\/\/www.iot-embedded.de\/iot-2018\/wp-content\/uploads\/sites\/3\/2018\/07\/smartlock-768x1361.jpg 768w, https:\/\/www.iot-embedded.de\/iot-2018\/wp-content\/uploads\/sites\/3\/2018\/07\/smartlock-867x1536.jpg 867w, https:\/\/www.iot-embedded.de\/iot-2018\/wp-content\/uploads\/sites\/3\/2018\/07\/smartlock.jpg 903w\" sizes=\"(max-width: 578px) 100vw, 578px\" \/><\/p>\n<h2>Retrospektive<\/h2>\n<p>Entsprechend der in Scrum enthaltenen Sprint-Retrospektive k\u00f6nnen wir folgende Verbesserungsvorschl\u00e4ge und Leits\u00e4tze zur Arbeit in unserem Projekt festhalten:<\/p>\n<ul>\n<li>Digitale Abstimmung ist praktisch. Sie kann bei komplexen Projekten aber nicht die realen Treffen ersetzen.<\/li>\n<li>Diskussionen sind mindestens genauso wichtig wie die eigentliche Entwicklung der Anwendung. Gerade wenn viele Schnittstellen und Abh\u00e4ngigkeiten in einem Softwareprojekt existieren, macht eine gute Abstimmung den Unterschied zwischen Erfolg und Fehlschlag.<\/li>\n<li>\u201eLearn to fail\u201c: Innerhalb der Gruppe m\u00fcssen Fehler gemeinsam diskutiert und behoben werden. API-Definitionen m\u00fcssen teilweise ge\u00e4ndert werden. Geplante Vorgehensweisen m\u00fcssen manchmal als unpassend verworfen und verbessert werden.<\/li>\n<li>Overengineering ist ein Projektkiller. Softwareprojekte sind komplex, werden die verwendeten Technologien und Entwicklungsobjekte dann auch noch so komplex wie m\u00f6glich gew\u00e4hlt und umgesetzt, kann ein Projekt nur fehlschlagen.<\/li>\n<li>Abschlie\u00dfend darf niemals die Komplexit\u00e4t der Integration aller Komponenten innerhalb von IoT-Projekten vergessen werden. Wir haben diese Untersch\u00e4tzt und daher viel Zeit f\u00fcr die eigentlich Erstellung unseres Prototyps aufwenden m\u00fcssen.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>In unserem letzten Blogpost konntet ihr bereits die in unserem Projekt verwendete KI kennen lernen. In diesem Blogpost geht es nun um die Zusammenarbeit innerhalb des Projekts. Hierbei haben wir einige Produkte und Tools verwendet, um unsere Zusammenarbeit zu unterst\u00fctzen.<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[5],"tags":[],"_links":{"self":[{"href":"https:\/\/www.iot-embedded.de\/iot-2018\/wp-json\/wp\/v2\/posts\/456"}],"collection":[{"href":"https:\/\/www.iot-embedded.de\/iot-2018\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.iot-embedded.de\/iot-2018\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.iot-embedded.de\/iot-2018\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.iot-embedded.de\/iot-2018\/wp-json\/wp\/v2\/comments?post=456"}],"version-history":[{"count":1,"href":"https:\/\/www.iot-embedded.de\/iot-2018\/wp-json\/wp\/v2\/posts\/456\/revisions"}],"predecessor-version":[{"id":652,"href":"https:\/\/www.iot-embedded.de\/iot-2018\/wp-json\/wp\/v2\/posts\/456\/revisions\/652"}],"wp:attachment":[{"href":"https:\/\/www.iot-embedded.de\/iot-2018\/wp-json\/wp\/v2\/media?parent=456"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.iot-embedded.de\/iot-2018\/wp-json\/wp\/v2\/categories?post=456"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.iot-embedded.de\/iot-2018\/wp-json\/wp\/v2\/tags?post=456"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}