352 views
 owned this note
# ERMS White Paper ![logo](https://im.kabi.tk:8448/_matrix/media/r0/download/im.kabi.tk/KdTkFvUBludSKkZNObUqUHhb =150x150) Language: EN / DE (translation into English in progress) Matrix-Room: #erms:matrix.anghenfil.de ERRMS presentation: https://md.kabi.tk/Q_CIAdorT8WAc5Uhef-VKQ?both Pad credentials: [Impressum/PrivacyPolice](https://kabi.tk/privacy-policy-impressum/) | [Abuse-Mail](mailto:abuse@kabi.tk) | [Admin-Mail](mailto:hello@kabi.tk) | Service & Hosting by [KABItk](https://kabi.tk) ---- #### Telephone Conference / Online Meeting [Click here to join](https://meeting.kabi.tk/ERMSDevelopment). We'll announce time and dates in the Matrix-room. You can use the conference system any time. ---- #### How can I edit this document? The pad uses **MarkDown** for text styling. The editor also shows buttons for text styles, so you don't necessarily need to learn markdown; yet if you want, have a look [here](https://commonmark.org/help/). ---- ## Official Resources | Resource | URL | content | responsible maintainer | notes | -------- | -------- | -------- | -------- | -------- | | Matrix | #errms:matrix.anghenfil.de | Communication plattform, use any Matrix client (e.g. Riot) | anghenfil | | | Domain | errms.dev | Domain for development | Tim | | Website (available Monday Jan/13th) | [www.errms.dev](https://errms.dev) | Overview/Project description | Tobi | | Pad | https://md.kabi.tk/s3kQM-ibQMGkSNdoRBI22Q | This pad | Tobi | Pad integrated in the PM tool | | Git-Server | [code.errms.dev](https://code.errms.dev/) | Git server for active development | anghenfil | Fallback address: https://git.anghenfil.de/ERRMS | Buildserver | [ci.anghenfil.de](https://ci.anghenfil.de) | Build server, automatically builds on new commits | anghenfil | Use user guest without password or request account | Project management | [pm.errms.dev](https://pm.errms.dev/) | Kanban Board, development tools | Tim | ---- ## Contributors | Name / Contact Details | Role | Weekly Contribution | Domain Knowledge | Development Knowledge | Development Languages / Skills | | -------- | -------- | -------- | -------- | -------- | -------- | ------- | | Tim | Developer | 4 Hours | 1 | 8 | Node, PHP, Python, C# | | Tobi [✉️](mailto:hello@kabi.tk) [💬](sms://+4915256748424) [🐘](https://social.kabi.tk/@tobi) | PM / PR | 4 Hours | 4 | 3 | Server Infrastructure administration, PHP, SQL, Python, HTML, CSS, PM (ScrumMaster, ScrumProductOwner, Prince II)| | anghenfil [✉️](mailto:ares@anghenfil.de) | Main Developer/Maintainer| 20 Hours | 8 | 7 | Rust, PHP, Java | | ChaosRambo | Developer | 8 Hours, from march on | 8 | 7 | Python, PHP | | fin-ger (Fin Christensen) | Developer | 10 hours, from April on | 0 | 10 | Rust | |fotojunkie|Developer|1-4 Depends on family and so on|0|6|Since i just developed for a Win. Desktopclient yet i have to improve massivly or learn new stuff. Some small web experiences in Python, PHP, JS, CSS, SQL| | Farrow |Developer| 3h | 1 | 8 | Rust, Scala, Java, tiny bit of HTML+CSS | | split |Developer| 6h | 1 | 6 | Python3, PHP, Javascript + HTML/CSS, C | * Name: What you want to be called * Weekly Contribution: The time per week you can contribute to the project * Domain Knowledge: Your knowledge on the given Domain: * 1: I know that there are fire fighters/hios * 10: I know everything there is to know * Development Knowledge: How you would rate your development skills * Programming Languages: State in what languages you would want to see this application. Order the languages in the priority you want to develop ---- ## White Paper Keywords * open source web-based plattform for fire departments, humanitarian aid organisations (e.g. red cross) and similar organisations * AGPLv3 license * modular software * focus on data privacy + protection (GDPR conform!) * strong and precise permission system * multilingual, easy to translate software (fluent?) * focus on strong API for integration * ability to export informations (e.g. PDF/csv) * members should be able to login themself and correct/update own informations ### Modules * dashboard * membership administration * core data * communication details (email addresses, phone numbers, etc.) * skills/qualifications * hours worked/overview operations * edit history: member shoud see who edited which data * operation administration * add planned operations (e.g. "Sanitätsdiensteinsätze", "Einsatzdienste") * members can enter operation * match members, resources, cars with operations * add finished operations afterwards (e.g. unplanned fire department operations) * resource administration * manage stock items, match items with members * manage vehicles (e.g. cars, bikes, etc.) * administration * permission system * setup groups & panels (* Alarmdisplay * Bildschirm in jeder Fahrzeughalle * Zeigt bei alarmierten Fahrzeugen auf einem Bildschirm Weg zur Einsatzstelle, Hydranten etc. auf OSM?, Einsatzstichwort, Wer alles Alarmiert ist. * Anpassung auf lokale SER? * Alarmierung der Bildschirme durch Fax/Mail? (Die meisten IRL's haben die Möglichkeit parallel zur DME Alarmierung auch Mails/Faxe zu versenden) *Alarmdisplay und Führungstools ggf. lieber in externe Applikation auslagern (ggf. verbunden mit Alamierungssoftware?) und später verfolgen? Ich finde wir sollten uns zunächst auf Leitungsorganisation und ähnliches fokussieren. Aber gute Idee für später! ¨anghenfil* ) ---- ## Qualifications ### Germany ( DO NOT TRANSLATE) #### Medizinisch - Ersthelfer - Sanitäter/Sanitätsdienstlehrgang - Rettungshelfer - Rettungssanitäter - Rettungsassistent - Notfallsanitäter - Arzt - Notarzt - Gesundheits- und Krankenpfleger - Intensivpfleger #### Führung - Grundlehrgang Stabsarbeit (DRK) / Einführung in die Stabsarbeit (FW) - Verbandführer - Zugführer - Gruppenführer/Unterführer - Leiten und Führen von Gruppen (DRK) #### Feuerwehr (nach FwDV 2) - Truppmannausbildung I + II - Truppführer - Sprechfunker - Atemschutzgeräteträger - Maschinisten - Technische Hilfeleistung - ABC-Einsatz - ABC-Erkundung - ABC-Dekontamination P/G - Gerätewarte - Atemschutzgerätewarte - Leiter einer Feuerwehr - Ausbilder in der Feuerwehr - Führer im ABC-Einsatz ##### Feuerwehr Lokal - Aufteilung Verschiedene Gruppen - Gefahrgutgruppe - mit Unterschiedlichen Rechten - Gruppenführer - Stellv. Grupperführer - AGT Gruppe - Bei größeren Fw gibt. es verschiedene Gruppen mit Übungsdiensten #### Wasserrettung - Deutsches Rettungsschwimmabzeichen (Bronze/Silber/Gold) - Lehrschein Rettungsschwimmen #### DRK interne Lehrgänge - Helfergrundausbildung - Rotkreuz-Einführungsseminar - Betreuungsdienst - Technik und Sicherheit - Einsatz ---- ## Brainstorming Daten #### Mitglieder ##### Stammdaten - Vornamen - Nachname - Titel - Geburtsdatum - Geburtsort - Straße, H-Nr.Ort, PLZ - Nationalität - Geschlecht - Anrede - Personalnummer - Profilbild ##### Sonstige (freiwillige?) Daten - Lebensmitteleinschränkungen (vegetarisch/vegan/laktosefrei, usw.) - Führerscheine, Hofpappen - ggf. Kleidungsgrößen ##### Kommunikation - Email Adressen - Telefonnummern - Mitgliedschaften in Verteilern ##### Mitgliedschaften - Mitgliedschaften in Gremien/Gruppen - Gruppen, Gemeinschaften ##### technische Daten (abgeleitet aus User Stories) - Konto (Username, passwort, email, Benachrichtigungen) - Passwort - User - Rollen - last_login (secret token) - Kommunikationsdaten (sichtbarkeit, email) - templates ##### Termine - Termintyp (z.B. Lehrgang, Einsatz ...) - Beschreibung - Erinnerung - von (Zeitstempel) - bis (Zeitstempel) - angemeldete Benutzer für Termin ##### Qualifikation pro Konto - Typ der Qualifikation - wann erworben - wann auffrischung ##### Material ##### Fahrzeuge ##### Einsätze ---- ## User Stories #### Mitglieder - Als ein Mitglied möchte ich mich an einer Weboberfläche anmelden. - Als Mitglied möchte ich eine Datenauskunft nach DSGVO herunterladen. - Als Mitglied möchte ich mein eigenes Konto löschen. *Diskutieren* - Als Mitglied möchte ich meine eigenen Daten sehen. - Als Mitglied möchte ich grundlegende Daten ändern. - Als Mitglied möchte ich zusätzliche Kommunikationsmöglichkeiten (Email/Telefonnummern/etc.) mit bestimmter Sichtbarkeit hinzufügen. - Als Mitglied möchte ich mein eigenes Passwort ändern. - Als Mitglied möchte ich anstehende Termine in einem Kalender sehen. - Als Mitglied möchte ich anstehende Einsätze sehen. - Als Mitglied möchte ich mich für anstehende Einsätze melden. *oder abmelden?* - Als Mitglied möchte Benachrichtigungseinstellungen festlegen. - Als Mitglied möchte ich eine übersicht über die von mir geleisteten Stunden sehen. #### Leitungskräfte - Als Leitungskraft möchte ich Qualifikationen & Nachweise zu einem Mitglied eintragen & abspeichern. - Als Leitungskraft möchte ich Mitglieder komplett löschen. - Als Leitungskraft möchte ich neue Mitglieder anlegen. - Als Leitungskraft möchte ich ausgetretende Mitglieder deaktivieren. - Als Leitungskraft möchte ich Termine anlegen. - Als Leitungskraft möchte ich Mitglieder kontaktieren. - Als Leitungskraft möchte ich Gruppen kontaktieren. - Als Leitungskraft möchte ich Einsätze anlegen oder ändern. - Als Leitungskraft möchte ich Material verwalten. - Als Leitungskraft möchte ich Fahrzeuge verwalten. #### Führungskräfte - Als Führungskraft möchte ich auf von mir geführte Einsätze zugreifen können. - Als Führungskraft möchte ich Personal und Material für einen von mir geführten Einsatz einteilen. - Als Führungskraft möchte ich alle Einsatzkräfte benachrichtigen/kontaktieren. - Als Führungskraft möchte ich eine Übersicht/Liste aller Einsatzkräfte und ggf. Qualifikationen generieren #### Geschäftsstelle/Buchhaltung tbd #### Administratoren - Als Administrator möchte ich Gruppen anlegen und bearbeiten können. - Als Administrator möchte ich Rechte an Gruppen und Benutzer vergeben und entziehen. - Als Administrator möchte ich Schnittstellen anderer Software nutzen. - Als Administrator möchte ich Schnittstellen zu anderer Software nutzen. - Als Administrator möchte ich Datenauskünfte nach DSGVO erzeugen. - Als Adminsitrator möchte ich Templates (z.B. Kategorien, usw.) ändern und erzeugen. #### Entwickler - Als Entwickler möchte ich eigene Schnittstellen entwickeln. - Als Entwickler möchte ich die Anwendung einfach in eine andere Sprache übersetzen. ---- ## Wahl der Programmiersprache ### Kandidaten: #### Rust ##### Vorteile: * Sehr Effizient (hardwarenah, mit C++ vergleichbar) * Sicherer als die meisten Programmiersprachen (Bedingt strenge typisierung, memory- & thread safe, Ownership model) * Gut integrierbar mit anderen Sprachen * anghenfil hat bereits in Rust angefangen (Projektbasis also vorhanden): https://git.anghenfil.de/anghenfil/ERMS * Sehr guter Compiler (fängt viele Fehler von vornherein ab, man kann nicht so viel "quatsch" machen, andererseits "kämpft" man auch gerne mit dem Compiler (was gut ist!)) * moderne und aufstrebende Programmiersprache * von Mozilla entwickelt & verwendet, daher wohl zukunftssicher(ist das ein Argument im Vergleich zu PHP/Python/Go/Node?? Nein, aber soll untere Nachteile entkräften) * Viele libaries (crates.io), werden gut gepflegt * C-Code (z.B. libaries) nutzbar ##### Nachteile: * benötigt vollwertigen Server, z.B. Uberspace (siehe unten) * junges, nicht-abgehangenes Ökosystem * moderne und aufstrebende Programmiersprache * Dependency-Hell ähnlich Node * Wenige mögliche Contributors (wenige Leute schreiben Rust) * Instabile ABI????? * Kleine stdlib * Weak Async * Documentation(getting better at the moment) ##### Sonstige Punkte: * bringt eigene Webserverimplementierung mit #### PHP 7 ##### Vorteile * LEMP-Stack bekannt und bei vielen Hostern zu haben * Einfacher webspace reicht i.d.R. aus. (Allerdings wird es schwierig werden, sobald wir nur Emails oder SMS verschicken wollen!) * Viele mögliche Contributors, kann praktisch jeder, benutzt hat es auch praktisch jeder * Abgehangenes Tooling, fast alle großen und kleinen Firmen benutzen es * Für den Anwendungsfall entwickelte Sprache(Webinterface!) mit vielen Libraries für APIs * Viele, viele Libraries(Composer!) * Stabil; Läuft praktisch überall und die Syntax ändert sich nur marginal * Sehr einfach mit Datenbanken zu arbeiten * Entwicklungsgeschwindigkeit vermutlich sehr hoch, ähnlich Python ##### Nachteile * unbeliebte Programmiersprache bei Vollblutprogrammierern ("why not do everything in $coolnewlang") * Effizienz im Gegensatz zu hardware-nahen Programmiersprachen (C&Rust) * Häufig Sicherheitslücken, veraltete PHP-Versionen spuken mitunter Jahrzente im Web herum ##### Sonstige Punkte: * bringt eigene Webserverimplementierung mit #### Golang ##### Vorteile * statisch typisiert * kompiliert schnell * Package Repository(https://golang.org/pkg/) * JIT(https://github.com/nelhage/gojit) ##### Nachteile * Race conditions sind sehr einfach, das Parallelisierungskonzept hat viele Fallstricke * Eine stark unübersichtliche Sprache da explizite Imports fehlen * Das Package-System hat einige Quirks, die zu unerwarteten Fehlern führen (fehlende Konstanten, etc.) * Viel Boilerplate Code durch nicht-sprachintegriertes Error-Management * Langsame Ausführungsgeschwindigkeit für nativ-compilierende Sprache (ca. Java Performance), vmtl aber für dieses Projekt schnell genug und damit nicht relevant * Keine Generics! Das macht vieles der statischen Typisierung nichtig, da häufig auf den `interface{}{}` type zurückgegriffen wird, der nichts anderes als ein `void*` ist * Riesige Binärdateien (eine Applikation 20 - 60 MiB) ##### Sonstige Punkte: * bringt eigene Webserverimplementierung mit #### Node.js ##### Vorteile * auch bei vielen Hostern zu haben * Gutes package management durch npm ##### Nachteile * Sicherheitsprobleme * Effizienz im Gegensatz zu hardware-nahen Programmiersprachen (C/Rust/usw.) schlecht * Libraries werden oft nicht mehr weitergepflegt * Undurchdachte Sprache.... * Ohne Transpilierung schwer zu maintainen, da dynamisch typisiert (refactoring führt meist zu viele Regression Bugs) * Oft langsam, meist geschuldet durch fehlende Parallelisierung (global event queue based, linear serialisiert) * Laufzeitfehler sind hier auch ein Problem, kann aber durch komplexes Tooling behoben werden #### Python ##### Vorteile * Einfach zu erlernen * Moderne und schnelle Programmiersprache * Kann ebenfalls seinen eigenen webserver implementierung mitbringen * Hat sehr viele Standard Libraries * Sehr effizient * Dynamische Typisierung kann durch Type-Hinting "relativ" strenges typing ermöglichen seit 3.7 ##### Nachteile * umständliches Deployment, da z.B. kein statically linked binary deployed werden kann * Stark fehleranfällig durch Laufzeitfehler * Langsame Ausführungsgeschwindigkeit, wird nur schnell durch native Module (in C o.ä.) * Keine Parallelisierung möglich durch GIL (global interpreter lock) ##### Sonstige Punkte: * bringt eigene Webserverimplementierung mit * Flask, Django, Pyramide gibt viel Webfoo Libraries * Wir könnten das fertige "Produkt" als PIP Package veröffentlichen, was sowohl das Installieren als auch das Updaten vereinfacht ----