Bonsai Family Wiki Engine: resultados de 2019

No início do ano passado, falei sobre o projeto Bonsai , um mecanismo para criar um wiki de família e um álbum de fotos de código aberto. Desde então, o projeto vem se desenvolvendo constantemente. Ao longo do ano, vários recursos foram criados, graças aos quais o mecanismo agora é muito mais fácil de tentar e mais agradável de usar no futuro.



Sob o corte - detalhes, planos para o futuro e um pouco de recompensa.

Imagem do Docker


Instalar a primeira versão do Bonsai foi um processo muito tedioso devido ao grande número de dependências: requer o tempo de execução do .NET Core, PostgreSQL, Elasticsearch (que significa Java Runtime e um plug-in para dar suporte à morfologia russa), o assembly também precisa do .NET Core SDK e do NodeJS para construir a frente ... Mesmo no contexto da complexidade global do desenvolvimento moderno da web, era uma tarefa apenas para os obstinados e muitos usuários inicialmente interessados ​​que o jogavam no meio do caminho.

Pare com isso!

Agora, o bonsai cresce em três ações elementares por minuto:

  1. Faça o download do docker-compose.yml .
  2. Digite @@YOUR_EMAIL@@ e @@YOUR_IP@@ valores necessários.
  3. Executar docker-compose up -d

Autorização de senha


Na primeira versão, apenas um tipo de autorização foi usado - através das redes sociais. Havia muitas razões para isso:

  • Entre com um clique
  • Fora da caixa é fornecido 2FA, recuperação de senha e outras verificações de segurança
  • Basta manter no código dos bonsais
  • Você pode obter alguns dados do perfil durante o registro

Infelizmente, isso causou vários problemas:

  • Etapa complicada extra durante a instalação inicial
  • Você não pode dar acesso a uma pessoa que não possui redes sociais (por exemplo, um parente idoso)
  • Para alguns dados (sexo, idade), as redes sociais exigem a verificação manual da sua aplicação

Portanto, um segundo tipo de autorização foi adicionado - por login e senha, que é ativado por padrão.

Agora você pode pular a etapa de criação de um aplicativo de autorização na rede social. Após o início, o Bonsai oferecerá o registro de uma conta de administrador, onde você precisará digitar a senha desejada - e ela funcionará.


Você pode criar uma nova conta com uma senha no painel de administração:


Há várias coisas a serem lembradas ao usar a autenticação por senha:

  • O usuário não pode restaurar sua própria senha - apenas o administrador pode fazer isso. Se houver apenas um administrador, ele é autorizado por senha e esqueceu sua senha - você precisará usar um script para redefinir, que deve ser executado diretamente no banco de dados.
  • Após 10 tentativas sem êxito seguidas, a conta também é bloqueada. Para desbloquear, você deve alterar a senha. Além de suas próprias ações, os robôs de rastreadores maliciosos podem bloquear automaticamente sua senha.
  • Uma conta pode ter apenas um tipo de autorização por vez. Primeiro, você não pode criar uma conta com uma senha e, em seguida, adicionar um login adicional a ela através das redes sociais ou não pode substituí-lo por meios regulares - apenas através de manipulações manuais no banco de dados.

Renderização de árvore genealógica do lado do servidor


A construção automática de árvores genealógicas é uma das características mais importantes do bonsai, mas também a mais complicada.


Como eu disse em um artigo anterior, organizar automaticamente os blocos da maneira ideal é uma tarefa muito difícil. As pessoas escrevem artigos científicos sobre o assunto, investem milhares de horas humanas e vendem componentes prontos para uso por dinheiro louco. Felizmente, consegui encontrar uma biblioteca gratuita ELK.js , que fornece resultados bastante decentes.

O problema com o ELK.js é que ele funciona em uma biblioteca cliente por um período muito longo. Você pode ajustar o resultado através da propriedade de thoroughness - quanto maior o valor, melhor a programação, mas mais tempo leva. Para renderizar uma árvore compreensível para 50 pessoas, tive que esperar cerca de 30 a 40 segundos para cada página aberta com uma árvore!

