Moteur Wiki Bonsai Family: Résultats 2019

Au début de l'année dernière, j'ai parlé du projet Bonsai , un moteur pour créer un wiki familial et un album photo open source. Depuis lors, le projet évolue régulièrement. Au cours de l'année, plusieurs fonctionnalités ont été apportées, grâce auxquelles le moteur est désormais beaucoup plus facile à essayer par vous-même et plus agréable à utiliser plus tard.



Sous la coupe - détails, plans pour l'avenir et un peu de générosité.

Image Docker


L'installation de la première version de Bonsai a été un processus très fastidieux en raison du grand nombre de dépendances: elle nécessite le .NET Core, PostgreSQL, le runtime Elasticsearch (qui signifie Java Runtime et un plug-in pour prendre en charge la morphologie russe), l'assemblage a également besoin du SDK .NET Core et de NodeJS pour construire le front ... Même dans le contexte de la complexité globale du développement web moderne, ce n'était une tâche que pour les personnes déterminées et beaucoup d'utilisateurs initialement intéressés l'ont jeté à mi-chemin.

Arrête ça!

Maintenant, Bonsai monte en trois actions élémentaires par minute:

  1. Téléchargez docker-compose.yml .
  2. Saisissez @@YOUR_EMAIL@@ et @@YOUR_IP@@ valeurs requises.
  3. Exécutez docker-compose up -d

Autorisation de mot de passe


Dans la première version, un seul type d'autorisation était utilisé - via les réseaux sociaux. Il y avait plusieurs raisons à cela:

  • Connectez-vous en un clic
  • Prêt à l'emploi, 2FA, récupération de mot de passe et autres contrôles de sécurité
  • Il suffit de maintenir dans le code bonsaï
  • Vous pouvez obtenir certaines des données du profil lors de l'inscription

Malheureusement, cela a causé un certain nombre de problèmes:

  • Étape extrêmement délicate lors de l'installation initiale
  • Vous ne pouvez pas donner accès à une personne qui n'a pas de réseaux sociaux (par exemple, un parent âgé)
  • Pour certaines données (sexe, âge) les réseaux sociaux nécessitent une vérification manuelle de votre application

Par conséquent, un deuxième type d'autorisation a été ajouté - par identifiant et mot de passe, qui est activé par défaut.

Vous pouvez maintenant ignorer l'étape de création d'une demande d'autorisation sur le réseau social. Après le démarrage, Bonsai proposera d'enregistrer un compte administrateur, où vous devrez saisir le mot de passe souhaité - et cela fonctionnera.


Vous pouvez créer un nouveau compte avec un mot de passe dans le panneau d'administration:


Il y a plusieurs choses à garder à l'esprit lors de l'utilisation de l'authentification par mot de passe:

  • L'utilisateur ne peut pas restaurer son propre mot de passe - seul l'administrateur peut le faire. S'il n'y a qu'un seul administrateur, il est autorisé par mot de passe et a oublié ce mot de passe - vous devrez utiliser un script de réinitialisation, qui doit être exécuté directement dans la base de données.
  • Après 10 tentatives infructueuses d'affilée, le compte est également bloqué. Pour déverrouiller, vous devez changer le mot de passe. En plus de vos propres actions, les robots d'exploration malveillants peuvent bloquer automatiquement votre mot de passe.
  • Un compte ne peut avoir qu'un seul type d'autorisation à la fois. Tout d'abord, vous ne pouvez pas créer un compte avec un mot de passe, puis y ajouter une connexion supplémentaire via les réseaux sociaux ou vous ne pouvez pas du tout le remplacer par des moyens réguliers - uniquement par des manipulations manuelles avec la base de données.

Rendu d'arbre généalogique côté serveur


Construire automatiquement des arbres généalogiques est l'une des caractéristiques les plus importantes de Bonsai, mais aussi la plus délicate.


Comme je l'ai dit dans un article précédent, organiser automatiquement les blocs de manière optimale est une tâche très difficile. Les gens écrivent des articles scientifiques à ce sujet, investissent des milliers d'heures humaines et vendent des composants standard pour de l'argent fou. Heureusement, j'ai réussi à trouver une bibliothèque gratuite ELK.js , qui donne des résultats assez décents.

Le problème avec ELK.js était qu'il fonctionne pour une bibliothèque cliente depuis très longtemps. Vous pouvez ajuster le résultat via la propriété de thoroughness - plus la valeur est élevée, meilleure est la planification, mais plus elle prend du temps. Pour rendre un arbre compréhensible pour 50 personnes, j'ai dû attendre environ 30 à 40 secondes pour que chaque page s'ouvre avec un arbre!

