Bonsai Family Wiki Engine: 2019 Ergebnisse

Anfang letzten Jahres sprach ich über das Bonsai- Projekt, eine Engine zum Erstellen eines Familien-Wikis und eines Open-Source-Fotoalbums. Seitdem hat sich das Projekt stetig weiterentwickelt. Im Laufe des Jahres wurden mehrere Funktionen entwickelt, dank derer der Motor jetzt viel einfacher selbst zu testen und später angenehmer zu bedienen ist.



Unter den Schnittdetails Pläne für die Zukunft und ein wenig Kopfgeld.

Docker-Bild


Die Installation der ersten Version von Bonsai war aufgrund der Vielzahl von Abhängigkeiten sehr mühsam: Sie erfordert die Laufzeit von .NET Core, PostgreSQL und Elasticsearch (dh Java Runtime und ein Plug-in zur Unterstützung der russischen Morphologie), die Assembly benötigt außerdem das .NET Core SDK und NodeJS Die Front zu bauen ... Selbst vor dem Hintergrund der globalen Komplexität der modernen Webentwicklung war es eine Aufgabe nur für die willensstarken und viele anfangs interessierte Benutzer warf es auf die Hälfte.

Hör auf!

Jetzt steigt Bonsai in drei Elementaraktionen pro Minute auf:

  1. Laden Sie docker-compose.yml herunter .
  2. Geben @@YOUR_EMAIL@@ @@YOUR_IP@@ erforderlichen Werte @@YOUR_EMAIL@@ und @@YOUR_IP@@ .
  3. Führen Sie docker-compose up -d

Passwortautorisierung


In der ersten Version wurde nur eine Art von Autorisierung verwendet - über soziale Netzwerke. Dafür gab es viele Gründe:

  • Melden Sie sich mit einem Klick an
  • Standardmäßig erhalten Sie 2FA, Passwortwiederherstellung und andere Sicherheitsprüfungen
  • Einfach im Bonsai-Code pflegen
  • Einige der Daten können Sie bei der Registrierung aus dem Profil abrufen

Leider verursachte dies eine Reihe von Problemen:

  • Besonders kniffliger Schritt bei der Erstinstallation
  • Sie können einer Person ohne soziale Netzwerke (z. B. einem älteren Verwandten) keinen Zugriff gewähren.
  • Für einige Daten (Geschlecht, Alter) erfordern soziale Netzwerke eine manuelle Überprüfung Ihrer Bewerbung

Aus diesem Grund wurde eine zweite Art der Autorisierung hinzugefügt - per Login und Passwort, die standardmäßig aktiviert ist.

Jetzt können Sie den Schritt zum Erstellen eines Autorisierungsantrags im sozialen Netzwerk überspringen. Nach dem Start bietet Bonsai die Registrierung eines Administratorkontos an, in dem Sie das gewünschte Passwort eingeben müssen - und das funktioniert.


Sie können im Admin-Bereich ein neues Konto mit einem Kennwort erstellen:


Bei der Verwendung der Kennwortauthentifizierung sind verschiedene Dinge zu beachten:

  • Der Benutzer kann sein eigenes Passwort nicht wiederherstellen - dies kann nur der Administrator. Wenn es nur einen Administrator gibt, wird er mit einem Kennwort autorisiert und hat dieses Kennwort vergessen. Zum Zurücksetzen müssen Sie ein Skript verwenden , das direkt in der Datenbank ausgeführt werden muss.
  • Nach 10 erfolglosen Versuchen hintereinander wird das Konto ebenfalls gesperrt. Zum Entsperren müssen Sie das Passwort ändern. Zusätzlich zu Ihren eigenen Aktionen können böswillige Crawler-Bots Ihr Passwort automatisch blockieren.
  • Ein Konto kann jeweils nur eine Berechtigungsart haben. Sie können zunächst kein Konto mit einem Passwort erstellen und dieses dann über soziale Netzwerke mit einem zusätzlichen Login versehen oder es mit normalen Mitteln überhaupt nicht ersetzen - nur durch manuelle Manipulationen mit der Datenbank.

Server-seitiges Family Tree Rendering


Das automatische Erstellen von Stammbäumen ist eines der wichtigsten Merkmale von Bonsai, aber auch das schwierigste.


Wie bereits in einem früheren Artikel erwähnt, ist es eine sehr schwierige Aufgabe, Blöcke automatisch optimal anzuordnen. Die Leute schreiben wissenschaftliche Artikel darüber, investieren Tausende von Arbeitsstunden und verkaufen handelsübliche Komponenten für verrücktes Geld. Zum Glück konnte ich eine kostenlose Bibliothek ELK.js finden , die recht anständige Ergebnisse liefert.

Das Problem mit ELK.js war, dass es sehr lange für eine Client-Bibliothek funktioniert. Sie können das Ergebnis über die thoroughness anpassen. thoroughness größer der Wert, desto besser der Zeitplan, desto länger dauert er jedoch. Um einen verständlichen Baum für 50 Personen zu erstellen, musste ich 30-40 Sekunden auf jede Seite warten, die mit einem Baum geöffnet wurde!

