Blog >>> Crew_

Crew Hackathon XV

Hackathon-Time again! Unser zweiter Hackathon dieses Jahr stand an. Wieder haben wir einen Tag lang die Köpfe zusammengesteckt und uns mit verschiedensten neuen, alten und mal wieder überfälligen digitalen Dingen befasst. Pizza gab’s natürlich auch.
25.05.2022
Bene Clauß
Bene Clauß
Projektmanager
Crew Hackathon XV

Wer bereits Blogposts zu unseren Hackathons kennt, der kann direkt mit den Themen einsteigen. Wer näheres zum Ablauf und unseren bisherigen Hackathons lesen möchte, der kann nochmal bei Hackathon XIV, XIII, XII oder XI reinschauen ;-)

Die Themen

Da glücklicherweise bei jedem Hackathon mehr Ideen zusammenkommen, als am Ende Themen bearbeitet werden können, füllt sich unser Ideen-Board von Mal zu Mal. Theoretisch könnte man gut mal einen Hackathon dazu nutzen, um sich damit zu beschäftigen, ob und wie man all die guten Ideen am sinnvollsten im Auge behalten kann und vielleicht auch außerhalb des Hackathons im Alltagstrubel noch das ein oder andere umgesetzt bekommt.

Das gehen wir dann beim nächsten Mal an, diesen Hackathon haben wir uns mit folgendem beschäftigt:

Identity and Access Management

  • Team:, Phil, Simon, Sebastian
  • Ziel: Einstieg ins Thema und Überblick verschaffen

Für ein zukünftiges, umfangreiches Projekt wollen wir auf eine solide Identity-Plattform aufbauen, da hier die Anforderungen weitaus umfangreicher als bei bisherigen Projekten sind: Dynamische Rollen für unterschiedliche dynamische Ressourcen, Single-Sign-On, Multi-Factor-Auth und das alles auch noch Multi-Tenant-fähig.

Hierzu sind wir ins Thema eingestiegen und haben unterschiedliche Lösungen recherchiert - unsere Favoriten Keycloak und Zitadel haben wir genauer durchleuchtet und miteinander verglichen. Dabei konnten wir die Vor-und Nachteile der unterschiedlichen Lösungsansätze, wie z.B. MAC (Mandatory Access Control), DAC (Discretionary Access Control), RBAC (Role-based Access Control), ABAC (Attribute-based Access Control) und PBAC (Policy-based Access Control), besprechen und mit unseren Anforderungen abgleichen.

Auch wenn wir kein abschließendes Urteil fällen konnten, haben wir einen guten Überblick erlangt und werden euch hier im Blog zu diesem Thema und dem zugehörigen Projekt auf dem Laufenden halten.

GraphQL via Absinthe

  • Team: Mats, Hauke, Phil
  • Ziel: Einbindung in Projekt und erste Queries ausführen

Wir haben uns in diesem Hackathon zum ersten Mal mit GraphQL auseinandergesetzt. Dafür haben wir uns zu Beginn informiert, wie GraphQL funktioniert und mit Hasura eine Testdatenbank aufgesetzt und ein paar Queries gebaut und getestet. Anschließend haben wir via Absinthe GraphQL in eines unserer Projekte integriert. Ein Beispiel für eine Abfrage eines Blogposts und dessen Autor könnte wie folgt aussehen:

query {
  post(id: 42) {
    title
    text
    author {
      name
      category
    }
  } 
}

Das Ergebnis der Abfrage sieht dabei so aus:

{
  "data": {
    "post": {
      "title": "Hackathon XV",
      "text": "Da glücklicherweise bei jedem Hackathon...",
      "author": {
        "name": "Bene Clauß",
        "category": "Crew"
      }
    }
  }
}

Neben der Abfrage eines einzelnen Objekts lassen sich auch die üblichen CRUD-Operationen durchführen. Die Besonderheit daran ist, dass auch Relationen innerhalb eines Objekts in der selben Abfrage abgerufen werden können, wie der Autor im gezeigten Beispiel. Zusätzlich dazu ist es möglich, Attributsnamen anzugeben, um nur die benötigten Daten zu bekommen. Somit können Daten gezielt abgefragt und deren Größe auf ein Minimum reduziert werden.

SEO für unsere Website

  • Team: Tristan, Bene
  • Ziel: Website überprüfen und Anpassungen vornehmen

SEO (engl. Search Engine Optimization) oder auch Suchmaschinenoptimierung bedeutet, die Sichtbarkeit einer Website in Suchmaschinen, wie z.B. Google, zu verbessern. Im Hackathon haben wir uns mal wieder damit intensiv auseinandergesetzt, die wesentlichen Punkte herausgefiltert und unsere Website gecheckt.

Im Internet lassen sich zu SEO tausende Checklisten finden, die beschreiben, wie eine Website für eine Suchmaschine zu optimieren ist. Des Weiteren gibt es noch diverse Audit-Tools, wie z.B. seobility und Services, die eine Website auf SEO-Freundlichkeit überprüfen. Zu diesen Tools zählt z.B. Google Lighthouse, welches direkt im Chrome Browser integriert ist und womit man seine Website, neben Performance und Accessibility, auch auf SEO prüfen kann. Diese Tools liefern dann auch meistens direkt Vorschläge, welche Stellen noch Optimierungspotenziale bieten.
Bei unserer Website z.B. ergab die Lighthouse Analyse Mobile einen Score von 96 %, wo wir für ein noch besseres Ergebnis die Abstände zwischen einzelnen klickbaren Bereichen vergrößern müssen. Für die Desktop-Version liegt der Score bei 100 %.

