Blog

News, Technik, Entwicklung, Tutorials & mehr!

Bewertung: 5 / 5

Stern aktivStern aktivStern aktivStern aktivStern aktiv

Der nachfolgende Blogbeitrag soll den Einstieg in die DevOps Welt mit Amazon Web Services vereinfachen. Wir werden alle notwendigen Schritte anhand von Screenshots in der AWS Konsole durchgehen und eine Pipeline mit AWS CodePipeline aufbauen. Die Pipeline soll mit einem GitHub Repostiory beginnen, mit CodeBuild gebuildet werden und über CodeDeploy im Echtbetrieb in einer Elastic Beanstalk Umgebung enden. Als Referenzprojekt für eine Microservice kann unser giter8 Template für akka-http oder akka-graphql verwendet werden. Bei beiden müssen allerdings kleine Änderungen vorgenommen werden. Die Pipeline soll akka Microservices, die das Buildtool sbt verwenden, in den Betrieb überführen. Für Java Server, wie Payara Micro oder Wildfly Swarm, können nur ein paar Schritte verwendet werden. Vor allem die Vorbereitung des Projektes auf GitHub unterscheidet sich von einem Scala/Java akka Projekt.


Bevor wir mit den Anpassungen unserer Dateien in unserem GitHub Repository beginnen, müssen wir zuerst ein Docker Repository anlegen. Dazu wechseln wir in die Elastic Container Service Oberfläche und klicken auf „Create Repository“. Wir vergeben hier lediglich den Namen unseres Projektes (innfactory-akka-http-ci-test) und schreiben uns die Repository URI auf. Mehr müssen wir in diesem Dienst nicht machen.

EC2 Container Registry


Als nächstes benötigen wir eine neue Datei Dockerrun.aws.json für AWS CodeDeploy. Die Werte bei Image – Name müssen entsprechend unseres ECR Repositorys angepasst werden. In diesem Beispiel pushen wir unserer Docker Container immer auf latest. Für mehrere Branches in github sind weitere Anpassungen notwendig.

  "AWSEBDockerrunVersion": "1",
  "Image": {
    "Name": "149805022439.dkr.ecr.eu-central-1.amazonaws.com/innfactory-akka-http-ci:latest",
    "Update": "true"
  },
  "Ports": [
    {
      "ContainerPort": "8080"
    }
  ]
}

Für den Buildprozess mit AWS CodeBuild benötigen wir nun noch eine buildspec.yml Datei die wie folgt aussehen kann. Die Variablen bleiben leer, denn sie werden später mithilfe von Umgebungsvariablen von AWS ersetzt. Unsere giter8 Templates sind für Docker vorbereitet, somit können die benötigten Parameter beim sbt docker:publish Aufruf übergeben werden. 

version: 0.2

env:
  variables: 
    STAGE: "dev"
    SQLURL: ""
    SQLUSER: ""
    SQLPASSWORD: ""

phases:
  install:
    commands:
      - echo "continuous delivery for stage[$STAGE]"
      - echo "selected db=$SQLURL"
      - echo "$(lsb_release -cs)"
      - apt-get update -y
      - apt-get install -y apt-transport-https ca-certificates software-properties-common
      - add-apt-repository -y ppa:openjdk-r/ppa
      - sudo apt-get update -y
      - apt-get install -y openjdk-8-jdk
      - echo "deb https://dl.bintray.com/sbt/debian /" | sudo tee -a /etc/apt/sources.list.d/sbt.list
      - apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2EE0EA64E40A89B84B2DF73499E82A75642AC823
      - apt-get update -y
      - apt-get install -y sbt
      - pip install --upgrade awscli
  pre_build:
    commands:
      - $(aws ecr get-login --no-include-email --region eu-central-1) 
  build:
    commands:
      - sbt test
      - sbt -DSTAGE=$STAGE -DSQL_URL=$SQLURL -DSQL_USER=$SQLUSER -DSQL_PASSWORD=$SQLPASSWORD docker:publish
  post_build:
    commands:
      - echo Build completed on `date`
artifacts:
  files:
    - Dockerrun.aws.json 

Einrichtung einer Elastic Beanstalk Umgebung

Bevor wir mit der Continuous Delivery Pipeline beginnen, starten wir zuerst eine neue Elastic Beanstalk Umgebung, da diese ein paar Minuten zum Start benötigt. 

Hierzu wechseln wir in der AWS Konsole zum Dienst Elastic Benastalk und erstellen eine neue Applikation.

Create new Elastic Beanstalk application

