RAG 基本应用——Beancount 记账效率优化
本文来自于一个手工记账博主的脑洞大开,尝试通过向量数据库和 RAG 来想办法让自己少打几个字。顺便宣传一下最近开源的记账 bot. 背景 自从 2020 年将记账系统迁移到 Beancount 后,我就开发了一个 Telegram Bot 来辅助我记账。通过它,我可以使用 {金额} {流出账户} [{流入账户}] {payee} {narration} [{tag1} {tag2}] 的文法来快速生成一条交易记录并落库。虽然后来将这个 Bot 迁移到了 Mattermost 上,但四年以来,核心逻辑并没有做任何改动。 最近经常骑车去打球,每次骑完车之后总需要掏出手机去记账,输入诸如 1.5 支付宝 哈啰单车 自行车 的文本。虽然已经手动记账记了七年,但完全相同的内容记得次数太多了,也难免会有些枯燥。 ..
更多USTC Hackergame 2022 玩耍记录
上周日晚上,偶然看到一个原神玩家群(?)里面有人发了一张图,说是 USTC 的 CTF. 上一次玩 CTF 还是六年前,不过这次一时兴起打算玩玩看。 由于上班比较忙,所以只玩了一天多一点,做了一些简单题。 注册 周日的半夜,在群里看到了一张 CTF 的图,于是兴冲冲地跑去注册,没想到直接吃了闭门羹🌚。 周一早上八点,准时开干。 Binary Flag 自动机 题目在这里。 打开之后可以看到一个对话框,鼠标一碰到“狠心夺取”的按钮,它就会跑掉。 拖到 IDA 里反编译,可以看到 sub_401510 函数中存在输出 flag 的代码,但生成 flag 的代码被混淆过,很难看懂。 在这个过程中,看到了出题人给的注释:“Hint: You don’t need to reverst the decr..
更多一种 IPv6 地址编码方案
又搞了一些骚操作:把一个 IPv6 地址压缩成一个短字符串。 背景 线上某张表有一个 VARCHAR 字段,用于存储 IP 地址。之前只存储 IPv4 地址,而 IPv4 地址的最大长度为 15(如 255.255.255.255),因此字段宽度只设置了 20。 当我们要存储 IPv6 地址时,却发现 IPv6 地址的最大长度是 39(如 1111:2222:3333:4444:5555:6666:7777:8888),而变更字段类型的尝试也以失败告终,因此我们需要找到一种方法来将 v6 IP 塞进长度为 20 的 VARCHAR 字段中。 一些简单的尝试 随便找一个 v6 IP,如 240e:17:ce8:fd00:52a8:6001:6e05:96f6,然后尝试将它缩短。 去掉冒号是否可行? ..
更多HomeLab 玩法简单分享
大学毕业之前一个冲动买了台式机,又一个冲动买了台 Linux 主机。到现在它已经运行了四年多了,简单分享下自己的玩法。 背景 毕业之前在公司附近租了房,再加上受到了网络的蛊惑,于是陷入了“买一台 NAS 来大幅提高生活质量”的念头之中。看了很多成熟的 NAS 方案(比如群辉或威联通),最后还是在高昂的价格面前望而却步。 当时的我,傻乎乎地认为品牌 NAS 的平台只是“SMB + RAID + 媒体服务器”而已,那么既然成熟的方案那么贵,为什么不搞个 Linux 自己折腾呢?脱离了平台的束缚,反而可能有更多的可能性。 最后,我决定自己买硬件搭一台 Linux 主机,做一个 HomeLab. 硬件选型 选择主机硬件的时候考虑了自己的需求,大致如下: 价格便宜:我只是个穷学生,看他们玩虚拟化的都上了 E..
更多由 TT-RSS 解析数据库地址失败引出的一个问题
水一篇文章,主要用来告诫自己认真看文档。🌚 背景 下午随手在树莓派上升级了一下 TT-RSS 的镜像,然后它当场爆炸,看了容器日志告诉我 PHP 无法解析数据库的域名 database.postgres. 尝试解决 进到容器里尝试手动解析一下,但是报错 nslookup: clock_gettime(MONOTONIC) failed. 用自己的另一台运行 Debian testing 的 x86 机器运行了一下,无法复现这个问题。 Google 了一下找到 Alpine 的一个 issue,简单看了一下发现是 Alpine 3.13 升级了 musl,使用了新的系统调用 clock_gettime64. 在容器里跑了下 date,结果如下: 12$ docker run --rm -it alp..
更多开始使用 Beancount
使用 Beancount 记账已经有将近两个月了,简单写一写我都做了什么。 注:本文只是一个流水账,并不是一个 Beancount 使用教程,如果想详细了解 Beancount 的话,可以参考下面提到的那些文章。 一些背景 Beancount 是什么 如上文所说,Beancount 是一个记账工具,更准确些来讲,是一个复式记账工具。但直到我写这篇文章的时候才发现官方将其定义为“一种复式记账计算机语言”。 简单来讲,它可以让你以纯文本方式记账,并通过一种类 SQL 的语言来对交易进行查询。记账文件还可以配合 Git 进行版本控制。 此外,Beancount 官方提供了一个名叫 fava 的图形化管理工具,它基于 Web,能够提供比原生页面更加丰富的内容,一般记账所需要的信息一目了然。想体验的同学可以在..
更多NTP 简介
昨天遇到了一个神奇的问题,最后发现是服务器的 ntpd 没开导致本地时间没有同步😂 正好了解一下 NTP. NTP 协议 NTP 协议用于在网络之中通过分组交换进行时钟同步。基于 UDP,使用 123 端口。 协议实现 客户端和服务器间会通过修改版的 Marzullo 算法 完成时间同步。 在传递时间时,服务器会给出 64 位的时间戳,浮点精度为 32 位。这个时间戳每 2^32 秒会翻转一次,理论分辨率为 2^-32 秒。时间戳以 1900 年 1 月 1 日作为开始时间。 NTP 时间源会进行分层,通过阶层 n 同步的服务器将运行在阶层 n+1. 分层机制用来防止循环请求。阶层 0 的服务器与高精度计时设备(如原子钟)相连,也成为基准时钟。 使用 NTP 同步 Linux 系统时间 ntp..
更多