admin 发布的文章

这几天折腾typecho中,当然,免不了折腾些小工具,昨晚花了一个晚上捣鼓几行代码,晕得很,不过总算成了。
它的功能是找到评论页里的csrf token,然后提交一个请求,懂的自然懂,用处不解释了。

                import "github.com/dop251/goja"
....
        tokenRe := regexp.MustCompile(`input\.value[\s\S]*?\(\);\s*`)
        tokenScriptMatch := tokenRe.FindStringSubmatch(string(commentBody))

        var token string
        var formData url.Values
        if len(tokenScriptMatch) > 0 {
            js := tokenScriptMatch[0][14:]
            token = executeJS(js)
            fmt.Println("Found token:", token)
            formData = url.Values{
                "author": {author},
                "mail":   {mail},
                "url":    {postURL},
                "text":   {text},
                "_":      {token},
            }
        } else {
            fmt.Println("No token found in the comment page.")
            formData = url.Values{
                "author": {author},
                "mail":   {mail},
                "url":    {postURL},
                "text":   {text},
            }
        }

....

func executeJS(jsCode string) string {
    vm := goja.New()
    val, err := vm.RunString(jsCode)
    if err != nil {
        fmt.Println("Error executing JavaScript:", err)
        return ""
    }
    return val.String()
}

用久了typecho,觉得还蛮轻巧好使,我喜欢轻量及极简(寒碜)风格。不过,功能确实也简陋了。
目前已经发现的更改需求:

  • 首页需要把分类标签做在导航条上。
  • 首页仅显示指定的分类的文章,其余分类在自己的分类标签下才能看到。
  • 最近文章,需要根据分类来,就是只显示当前分类的最近文章而不是全部。
  • 资源使用相对路径,方便更换域名和套cdn。

差不多都完成了。再继续找痛点继续改,把它改完善些,到时候我再贴出来代码。
当然,这样一改就是和官方版完全绝缘了,不过官方也不指望他的更新了。

gpt越来越忘事,花了一上午调教,终于调好了。
心得是,在每一个修改要求后都唠叨一下:

给我完整代码! 在修改时,请严格保持yaml的字段名等你不允许擅自修改,同时我没让你改的代码严禁你改。

至于代码干啥,先卖关子了,毕竟还在继续改,只贴一下yaml文件,基本就能猜到了:

http_port: "880"  # HTTP 监听端口
https_port: "8443" # HTTPS 监听端口
backend: "http://1.2.3.4"  # 后端服务的完整 URL,包含协议、端口和路径
cert_file: "./cert"    # HTTPS 证书文件
key_file: "./key"      # HTTPS 密钥文件

replaces:                              # 替换规则
  "fnc2o": "www"
  "foobar": "barfoo"

host: "www.domain.com"  # Host header for backend requests

max_requests: 4  # 每分钟最大请求次数
max_404s: 3         # 针对一个 IP 的最大 404 返回次数
unblock_time: 10         # 解封时间,单位为秒

省流,先说二条结论:
小鸡IO跑分并不可靠。
LXC未必比KVM性能好(越垃圾的IO越如此)。

前几天博文有KS-1跑分,HDD,4*2T,RAID10,我再贴一下:

---------------------------------
Block Size | 4k            (IOPS) | 64k           (IOPS)
  ------   | ---            ----  | ----           ---- 
Read       | 1.27 MB/s      (318) | 18.04 MB/s     (281)
Write      | 1.30 MB/s      (327) | 18.66 MB/s     (291)
Total      | 2.58 MB/s      (645) | 36.70 MB/s     (572)
           |                      |                     
Block Size | 512k          (IOPS) | 1m            (IOPS)
  ------   | ---            ----  | ----           ---- 
Read       | 80.67 MB/s     (157) | 82.15 MB/s      (80)
Write      | 84.95 MB/s     (165) | 87.62 MB/s      (85)
Total      | 165.63 MB/s    (322) | 169.78 MB/s    (165)

可以看到,4K是相当的慢,这也是HDD的常态。
那么,这台机器开一个小鸡再跑一下分呢:

---------------------------------
Block Size | 4k            (IOPS) | 64k           (IOPS)
  ------   | ---            ----  | ----           ---- 
Read       | 294.61 MB/s  (73.6k) | 1.76 GB/s    (27.5k)
Write      | 295.38 MB/s  (73.8k) | 1.77 GB/s    (27.6k)
Total      | 589.99 MB/s (147.4k) | 3.53 GB/s    (55.2k)
           |                      |                     
Block Size | 512k          (IOPS) | 1m            (IOPS)
  ------   | ---            ----  | ----           ---- 
Read       | 2.96 GB/s     (5.7k) | 2.95 GB/s     (2.8k)
Write      | 3.11 GB/s     (6.0k) | 3.15 GB/s     (3.0k)
Total      | 6.07 GB/s    (11.8k) | 6.10 GB/s     (5.9k)

看到看到没,起飞啦起飞啦! 这已经是很不错的NVME的水平!

为什么会这样呢? 因为小鸡的磁盘是启用的write-back(unsafe)模式。简单的说,就是尽可能的母鸡缓存IO。内存够空的话,读写磁盘近乎等于读写内存。能不快吗?

结论1就是这样得出的。
结论2得出理由是,lxc是直接主机的io,不能设置write-back(unsafe)模式。主机的通常缓存不大,毕竟要考虑数据安全。一旦开始刷盘,那性能就嘎嘎往下掉了。

我以前一直在纳闷为什么老域名被bing给k掉了,甚至还给bing投过诉但驳回。折腾半天,我一直都没有想起去查一下这域名的历史记录。直到今天我打算为我的采集站注册域名时才顺带查了一下,我的天! 那域名恶贯满盈啊,一会私服,一会博彩。。浪费我几个月时间。
难怪这域名品相还不错,但就是没人要。好吧,我也等它到期就扔了。
不过话说搜索引擎也够小心眼,都这么多年前的事了都还记得,它就不能查询一下域名注册时间确定是新主人吗。

t05(1).jpg