GithubHelp home page GithubHelp logo

Technische Konzeption about deine-idee HOT 3 OPEN

MethodJules avatar MethodJules commented on August 15, 2024
Technische Konzeption

from deine-idee.

Comments (3)

johannesdi avatar johannesdi commented on August 15, 2024 1

Möglicherweise interessant als "Tech Ausblick"

  • Chaträume mittels Matrix und/oder XMPP
  • Ideen und Projekte mittels Matrix und/oder ActivityPub föderieren

Matrix ist aktuell im Feldtest bei der Bundeswehr und wird flächendeckend von der französischen Regierung verwendet. Praktisch handelt es sich bei Matrix um eine eventually consistent distributed json object database.

ActivityPub oder XMPP wären alternativen als mögliche Föderationstechnik, aber weit ungeeigneter.

from deine-idee.

MethodJules avatar MethodJules commented on August 15, 2024
  • Rust
  • GraphQL
  • React JS/ TypeScript (Entwicklerzufriendheit ist höher wegen IDE Autocompletion etc.) (Frontend)
  • Postgres DB
  • Kubernetes

from deine-idee.

MethodJules avatar MethodJules commented on August 15, 2024

Um das Projekt auf technischer Ebene skalierbar umzusetzen wird auf folgende Technologien gesetzt:

  • Rust
  • GraphQL
  • React JS inkl. TypeScript
  • Postgres DB
  • Kubernetes

WebUI

React JS

Für die Gestaltung der Benutzeroberfläche wird React JS benutzt. React besticht durch seine große Entwicklergemeinde und darauf aufbauend durch das Vorhandensein zahlreicher Komponenten-Bibliotheken, die frei verwendet werden können und nicht noch entwickelt werden müssen. React unterstützt moderne Programmierparadigmen im Frontend und ist für seine gute Performance bekannt. Dadurch wird die User Experience gesteigert und die Hürde zur Akzeptanz der Plattform aus UX-Sicht vermindert. Ebenfalls eignet sich React JS für die schnelle Entwicklung von Prototypen als auch für die Umsetzung von unternehmenskritischen Anwendungen mit langjähriger Laufzeit. Dadurch kann ein schnelles iteratives Vorgehen, bei welchem in jeder Iteration Feedback/Evaluationsschleifen integriert sind, gut umgesetzt werden.
Für die skalierte Entwicklung wird React JS mit TypeScript kombiniert, da dadurch eine eindeutige Typenverwendung gewährleistet wird. Gleichzeitig erfreut sich TypeScript in Entwicklerkreisen größer Beliebtheit, da die Integration in die eigene Entwicklungsumgebung (IDE) einfach ist und dadurch spezielle Features solcher IDEs wie bspw. die Autovervollständigung und Typenprüfung eingeschaltet werden können. Dies ermöglicht es auf eine große Entwicklergemeinde zurückzugreifen.

Mobil

Für die Anbindung einer mobilen Applikation (App) wird ReactNative genutzt. ReactNative ist ein Framework welches die hybride Programmierung von Apps ermöglicht. Damit müssen native Apps nicht für jedes unterschiedliche Smartphone OS wie iOS oder Android extra entwickelt werden. Für die Verwendung von ReactNative spricht des Weiteren die Wiederverwendung vieler Komponenten aus der WebUI, welche mit React entwickelt wird. Hier ergeben sich automatisch Synergie- und Effizienzeffekte, da bereits entwickelte Komponente fast 1:1 auf den mobilen Kontext übertragbar sind und somit der Entwicklungsaufwand minimiert wird.

Messenger

Um die Kommunikation zwischen den Teilnehmenden durch einen Echtzeit-Messenger zu unterstützen wird Matrix als Kommunikationsprotokoll verwendet. Dadurch kann bspw. das Chatclient-Programm Riot an die Plattform angebunden werden. Durch eine End-zu-Ende-Verschlüsselung ist gewährleistet das die Kommunikation zwischen den Teilnehmenden sicher abläuft.

Backend/API

Das Backend besteht bei der entwickelten Architektur aus verschiedenen Komponenten die im folgenden aufgeführt und erläuter werden.

Rust

Rust ist eine innovative Programmiersprache, die vor allem durch Ihre Performance und sehr effizienten Speicherverwaltung, da hier keine klassische Speicherbereinigung stattfindet, hervorsticht. Ein weiterer Vorteil von Rust ist, dass eine nebenläufige Programmierung sehr einfach zu gestalten ist. Die Sprache ist darauf ausgelegt gängige Fehlerquellen zu vermeiden und bietet dadurch von Grund auf einen hohe Codequalität und Entwicklerfreundlichkeit.
Auf Grund der oben dargestellten Vorteile wird die Implementierung des Backends und seiner Business Logik in Rust programmiert werden. Nachteilig an Rust kann die relativ hohe Einstieghürde sein, da die Sprache nicht einfach zu lernen ist und vor allem als Systemprogrammierungssprache und nicht als Webapplikationssprache verwendet wird.

GraphQL

