Compare commits

...

2 Commits

Author SHA1 Message Date
li-chx f667c37701 从旧站搬运一批文章 2025-08-26 01:34:11 +08:00
li-chx a7cd0a0360 更多的dev用md文件 2025-08-25 01:07:22 +08:00
21 changed files with 800 additions and 21 deletions

View File

@ -0,0 +1,43 @@
---
{
title: "ChronoCat使用遇到亿点困难 3.28开发小记",
description: "作者在Docker中配置ChronoCat QQ框架时遇到困难包括版本兼容、VNC显示问题及冻号风险。部分API测试成功基于Satori协议调用方便。后续计划提供JSON格式的API供其他容器使用示例包含来源、目标和信息内容。环境问题尚未解决。",
draft: false,
type: "article",
created_at: "2024-03-28T09:26:00+08:00",
published_at: "2024-03-28T09:34:00+08:00",
updated_at: [ "2024-03-28T09:34:00+08:00"],
category: 'Uni',
tags: [ "QQBot" ],
tech_stack: [ "ChronoCat" ],
tech_stack_percent: [ 100 ],
tech_stack_icon_names: [ "mdi:cat" ],
tech_stack_theme_colors: [ "#bc446f" ],
}
---
!!!warning Legacy Article 过时的文章
此文章从旧博客迁移而来,编写时技术水平有限,仅供参考
!!!
## ChronoCat 配置小结
最近一直在弄qq框架 ChronoCat
首先这东西一定得弄在Docker里我没有精力在原系统做一个vnc然后再装一个QQ想想就感觉太地狱了。
但是Docker好像没有足够新的版本倒是找到了能用的Compose文件但是好多Api都搞不通我怀疑是版本问题。
另一方面有一些消息表明使用早期版本的QQ会导致冻号虽然我的号还没出问题。
问题落在了完成一份新的Dockerfile上。
但是我没能成功目前仍然卡在这一步。根据错误消息我怀疑是vnc和QQ不对付vnc可以启动但是看不到QQ的画面。
感觉只要涉及到Linux图形化最后都会变成一场噩梦。
不过也有好消息从已经成功测试的部分Api来看调用Api并不困难基于Satori协议还是比较方便的。
可以假设我将在一段时间后解决上述配环境的问题,现在考虑一下后端框架。
首先我需要提供一批Api供其他Container使用。
以一个报错信息为例子
需要以下信息:(来自谁,发送到谁(人/组/多组信息内容string
```json
{
"from": "string?",
"to": ["people","groupA","groupB"],
"info": "string?"
}
```
还有很多要考虑的事 要下课了

View File

@ -0,0 +1,133 @@
---
{
title: "补档 Uni运维小记",
description: "作者在Docker中配置ChronoCat QQ框架时遇到困难包括版本兼容、VNC显示问题及冻号风险。部分API测试成功基于Satori协议调用方便。后续计划提供JSON格式的API供其他容器使用示例包含来源、目标和信息内容。环境问题尚未解决。",
draft: false,
type: "article",
created_at: "2024-03-29T10:30:00+08:00",
published_at: "2024-03-29T11:18:00+08:00",
updated_at: [ "2024-03-29T11:18:00+08:00"],
category: 'Uni',
tags: [ "运维" ],
tech_stack: [ "Docker", "Nginx", "MariaDB", "Azure Devops" ],
tech_stack_percent: [ 40,30,20,50 ],
tech_stack_icon_names: [ "mdi:docker","simple-icons:nginx", "simple-icons:mariadb", "simple-icons:azuredevops" ],
tech_stack_theme_colors: [ "#1c90ed","#109748","#c0765a","#2b99e2" ],
}
---
!!!warning Legacy Article 过时的文章
此文章从旧博客迁移而来,编写时技术水平有限,仅供参考
!!!
#运维
运维的主要任务有部署代码配置和维护服务器上的nginx,Docker和mariaDB服务。~~还有背锅~~
运维技术路线:
##Docker
学习[Docker](https://docker-practice.github.io/zh-cn/)会是你的第一课。几乎全部的后端代码都运行在Docker中Docker提供了服务管理自动化部署和端口映射功能你需要学习的有关知识有
Image、Container的概念及相关操作
从Image构建Container端口映射相关配置
导出Container Log, 进入运行的Container进行检查
从 DOCKERFILE 文件构建Container
从 DockerCompose 构建Container
##nginx
nginx维护的关键是看懂学长留下的配置文件。然后在其基础上堆上自己的文件同时保持nginx不崩
目前笔者nginx技术有限。不过多赘述
##mariaDB
mariaDB和Mysql语法略有区别。但大部分都是一致的。作为运维你需要为后端代码建立所需的数据库。建立数据库配置用户并不困难。去bing或者谷歌花点时间就能做好。
但是关键是,把带有帐号,密码,地址的字符串传递给后端代码。我将在后续提到。
##Azure
你有很大概率在Azure中看到这份指导文件但你大概率还不会使用Azure进行代码管理和部署配置。
这里不会讲Commit PR 或是 Branch相关的概念。如果你不了解你需要去学习Git相关知识。在很大程度上Azure和Github类似只是这里不会从搜索引擎中搜到。接下来我会假设你了解相关概念。
这里主要讲Azure Pipelines的配置
在左侧你能找到Pipelines。你可以右键在新窗口中打开。这样就可以不退出本指导。
你可以看到很多Pipeline在其中。排在前面的可能是IWutApi,或是其他什么东西。它们在进行**自动化部署**的工作。每个Pipeline都在持续监测某个仓库的的某个分支如果发生改变它会把代码传到制定的服务器构建运行。这样后端开发者就能在第一时间对最新的代码进行测试并且把最新的代码上线供用户使用。
这一近乎神奇的操作的关键是仓库中的一个yml文件它通常被命名为 ***-pipeline.yml
关于yml文件的配置我的建议是
```yml
trigger:
- main
resources:
- repo: self
variables:
projectName: iwut-api-prod
stages:
- stage: Deploy
displayName: 部署到服务器
jobs:
- deployment: VMDeploy
displayName: 部署到Uni服务器
environment:
name: JP-tencent
resourceType: VirtualMachine
strategy:
runOnce:
deploy:
steps:
- checkout: self
fetchDepth: 1
displayName: 切换到目标仓库分支
- bash: |-
docker compose -p $(projectName) -f docker-compose.yml up --build -d
env:
DeployPort: 5003
ConnectionStrings__App: $(ConnectionStrings__App)
displayName: 运行 docker compose 命令
```
这是目前正在运行的一份pipeline文件。我们来简单分析一下如果要改在其他工程上需要改什么。
trigger规定正在监测的分支名字是什么
projectName项目名字改成对应的
stages里第一个可能要改的是environment,你要部署到哪个服务器。在Pipeline-Environments中可以看到现在可用的服务器。这个大概率会有人告诉你。但以防万一这里简单叙述目前的情况。
如果你要部署的是一个需要Debug,后端还在开发的代码放在uni-tencent上并且只部署dev分支。
如果你要上线一个供用户使用的新功能那么JP-tencent是更好的选择只部署main或master分支
下一个要改的是steps中的bash 这是一行从Docker-Compose启动docker container指令关于Docker Container创建和端口转发在Docker-Compose文件中。
然后是env, DeployPort和ConnectionStrings__App
env是环境变量这里创建了两条环境变量部署端口和连接字符串。
这里容我粘贴DockerCompose.yml(也能在仓库找到)文件,插入的讲解一下
```yml
version: '3.8'
services:
iwut-api: #目标Contaienr 名字
image: iwut-api:prod #镜像名字
build:
context: .
dockerfile: IWutApi/Dockerfile #DockerFile文件位置,需要修改
args:
BuildConfig: Release #发行环境
environment:
TZ: Asia/Shanghai
ASPNETCORE_ENVIRONMENT: Production #发行环境
ConnectionStrings__App: ${ConnectionStrings__App:?} #数据库连接串
ports:
- ${DeployPort}:80 #端口
extra_hosts:
- "host.docker.internal:host-gateway"
```
这个文件中发行环境可能会改成Debug或Development,这个看后端需求。
你可以看到 数据库连接串和端口使用了${something} 的形式,这里就是在读取环境变量。
回到之前的Pipeline文件端口没什么说的了现在聊聊ConnectionStrings_App
该环境变量 在构建Pipeline过程中加入如图。![Screenshot_2024-03-25-15-29-23-111_com.realvnc.viewer.android.jpg][1]
右侧添加名字和值,由于该字符串包括密码,所以需要**勾上Keep this value secret**
问题出现了,你 ~~,一个刚准备接锅的运维,~~ 怎么知道这个值怎么填因为过往的Pipeline这里都是****
两个办法:
如果是新的项目,直接问后端,直接问他怎么填,要个示例。
如果是老项目
还记得之前Docker要求你学习怎么进入容器内部吗
``` Bash
docker exec -it (DockerID) bash
echo $ConnectionStrings__App
```
当然还有第三个办法,反正代码就在这,不如发挥主观能动性,学习后端。
祝你好运
[1]: https://typecho.lichx.top/usr/uploads/2024/03/1075500197.jpg

View File

@ -0,0 +1,58 @@
---
{
title: "转向Lagrange.Core 解决Sign服务问题",
description: "作者放弃ChronoCat转向Lagrange.Core但在发送消息时遇到阻塞。发现未配置Sign服务器导致登录异常。通过阅读源码自定义SignProvider并硬编码URL后解决问题成功实现消息发送。",
draft: false,
type: "article",
created_at: "2024-03-29T09:50:00+08:00",
published_at: "2024-03-29T10:19:00+08:00",
updated_at: [ "2024-03-29T10:19:00+08:00"],
category: 'Uni',
tags: [ "QQBot" ],
tech_stack: [ "LagrangeCore","C#" ],
tech_stack_percent: [ 50, 50 ],
tech_stack_icon_names: [ "mynaui:letter-l","mdi:language-csharp" ],
tech_stack_theme_colors: [ "#8f71b0","#a179dc" ],
}
---
!!!warning Legacy Article 过时的文章
此文章从旧博客迁移而来,编写时技术水平有限,仅供参考
!!!
## 事件记录
在群U的劝说下放弃了ChronoCat转向了**Lagrange.Core**
初步了解后我发现这东西竟然有Nuget开发包我直呼还有这好事直接对着Api文档开写。
写到发送单对单信息后,开始测试,发现发不出去,就阻塞了,卡在那了,没报错,没异常。
在反复对照调试了30min后向Rosemoe求助。
他一开始也觉得没问题,突然问我,**你配Sign了吗**
我一下子就不懂了
然后他丢给我一个sign的链接 这里就不丢出来了需要的去telegram找
我就愣住了然后就开始看文档看ReadMe 我就发现只有一个地方提到了sign的事 Lagrange.OneBot Appsettings.json里面有一个要求用户填入。
然后我就把链接填到Docker Contianer里的Appsettings.json 重启 但是没用
更不会了突然想起来Docker也有log 我决定对比一下我的请求和Docker log 看看有没有什么报错信息。
然后我就发现一个奇怪的事好像我的请求和log没什么关系
而且log里也有用于登录的二维码 ~~这不扫一下~~
然后我发现我的电脑qq被顶下去了我立刻意识到它成功登录了而我的Api调用登录是不成功的。
这时我才意识到Lagrange.Core 和 Lagrange.OneBot是两个东西关于Lagrange.Core的sign服务配置只在ReadMe.md有提到
> 暂不提供签名 API您可能需要在某个地方找到它并在 BotConfig 继承 SignProvider 类的CustomSignProviderBotConfig
之前ChronoCat使用vnc直接显示qq界面登了就顶符合直觉。
在调用Lagrange.Core时如果没有正确配置sign服务器登录时手机会显示有其他设备登录但是电脑上不顶号。获取到了BotContext甚至有uin字段但是实际是没有登录成功的。
这也解释了为什么Online事件没有正常触发。
#正题 Lagrange.Core sign配置
没办法了,只能试着看源代码了
在这个过程中Rosemoe给了我OneBot sign 服务实现的代码,位置是
> Lagrange.OneBot.Utility.OneBotSigner
大致的读了一下代码关键在于从AppSettings获取了Sign链接然后配合其他的变量发送了一条请求最后返回了一个byte[]
Core下也有类似的代码
> Lagrange.Core.Utility.Sign.LinuxSigner //这里只考虑Linux
但是该文件中 Url是空的并且没有函数给它赋值LinuxSigner继承自SignProvider
SignProvider是BotConfig的一个属性 而BotConfig是Create一个Bot时需要的变量。
看到这,你可能已经明了了
LinuxSigner只有在BotConfig的SignProvider为null时才会被构建所以需要写一个自己的Signer,然后把里面的url填上。
由于LinuxSigner的url是 private const 我不太确定继承能不能使用新的url,我这里直接继承SignProvider为Sign,然后 copy LinuxSigner,修改url,后面可能改成从AppSettings读取。这里先直接硬写了。
然后使用新的SignProvider初始化BotConfig,重新测试,没有问题。

View File

@ -0,0 +1,16 @@
---
{
title: "2024.4.10 开发小记",
draft: false,
type: "rambling",
created_at: "2024-04-10T23:35:00+08:00",
published_at: "2024-04-10T23:40:00+08:00",
updated_at: [ "2024-04-10T23:40:00+08:00"],
}
---
做了一晚上实验,又写了一坨屎
在写WinForm程序因为加载时间过长决定做个动画。
好消息:动画做出来了 虽然很糙
坏消息动画播完Form才开始加载
想法搞个Panel把Form分到Panel里然后在新层播动画处理好两个层的前后关系。让新的Form发完成信号。

View File

@ -0,0 +1,15 @@
---
{
title: "2024.4.12 开发小记",
draft: false,
type: "rambling",
created_at: "2024-04-12T00:00:00+08:00",
published_at: "2024-04-12T00:11:00+08:00",
updated_at: [ "2024-04-12T00:11:00+08:00"],
}
---
写了一下午实验屎山代码延申了。部署了新的Pipeline因为代码的问题卡了一会儿。
今天1999和舟都有新活动 但是完全没有时间打。 ~~虽说下午确实摸了会儿鱼~~
伞的魔术贴终于是掉了,简单学习缝线后,缝了一下。完全谈不上美观,但是足够结实。
突然想起来Leetcode没写只能之后补上了。
明天又要验收实验,得快点了

View File

@ -0,0 +1,62 @@
---
{
title: "C#命名规范 for Uni",
description: "C#命名规范标识符以字母或下划线开头可含Unicode字符。接口以\"I\"开头(如`IMyInterface`类、方法、常量用PascalCase私有字段以\"_\"加camelCase局部变量和参数用camelCase。特性以\"Attribute\"结尾。清晰命名优先于简洁。",
draft: false,
type: "article",
created_at: "2024-04-08T23:00:00+08:00",
published_at: "2024-04-08T23:29:00+08:00",
updated_at: [ "2024-04-08T23:29:00+08:00"],
category: 'Uni',
tags: [ "C#" ],
tech_stack: [ "C#" ],
tech_stack_percent: [ 1 ],
tech_stack_icon_names: [ "mdi:language-csharp" ],
tech_stack_theme_colors: [ "#a179dc" ],
}
---
!!!warning Legacy Article 过时的文章
此文章从旧博客迁移而来,编写时技术水平有限,仅供参考
!!!
# C#命名规范
该文是作者对[微软文档](https://learn.microsoft.com/zh-cn/dotnet/csharp/fundamentals/coding-style/identifier-names)的见解,更多详细信息请参照原文档
## 标识符 (变量)
· 标识符必须以字母或下划线(_)开头
· 标识符可以包含 Unicode 字母字符、十进制数字字符、Unicode 连接字符、Unicode 组合字符或 Unicode 格式字符。
· 你可以在关键字前加'@',声明一个与关键字相同的变量,例如:@if 是变量 if。我个人不太建议这么做。
## 命名约定
在介绍命名约定之前我将先介绍Pascal Case 和 Camel Case
### Pascle Case
形如 DataChecker, ValueCoordinate 之类的命名。将单词间空格删去所有首字母大写即是Pascle Case
### Camel Case
Camel Case又称驼峰法与Pascal Case及其类似只是第一个字母不在大写例如dataChecker, valueCoordinate
### True 命名约定
``` C#
public interface IMyInterface //接口使用I作为开头其余部分使用Pascle命名法
{
public void MyMethod(); //方法使用Pascle命名法
}
public class MyAttribute : Attribute { } //特性使用Attribute结尾其余部分使用Pascle命名法
public class MyClass : IMyInterface
{
private readonly int _myVal = 256; //私有变量以_开头其余部分使用Camel命名法
public void MyMethod()
{
const int MyVal = 1024; //常量使用Pascle命名法
int localVar = MyVal + _myVal; //局部变量使用Camel命名法
}
public int AnotherMethod(int firstParameter) => firstParameter + _myVal; //方法参数使用Camel命名法
}
```
在充分理解以上约定的基础上,清晰胜于简洁

View File

@ -0,0 +1,108 @@
---
{
title: "KiCAD手动编译安装 on Aarch64/arm64 for 小米平板5 Pro with Ubuntu22.04 installed by tmoe",
description: "作者分享了手动编译KiCAD的详细过程。因版本冲突问题选择从源码编译处理了OpenGL、CURL、cairo、libgit2、boost等依赖升级了GCC和Clang版本并编译安装OpenCascade和wxPython。遇到wxWidgets版本检测错误时修改了CMake脚本。最后使用Ninja进行编译总耗时较长。",
draft: false,
type: "article",
created_at: "2024-04-10T00:00:00+08:00",
published_at: "2024-04-11T17:34:00+08:00",
updated_at: [ "2024-04-11T17:34:00+08:00"],
category: '个人',
tags: [ "Linux" ],
tech_stack: [ "Linux" ],
tech_stack_percent: [ 1 ],
tech_stack_icon_names: [ "simple-icons:linux" ],
tech_stack_theme_colors: [ "#263238" ],
}
---
!!!warning Legacy Article 过时的文章
此文章从旧博客迁移而来,编写时技术水平有限,仅供参考
!!!
如果你只是想安装KiCAD,以应该安装官方PPA源然后下载预构建版本
如果你像我一样遇到了主程序为6.0 其他为8.0 的问题,或者因为什么其他原因决心手动编译。那么,欢迎,祝你好运。
——————————————————————————————————————————————————————————————————————————————————————————
## 依赖处理
源代码下载,我直接使用[github](https://github.com/KiCad/kicad-source-mirror),不小如果gitee有镜像也可以考虑
[官方构建文档](https://dev-docs.kicad.org/zh-cn/build/linux/) 不长,最好先看一下
首先是处理依赖问题,命令 cmake会检查所有依赖 我这里使用的是:
`cmake -G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo ../../`
openGL
'''
sudo apt-get install build-essential
sudo apt-get install build-essential libgl1-mesa-dev
sudo apt-get install libglew-dev libsdl2-dev libsdl2-image-dev libglm-dev libfreetype6-dev
sudo apt-get install libglfw3-dev libglfw3
sudo apt-get install freeglut3-dev
'''
CURL:
`sudo apt-get install libcurl4-openssl-dev`
cairo:
`sudo apt-get install libcairo2-dev`
libgit2:
`sudo apt install libgit2-dev`
boost:
`sudo apt-get install libboost-all-dev`
harfbuzz:
`sudo apt install libharfbuzz-dev`
提升Clang版本至Clang-15
提升Gcc版本必要性存疑至gcc-12
`sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 12`
理论上来说KiCAD由gcc编译但是提升Clang版本才让我实际解决了问题
安装OpenCascade
[过程见此文章](https://blog.csdn.net/smart_jackli/article/details/128132773)
编译约耗时1h45min
wxpython:
`sudo apt install -y libgtk-3-dev`
`pip install wxpython`
编译约耗时50min
`pip install wxWidgets`
我是在Cmake过程中不断检查依赖完成的这篇文章。当进行到这里时我出现了一个问题
'''
CMake Error at CMakeLists.txt:992 (message):
wxWidgets 3.2.0 or greater is required
'''
但是我已经安装了wxWidgets 3.2.2
检查相关的Cmake脚本定位到这一段
/cmake/FindwxPython.cmake
'''
set( _py_cmd "import wx;print(wx.wxWidgets_version.split(' ')[1])")
execute_process( COMMAND ${PYTHON_EXECUTABLE} -c "${_py_dll}${_py_site_path}${_py_cmd}"
RESULT_VARIABLE WXPYTHON_WXVERSION_RESULT
OUTPUT_VARIABLE WXPYTHON_WXVERSION
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if( NOT WXPYTHON_WXVERSION_RESULT EQUAL 0 )
set( WXPYTHON_WXVERSION "3.0.2" )
message( WARNING "Could not determine wxWidgets version used by Phoenix, "
"requesting ${WXPYTHON_WXVERSION}" )
endif()
'''
你可以像这段代码一样运行一下:
`import wx;print(wx.wxWidgets_version.split(' ')[1])`
我的结果是3.2.2.1
这里我直接修改脚本 把 3.0.2 修改为 3.2.1
如果你没遇到这个问题,那是最好的。如果遇到了,可以先这么改。
你可能会有疑问 为什么是3.2.1 这是因为之前apt安装的wxWidgets 就是3.2.1 如果这里不匹配有会报错
unixodbc
`sudo apt-get install unixodbc-dev -y`
`sudo apt-get install libsecret-1-dev -y`
libsecret-1-dev 可能不必要 我本来使用的是iodbc 但是报错了libsecret可能不被unixodbc需要
Ok,兄弟们搞到这依赖应该差不多了。下一步Build
## Build
`Ninja`
Ninja会快一点存疑
目前编译时间1:36+2:38+1:47+1:00

11
2024-04/小记.md Normal file
View File

@ -0,0 +1,11 @@
---
{
title: "小记",
draft: false,
type: "rambling",
created_at: "2024-04-02T00:10:00+08:00",
published_at: "2024-04-02T00:11:00+08:00",
updated_at: [ "2024-04-02T00:11:00+08:00"],
}
---
于我而言,**思考**与**遗忘**竟如此形影不离。

View File

@ -0,0 +1,17 @@
---
{
title: "记录一下突然想到的一个点子",
draft: false,
type: "rambling",
created_at: "2024-04-07T00:35:00+08:00",
published_at: "2024-04-07T00:35:00+08:00",
updated_at: [ "2024-04-07T00:35:00+08:00", "2025-08-26T00:30:55+08:00"],
}
---
udp打洞 这个技术有一段历史了 但是它有一些基本问题
最大的问题就是丢包
我在想一个基础协议封装整个udp打洞过程 最后做成一个局域网 把打洞目标放进去
这件事远远超过我的能力 此处仅是记录 待来日有能力实现
搬运时补充:
直到现在,我还是没有实现这个技术,同时我很确定已经有人干过类似的了

View File

@ -0,0 +1,32 @@
---
{
title: "2024.5.5 小记",
draft: false,
type: "rambling",
created_at: "2024-05-05T23:40:00+08:00",
published_at: "2024-05-05T23:46:00+08:00",
updated_at: [ "2024-05-05T23:46:00+08:00", "2025-08-26T00:56:46+08:00"],
}
---
五一假期要结束力
虽然早有预感,但还是觉得结束的好快。
还有好多事没做
最近又想起来错过党课的事,果然得写一下。
简单讲,没注意信息+注意到后没理解导致错过了党课。一年没上,下学期应该需要重新推优。
这次错过让我离入党远了一步,也让我再次询问自己一个问题,我是不是真的想入党?
有这样的想法,主要还是对党的不了解与对自身的不了解导致的。
我相信党是一个服务人民,造福人民的组织机构。但是理解不够细致,如果我成为党员,我担心自己不够格。
第二件事Uni全会要召开了感觉应该不远了。但是我是社恐有点不太确定该说啥。
说实话,这个负责人当的太怪了。虽然能理解全貌,理解为什么会推选我,但是实际在这个位置时,还是感到有些无助。
当然最根本原因还是专业能力不够不管是social还是tech。
第三件事科目补习需要加速了。虽然和Uni全会还有HackDay碰撞但还是需要优先一下 机组、编译原理、人工智能概论 对这些科目不同程度的落后让我担心。
第四件事Ros学长的代码浅看了一下还是需要很多工作预计要消耗不少时间我大概有一个月的事件准备。
第五件事,六级,也尽快吧,尽早开始,不能像四级一样混了,感觉混不过去。
总体来说,事不少,就看能不能/30去做这是关键中的关键。
搬运时记录当时六级果然没过424

View File

@ -0,0 +1,18 @@
---
{
title: "Hackathon 活动后记",
draft: false,
type: "rambling",
created_at: "2024-05-28T14:20:00+08:00",
published_at: "2024-05-28T14:24:00+08:00",
updated_at: [ "2024-05-28T14:24:00+08:00"],
}
---
上周六到周日(2024.5.25-2024.5.26) Uni和木犀联合举办了一年一度的HackDay活动。
理论上,这个活动是武汉高校联盟都能来的,而且原计划和冰岩联合,在华科举办,但因为未知原因,在街道口附近自习室举办。
先说结论Hackathon绝对是一次特别的经历。
首先是从未有过的团队协作的经验这方面主要有三点你必须不断的帮小组成员解决困难和让小组成员解决你的困难必须多次讨论确定最终作品的结果这其中有时间和技术的取舍也包括对剩余san值的取舍必须不断面对git pull失败和merge冲突相关问题。实际上想法和代码迭代速度之快导致几乎每一次提交代码都需要处理冲突问题平常很难有这样的机会。
与小组成员的讨论变得相当关键在理智近乎消失的同时必须尽早尽量详细的确定未来作品的方向。这个过程实际上是一个Social的过程。实际上我感觉这次活动中起到协调的作用找到了整个项目在设计的创意和技术的能力的中间点同时劝住了执着的设计和鼓舞了想摆的技术我好NB避免大部分无效沟通。
技术是比赛中的限制但不会是瓶颈。简单的技术与有趣的创意能搭配出足够出色的结果。实际上写代码的四个人中有三个人没有事先学过自己需要的技术栈指pygame还有一个一直想在代码C的设计只可惜能力不够并无谴责意思只是表达事实现在想来我写的很多代码最终也被替换,只有制谱器和一些代码的算法被保留下来。
足够特殊的经历,推荐每个产品/设计/技术亲自参加一次。
一个必须要说的事是,通宵写代码真的有点难,建议中途小睡一觉,或者可以和小组成员接力一下。开空调有点冷,记得带好御寒的衣服或毯子。

View File

@ -0,0 +1,21 @@
---
{
title: "关于人工智能当前问题的一点想法",
draft: false,
type: "rambling",
created_at: "2024-05-17T00:00:00+08:00",
published_at: "2024-05-17T00:04:00+08:00",
updated_at: [ "2024-05-17T00:04:00+08:00", "2025-08-26T01:00:26+08:00"],
}
---
现在人工智能的两个典型问题是1.智能程度差 2.信息输入不够简单
先谈谈第二个问题目前常见的人工智能IO是文字输入和语音输入文字输出和多媒体输出。但是不能直接输入图片或视频。而是先做图片识别和视频处理再将文字转发。好处是专人干专事和节省带宽降低开销坏处是信息损失。我是喜欢x86不喜欢arm的人You know what I mean. 说实话力大砖飞是我的期望。
再看第一个问题一个广泛接受的理论是智力同模型大小成正比。而更大的模型和显卡显存直接相关不可避免的导致cost++。
我有时候在想低参数的模型能不能和幼年的儿童做类比期望上它们的一些结果不合或部分合逻辑。chatGPT3.5就像一个没意识到自己错误的小孩。一心觉得自己逻辑正确。更进一步的,这些差错,是否是想象力的一种可能,甚至是创新的源泉。
我认为这并不是不可能。我们总是对各种东西持怀疑态度,推动了人类科学进步。但是,循规蹈矩会让我们对大部分自然现象熟视无睹。想象一颗往天上掉的苹果可能是很多孩童梦中的情景。这种对想象和现实的差错的仔细研究是怀疑和探究的关键。
当然想要利用这种“差错”首先需要想办法让其“大量”起来。然后需要一个能判断正误的东西GPT-4和一个能做探究的东西大概只有人了我果然是牛马
注意这只是对GPT3.5的外特性的一些遐想和延申。我知道其内部就是一个做接龙的鹦鹉,不过,我还是希望多保留一种想法。
搬运时记录:
这段看起来写的莫名其妙的,有点癫了
搬了,是折磨读者,所以搬了

41
2024-06/Hyprland.md Normal file
View File

@ -0,0 +1,41 @@
---
{
title: "Hyprland",
description: "作者开始尝试Hyprland平铺式桌面重装Ubuntu 24.04并配置了Clash、Timeshift和Fcitx5。Hyprland通过文件配置多显示器修改即时生效。遇到swww壁纸问题未解决。",
draft: false,
type: "article",
created_at: "2024-06-30T09:40:00+08:00",
published_at: "2024-06-30T09:56:00+08:00",
updated_at: [ "2024-06-30T09:56:00+08:00"],
category: '个人',
tags: [ "Linux" ],
tech_stack: [ "Hyprland","Linux" ],
tech_stack_percent: [ 6,4 ],
tech_stack_icon_names: [ "simple-icons:hyprland","simple-icons:linux" ],
tech_stack_theme_colors: [ "#10dbd7", "#263238" ],
}
---
!!!warning Legacy Article 过时的文章
此文章从旧博客迁移而来,编写时技术水平有限,仅供参考
!!!
今天开搞一个一直想搞的桌面: hyprland
hyprland是一个平铺式桌面理论上在熟悉快捷键后应该能有一个很高的效率。此外我希望这能成为一个新的开始关于linux新的有趣的技术的开始。
今天做的事:
备份原来linux中的少部分关键个人文件
设置Ubuntu镜像准备安装。
安装Ubuntu24.04
![安装界面](https://typecho.lichx.top/usr/uploads/2024/06/2182989347.png)
这个安装竟然自动使用清华镜像源 好耶!
设置Clash
安装hyprland
安装Ubuntu24.04
设置Clash
安装并设置timeshift
安装hyprland 取消了sddm的安装
配置hyprland这东西设置多显示器的分辨率和方向是通过文件设置的。但是在修改文件后立刻就能更改。这一点感觉有点特别。
配置fcitx5
swww运行不正确看不到壁纸给原作者发很烂的issue。希望作者别打我。
今天就做到这么多,有时间再试试解决壁纸问题。(遇到困难睡大觉说是)
推荐一个很好听的歌:幽世桔梗

100
2025-08/SiteBuild.md Normal file
View File

@ -0,0 +1,100 @@
---
{
title: "建站小记",
description: "作者选择自行搭建博客以挑战技术能力追求完全控制权。项目使用NuxtContent + SSG、TypeScript、Tailwind CSS等技术栈开发中遇到Nuxt ColorMode切换动画问题、Content的Schema类型难题以及响应式布局与动画冲突等挑战。目前进度不理想管理端尚未完成能否完工取决于后续时间。",
draft: false,
type: "article",
created_at: "2025-08-25T02:54:33+08:00",
published_at: "2025-08-25T04:17:34+08:00",
updated_at: [ "2025-08-25T02:54:33+08:00" ],
category: '记录',
tags: [ "前端", "文档" ],
tech_stack: [ "Vue.js","Nuxt","TypeScript" ],
tech_stack_percent: [ 60,70,40 ],
tech_stack_icon_names: [ "mdi:vuejs","lineicons:nuxt", "lineicons:typescript" ],
tech_stack_theme_colors: [ "#41b883", "#a179dc", "#054e63" ],
}
---
## 为什么我要自行建设博客?
> We choose to go to the moon in this decade and do the other things, not because they are easy, but because they are hard; because that goal will serve to organize and measure the best of our energies and skills, because that challenge is one that we are willing to accept, one we are unwilling to postpone, and one which we intend to win, and the others, too.
> —— John F. Kennedy, 1962
> 我们选择在这个十年内登上月球并完成其他任务,不是因为它们容易,而是因为它们困难;因为这个目标将有助于组织和衡量我们最好的精力和技能,因为这是一个我们愿意接受的挑战,一个我们不愿推迟的挑战,一个我们打算赢得的挑战,当然也包括其他挑战。
> —— 约翰·F·肯尼迪1962年
从某种程度上来说,我自行搭建博客的原因与以上发言类似 ~~(有点大言不惭了)~~ ,我需要一个测试自己的机会。我已经构建了几十个项目,我对它们尽心尽力,但是它们中大多数生命周期很短,往往是为了实验、比赛等短期目标。这些代码往往不需要过高的可扩展性和稳定性。同时,我注意到我的能力似乎已经足以支撑我去构建一个更加大型的长期项目。思来想去,博客是一个不错的选择,并且我可以通过它来记录我的学习和生活。
构建博客的原因之二是,市面上现有的博客也许它们能满足我的需求,但是我感觉研究它们的配置没有我自己重写一个有趣。而且,我希望能够完全控制我的博客内容和样式,而不是被平台所限制。
## 进展如何?
当我实际开始写之后我注意到这件事远比我设想的复杂。有很多技术我只是想当然的认为可行虽然结果也确实能行但是有大量的细节需要注意。不得不说首次编写本博客的现在已是暑假之末但是项目进度很不理想。先不考虑管理端博客部分有两个页面没创建一个页面有bug已有页面中有一个组件还没开始写。
而管理端前后端呢?更是不见踪影,与博客配对的相关配置,也处于残缺状态。
考虑到后续的比赛、保研以及可能的实习。我只能说,这项目能不能写完纯看缘分。
## 博客技术
聊点不那么现实的
这次博客使用了Nuxt来编写Nuxt构建后的产物的加载速度给我留下了颇为深刻的印象。在与ChatGPT、Claude 聊了一段时间后确定了用Nuxt Content + SSG作为博客核心。
就目前的开发体验来说Nuxt的启动和加载确实不够快但是其代码确实足够优雅我很喜欢。虽然从一定角度来讲为了所谓的优雅牺牲了太多开发效率消耗了太多时间在查文档和debug上。 但是我觉得这是值得的。从某种程度而言,我学计算机就是想来干这个的。
对于其他的技术栈,目前博客使用了
```Text
TypeScript
Pinia
Tailwind CSS
Nuxt UI
HighCharts
MdEditor V3
```
那些大家都在用的就不放了
这里面 TypeScript Tailwind CSS 能明显提升前端体验我说实话我已经不太确定自己能不能写纯CSS项目了TS更不用多说JS看了半小时我就开始用TS了。好用爱用。
在用Nuxt时顺便被安利了Nuxt UI 就目前来讲还可以用的没有TDesign熟练有些组件即便有还是选择了手搓主要还是控制上差了一点。这次没用TDesign主要是和博客想要的风格不符TDesign有点太正式了。ElementPlus也不考虑有点丑我用的也少。
Nuxt的Pinia集成也是一个难点曾几何时Nuxt的Pinia集成搞了我一下午的时间。Vuex还没学过我估计这个项目也不需要Pinia够了。
HighCharts是个意外我本来想用ECharts的但是ECharts不支持坐标轴中放HTML代码只支持纯文字。而HighCharts虽然也不是能接受任意HTML但至少支持svg。配合[icons](https://icones.js.org/)这个强大的网站,够用了。
HighCharts开源但商用收费拿来建个人博客还是没问题的。
PSHighCharts的介绍页面图表又多又好看期待后续有新想法继续使用。
MdEditor V3 这是我第一个使用的前端Markdown编辑/渲染器。之前做实验就用过但是这次我没有首选它而是选了MilkDown不好用。
从 MilkDown core 和 MilkDown creep 中可以看到这个项目的潜力。但是实在有点难配了文档真看不懂感觉写的有点屎当然我觉得还是自己能力不足。只能说为了WYSIWYG实在不值得双屏写MD我是没什么障碍的例如我现在就在WebStorm里写MD然后同步渲染到dev网页里。因此索性放弃了MilkDown。
后来又试了 Markdown-it。如果我没记错放弃它的原因是因为滚动不是连贯的。
试来试去,发现最初遇到的就是最好的,果断复合了。
PS正在写这篇文章的时候发现上面的代码段竟然在我Navbar的上面一看z-index是10000绝了。改成5了我看看会出什么问题。
## 遇到的各种难点
### Nuxt ColorMode
这个插件真的很神奇。如果我没记错这个插件的问题是在切换主题时有些设置了过渡动画的DOM没有播放动画而是一步到位。我真的卡了很久但最后没办法自己实现了一个ColorMode切换器丝滑无比。而且我认为原理上和Nuxt-ColorMode应该是一致的都是在顶级中添加dark class。但是用这插件就是会出现问题最终含泪放弃。
### Nuxt Content
Nuxt Content 的文档确实需要仔细翻才能找到某些功能。从某种程度上也是吃了英语不好的亏。但总体来说,这个手册质量还是在线的。
但是我也确实有没能解决的问题。
Content Config 中有一个 Schema 的属性它会利用zod自动生成一个ContentCollectionItem属性。Schema作用是定义文章元数据如果定义了rawbody那么将得到文章原文。
问题出在 queryCollection 后的 select 方法上select方法接受一组键这些键都是Schema中定义的数据结构但是问题在于我只是不想要其中的rawbody因为在列表加载原文可能会浪费很多性能。
在这种情况下,我希望将 Schema 提取出来然后将所有非rawbody的键写入到select中。这么做虽然没问题但是TS不高兴。虽然我们通过 Schema 定义了 文章属性,但是它与自动生成 ContentCollectionItem 毫无关联。对于ts来说我们在试图将string赋值给keyof ContentCollectionItem这显然是不行的。
而ContentCollectionItem也没有export出来无法直接使用。
目前的解决方案是先连同rawbody一起加载出问题再说。理论上只有生成时会慢运行时不会受影响。
### 粘性布局、响应式更新与动画冲突
这三个东西随便缺一个都不会有我接下来要讲的神奇问题
在浏览其他人的博客时,我注意到大部分博客信息流旁会有一个随滚动而滚动的侧边栏,这个侧边栏通常是粘性布局实现的。
但我在具体实现上犯了难。
观察别人的博客HTML后确定应当将sticky的父设置为table然后把sticky DOM设置为float left主DOM设置为 float right。这样粘性布局就搞定了。
在其基础上,设置断点对应的宽度,实现响应式布局,也没问题。
再加上动画设置,结果问题出现了。
由于使用了浮动而两个DOM都是块。当两者宽度大于父DOM宽度时两个DOM会从左右布局变为上下布局。在动画开始时是正确的动画结束时是正确的但是动画进行时外部的DOM宽度减小速度过快内部的宽度减小速度较慢导致内部两DOM变为上下布局。
解决方法是把原先会响应式更新的侧边栏的宽度改为固定值然后让右侧DOM根据父组件计算自己的宽度。这样就不会出现上述问题了。
## 未完待续
最近保研真是焦虑quq

15
2025-08/announcement.md Normal file
View File

@ -0,0 +1,15 @@
---
{
title: "构建中",
draft: false,
type: "announcement",
isPinned: true,
created_at: "2025-08-25T00:00:00+08:00",
published_at: "2025-08-25T00:00:00+08:00",
updated_at: [ "2025-08-25T00:00:00+08:00"],
}
---
!!! warning
本站正在积极建设中。如需要,你可以浏览[旧站](https://typecho.lichx.top)。
文章正在搬运中quq
!!!

58
Feature.md Normal file
View File

@ -0,0 +1,58 @@
---
{
title: "博客开发TODO List",
description: "服务器需要支持的Feature",
created_at: "2025-08-22T08:00:00+08:00",
published_at: "2024-08-22T00:00:00+08:00",
updated_at: [ "2024-08-22T08:00:00+08:00"],
category: '规划',
tags: [ "规划", "文档!" ],
draft: false,
tech_stack: [ "Vue.js","ASP.Net Core" ],
tech_stack_percent: [ 12,60,15 ],
tech_stack_icon_names: [ "mdi:vuejs","mdi:language-csharp"],
tech_stack_theme_colors: [ "#41b883", "#a179dc" ],
}
---
# 服务器需要支持的Feature
- [ ] 主页
- [ ] 网站标题
- [x] 文章列表(时间排序)
- [x] 文章标题
- [x] 文章摘要
- [x] 文章标签
- [x] 置顶
- [x] 公告
- [x] 絮语
- [ ] 分页
- [ ] LOGO
- [ ] 个人信息展示
- [ ] RSS 订阅
- [ ] 登录管理页面
- [ ] 文章详情页/article
- [x] 文章标题
- [x] 文章内容
- [x] 文章标签
- [ ] 评论区 ??
- [ ] 评论列表
- [ ] 评论表单
- [ ] 评论回复
- [ ] 评论点赞
- [ ] 评论删除
- [ ] 上一篇/下一篇文章链接
- [ ] 归档页/archive
- [ ] 按时间归档
- [ ] 按类别归档
- [ ] 搜索
- [ ] 友链/friend
- [ ] 关于
- [ ] 后台管理/admin security??
- [ ] 文章编辑
- [ ] 新建文章
- [ ] 编辑文章
- [ ] 删除文章
- [ ] 文章预览
- [ ] markdown mermaid ... 支持
- [ ] 友链管理
- [ ] 个人页面管理

View File

@ -1 +1,6 @@
---
{
draft: true
}
---
Lichx Blog Articles Lichx Blog Articles

14
test.md
View File

@ -1,14 +0,0 @@
---
{
id: 001,
title: "标题001",
description: "这是一个测试文档",
created_at: "2023-10-01",
published_at: "2023-10-02",
updated_at: [ "2023-10-03","2023-10-04" ],
tags: [ "测试", "文档" ],
draft: false
}
---
# 测试文档
这是一个测试文档的内容。

15
test/announcement_test.md Normal file
View File

@ -0,0 +1,15 @@
---
{
title: "announcement_test",
draft: true,
type: "announcement",
isPinned: true,
created_at: "2025-08-25T00:00:00+08:00",
published_at: "2025-08-25T00:00:00+08:00",
updated_at: [ "2025-08-25T00:00:00+08:00"],
}
---
!!! warning
这是公告
!!!
isPinned 是置顶 不限类型 默认false

View File

@ -1,13 +1,14 @@
--- ---
{ {
id: 002, title: "文章测试",
title: "标题002",
description: "这是一个测试文档", description: "这是一个测试文档",
created_at: "2023-10-01", draft: true,
published_at: "2023-10-02", type: "article",
updated_at: [ "2023-10-03","2023-10-04" ], created_at: "2023-10-01T08:00:00+08:00",
published_at: "2023-10-02T00:00:00+08:00",
updated_at: [ "2023-10-03T08:00:00+08:00","2023-10-04T08:00:00+08:00" ],
category: '测试',
tags: [ "测试", "文档" ], tags: [ "测试", "文档" ],
draft: false,
tech_stack: [ "Vue.js","ASP.Net Core","SQL Like" ], tech_stack: [ "Vue.js","ASP.Net Core","SQL Like" ],
tech_stack_percent: [ 12,60,15 ], tech_stack_percent: [ 12,60,15 ],
tech_stack_icon_names: [ "mdi:vuejs","mdi:language-csharp", "tabler:brand-mysql" ], tech_stack_icon_names: [ "mdi:vuejs","mdi:language-csharp", "tabler:brand-mysql" ],
@ -16,4 +17,8 @@
--- ---
# 测试文档 # 测试文档
这是一个测试文档的内容。222 这是一个测试文档的内容。222
## 不使用Map的原因是 Nuxt Content 对键的不正确转义 ## 不使用Map的原因是 Nuxt Content 对键的不正确转义
```js
const x = 'test';
console.log(x);
```

20
test/rambling_test.md Normal file
View File

@ -0,0 +1,20 @@
---
{
title: "絮语测试",
draft: true,
type: "rambling",
created_at: "2025-10-01T08:00:00+08:00",
published_at: "2025-10-02T00:00:00+08:00",
updated_at: [ "2025-10-03T08:00:00+08:00","2025-10-04T08:00:00+08:00" ],
}
---
这是一个测试文档的内容。222
这是一个测试文档的内容。222
这是一个测试文档的内容。222
这是一个测试文档的内容。222
这是一个测试文档的内容。222
## 不使用Map的原因是 Nuxt Content 对键的不正确转义
```js
const x = 'test';
console.log(x);
```