Outline wiki 同步
说明
我搭建了一个outline的wiki来做自己的文档管理,然后outline wiki支持web hook 所以我写了个简单的golang脚本用来同步wiki和博客的内容,这样hugo就相当于拥有了一个可视化编辑的编辑器,也不用使用git来管理博客的更新了,这些内容都可以自动化了。下面是博客内容的一些测试。
Title
- A
- b
subtitle
3级标题
4级标题
##### outline wiki 不支持5级标题
c语言的代码例子
#include<iostream>
using namespace std;
int main(){
cout<<"Hello World!!"<<endl;
// 这是一条注释
return 0;
}
图片的链接还需要修复,从表现上看图片在outline中是通过api接口从缓存中获取的,现在还无法直接拿到对应的图片
从pic图床拿到的图片,目前可以先试用图床。
表格测试 | 4 | |
---|---|---|
12 | ||
2 |
$$ \lim_{x\rightarrow0} \frac{\sin(x)}{x} = 1 $$
分割线
2B or not 2B
遇到的问题
- outline中会自动添加换行用来在outline中展示换行,转换到hugo的markdown时需要处理
- 数学公式在outline中默认是3个$来表示,需要替换为常见的2$
需要在theme中开启下公式支持
# KaTeX mathematical formulas config (KaTeX https://katex.org/)
# KaTeX 数学公式配置 (KaTeX https://katex.org/)
[params.page.math]
enable = true
试试看公式支持 $ \sin(x) $
新的工作流
现在我可以方便地使用emacs来编辑我的outline wiki的文档,然后保存之后他会自动同步到blog中,现在写博客的效率高了300%吧
更新
- 支持创建、发布、取消发布、删除等事件的同步了
Update
February 29, 2024
outline wiki 同步机制的更新。
outline wiki再更新的时候会几乎是实时地将文档的更新通过webhook 同步到golang 的服务,每次在outline上更新的时候都会遇到同一个问题,存在过多的更新。为了解决这个问题,使用到了golang的任务同步机制。
select {
case <-ctx.Done():
// 如果收到取消信号,停止处理
println(taskId + ": 同步被取消")
return
case <-time.After(time.Second * 80):
println(taskId + ": 任务超时")
return
case r := <-funcRes:
close(funcRes)
fmt.Println(taskId + ": 任务完成 :" + r)
return
}
简单来说每当任务启动的时候其实都是启动了一个新的goroutine,这个goroutine其实 可以通过channel的机制来互相同步消息。
理想情况下,每个go routine接受到消息的时候不会立即开始同步任务,而是先等待一段时间,看下之后是不是又新的同步任务到来,当有新的同步任务的时候,新的同步任务会先取消之前的一个任务。这样抢占式地调度一个post资源的更新,最终只有最后一个post个同步更新任务被执行了。
这个能力目前还在调试中,现在能够取消之前的goroutine,但是还是会有之前的task被执行完成。
目前还是没搞定,还在测试中。一开始确实是等待啦一段时间,但是没有一直等待下去,过了一段之间之后,所有的任务就都被调用起来了,这个等待的时间大约就是sleep的时间。
ok 这次看上去还是挺有希望了的,代码的组织结构看上去也还是有优化的空间,主要来说分为 调度任务部分,同步逻辑部分,调度任务主要负责此类的同步任务的调度,抢占和取消逻辑。同步任务模块可以用来实现在不同的平台上的同步,例如博客,twitter,telegram上进行同步。这样的逻辑拆分就会较为合理。
good, it looks nice 没有多余的任务执行,都被取消了,果然简洁的设计往往也是正确的设计。