GraphQL ist eine Abfragesprache bei der eine eigene Mittelschicht zur Verfügung gestellt wird. Dadurch können (Frontend-)Entwickler ihre eigenen Schemata basierend auf dem vom Backend bereitgestellten Schemata definieren und dieses Abfragen. Dadurch werden die Abfragekosten (Anfragen von Ressourcen, Verarbeitung des Ergebnisses, Auffinden neuer abhängiger Ressourcen, Abfragen neuer abhängiger Ressourcen) gemindert. Gleichzeitig bietet GraphQL ein eigenes Typensystem, welches in Bezug auf die im Backend verwendete Sprache Rust durch die Bibliothek Juniper komfortabel bereitgestellt wird. Dadurch können Typendefinitionen eins zu eins vom Backend bis zum Frontend durchgereicht werden und es kann auf der Entwicklungsseite, egal ob Frontend oder Backend, keine Unsicherheit aufkommen. Die Einfachheit die sich hier vor allem auf der Frontendseite ergibt muss allerdings im Backend abgefangen werden, damit es nicht zu Performanceproblemen kommt.

Postgres DB

Für die Datenhaltung wird die Open Source Datenbank PostgreSQL verwendet. Diese bietet zum einen eine Server-Client-Architektur und zum anderen können neben dem Ausführen von Mengenoperationen auf einen oder mehreren Tabellen Abfragen mit hoher Komplexität (Subselects, Outerjoins etc.) durchgeführt werden. Des Weiteren besticht PostgreSQL durch Security-Features die eine hohe Sicherheit garantieren.

Container und Orchestration

Container ermöglichen es Software-Komponenten ohne das Bereitstellen von virtuellen Machinen und den damit verbundenem Overhead auszuführen. Warum ein ganzes Betriebssystem in einer VM installieren wenn es doch nur um bestimmte spezifische Funktionen geht?

  • Docker
  • Podman
  • Nomad

Kubernetes und Nomad

Für die technische Skalierung werden die einzelnen technischen oben aufgeführten Komponenten in Containern ausgeführt und mit dem Orchestrierungstool Kubernetes verwaltet werden. Die einzelnen Komponten kommunizieren dann über Microservices miteinander. Dadurch wird zum einen schon bei der lokalen Entwicklung die technische Skalierung mitgedacht und getestet und zum anderen können mit diesem Architekturaufbau zukünfigt entwickelte Komponenten einfach integriert werden.

Machine Learning Integration

Auf der Plattform werden verschiedene Ideen gesammelt. Diese müssen für eine bessere Auffindbarkeit und damit auch Benutzerfreundlichkeit Verschlagwortet werden. Die Verschlagwortung oder das Tagging kann auf drei Arten geschehen. Erstens kann ein Kategoriensystem bereitgestellt werden (Taxonomie), zweitens kann ein Kategoriensystem frei Hand durch die Nutzer der Plattform entstehen (Folksonomie) und drittens kann ein hybrider Ansatz genutzt werden in dem einerseits Kategorien vorgegeben werden, diese aber durch freie Tags angereichert werden.
Bei der ersten Variante ist der Vorteil, dass es ein eindeutiges Commitment auf die Semantik der Tags gibt. Nachteilig allerdings ist der Aufwand er im Vorfeld betrieben werden muss, um zu solch einer inhaltliche konsistenten Taxonomie zu kommen. Bei der zweiten Variante ist der Aufwand der Erstellung geringer, jedoch besteht hier das Problem der inhaltlichen Bedeutung eines Tags (Semantik) und auch die Schreibweise. Bei der dritten Variante ist der Vorteil, dass ein Kategoriensystem bereits besteht und auf dieses aufgebaut werden kann. Hier fließen die o.g. Vor- und Nachteile ein.
Daher wird zur Verbesserung der Benutzerfreundlichkeit und der Auffindbarkeit von relevanten Ideen für einen Nutzer eine Machine Learning Komponente integriert. Diese Komponente beinhaltet vor allem Python basierte Bibliotheken wie bspw. NLTK zur Natürlich-Sprachlichen-Verarbeitung (NLP) um z.B. die Suchergebnisse zu vervollständigen. Weiterhin können u.a. folgende Algorithmenklassen in der Plattform verwendet werden, um die User Experience zu steigern:

  1. Kollaboratives Filtern: Dadurch könnne Nutzerinteressen vorhergesagt werden und den Nutzenden können Ideen vorgeschlagen werden, die er oder sie vielleicht noch gar nicht im Blick hatte.
  2. Empfehlungssysteme: Dadurch können den Nutzenden Ideen auf Grund der bereits von Ihnen berarbeitenden Ideen vorgeschlagen werden.
  3. Topic Modelling: Dadurch können Themen die in den einzelnen Communities adressiert werden automatisch extrahiert werden und z.B. die Schlagwortsuche verbessern.

All diese Algorithmen stehen gemäß dem Open Source Gedanken frei zur Verfügung und können von der Gesellschaft verifiziert und ggf. angepasst werden.

Zusammenfassung

-mobile App
-weitere Devices (Alexa, GoogleAssitant, etc.)

Architektur_Ideenplattform

from deine-idee.

Related Issues (15)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.