使用MBG的代码生产思路
这里的代码生产思路限制在持久层,也就是主要用来产生 DAO 和 PO 。主要作用是根据数据库设计反转出相关代码,并使用规范设计出一系列数据操作接口。以便在实际使用中统一数据操作接口,减少数据操作的模板代码编写。
持久层的生产使用 MBG 也就是 MyBatis Generator ,数据操作行为使用 XML 描述。生成器 Runtime 使用 MyBatis3 。在这次的系统升级中发现 MBG 提供了 Kotlin 的支持(MyBatis3Kotlin),同时默认 Runtime 已从 MyBatis3 更改为 MyBatis3DynamicSql 。之前看了下动态 SQL 的介绍觉得有些细节不是很直观,现在看来动态 SQL 似乎要成为主流。后续了解一下。
1. 设计规范要想做统一操作必须要首先制定规范,这个生成器的目的就是规范 DAO 和 PO,所以需要设计一个 DAO 和 PO 的顶层接口。
123456789// 所有 PO 的父类,实现一个框架级别的 IEntity 接口public abstract class BasePo implements IEntity ...
Spring Security 升级到 6.0
整个系统在认证与授权使用的是 spring-security-oauth2 ,早先想做升级的时候看到官方出了个 Authorization Server 。去 Github 和一些社区看看发现这个项目还比较早,且不是很活跃,于是想等到稳定一些。
现在打算升级到 6.0 版本就需要整个 spring 关联框架全部升级。所以整个过程包含以下问题:JDK 17, Gradle,SpringBoot, SpringCloud,数据库相关,重要的独立三方库,Oauth2,业务代码,框架代码。
TL;DR点击列表跳转
构建环境
JDK 17
Gradle
Spring相关
SpringCloud
Spring
Spring Security
最后
1. 构建环境1.1 JDK 17这方面从静态代码的角度来说其实在升级过程中影响并不大。
当把 JDK 17 引入项目后点开项目的 External Libraries 的瞬间我就觉得,无论升级有多麻烦都值得了。和 JDK 8 相比这舒服的模块分类,简直是自己知识体系归类的官方规范。
值得注意的是 @Deprecated 这个注解
...
Spring Security 开篇
当前内容基于 spring-security 5.3 ,在升级到 6.0 后内容会随之变更。
这篇文字就站在整个 spring-security 的层面整体,快速地聊一下,目的是对这个框架有个比较感性的了解,大致知道这个框架有什么用,以及如何使用。
TL;DR点击列表跳转
Spring Security
运行流程
构建流程
知识点
最后
1. Spring Security提到安全我想如果简单的概括,我们要做的就是 “访问控制”,而访问控制的目标就是 “受保护的资源”。那么安全管理的功能点就可以简单的概括为 “认证管理”,“授权管理” 和 “资源管理”。
资源管理这个概念从编码角度来说是比较难以概括的,因为资源这个概念的划分本身就有很强的主观性以及具体的业务逻辑特色。在很多情况下,特别是对后端系统来说,资源被抽象成为访问路径(rest 接口)。这就一度让编码人员忽略“资源”这个概念的准确意义。(所以这里先不讨论资源管理)。
“认证管理”,“授权管理” 不仅是中文还是英文,如果没有思考过这两个概念我想都会感到困惑。
认证 :authentication 字面意思,就是允许 ...
接口同步wiki.js
首先简单说一下之前使用印象笔记给我带来的思考。
印象笔记不支持多层级,那么就需要 001-层级1-002-层级2 这种将从属的树形结果,转换为同级别的平坦结构。这带来的问题是什么?全都挤在一起,看着非常烦躁。
所以我觉得印象笔记的定位实际上是收集,而不是知识消化整理和输出。
几乎所有知识的逻辑组织结构,在当知识或素材规模达到一定量之后都将失去其最初的意义。这一点在目录结构(或者说树形结构)膨胀起来后尤为明显。目录结构本质是对知识素材的人为分类,在初期由于其非常符合我们日常的分类习惯,这几乎是下意识的水到渠成。不过这首先需要面对内容的是排他的唯一分类,当你对内思考的越多就越是难以取舍。这时候除非在专有的领域或者经过专业的训练,否则知识是无法简单的的划归在某一个层级目录下。无论是知识录入还是知识获取,每次可能都有新的分类想法,结果是这些输入输出非常困难。那么这时候目录结构就只剩下一个作用了,那就是目录树的某一子树是一个相对完整的,成体系的知识结构,我们做复习与整理的时候想办法在这棵大树下找到子树,然后按照最初的目的使用知识。
其它的如标签模式,多维度管理模式,进而发展成类似知识 ...
使用 Wiki.js 初步构建知识库
我个人一直困扰于个人知识的管理,包括一些静态资源,各种文本片段,以及总结输出的结构化内容。而这一切的目的就是在我需要的时候能快速找到它们。
经过深入的思考,以及做了一些尝试后发现,这个目标远比我想象中的复杂好多。于是我决定将要求放低一些,以 wiki 的方式对知识进行管理。在对比了一圈后发现,非常轻量化的 wiki.js 满足我的需求,于是从 Github 把代码拉下来尝试了一下。
TL;DR点击列表跳转
1. 知识库构想
1.1 输入输出分离
1.2 Wiki
2. Wiki.js
2.1 快速开始
2.2 虚拟文件夹
2.2.1 目录切换
2.2.2 排序
2.3 功能
1. 知识库构想对于自己的知识库,初步设计了一个满足通用场景的是数据库,又参考了一些开源 wiki 的数据库设计。之后发现我i的想法和很多系统实际上有较大区别。
在我设计的系统中实体信息分为如下几个维度
材料:(暂定名),是一些不归类于业务的数据,包括直接引用的文件,图片等。最直观的体现就是一篇文章中临时上传的图片,这类数据全部在业务上无法管理。
资源:最小可管理业务数据。从一个文档,到一 ...
项目文本处理选型
这里需要构建一套文本处理系统,当然了构建系统从来就不是一蹴而就的,必须要面对客观环境与实际的需求,系统将来是什么样这谁也不敢保证。但是系统本身就是对客观与现实世界的抽象与归纳,对于系统的构建和设计从一开始又不能拘泥于当前环境。总是说了那么多就一句话,功能可以没有,但是设计一定要到位。
这里简单介绍一下我的选型路线,包括前端和后端,移动端目前又处在一个选择的路口。因为Flutter2的发布,以及明确的跨平台方向。桌面是否有能力挑战 Electron 这是我非常关心的,不可否认的是Electron是现在开发桌面应用的首选了,但是我对其运行方式一直不是很满意,因为大量的基于其开发的PC软件给我非常不好的使用体验,包括印象笔记,和大量的PC端音乐播放软件,这里特别要说网易云,最近的它的启动似乎越来越慢了。移动端在熟悉Flutter2前,先用响应式前端凑凑数。
那么基础的技术选型来说,前端 Vue/element-ui ,后端 Java 为主(可能会引入一些 NodeJS 或 Python ),数据库 mysql 做系统级支撑,如果有一些性能或业务要求那么就必须要文档数据库。文本 ...
图像标签管理-Deepdanbooru
前几天还在为 pytorch 如何部署以及如何融入到图像处理流程中苦恼,没想到图片分类这边在短短几小时内给调试过了,并迅速融入到整个图片处理流程当中。
其实这也很容易理解,以图搜图的图像识别需要多次经过专用算法:
特征值提取:通过 pytorch 调用模型提取特征值并存储起来。
计算特征值:由于特征值的量级比较大,并且又不是简单的数值或字符串匹配,而是调用专门的算法。
虽然可以将图库图片在后台预先处理(这里可以与业务流程分类),但是用户上传还是需要在业务流程中在进行特征值提取以及特征值相似度计算,在没有足够算力的情况下,这个过程非常影响使用体验。相反标签搜索仅仅是数据搜索匹配问题,一下子就将一个看似复杂的算法问题转换成一般意义上的业务数据处理问题。
这里就简单介绍一下基于 deepdanbooru 的图片分类以及衍生出来的标使用标签进行与管理的问题
TL;DR点击列表跳转
1. 环境搭建
1.1 测试
2. 改造与使用
2.1 代码说明
2.2 代码改造
2.3 总结
3. 标签管理
4. 问题
5. 最后
1. 环境搭建
当前最新模型基于20221112(实际就 ...
以图搜图-Milvus
事实上这篇文章属于一个大的分类,属于个人的一个愿景。
我一直在寻找属于自己的知识管理方式,其实说起来也非常简单,满足两个基本需求:
快速找到需要的内容,包括自己总结过的结构化与非结构化数据。
组成知识网络,根据某一个关键点找到关联的知识。
经过较长时间的实践,试过了很多软件,都感觉要将自己的一套归类总结逻辑迁移去出去并被迫改变,同时又没有很好的编程接口。最终对于知识总结和录入方式选择为 Obsidian ,输出结构化 markdown 文本后通过编程完成解析和选择输出模板,同时完成知识提取和展示。
在非结构化数据管理上图像管理也是一个大难题,图像与文本不同,逻辑上的管理还停留在 TAG 或 mate dta (元数据)的层面,这最大的问题是做图片标签和分类以及元数据管理。这完全是重复性体力劳动,再加上图片存量相当大,对于个人来说几乎是不可能完成的。逻辑分类其实是倾向于准确的逻辑分析归纳式管理,目前似乎只有机器学习通过已有模型来实现。关于这点还在探索中。
图像管理上还有一条路就是以图搜图,以图搜图更像是基于观感上的,图像结构上的图片比较。对于图像风格比对也仅仅是看过文章说明,没有 ...
资源权限管理
这里所描述的资源管理是指API管理,或者接口管理。最初的目是实现一个基于角色权限的细粒度访问控制,同时具备自上而下与自下而上的两种配置与管理方式。
在实际的权限管理中,受特别是后端的权限管理有非常大的不透明性。除了开发者本身,在接口这个粒度上几乎没有人能完全知道系统中,甚至功能点中到底有哪些接口。所以更实际的方式是采用白名单管理,不做配置就没有权限。这种基于白名单或者黑名单的管理方式我称作为自上而下的权限管理。这种方式的缺点就是基于人工的有限配置带来的规模限制与精确控制的限制。
TL;DR点击列表跳转
资源与权限
认证管理
登录认证
访问认证
菜单管理
前端资源展示
资源控制
资源管理
接口扫描
元数据管理
接口控制
授权管理
接口数量
实际使用
最后
1、资源与权限资源权限的分类
对于当前流行的前后端分离系统来说实际上权限管理可以粗略的分别为,前端权限管理与后端权限管理。
前端权限管理:前端的权限管理可以理解为UI的权限控制,即能看到什么与能操作什么,也就是菜单和按钮。
后端权限管理:后端权限从不同维度有着不同的划分,但是仅从对外使用上可以简单的认为是接口 ...
我的2021
春节假期下了几天雨,体感又潮湿又阴冷。无意间在图片收藏里看到这张。
在2022年新年伊始回想起2021年的经历,发现竟然没有什么值得关注的事情。整个2021年基本在埋头工作,这其中有不少内容是在对之前期望和目标以及一些执行方法的实践。就如同最近看到一本关于知识管理的书里面说的3W理论,即先问why(为什么),接下来how(如何),最后才是what(什么)。在现实中大多是直接what,直接得出结论。这也许是当今这个知识与内容高度泛滥的年代我们被迫养成的习惯,快速得出一个结论并快速执行。就好像看到电商网站不厌其烦给推送商品,我们要做的就是立刻决定买还是不买,很多时候甚至忽略了购物的本质。而现在的网络环境又有非常明显的自动归类与转借概念的现象出现,大多数时候我们只是在一个给定的范围内选择,在范围之外又出现大量的新生概念与转借的“名词”。这样层层间隔让人将很多行为自动归类到一些概念上去,这样进一步加速自我思考与行为的自动归类。加剧了不经思考被各类概念裹挟的被动选择,再加上社会分工越来越精细,接触的信息越来越固定化,想要遇事多思考摆脱信息茧房越来越困难。
翻了下整个2021年的观影记录,发 ...