Um eine Website für SEO zu optimieren, sollte man dabei u.a. folgende Punkte beachten:

Mobile First: die Website ist für Mobilgeräte optimiert. Keywords: die Seite beinhaltet mehrere Keywords sinnvoll platziert, mit denen man gefunden werden möchte. Als Bäckerei empfehlen sich z.B. Keywords wie „Bäckerei, Backen, Brot, Brötchen“. Meta Tags: Die Keywords packt man am besten in den Titel und die Meta Description der Website.

Das kann zum Beispiel so aussehen:

<title>Bäckerei XYZ: Die besten Backwaren Deutschlands</title>
<meta name="description" 
  content="Die Bäckerei XYZ backt die besten Brote und Brötchen..."
></meta>

Um noch besser gefunden zu werden, sollten die Keywords auch in Überschriften und Texten der ersten 150 Wörter einer Website auftauchen.

Für eine weitere Auswertung ist die Google Search Console zu empfehlen, wo das allgemeine Seitenranking überprüft werden kann. Zudem können hier Keywords, unter denen die Seite aktuell rankt, angezeigt und Webseiten Fehler aufgespürt werden. Insbesondere bei den Keywords ändert sich der Algorithmus der Suchmaschinen ständig, sodass man auch hier kontinuierlich dranbleiben und die Website pflegen muss.

Alles in allem sind wir mit unserem Check zufrieden und haben noch einiges an Optimierungspotenzial entdeckt, was wir noch besser machen können.

Vorbereitung Waterkant Hackathon (Natural language to Query)

  • Team: Lennart, Kevin
  • Ziel: Komplexität evaluieren und Daten generieren

Im Rahmen des Hackathon XV haben wir uns mit der Übersetzung von natürlicher Sprache, in unserem Fall zunächst Englisch, in Query-Languages wie z.B. SQL mithilfe von Machine Learning beschäftigt. Eine grundlegende Herausforderung hierbei ist zunächst die Generierung von Daten, durch die dann z.B. ein neuronales Netz lernen kann, dass eine Query SELECT COUNT(*) FROM customers durch eine Eingabe “Wie viele Kunden haben wir?” abgefeuert werden soll.

Mögliche Anwendungen reichen hier von einem Chatbot, welcher einem Fragen über seine Daten beantwortet, bis hin zu Alexa-Skills, mit denen man Datenbanken anlegen kann. Allgemein formuliert eignet sich so ein Modell also “Nicht-Programmierern” den Umgang mit Daten zu vereinfachen.

Um hier einen ersten Schritt zu machen, haben wir einen englischen Datensatz der Größe L aus dieser Datenbank mit Paraphrasen genutzt. Diese lässt sich zum Beispiel mit einem Tupel von Wörtern ('the','address') abfragen und liefert daraufhin die folgende Ausgabe:

{('mailing', 'address'),
 ('the', 'following', 'address'),
 ('the', 'following', 'addresses'),
 ('the', 'following', 'location'),
 ('the', 'following', 'web', 'site')}

Durch diese Daten haben wir dann zum Beispiel allein aus dem Satz “show me the phone number of employees” 22680 Varianten erstellen können.

Bessere Beispiele lauteten wie folgt:

  • “demonstrate me the telephone number of colleagues”
  • “display me the cellphone number of hired”

Natürlich waren auch viele sinnlose Kombinationen von Paraphrasen mit dabei:

  • “indicate me the telephony of officials”
  • “emerges me the the phone-based of mercenaries”

Die Datenbank an Paraphrasierungen lässt sich sowohl mit einzelnen Worten als auch mit Phrasen abfragen. Da wir jedoch noch keine gute Strategie entwickeln konnten, wie wir unseren Eingabe-Satz in Phrasen aufteilen, um dann z.B. die Situation zu behandeln, dass für eine zu lange Phrase keine Ausgabe vorhanden ist, haben wir uns zunächst für den naiven Ansatz entschieden, nur einzelne Wörter in der Datenbank nachzuschlagen und dann alle möglichen Kombinationen aus den Ergebnissen zu erstellen. Hierbei haben wir Füllwörter wie zum Beispiel “me” oder “the” ausgelassen und beim Zusammenfügen der Kombinationen einfach übernommen.

Des Weiteren benötigen wir eine gute Strategie, um die Position von Variablen in Sätzen zu erkennen und nicht mit zu “übersetzen”, wenn die Abfrage eine Bedingung enthält wie “Alle Mitarbeiter, die nächsten Monat Geburtstag haben”.

Vom Trainieren eines neuronalen Netzes sind wir zum momentanen Zeitpunkt also noch einige Schritte entfernt, konnten uns jedoch einen guten ersten Überblick in diesem doch eher komplizierten Teilbereich des Machine Learnings machen.

Teilen @
Lust auf was Neues?
Aktuelle Stellenangebote >>>