Clean Architecture
Bei der Software-Entwicklung liegt der Fokus oftmals auf der reinen Funktionalität der Software, da der Kunde erwartet, dass die gewünschten Funktionen durch die Software korrekt abgedeckt sind. Neben der Funktionalität dürfen aber die anderen Eigenschaften guter Software nicht vernachlässigt werden: die Möglichkeit, die Software zu warten, zu erweitern und bereitzustellen. Deshalb setzen wir in der Virality bei neuen Projekten vermehrt auf das Clean Architecture Prinzip (Martin, Robert C. Clean Architecture. Pearson, 2017), welches sich vor allem in umfangreichen Projekten bewährt hat. Details vs. Anwendungslogik Eine gute Architektur erlaubt es, Änderungen ohne großen Aufwand durchzuführen. Dies wird auch dadurch erreicht, dass Detail-Entscheidungen so spät wie möglich getroffen werden, um bei neuen Anforderungen möglichst flexibel agieren zu können. Diese Details können zum Beispiel die Wahl der Datenbank, die Art der Netzwerk-Kommunikation oder die grafische Benutzeroberfläche sein. Die eigentliche Logik der Anwendung darf zu diesen Details keine Abhängigkeiten haben. In Abbildung 1 sind diese Details in der äußersten Schicht angesiedelt, die schwarzen Pfeile verdeutlichen, dass Abhängigkeiten stets nur von außen (Details) nach innen (Logik) zeigen dürfen. Dadurch kann beispielsweise auch spät in der…
Ganzen Artikel lesen...

Chadly Marouane zu Methoden zur Lokalisierung, Aktivitäts- und Kontexterkennung basierend auf dem Framework OpenCV
Chadly Marouane ist seit Juni 2013 Software Engineer bei der Virality und hat dabei sowohl an zahlreichen Softwareprojekten als auch an Forschungsprojekten mitgewirkt. Nebenbei hat er an der LMU München promoviert und konnte so ein weiteres fachliches Interesse verfolgen. Chadly, kannst du kurz erzählen, was du in deiner täglichen Arbeit so machst? Ich mache klassische Software-Entwicklung mit dem Fokus auf mobile Anwendungen, speziell aus dem Bereich der Mobilen und Verteilten Systeme. Dabei konzeptionieren und entwickeln wir gemeinsam im Team Lösungen für größere und auch kleinere Unternehmen. Dies können umfangreiche Smartphone-Anwendungen, nutzerfreundliche Web-Anwendungen oder auch komplexe Verwaltungs- und Nutzersysteme sein. Neben der klassischen Software-Entwicklung für Kunden arbeiten wir auch an eigenen Ideen und Produkten, wie beispielsweise DieSchulApp oder auch die Keypocket-App. DieSchulApp entstand aus der Zusammenarbeit und Kooperation mit der LMU München und einer Realschule in Bayern. Diese vereinfacht die herkömmlichen Kommunikationswege innerhalb der gesamten Schulfamilie erheblich. Die Keypocket-App haben wir mit Hilfe eines geförderten Forschungsprojektes entwickeln können. Dabei haben wir eine App entwickelt, die ein sicheres Verwalten und Benutzen von Zugangsdaten ermöglicht. In allen unseren Lösungen integrieren wir unser Know-How…
Ganzen Artikel lesen...

fastlane – Automatisierung des Build und Release Prozesses für iOS Apps
Als Softwareentwicklungsteam steht man ständig vor neuen Herausforderungen - eine davon ist der Deploymentprozess. Von außen betrachtet, wirkt dieser meist einfach und so wird der Aufwand schnell unterschätzt. In der Realität ist es jedoch anders: der Releaseprozess ist deutlich komplexer und zeitaufwendiger als es auf den ersten Blick scheint. Vor allem im Bereich der iOS-Entwicklung ist o.g. Prozess besonders langwierig und komplex. Es werden unzählige Zertifikate und Profile benötigt bzw. im Laufe des Gesamtprozesses erstellt. Für jede App existiert eine AppID, für jeden Entwickler eine Code Signing Identity sowie ein Provisioning Profile für jede App und jeden Entwickler, all dies selbstverständlich für jede potentielle Umgebung (z. B. Development und AppStore). Hieraus folgt, dass die Menge an Profilen und Zertifikaten, in Abhängigkeit von der Anzahl an Projekten und Entwicklern rasant ansteigen kann und schnell unübersichtlich wird. Hinzu kommt der Aufwand, diese Profile und Zertifikate zu verwalten. Außerdem sollten die Screenshots, welche im AppStore zu sehen sind auch aktuell gehalten werden. Mit zunehmender Anzahl an unterstützten Sprachen und Geräten steigt diese Zahl enorm, z. B. haben 10 verschiedene Sprachen, 5 verschiedene Geräte…
Ganzen Artikel lesen...

Visuelle Verfahren zur Orts-, Aktivitäts- und Kontexterkennung
Durch die rasante Entwicklung und Verbreitung mobiler Endgeräte, wie z.B. Smartphones, Tablets und Wearables, ist die Anzahl ortsbezogener Dienste enorm angestiegen. Viele Anwendungen ortsbezogener Dienste sind nicht mehr aus unserem Alltag wegzudenken. Sie sind Teil unseres Lebens geworden und beeinflussen unsere zukünftigen Entscheidungen und Verhaltensweisen. Dabei nutzen wir z.B. die Wetter-App am Morgen, um zu schauen ob wir den Regenschirm brauchen, schauen in die Verkehrsanbindungs-App, um den schnellsten Weg zur Arbeit zu finden, und informieren uns in der lokalen Nachrichten-App über aktuelle Themen. Überall begegnen uns Situationen, in denen wir diese Dienste aus Informationsbedarf oder Zeitvertreib immer wieder nutzen.
Ganzen Artikel lesen...