Agora a renderização não ocorre no cliente toda vez que é aberta, mas no servidor toda vez que é alterada. A primeira vez após a atualização do conteúdo terá que esperar como antes, mas as páginas abrirão instantaneamente.

Do ponto de vista técnico, a transferência de cálculos do cliente para o servidor causou várias dificuldades. Como executar o código JS dentro do .NET Core? Meu primeiro pensamento foi usar a maravilhosa biblioteca Javascript Engine Switcher , escrita por Taritsyn . Infelizmente, isso não se encaixava na minha tarefa: nenhum dos mecanismos existentes poderia digerir o ELK.js. Em vez disso, foi usado o mecanismo NodeServices , no qual tudo imediatamente funcionava como um relógio.

Sim, agora o bonsai exige dois tempos de execução, mas graças à janela de encaixe, não é tão assustador. Sim, os NodeServices vão se aposentar em uma das próximas versões do ASP.NET Core, mas a comunidade vai apoiá-lo. E para onde ir? O desenvolvimento da web moderna consiste inteiramente em tais compensações. A principal coisa é que isso dá um resultado.

Download de documentos


Agora, além de fotos e vídeos, o Bonsai suporta o download de arquivos PDF. Isso pode ser conveniente para documentos - em particular, certidões de nascimento, casamento ou morte.

Originalmente, ele pretendia fazer pequenas visualizações de documentos. Infelizmente, essa idéia colidiu com as duras falésias da realidade: nenhuma das bibliotecas existentes correspondia a um critério ou outro. Foram examinados:

  • iText7 - incompatibilidade de licença com o MIT
  • PDF.js - um grande número de dependências, o contêiner dobrou
  • Os wrappers GhostScript também são problemas de licenciamento, e quase todos são abandonados e não suportam o .NET Core

Se eu perdi alguma coisa e o santo graal de converter PDF para imagem ainda existe - por favor escreva nos comentários!

Notícias sobre os principais


Na página principal do calendário, as últimas páginas modificadas e os arquivos de mídia baixados agora são mostrados:



Isenção Obrigatória


O projeto é sem fins lucrativos e é fornecido "como está". Existem erros nele. Certa vez, através de uma supervisão banal no mestre, um código escorregou que quase limpou o banco de dados. Portanto, se você valoriza os dados inseridos nos bonsais, periodicamente e especialmente a cada atualização:

Faça backups.
FAÇA BACKUP!
D E L A T E B E K A P S! ! !

O que vem a seguir?


Ainda há muitas tarefas interessantes que eu gostaria de realizar no próximo ano:

  • Classificação da página : uma única métrica automática que permite classificar as páginas pela integridade de seus dados. Facilitará a resposta às perguntas "em que páginas podem ser exibidas como padrão" e, inversamente, "em quais ainda precisam ser trabalhadas".
  • Redesign da página principal do painel de administração : as alterações serão exibidas de forma semelhante ao "feed de notícias" nas redes sociais.
  • Tarefas técnicas : transição para o .NET Core 3, várias refatorações

Também há tarefas que gostaria de fazer, mas não tenho tempo e competências suficientes para elas. Espero pela ajuda da comunidade - se não de graça, pelo menos por uma recompensa simbólica. Se você tem confiança em suas habilidades e deseja participar - escreva-me em telegramas e discuta.

  • Componente de calendário : padrão é usado, mas é um pouco torto e não suporta valores imprecisos ( 2019.??.?? ): você precisa escrever um de pleno direito.
  • Aprimoramento de pesquisa : pesquisar no ElasticSearch às vezes fornece resultados estranhos . Provavelmente, eu simplesmente não sei como usar o elástico - você precisa reescrever as configurações infernais com o conhecimento do assunto.
  • Reconhecimento de rosto : seria bom reconhecer automaticamente os rostos nas fotos enviadas e encaixá-los nas páginas. Ainda não encontrei soluções no .NET Core que sejam abertas e com bons resultados.

O repositório do projeto está disponível em:

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

Se você usa bonsai - conte-nos nos comentários. Ficarei feliz em receber críticas e sugestões.

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


All Articles