Désormais, le rendu ne se produit pas sur le client à chaque ouverture, mais sur le serveur à chaque modification. La première fois après la mise à jour, le contenu devra attendre comme avant, mais les pages s'ouvriront instantanément.

D'un point de vue technique, le transfert des calculs du client vers le serveur a provoqué plusieurs difficultés. Comment exécuter du code JS dans .NET Core? Ma première pensée a été d'utiliser la merveilleuse bibliothèque Javascript Engine Switcher écrite par Taritsyn . Hélas, cela ne convenait pas à ma tâche: aucun des moteurs existants ne pouvait digérer ELK.js. Au lieu de cela, le mécanisme NodeServices été utilisé, dans lequel tout fonctionnait immédiatement comme une horloge.

Oui, maintenant Bonsai nécessite deux temps d'exécution, mais grâce au docker, ce n'est pas si effrayant. Oui, NodeServices va se retirer dans l'une des prochaines versions d'ASP.NET Core, mais la communauté va le prendre en charge. Et où aller? Le développement Web moderne consiste entièrement en de tels compromis. L'essentiel est que cela donne un résultat.

Télécharger les documents


Désormais, en plus des photos et des vidéos, Bonsai prend en charge le téléchargement de fichiers PDF. Cela peut être pratique pour les documents - en particulier, les certificats de naissance, de mariage ou de décès.

Il était initialement prévu de faire de petits aperçus pour les documents. Hélas, cette idée s'est écrasée dans les dures falaises de la réalité: aucune des bibliothèques existantes ne correspondait à un critère ou à un autre. Ont été examinés:

  • iText7 - incompatibilité de licence avec le MIT
  • PDF.js - un grand nombre de dépendances, le conteneur a doublé
  • Les wrappers GhostScript posent également des problèmes de licence, et presque tous sont abandonnés et ne prennent pas en charge .NET Core

Si j'ai raté quelque chose et que le Saint Graal de la conversion de PDF en image existe toujours - veuillez écrire dans les commentaires!

Nouvelles sur le principal


Sur la page principale sous le calendrier, les dernières pages modifiées et les fichiers multimédias téléchargés sont maintenant affichés:



Clause de non-responsabilité obligatoire


Le projet est à but non lucratif et est fourni «tel quel». Il y a des bugs dedans. Une fois, grâce à une surveillance banale du maître, un code a glissé qui a presque effacé la base de données. Par conséquent, si vous appréciez les données que vous entrez dans Bonsai, puis périodiquement, et surtout à chaque mise à jour:

Faites des sauvegardes.
FAITES LA SAUVEGARDE!
D E L A T E B E K A P S! ! !

Et ensuite?


Il y a encore beaucoup de tâches intéressantes que j'aimerais faire au cours de la prochaine année:

  • Classement des pages : une seule métrique automatique qui vous permet de trier les pages selon l'exhaustivité de leurs données. Il vous permettra de répondre facilement aux questions "quelles pages peuvent être affichées en standard" et, inversement, "sur lesquelles il faut encore travailler".
  • Refonte de la page principale du panneau d'administration : les modifications seront affichées sous une forme similaire au "fil d'actualité" des réseaux sociaux.
  • Tâches techniques : transition vers .NET Core 3, refactoring divers

Il y a aussi des tâches que j'aimerais faire, mais je n'ai pas assez de temps et de compétences pour elles. J'espère pour l'aide de la communauté - sinon gratuitement, du moins pour une récompense symbolique. Si vous avez confiance en vos capacités et souhaitez participer - écrivez-moi par télégrammes et discutez-en.

  • Composant de calendrier : standard est utilisé, mais il est un peu tordu et ne prend pas en charge les valeurs inexactes ( 2019.??.?? ): vous devez en écrire un à part entière.
  • Amélioration de la recherche: la recherche dans ElasticSearch donne parfois des résultats étranges . Très probablement, je ne sais tout simplement pas comment utiliser l'élastique - vous devez réécrire les configurations infernales avec une connaissance de la question.
  • Reconnaissance faciale : il serait bien de reconnaître automatiquement les visages sur les photos téléchargées et de les accrocher aux pages. Je n'ai pas encore trouvé de solutions sur .NET Core qui soient à la fois ouvertes et donnant des résultats sensés.

Le référentiel du projet est disponible sur:

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

Si vous utilisez Bonsai - veuillez nous en parler dans les commentaires. Je serai heureux des critiques et des suggestions.

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


All Articles