去年年初,我谈到了
盆景项目,这是一个创建家庭Wiki和开源相册的引擎。 从那时起,该项目一直稳步发展。 在过去的一年中,已经实现了多个功能,由于这些功能,现在引擎可以更轻松地为您自己尝试,并且将来可以更轻松地使用。
根据削减-细节,对未来的计划和一些赏金。
Docker镜像
由于存在大量依赖关系,因此安装第一个版本的Bonsai十分繁琐:需要.NET Core,PostgreSQL,Elasticsearch运行时(这意味着Java运行时和支持俄罗斯形态的插件),程序集还需要.NET Core SDK和NodeJS建立前沿……即使在现代Web开发的全球复杂性的背景下,这也只是对有意愿的人的一项任务,许多最初感兴趣的用户把它扔了一半。
别说了
现在,盆景每分钟上升三个基本动作:
- 下载docker-compose.yml 。
- 输入
@@YOUR_EMAIL@@
和@@YOUR_IP@@
必需的值。 - 运行
docker-compose up -d
密码授权
在第一个版本中,仅使用一种类型的授权-通过社交网络。 造成这种情况的原因很多:
- 一键登录
- 开箱即用地提供2FA,密码恢复和其他安全检查
- 只需保持盆景代码
- 您可以在注册过程中从配置文件中获取一些数据
不幸的是,这引起了许多问题:
- 初始安装过程中的额外棘手步骤
- 您无法将访问权限授予没有社交网络的人(例如,老年亲戚)
- 对于某些数据(性别,年龄),社交网络需要手动验证您的应用程序
因此,添加了第二种授权类型-通过登录名和密码,默认情况下启用。
现在,您可以跳过在社交网络中创建授权应用程序的步骤。 开始之后,Bonsai将提供注册管理员帐户的权限,您需要在该帐户中输入所需的密码-它将起作用。
您可以在管理面板中使用密码创建一个新帐户:
使用密码验证时,需要牢记以下几点:
- 用户无法恢复自己的密码-只有管理员可以执行此操作。 如果只有一个管理员,则该管理员将获得密码授权,并且忘记了该密码-您将必须使用脚本进行重置,该脚本必须直接在数据库中执行。
- 连续10次尝试失败后,该帐户也会被屏蔽。 要解锁,您必须更改密码。 除了您自己的操作外,恶意的爬虫程序机器人还可以自动阻止您的密码。
- 一个帐户每次只能拥有一种授权类型。 首先,您无法使用密码创建帐户,然后通过社交网络向其添加其他登录名,或者根本无法通过常规方式替换它-仅通过手动操作数据库即可。
服务器端族树渲染
自动构建家谱是盆景的最重要功能之一,但也是最棘手的问题。
正如我在上一篇文章中所述,以最佳方式自动排列块是一项非常艰巨的任务。 人们撰写有关此问题的科学论文,投入数千个人的时间,并以疯狂的金钱出售现成的组件。 幸运的是,我设法找到了一个免费的
ELK.js库,该库给出了不错的结果。
ELK.js的问题在于它在很长时间内都可用于客户端库。 您可以通过
thoroughness
性属性调整结果-值越大,调度越好,但是花费的时间越长。 为了为50个人提供一棵可理解的树,我必须等待大约30-40秒才能打开每棵树!
现在,渲染不会在每次打开时在客户端上发生,而是在每次更改时在服务器上发生。 更新内容后的第一次必须像以前一样等待,但是随后页面立即打开。
从技术角度来看,将计算从客户端传输到服务器会造成一些困难。 如何在.NET Core中运行JS代码?
我的第一个想法是使用由
Taritsyn编写的出色的
Javascript Engine Switcher库。 las,这不适合我的任务:现有的引擎都无法消化ELK.js。 取而代之的是,使用了内置的
NodeServices
机制,其中的所有操作都立即像时钟一样工作。
是的,现在Bonsai需要两个运行时了,但是多亏了docker,它并没有那么可怕。 是的,
NodeServices
将在下一版本的ASP.NET Core中
退出 ,但是社区将支持它。 去哪里? 现代网络开发完全包括这种权衡。 最主要的是,这给出了结果。
下载文件
现在,除了照片和视频之外,盆景还支持PDF文件的下载。 这对于文件(尤其是出生,结婚或死亡证明)的方便。
它最初旨在对文档进行小的预览。 idea,这个想法跌入了现实的严峻悬崖:现有的图书馆都没有一个或另一个符合标准。 被检查:
- iText7-与MIT的许可证不兼容
- PDF.js-大量的依赖项,容器增加了一倍
- GhostScript包装器也是许可问题,而且几乎所有包装器都被放弃并且不支持.NET Core
如果我错过了一些事情,仍然存在将PDF转换为图像的圣杯-请在评论中写下!
新闻主要
在日历下方的主页上,现在显示最后修改的页面和下载的媒体文件:
强制性免责声明
该项目是非营利性项目,按“原样”提供。 其中有错误。 一次,通过对主数据库的常规监督,代码泄漏了,
几乎清除了数据库。 因此,如果您重视在盆景中输入的数据,则需要定期进行,
尤其是每次更新时:
进行备份。
进行备份!
D E L A T E B E K A P S! ! !
接下来是什么?
明年我还有很多有趣的任务要做:
- 页面排名 :一种单一的自动指标,可让您按页面数据的完整性对页面进行排序。 通过它,您可以轻松回答以下问题:“哪些页面可以显示为标准页面”,反之,“仍然需要处理哪些页面”。
- 重新设计管理面板的主页 :更改将以类似于社交网络中“新闻源”的形式显示。
- 技术任务 :过渡到.NET Core 3,进行各种重构
我还想完成一些任务,但是我没有足够的时间和能力来完成这些任务。 我希望得到社区的帮助-如果不是免费的,那么至少是象征性的回报。 如果您对自己的能力有信心并想参加-请用电报给我写信并进行讨论。
- 日历组件 :使用了标准组件 ,但有点歪斜,不支持不正确的值(
2019.??.??
):您需要编写一个完整的日历 。 - 搜索增强 :在ElasticSearch中进行搜索有时会产生奇怪的结果。 最有可能的是,我只是不知道如何使用弹性部件-您需要使用有关此问题的知识来重写地狱配置 。
- 人脸识别 :自动识别上传的照片中的人脸并将其捕捉到页面会很好。 我尚未在.NET Core上找到既开放又给出合理结果的解决方案。
项目存储库位于:
https://github.com/impworks/bonsai 。
如果您使用盆景-请在评论中告诉我们。 我将很高兴提出批评和建议。