In dieser Applikation erstellen wir wiederum eine neue Umgebung (Web server environment) und konfigurieren diese als Docker Platform und lassen erst einmal die Sample Application von Amazon darauf laufen. 

Beanstalk Environment Tier wählen

Wir müssen keine weiteren Anpassungen mehr vornehmen und können die Umgebung mit einem Klick auf „Create environment“ erstellen. Alle nicht vorhandenen, aber benötigten, Informationen werden von AWS automatisch ergänzt. 

AWS Beanstalk Environment Einstellungen

Sollten wir weitere Anpassungen vornehmen wollen, können wir dies unter „Configure more options“ tun. Hier können wir unter anderem die zu startenden Instanzengrößen wählen, die Load Balancer mit https konfigurieren, das Monitoring anpassen, das richtige VPC Netzwerk auswählen, eine RDS Datenbank hinzufügen und noch vieles mehr. Als Hinweis dazu sei erwähnt, dass man niemals eine RDS Datenbank für den produktiven Betrieb in Beanstalk konfigurieren sollte. Diese hängt sonst an der Umgebung und wird gegebenenfalls zusammen mit der Umgebung gelöscht. 

Nach ein paar Minuten sollte unsere Elastic Benastalk Umgebung mit der Sample Application von AWS gestartet sein.

Elastic Beanstalk Übersicht


Erstellung der Pipeline mit AWS CodePipeline

Beginnen wir mit der eigentlichen Pipeline. Zuerst müssen wir einen Namen vergeben. Dieser kann später nicht mehr verändert werden und sollte er sinnvoll gewählt werden. 

AWS CodePipeline anlegen

Als nächstes müssen wir die Quelle unserer Pipeline auswählen. Sollte unser Projekt in AWS CodeCommit gehostet sein, kann dies ebenso verwendet werden wie GitHub. Wir verwenden in diesem Beispiel unsere GitHub Organisation innFactory und ein beliebiges akka sbt Projekt. Unter Advanced müssen wir keine Einstellungen vornehmen und wir können die Pipeline automatisch bei einem neuen git push auf den master starten lassen.

Code Pipeline Quelle (CodeCommit oder GitHub)

Für die Buildphase nutzen wir CodeBuild von AWS. Hierzu wählen wir „Create a new build project“ und konfigurieren die Einstellungen wie auf den nachfolgenden Screenshots zu sehen. Wir können beliebige Umgebungsvariablen hinzufügen, die in der buildspec.yml Datei aufgelöst werden. Wir haben dies bereits für unsere Datenbankparameter verwendet und die Konfiguration unseres akka Projektes wird, wenn es als Docker Instanz läuft, mit diesen Variablen überschrieben. Für produktive Systeme sollten die Passwörter nicht als Plaintext übergeben werden, sondern ein EC2 Parameter Store verwendet werden.

AWS CodeBuild konfiguration

AWS CodeBuild Umgebungsvariablen für RDS Datenbank

Auf der Seite für das Deployment können wir unsere Elastic Beanstalk Application und unsere Umgebung mit der Sample Application verwenden.

CodePipeline Deployment zu Elastic Beanstalk

Zum Schluss müssen wir noch noch eine Rolle für die Pipeline anlegen und alle bisher definierten Rollen über AWS IAM anpassen. Wichtig ist, dass unsere verwendeten Rollen Zugriff auf das Docker Repository und auf Beanstalk haben. Sollte dies nicht konfiguriert worden sein, wird die Pipeline mit entsprechender Meldung fehlschlagen.

CodePipeline Service Rolle


Nachdem wir die Pipeline nun vollständig konfiguriert haben, startet diese automatisch. Haben wir alles richtig gemacht und alle Berechtigungen richtig vergeben sollte das Ergebnis wie folgt aussehen und die Sample Application in Elastic Beanstalk durch unseren neuen Docker Container ersetzt worden sein. 

AWS akka CodePipline Erfolgreicher Deploy

Bewertung: 5 / 5

Stern aktivStern aktivStern aktivStern aktivStern aktiv

Am 21.09. hieß innFactory das erste Mal alle Innovations-Begeisterten im Rosenheimer Gründerzentrum Willkommen. Fast 40 Gäste aus der Region durfte das junge Startup dabei begrüßen: von anderen Gründern über Studenten und Professoren bis hin zu etablierten Firmen hatten sich die Teilnehmer Zeit genommen.