Das Rendern erfolgt nun nicht mehr bei jedem Öffnen des Clients, sondern bei jeder Änderung auf dem Server. Das erste Mal nach dem Aktualisieren des Inhalts muss wie zuvor gewartet werden, aber dann werden die Seiten sofort geöffnet.

Aus technischer Sicht verursachte die Übertragung von Berechnungen vom Client zum Server mehrere Schwierigkeiten. Wie führe ich JS-Code in .NET Core aus? Mein erster Gedanke war, die wunderbare Javascript Engine Switcher- Bibliothek von Taritsyn zu verwenden . Leider passte es nicht zu meiner Aufgabe: Keiner der vorhandenen Motoren konnte ELK.js verdauen. Stattdessen wurde der eingebaute NodeServices Mechanismus verwendet, bei dem sofort alles wie eine Uhr funktionierte.

Ja, jetzt benötigt Bonsai zwei Laufzeiten, aber dank des Dockers ist es nicht so beängstigend. Ja, NodeServices wird in einer der nächsten Versionen von ASP.NET Core in den Ruhestand versetzt, aber die Community wird dies unterstützen. Und wohin soll es gehen? Die moderne Webentwicklung besteht ausschließlich aus solchen Kompromissen. Die Hauptsache ist, dass dies ein Ergebnis ergibt.

Dokumente herunterladen


Bonsai unterstützt jetzt neben Fotos und Videos auch den Download von PDF-Dateien. Dies kann für Dokumente nützlich sein - insbesondere für Geburts-, Heirats- oder Sterbeurkunden.

Ursprünglich sollte eine kleine Vorschau für Dokumente erstellt werden. Leider stieß diese Idee auf die harten Klippen der Realität: Keine der vorhandenen Bibliotheken entsprach dem einen oder anderen Kriterium. Wurden untersucht:

  • iText7 - Lizenzinkompatibilität mit MIT
  • PDF.js - eine Vielzahl von Abhängigkeiten, der Container verdoppelt
  • GhostScript-Wrapper sind ebenfalls Lizenzprobleme, und fast alle werden aufgegeben und unterstützen .NET Core nicht

Wenn ich etwas verpasst habe und der heilige Gral, PDF in Bild umzuwandeln, immer noch da ist - bitte schreibe in die Kommentare!

Nachrichten auf der Hauptleitung


Auf der Hauptseite unter dem Kalender werden jetzt die zuletzt geänderten Seiten und heruntergeladenen Mediendateien angezeigt:



Obligatorischer Haftungsausschluss


Das Projekt ist gemeinnützig und wird „wie besehen“ zur Verfügung gestellt. Es sind Fehler drin. Einmal, durch ein banales Versehen im Master, verschwand ein Code, der die Datenbank beinahe löschte. Wenn Sie die Daten, die Sie in Bonsai eingeben, als wertvoll einstufen, dann in regelmäßigen Abständen und insbesondere bei jedem Update:

Machen Sie Backups.
BACKUP MACHEN!
D E L A T E B E K A P S! ! !

Was weiter?


Es gibt noch viele interessante Aufgaben, die ich im nächsten Jahr erledigen möchte:

  • Seitenrang : Eine einzelne automatische Metrik, mit der Sie Seiten nach der Vollständigkeit ihrer Daten sortieren können. Auf diese Weise können Sie auf einfache Weise die Fragen beantworten, "welche Seiten als Standard angezeigt werden können" und umgekehrt "welche noch bearbeitet werden müssen".
  • Neugestaltung der Hauptseite des Admin-Panels : Die Änderungen werden in ähnlicher Form wie im "News-Feed" in sozialen Netzwerken angezeigt.
  • Technische Aufgaben : Umstieg auf .NET Core 3, diverse Refactoring

Es gibt auch Aufgaben, die ich gerne erledigen würde, für die ich jedoch nicht genügend Zeit und Kompetenzen habe. Ich hoffe auf die Hilfe der Community - wenn nicht umsonst, dann zumindest auf eine symbolische Belohnung. Wenn Sie sich Ihrer Fähigkeiten sicher sind und daran teilnehmen möchten, schreiben Sie mir bitte in einem Telegramm und diskutieren Sie.

  • Kalenderkomponente : Standard wird verwendet, ist aber ein wenig schief und unterstützt keine ungenauen Werte ( 2019.??.?? ): Sie müssen eine vollwertige schreiben.
  • Suchverbesserung : Die Suche in ElasticSearch führt manchmal zu seltsamen Ergebnissen. Höchstwahrscheinlich weiß ich einfach nicht, wie man das Gummiband benutzt - Sie müssen die infernalischen Konfigurationen mit Kenntnis der Materie umschreiben.
  • Gesichtserkennung : Es wäre schön, Gesichter auf hochgeladenen Fotos automatisch zu erkennen und auf Seiten zu fangen. Ich habe noch keine Lösungen für .NET Core gefunden, die sowohl offen als auch vernünftig sind.

Das Projektarchiv finden Sie unter:

https://github.com/impworks/bonsai .

Wenn Sie Bonsai verwenden, teilen Sie uns dies bitte in den Kommentaren mit. Über Kritik und Anregungen würde ich mich freuen.

Source: https://habr.com/ru/post/de481600/


All Articles