guqing

毕生所求无它,爱与自由而已

我的开源之旅:2023 年终总结

在 2023 年,作为一名 Java 软件工程师,我在 GitHub 上留下了深刻的印记,处理 86 个问题,提交 174 个拉取请求,并进行 825 次代码审查。在274 个活跃日中,我为 halo 主仓库贡献了 43k 行代码,总计编写代码 1012 小时,大部分时间专注于Java语言。我还创建了 10 个新的代码仓库,并参与了多个其他项目,深入开源社区合作。这一年是技术成长与开源贡献的见证,我期待 2024 年带来的新挑战和机遇。

不要成为无聊的大人

即使我们最终都成为了曾经不愿成为的“大人”,那份对美好生活的向往,仍旧藏在心底。也许,真正的成长,不是放弃理想,而是在理想与现实之间,找到了属于自己的平衡。

Halo 通知机制 RFC

用户可以通过 Subscriber 来订阅自己感兴趣的事件,当事件触发时会收到通知: 当用户订阅到事件后会创建 Notificatioin, 它与通知方式(notifier)无关,recipient 为用户名,类似站内通知,如用户 guqing 订阅了评论事件那么当监听到评论事件时会创建一条记录可以在个人中心的通知列表看到一条通知消息。 NotifierDescriptor 自定义模型用于声明通知器,通过它来描述通知器的名称、描述和关联的 ExtensionDefinition 名称,让用户可以在用户界面知道通知器是什么以及它可以做什么, 还让 NotificationCenter 知道如何加载通知器和准备通知器需要的设置以发送通知。

使用 JavaScript 对图像进行量化并提取主要颜色

图像的颜色值量化 以下面的图片为例 它的色值分布为如下的图像 从上述 RGB 3D Scatter Plot 图如果将相似的颜色值归为一类可以看出图像大概有三种主色调蓝色、绿色和粉色: 如果我们从三簇中各选一个中心,如以 A、B、C三点表示 A(50, 150, 200)、B(240, 150, 200)、C(50, 100, 50) 并将每个数据点分配到最近的中心所在的簇中这个过程称之为聚类而这个中心称之为聚类中心,这样就可以得到 K 个以聚类中心为坐标的主色值。

社区例会 Vol.06 从零开始的 Halo 插件开发

在此期间,涉及了插件生命周期、如何使用自定义模型、自定义模型对象的生命周期介绍、如何使用自动生成的 API、如何创建自定义 API 等演示说明,并初步实现了以下功能: 通过 GitHub API 获取个人仓库信息; 创建自定义模型 Repository; 将 GitHub 仓库信息通过自定义 API 存储到 Repository 模型中; 通过 Repository 的自定义模型 API 列出数据; 参会人员对演示内容进行了提问和讨论,并提出了一些开发中的问题和建议,如: 开发体验有待优化,可以考虑在用户界面提供 Devtools 相关功能,仅在插件开发时用于对用户界面的自动刷新和插件热重载。

泛太湖游仙岛书事

三月四日,我来到了无锡市鼋头渚风景区游览了一番,太湖,这个千年古湖,如今依旧,它那澄澈的湖水、美丽的风景、壮阔的历史,让每一个到此游玩的人为之倾倒。 夕阳西下,天地渐昏,太湖波光粼粼,宛如水晶镶嵌,一片昏黄中透着淡淡的蓝色,犹如温柔而又坚韧的女子。 此刻,我置身于太湖仙岛湖边的看台,眼前是夕阳西下,远处湖面上还有几只海鸥在飞翔,一点点黑色的身影在天空中流转。 夕阳的余辉如此美丽,它在湖面上泛起了一片金色的光芒,而我则不禁陷入了对太湖的美丽深深的迷恋之中。

2022 code stats

一款美观小巧的 Oh My Zsh 主题

特性: 箭头符号在命令正常执行时显示为 user color,输入执行错误后显示红色 目录提示符只会显示当前所在目录名,上级目录只显示首字母 在一个 Git 仓库时会显示分支名称和工作区状态,当工作区 clean 时分支名为绿色,dirty 时分支名为红色,还有勾、叉、星等具体的状态提示符 使用方式: cd ~/.oh-my-zsh/custom/themes 下载一下文件到此目录 vim ~/.zshrc 然后修改ZSH_THEME的值为ZSH_THEME="guqing" source ~/.zshrc 就完成啦🥳

Halo 2.0 如何开发一个插件 [WIP]

如果定义了这样的 Controller ,插件启动后会生成如下的 APIs 生成规则为 /api/{version}/plugins/{plugin-name}/{mapping-in-class}/{mapping-in-method} 其中: version:来自 @ApiVersion("v1alpha1") 的 value,详情参考:Halo plugin API composition plugin-name:值来自 plugin.yaml 中的 metadata.name 属性 mapping-in-class:来自标注在类上的 @RequestMapping("colors") mapping-in-method:来自标注在方法上的 @GetMapping 插件还允许使用 @Service、@Component 注解将其声明为一个 Spring Bean,便可通过依赖注入使用 Spring Bean,示例: resources:目录为插件资源目录 admin 目录下为插件前端打包后的产物存放目录,固定为 main.js 和 style.css 两个文件 extensions 存放自定义模型资源配置 plugin.yaml为插件描述配置 static 为静态资源示例目录 插件启动时会加载 extensions 目录的 yaml 保存到数据库,apple.yaml 为本项目自定义的模型的数据示例,当启用插件后调用 便可查询到 apple.yaml 中定义的记录 reverseProxy.yaml 为 Halo 中提供的模型,表示反向代理,允许插件配置规则代理到插件目录 它表示访问 GET /assets/{plugin-name}/static/** 时代理访问到插件的 resources/static 目录,本插件便可访问到一下静态资源 roleTemplate.yaml 文件中 kind: Role 表示插件允许提供角色模版,定义格式如下: 必须带有plugin.halo.run/role-template: "true" labels,表示该角色为角色模版,当用户启用插件后,创建角色或修改角色时会将其列在权限列表位置。

我们很激动的宣布 Halo 1.5.0 发布了

halo-dev/halo-admin#439 halo-dev/halo-admin#440 halo-dev/halo-admin#449 halo-dev/halo#1668 @ruibaby @guqing Content API 的评论列表接口不再返回 ipAddress 和 email 字段。 halo-dev/halo-admin#453 halo-dev/halo-admin#513 @ruibaby halo-dev/halo-admin 修改用于切换后台样式的 less 依赖 CDN 为 unpkg。