Bei den spannenden Vorträgen rund um das Thema Innovation auch nicht verwunderlich. Zunächst gab Ralf Exler, Head of Innovationmanagement bei der Kathrein Werke KG, einen Einblick in den Alltag eines Innovationsmanagers und seiner Arbeit in einem international tätigen Unternehmen. Im ständigen Dialog mit den Zuhörern ging er auf verschiedene Begrifflichkeiten ein und erläuterte den Weg von der eigentlichen Ideenfindung über die Ausarbeitung bis hin zum Markteintritt innovativer Produkte. Nach dem rund 30-minütigen Vortrag war es Dr. Gerd Beneken, Professor an der Fakultät für Informatik der FH Rosenheim und Leiter des Innovation-Labs der Hochschule, der das Publikum über die Möglichkeiten einer Zusammenarbeit mit der FH Rosenheim informierte. Demnach gibt es sowohl für Firmen als auch Privatpersonen die Gelegenheit Projektvorhaben einzureichen und ihre Ideen in die Realität umzusetzen. „Mit innFactory konnten wir vergangenes Semester ein Projekt gestalten und in Zusammenarbeit mit einer Gruppe Studenten erfolgreich realisieren. Wir können jedem empfehlen, der den Kontakt zu hochqualifizierten jungen Leuten sucht oder einfach nur an einer Idee tüfteln will, die FH anzusprechen und zusammenzuarbeiten.“ So Toni Spöck, Mitgründer von innFactory. Als letzter Speaker an diesem Abend durfte Sebastian Bayerl, aktuell Masterabsolvent im Studiengang Informatik und freiberuflicher Softwareengineer, sein Innovation Assessment präsentieren. Dabei ging es um die Erstellung eines Frameworks zur Bewertung der Innovationsfähigkeit kleiner und mittelständischer Unternehmen. „Die Schwierigkeit liegt darin, Innovation messbar zu machen und das Ergebnis aussagekräftig darzustellen.“ So Sebastian Bayerl über das Bewertungsmodell.

Im Anschluss an die drei Vorträge gab es selbstverständlich noch Gelegenheit für ein ausgiebiges Networking bei kleinen Leckereien und Getränken. „Der ganze Abend hat wirklich Spaß gemacht! Wir freuen uns schon auf das nächste meetup.“ So Tobias Jonas von innFactory. „Beim nächsten Mal wollen wir uns einem eher technischen Bereich widmen. Machine Learning oder Cloud-Computing wären spannende Themen.“ Was es auch wird, die drei Jungunternehmer freuen sich auf zahlreiche Gäste und interessante Diskussionen.

Folien von Prof. Dr. Gerd Beneken - Folien von Sebastian Bayerl

Bewertung: 0 / 5

Stern inaktivStern inaktivStern inaktivStern inaktivStern inaktiv

In dem Artikel "Das Potential von Sprachsteuerung" haben wir die Bedeutung von Sprachsteuerung erläutert. Nun wollen wir uns der technischen Seite widmen und erklären, wie man mit Hilfe von Api.ai Sprachsteuerungen entwickelt. Api.ai hat sich seit 2014 auf Sprach- und Chatbots spezialisiert und gehört seit 2016 zu Google. Mit der angebotenen Technologie lassen sich Konversationen zwischen Mensch und Maschine designen und in verschiedenste Dienste wie Alexa, Slack, Twitter, Facebook und viele weitere integrieren. Api.ai setzt im Hintergrund Maschine Learning ein, um die genaue Intension einer Sprach- oder Texteingabe zu verstehen. Dadurch bietet Api.ai eine erstaunliche Interpretationssicherheit und bildet eine ideale Basis auch für unternehmerische Anwendungsfälle.

Umsetzung eines UseCases in Dialogflow (Api.ai)