Alexa Skill mit Node-RED und IBM Bluemix entwickeln
Sprachsteuerung und Chatbots sind in aller Munde. Neben Siri, Google Now und Cortana ist inzwischen auch Amazon Alexa in Deutschland verfügbar und erfreut sich steigender Beliebtheit. Die Entwicklung dafür ist kein Hexenwerk - dieser Artikel gibt eine kurze Einführung für die Umsetzung. Dazu benötigen wir: Amazon Alexa Wir verwenden im Büro ein Amazon Alexa Dot - die kleine Variante bietet ausreichend Möglichkeiten und lässt sich für einen besseren Klang einfach mit einer Bluetooth-Box verbinden. Weitere Informationen sind auf Amazon zu finden. Alexa Skills Kit Das Alexa Skills Kit bietet die Spracherkennung. Auf Basis von Beispielsätzen lernt Alexa die Absichtserkennung und liefert diese Absicht mit vielen weiteren Optionen an ein beliebiges REST-Interface. Node-RED Als Serveranwendung verwenden wir Node-RED. Damit lässt sich auf einfache und schnelle Art und Weise die Annahme von HTTP-Requests realisieren, über bestimmte Funktionen können einfach und schnell API-Calls gesendet und das Ergebnis als einfache HTTPS-Response zurückgemeldet werden. IBM Bluemix Für Hosting mit einfachem Deployment verwenden wir IBM Bluemix. Die PaaS-Lösung bietet einfaches Hosting von Node-RED-Anwendungen und skaliert bei Bedarf einfach mit den Anforderungen mit. Bluemix kann auch 30 Tage kostenlos getestet werden, natürlich ist aber auch jede andere Hosting-Möglichkeit…
Ganzen Artikel lesen...

Jira – Start eines Jenkins-Builds per Webhook
Mit diesem Artikel stellen wir eine Lösung vor, mit der sich ein beliebiger Jenkins-Job starten lässt, sobald in JIRA eine neue Version freigegeben wird. Mit der Verknüpfung zwischen dem Release-Management in Jira und einem automatischen Deployment verbinden damit mehrere Vorteile: die Release-Entscheidung obliegt dem Projektmanager automatisches Deployment garantiert einen erfolgreichen Prozess bzw. einen definierten Abbruch im Fehlerfall jedes Deployment wird zusammen mit den passenden Tickets in JIRA sauber dokumentiert Zum Einsatz kommen JIRA in der Version 6.4 und Jenkins in der Version 2.19. Die Lösung ist, soweit möglich mit dem neuen Pipeline Konzept von Jenkins umgesetzt. Dies erlaubt es den größten Teil der Konfiguration von Jenkins als Code in einem Source Code Repository (z. B. GIT) zu verwalten. Das ist deswegen erstrebenswert, weil so eine Historie der Konfiguration gespeichert wird und auch ähnliche Projekte schneller konfiguriert werden können, als über die Jenkins Web-UI. Grundsätzlicher Ablauf Zunächst wird beim Release einer neuen Version in JIRA ein Webhook auf eine bestimmte URL auf der Jenkinsinstanz aufgerufen. Dadurch wird ein zu erstellender Job (JIRA Release Job) ausgeführt, der detaillierte Daten zum JIRA Release und Project über die Web…
Ganzen Artikel lesen...

Automatisierung mit Jenkins 2 und dem Pipeline Plugin
Als agil arbeitendes Unternehmen gehört es in der Virality zur Tagesordnung, Software zu veröffentlichen und möglichst früh Kundenfeedback in die weitere Verbesserung des Produkts einfließen lassen zu können. Dabei haben sich im Laufe der Zeit Best-Practices durchgesetzt, die uns - durch Build-Tools und Konsolenskripte unterstützt - schnell zu einem Release führen. Diese manuellen Releases funktionieren zwar meist gut, haben aber auch Probleme: Genannt sind hier in erster Linie Fehler bei der Ausführung des Ablaufs, weil Schritte vergessen oder bewusst übersprungen werden. Die manuelle Ausführung hat zudem den Nachteil, dass kein Protokoll von dem Deployment gespeichert wird, sodass im Fehlerfall nicht nachvollzogen und verglichen werden kann, was schief gegangen ist. Nicht zuletzt können lokale Builds auch nicht sicherstellen, ob diese auch auf anderen Maschinen ausgeführt werden können. Um diese Probleme zu beheben, setzen wir Jenkins ein um möglichst viele Schritte im Build- und Deploymentprozess zu automatisieren. Das behebt nicht nur obengenannte Probleme, sondern spart auch Zeit und motiviert: repetitive Aufgaben müssen nichtmehr durch Entwickler erledigt werden sondern funktionieren einfach! Wichtig beim Einsatz von Tools, speziell auch im Kontext von Jenkins ist uns, dass diese Tools unsere nicht Abläufe…
Ganzen Artikel lesen...