Contents

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图床拿到的图片,目前可以先试用图床。

https://pic.xn--oxap.xyz/images/2024/02/19/image.png

表格测试 4
12
2

$$ \lim_{x\rightarrow0} \frac{\sin(x)}{x} = 1 $$

分割线


2B or not 2B

遇到的问题

  1. outline中会自动添加换行用来在outline中展示换行,转换到hugo的markdown时需要处理
  2. 数学公式在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 没有多余的任务执行,都被取消了,果然简洁的设计往往也是正确的设计。