Für die ersten Schritte in Api.ai Dialogflow, wie die Erstellung eines Projekts bzw. eines „Agents“ wird eine ausführliche Dokumentation angeboten. (https://api.ai/docs/getting-started/basics)

Richtig spannend wird es bei der Erstellung sog. „Intents“. Ein Intent ist gewissermaßen die Definition einer Funktionssignatur. Wird ein Sprach- bzw. Textbefehl von einer Benutzeranwendung an Api.ai gesendet, findet Api.ai mit Hilfe seiner Machine Learning Algorithmen die entsprechende Signatur und sendet den Namen der Funktion und ggf. die zugehörigen Parameter zurück an die Benutzeranwendung. Die Benutzeranwendung kann danach die Funktion ausführen und dem Benutzer das gewünschte Ergebnis liefern.

Um den Ablauf zu veranschaulichen nehmen wir als UseCase eine Shopping App, in der der Benutzer Angebote von unterschiedlichen Märkten einsehen kann. Im folgenden Screenshot sieht man, wie ein Intent in Api.ai aussehen kann:

Als erwarteter Sprachbefehl wird „Angebote von Rewe“ festgelegt, wobei Rewe einen Parameter darstellt und somit variabel ist. Durch das Machine Learning versteht Api.ai auch verwandte Aussagen, wie z.B. „Deals von Rewe“ oder auch „Schnäppchen bei Rewe“. Als Rückgabe wird der zugehörige Funktionsname (Action) „search_deals“ mit dem Parameter „Shop = Rewe“ zurückgegeben.

 

ApiAi.setConfiguration("4xxxxxxxe90xxxxxxxxc372", ApiAi.LANG_GERMAN);

Neben Englisch und Deutsch werden viele weiter Sprachen unterstützt. Eine Auflistung befindet sich in unserer GitHub-Dokumentation: https://github.com/innFactory/react-native-api-ai#supported-languages Als nächstes wird mit dem simplen Aufruf von „startListening“ der Sprachbefehl aufgenommen und direkt mit Api.ai verarbeitet:

ApiAi.startListening(result=>{ console.log(result); }, error=>{ console.log(error); }); 

Fazit

Mit Api.ai ist es möglich professionelle Sprachsteuerungen zu entwickeln. Unsere React-Native Library „react-native-api-ai“ liefert dazu eine einfache Integration für entsprechende Mobile Apps. 

Bewertung: 0 / 5

Stern inaktivStern inaktivStern inaktivStern inaktivStern inaktiv

Je natürlicher und intuitiver eine Software oder Applikation bedienbar ist, desto höher ist die Akzeptanz und Zufriedenheit der Kunden. Gerade für Apps, die ein kurzes On-Boarding verlangen und die „schnell, nebenbei“ verwendet werden, ist eine einfache Bedienung in Kombination mit einer flachen Navigation durch die einzelnen Funktionen elementar. Entgegen diesem Paradigma soll eine App trotz ihrer trivialen Bedienbarkeit (Stichwort Usability) einen angemessenen Funktionsumfang bieten und möglichst alle Bedürfnisse des Nutzers abdecken. Erschwerend kommt hinzu, dass bei Mobile Apps bedingt durch die Displaygröße der Platz für Informationen und Funktionselemente sehr beschränkt ist und die Applikation dadurch sehr schnell „überladen“ wirkt. Fühlt sich infolgedessen ein Nutzer überfordert und kann die gewünschte Funktion nicht innerhalb weniger Augenblicke finden, so stellt sich eine geiwsse Ablehnung gegenüber der App ein. Dieses Phänomen behandelt auch Yu-Kai Chou in seinem Buch „Actionable Gamification“:

"Far too often, Onboarding experiences for products feel confusing, too hands off, or too complex. This results in the user feeling stupid. If your user feels stupid during Onboarding, then you’ll be fighting an uphill battle along with the user (think Google+)." http://yukaichou.com/gamification-study/4-experience-phases-gamification-2-onboarding-phase/

Um diesem Problem entgegenzuwirken setzen wir verstärkt auf die Verwendung von Sprachsteuerung in Apps. Damit kann eine Applikation zentral bedient werden, ohne dass das Userinterface zu überladen wirkt. Beispielsweise kann man dadurch eine komplexe Filterfunktion einer Shopping App für den Nutzer stark vereinfachen. Mit dem Satz: „Ich will Angebote von Lebensmitteln im Umkreis von 10 km“ oder „Obst von Edeka, Rewe und Netto“ können sehr schnell die Filterparameter für Kategorie, Ort oder Markt gesetzt werden.

Eine intuitive Sprachsteuerung lässt sich für weitaus mehr Use Cases nutzen. Besonders interessant ist ein Arbeitsumfeld, welches durch hohe Fluktuation, Saisonarbeit oder eine geringe Vertrautheit mit den IT-Prozessen gekennzeichnet ist. Hier kann durch Sprachsteuerung eine einfache und schnelle Bedienung komplexer Aufgaben bewerkstelligt werden. Ein Lagermitarbeiter könnte ohne genauere Kenntnisse in der Logistik mit dem Worten „Zeige mir Wareneingangsschein für Bestellnummer 123“ die entsprechenden Daten auf einem stationären oder mobilen Display angezeigt bekommen - ohne vom Stapler absteigen zu müssen.

Ein weiterführender Artikel in diesem Zusammenhang beschäftigt sich mit der Entwicklung einer Sprachsteuerung und der Integration in einer React-Native App: Sprachsteuerung mit Api.ai in einer React-Native App

 

Bewertung: 5 / 5

Stern aktivStern aktivStern aktivStern aktivStern aktiv
innovationNow: Die neue meetup-Reihe rund um das Thema Innovation ist da.
Was bedeutet Innovation eigentlich? Welche Innovationsmöglichkeiten gibt es? Ist Industrie 4.0 gleich Innovation? Und ist mein Unternehmen überhaupt innovationsfähig? All diese und weitere Fragen sollen im Rahmen dieses Meetups geklärt werden.
Dabei haben wir es geschafft erfahrene Speaker mit spannenden Vorträgen für uns zu gewinnen: Ralf Exler, Head of Innovation Management bei der Kathrein-Werke KG wird uns einen Einblick über die Integration von neuen Technologien und High-Potentials in einem weltweit agierenden Unternehmen geben. Prof. Dr. Gerd Beneken, Leiter des Bereichs Software-Engineering und des Innovationlabs der Hochschule Rosenheim gibt anschließend Auskunft über aktuelle und zukünftige Chancen, die sich dank neuer Informations-Technologien im Bereich der Hochschule eröffnen. Zum Abschluss wird Sebastian Bayerl, selbstständiger IT-Berater und Master-Absolvent in der Informatik die Ausarbeitung eines Frameworks zur Bewertung der Innovationsfähigkeit von Unternehmen vorstellen.
Im Anschluss an die Vorträge freuen wir uns auf ein ausgiebiges Networking – selbstverständlich ganz Startup-like bei gutem Essen und kühlen Getränken.
Vom Techi bis zum BWLer, vom Studenten über Professoren bis hin zur Geschäftsführung – wir heißen euch alle am 21.09.2017 herzlich willkommen in der Übergangslösung des Rosenheimer Gründerzentrums in der Bahnhofstraße 5 in der Rosenheimer Innenstadt. Wir freuen uns auf euch!
Eure innFactory
 
 

Bewertung: 5 / 5

Stern aktivStern aktivStern aktivStern aktivStern aktiv

Wir haben auf github eine erste Alpha Version unseres Machine Learning Tools "akka-lift-ml" unter der Apache 2.0 Lizenz veröffentlicht. Das Tool setzt nach der Arbeit eines Data Scientist an und übernimmt einen Großteil der Aufgaben im Betrieb von ML Systemen. Häufig spricht man auch von Data Engineering. akka-lift-ml ist in Scala geschrieben und erweitert eine lokale Spark Instanz für die Trainingsresultate. Das Training selbst kann auf jedem über das Netzwerk erreichbare Spark Cluster durchgeführt werden.

Damit das Tool die Machine Learning Aufgaben erfolgreich umsetzten kann, müssen die Daten vollständig bereinigt worden sein. Dies lässt sich beispielsweise mit Spark Streaming oder akka Streaming in nahezu Echtzeit erledigen (FastData Processing). Wenn die Daten im richtigen Format, zum Beispiel csv auf HDFS oder S3, abgelegt worden sind, kann das Training direkt beginnen. Das gesamte Tool wird im Betrieb über REST Schnittstellen oder Aktoren gesteuert und als Docker Container ausgeliefert. So können beispielsweise über HTTP POST neue Trainingsläufe gestartet werden, neue beste Parameter gefunden werden und auch mit HTTP GET auf die Ergebnisse der vergangenen Trainingsdurchläufe zugegriffen werden. Sollte der Microservice abstürzen, wird automatisch das letzte trainierte Model von einer Quelle wie S3 oder HDFS geladen. 

Derzeit unterstützt das Tool lediglich den ALS (Alternating Least Squares) Algorithmus für Collaborative-Filtering. Dieser wird sehr häufig im Bereich Recommendersysteme eingesetzt. Weiter Algorithmen wie für lineare Regression sollen ergänzt werden. 

Wünsche, Anregungen und Verbesserungsvorschläge können Sie uns gerne über github zukommen lassen.

Weitere Informationen und eine QuickStart Guide finden sie in der Beschreibung oder im Wiki System auf github:

https://github.com/innFactory/akka-lift-ml

 

Kategorien

  • News
  • Gastbeiträge
  • Data Science & Engineering
  • Software Engineering
  • innoVation:now

Blogbeiträge

Der Blog!

In unserem Blog erklären wir diverse Technologien, verweisen auf interessante Webcasts und informieren Sie über Neuigkeiten im Umfeld von innFactory und unseren Produkten.