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:
- Faça o download do docker-compose.yml .
- Digite
@@YOUR_EMAIL@@
e @@YOUR_IP@@
valores necessários. - 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.