博客 | Blog

用于 beancount 快速记账的 Telegram Bot

当年从随手记迁移到桌面记账方式(Excel/GnuCash/Beancount)后,确实有一段时间的不适应。 后来实在没有找到好用的移动端记账 APP,同时也适应了桌面记账,遂被驯化认为不需要在移动场景 记账。Costflow 出来之后没有第一时间尝试的原因也在于此,使用一段时间基于 costflow 语法 的 Telegram 机器人之后,发现经常是想要的账户没有配置,导致使用频率并不高。

前段时间的某一天突然意识到,为什么要提前配置账户信息呢?账户信息全部都在账本文件中,直接 查询账本文件不就可以避免冷启动的问题么。遂自己开坑写了一个新的记账机器人 beancount-bot

使用一月有余,今天完善了一下相关功能,更新了文档和使用例子。下面是几点简要说明:

  1. 适合手动记账党 :D
  2. 适合有自己服务器的人(境内服务器需要配置代理),部署在本地 NAS 上也是可行的
  3. 不兼容 costflow 语法,不需要账户信息的配置,账户的匹配是读取账本文件,类似编辑器的账户补全

在这里分享给大家,希望可以节省一点记账/对账的时间,有兴趣的欢迎尝试。

GitHub notification cannot clear bug

A few days ago I received a new type of spam email. Basically they create a GitHub repo and then spam everyone they want in the issues by @ them. Of course this gets banned after being reported. I do not do anything because I think someone else will do the reporting work.

Days later, when I log in to GitHub, I notice that there is a dot in the notification box, which means that there are unread notifications. So I tried to mark all notifications as read. The problem is that the spam notifications refuse to be deleted. Why is that? After checking I found that the spam repo has been deleted, maybe by GitHub. I tried everything in the Wed UI but failed.

...

在 cron/systemd timer 任务中的 git 认证

本文回答如何在 systemd timer 任务或者 cron 任务中进行 git 认证,方便进行 git pull/push 操作。

首先,不推荐 ssh-key 方式,不推荐,因为安全性和粒度控制不够。设置无 passphrase 的私钥(不安全),无法分 repo 控制权限。

推荐使用 https 配合 GitHub Personal Access Token 的方式,主要使用 gitcredentials - Providing usernames and passwords to Git,参考文档链接 https://git-scm.com/docs/gitcredentialshttps://git-scm.com/book/en/v2/Git-Tools-Credential-Storage

首先在 https://github.com/settings/apps 生成 Personal Access Token (PAT),建议使用细粒度的 token,降低泄露 token 的损失。

其次在需要操作的 repo 根目录进行设置

# 使用文件的方式储存认证信息
git config --local credential.helper store
# 使用路径来区分不同的认证信息
git config --local credential.useHttpPath true

设置完毕后手动操作一次,保存好 repo 的认证信息即可,认证信息储存在 ~/.git-credential.

数字生活 2023Q2

发现进行增量更新并不方便,还是在进行增量更新后附上一份最新的工具库清单。

  • 输入
    • [[miniflux]]
    • 播客重新用回 Overcast,解决了网络问题体验还是很棒的,小宇宙这种国产审查平台再也不见。
  • 输出
    • 几乎没有输出,所以也就没有变化。
  • 工具
    • 小票管理直接上传到 Google Drive,充分利用其强大的搜索能力(OCR),将前期 Google Keep 中积攒的通过 Google Takeout 导出并上传至 Drive。
  • 硬件
    • 新增了 [[rtx 4090]] 可别再说没有硬件条件做实验了
    • 电源适配器 小米 67W 2C1A
  • 信息流
    • 几乎放弃了 readwise 为什么呢?使用的摩擦力终究是大了一点点

最后,完整版本的工具库抄录如下

  • 输入
    • 社交网络:Twitter
    • 论坛:V2EX, [[hacker news]]
    • RSS 订阅 ([[miniflux]]),主要信息来源,订阅了包括博客、newsletter、微信公众号、微博时间线等内容
    • 视频:Youtube, Netflix, BiliBili
    • 音乐:Spotify
    • 播客:Spotify, Overcast
    • 书籍:Kindle, 墨案
  • 输出
    • 笔记:[[Obsidian]]
    • 博客
    • 书评:goodread
    • Twitter
  • 工具
    • 即时通信 [[telegram]], Wechat
    • Dropbox, Google Drive 文件同步与备份,在线文档
    • Pinboard 网络书签
    • Cubox 作为个人网络收藏内容仓库
    • Toggl 时间记录
    • Anki 背诵
    • Instapaper 稍后阅读
    • Bitwarden 自建的密码管理及两步验证管理工具
    • RSSHub 自建 RSS 辅助工具
    • Clash Surge 代理工具
    • 滴答清单 待办管理工具
    • Google Calendar 个人日程管理
    • Beanocunt 个人金融数据
    • Airtable 个人物资管理 [[inventory]]
    • Google Drive 作为扫描小票收纳仓库
    • fastmail 托管邮件服务
    • Readwise 作为回顾工具
    • iCloud 2T 用于照片和备份
    • https://healthchecks.io/ 定时服务监控
    • https://uptimerobot.com 网络服务监控
  • 硬件
    • 计算机 [[MacBook Air M1]] [[Mac Mini M2]]
    • 鼠标 [[鼠标 罗技(G)G304 LIGHTSPEED无线鼠标]] [[鼠标 罗技(G)G102 有线鼠标 黑色]]
    • 键盘 PFU HHKB Professional HYBRID Type-S
    • iPhone 12, 128G [[MI10S]]
    • [[Apple Watch S8]]
    • AirPods Pro
  • 信息流
    • miniflux saved → Instapaper -> Cubox (IFTTT)
    • Douban RSS -> Pinboard (IFTTT)
    • Instapaper/Twitter → Pinboard (self)
    • Twitter liked + 书评 + etc -> Readwise -> Obsidian
    • Web -> Cubox (manual)

【译文】理查德·汉明《你和你的研究》

本文翻译自 https://www.cs.virginia.edu/~robins/YouAndYourResearch.html 最初了解该文来自 [[阮一峰]] 对该文的精简版介绍,https://www.ruanyifeng.com/blog/2016/04/you-and-your-research.html

理查德·汉明《你和你的研究》 #

贝尔通信研究所学术研讨会发言 1986 年 3 月 7 日 J. F. Kaiser  J. F. Kaiser 贝尔通信研究所 445 South Street
Morristown, NJ 07962-1910 jfk@bellcore.com

在贝尔通信研究学术报告系列的一个研讨会上,加利福尼亚州蒙特雷海军研究生院的教授、退休的贝尔实验室科学家理查德·W·哈明博士于 1986 年 3 月 7 日在莫里斯研究与工程中心向约 200 名贝尔核心员工和访客发表了一场非常有趣和激励人心的演讲,题为“你和你的研究”。这次演讲集中讨论了汉明对问题“为什么很少有科学家做出重大贡献,而很多人在长期内被遗忘?”的观察和研究。他在贝尔实验室工作了 30 年,拥有超过 40 年的经验,直接观察了许多科学家的行为,向科学家提出了非常尖锐的问题,问他们做了什么、如何做以及为什么做,他还研究了伟大科学家的生活和伟大贡献的产生,进行了内省并研究了创造力理论。这次演讲讨论了他在独立科学家的特性、能力、特点、工作习惯、态度和哲学方面所学到的东西。

为了使演讲中的信息更广泛地传播,本文对该演讲进行了仔细的录音转录。这份转录包括随后在问答环节中进行的讨论。与任何演讲一样,转录版本因为失去了演讲者的声音语调和手势而受到影响;必须听录音才能重新捕捉到演讲的那部分内容。虽然# 理查德·汉明的演讲录音完全可理解,但有些提问者的言论却不是。在录音不可理解的地方,我已经在括号中加入了我对提问者言论的印象。在有疑问且能确认提问者身份的情况下,我和每个提问者核实了对其言论解释的准确性。

关于理查德·W·汉明博士的介绍 #

作为贝尔通讯研究公司学术研讨会系列的演讲者,来自加利福尼亚州蒙特雷海军研究生院的理查德·W·汉明博士由贝尔通讯研究公司应用研究副总裁艾伦·G·钦诺威斯介绍。

Alan G. Chynoweth:各位同事,以及我了解到许多来自贝尔实验室的前同事今天也在这里与我们共聚一堂,我谨代表大家表示问候。今天是一个特别幸福的日子,我非常高兴地向大家介绍我多年的老朋友和同事 Richard Hamming,或者我们都熟知的 Dick Hamming。

汉明是数学和计算机科学领域中的伟大人物之一,我相信在座的观众不需要提醒。他在芝加哥大学和内布拉斯加大学接受了早期教育,并在伊利诺伊大学获得了博士学位;然后他在战争期间加入了洛斯阿拉莫斯项目。之后,于 1946 年,他加入了贝尔实验室。当然,那就是我遇到汉明的地方——当我加入贝尔实验室的物理研究组织时。那些日子里,我们习惯一起午餐,而这个来自数学领域的奇怪家伙总是很高兴加入我们。我们总是很高兴有他在一起,因为他带来了很多非正统的想法和观点。我可以向你保证那些午餐是很有启发性的。

虽然这些年来我们的职业道路并不是非常接近,但我一直在贝尔实验室的走廊里和碰到汉明,并一直非常钦佩他所做的事情。我认为事实证明了一切。要详细说明太长了,但是让我举个例子,他已经写了七本书,讲述了各种数学、计算机、编码和信息理论领域的书籍,其中三本已经进入了第二版。这毫无疑问证明了理查德·汉明的多产和地位。

我想上次见到他应该是在十年前的都柏林一个相当有趣的小型会议上,我们都是演讲者。像往常一样,他非常有趣。这只是他提出的挑衅性思想的又一个例子:我记得他说过,“有些波长人们看不见,有些声音人们听不到,也许计算机有些思维人们想不到。”有了理查德·汉明,我们不需要计算机。我认为我们将会听到一场非常有趣的演讲。

讲座:Richard W. Hamming 博士的 “你和你的研究” #

很高兴来到这里。我怀疑我是否配得上这样的介绍。我演讲的题目是:“你和你的研究”。这不是关于管理研究,而是关于你个人如何做你的研究。我可以讲另一个主题,但我现在不会,因为这次演讲是关于你的。我不是在谈论普通的研究,我说的是伟大的研究。为了描述伟大的研究,我偶尔也会说诺贝尔奖级别的工作,不过它不一定要获得诺贝尔奖,我说的是那些我们认为重要的事情。例如相对论、香农的信息理论,任何一种杰出的理论——我所说的就是这种东西。

那我是如何开始这项研究的呢?在洛斯阿拉莫斯,我被召来管理那些其他人已经运行起来的计算机,这样那些科学家和物理学家就可以回到他们的工作中。我认为我是一个替罪羊。我发现虽然身体上我和他们一样,但他们与我不同。坦白地说,我非常羡慕。我想知道他们与我不同的原因。我近距离看到了费曼,我也看到了费米和泰勒。我看到了奥本海默。我看到了汉斯 · 贝特:他是我的老板。我看到了许多非常有能力的人。我对那些做事的人和那些可能会做事的人之间的差异非常感兴趣。

当我来到贝尔实验室时,我加入了一个非常有成效的部门。那时 Bode 是部门主管;香农也在那里,还有其他人。我继续思考“为什么”和“有什么区别”。后来我通过阅读传记、自传,并向人们询问“你是怎么做到这一点的?”来进一步探究这些问题。我试图找出区别所在。这就是这次演讲的内容。

...

Kindle生词本导入Anki

不翻历史记录我都快忘记自己居然还写过关于 Anki 的文章,2021年这篇日常轻松制作Anki卡片。最近两年几乎没怎么长期使用 Anki,讽刺的是制作卡片轻松后导致卡片数量剧增,一段时间没有复习就积攒太多,再也无法跟上了。

最近重新拾起 Anki 是看到这篇文章,Augmenting Long-term Memory ,其实这篇文章在几年前也看过,这次重新阅读已然可以唤起对 Anki 的热情,重新出发首先删除了积攒的 500+待复习,(即使这样还有700+待学习)。接着根据文章建议,将所有需要背诵的内容整合到一个 deck 中,这也符合当初纸质笔记本的 All in One 原则,为此整理了散落在日常笔记中所有的 word 和 anki 标签内容,对了推荐 Obsidian + Anki 用户使用这个插件 https://github.com/Pseudonium/Obsidian_to_Anki,具体细节这里不赘述。

今天的主题当然是将 Kindle 的生词本导入 Anki 中,没想到宝藏博主 @wzyboy 在多年前的博客中早就提到了,Anki —— 高效的间隔重复记忆软件,根据对应的仓库 https://github.com/wzyboy/kindle_vocab_anki 完成基本没有问题,需要注意的有以下几点:

  1. vocab.db 文件所在的 system 文件夹是隐藏的,显示隐藏文件夹即可,或者直接输入地址;
  2. kindleunpack 可以处理 azw 文件,我使用 Calibre 将 azw 词典转换为 mobi 格式后,html 标记语言完全错乱,无法使用后续脚本,所以使用 DeDRM 后的 azw 格式词典即可;
  3. 添加卡片格式,导入卡片完全按照 Readme 即可,效果完美。

数字生活 2023Q1

  • 发现进行增量更新并不方便,还是在进行增量更新后附上一份最新的工具库清单。
  • 输入
    • [[miniflux]]
    • 播客几乎没怎么听
  • 输出
    • 几乎没有输出,所以也就没有变化
  • 工具
    • 使用Google Keep 作为小票管理工具 // 数据大了之后几乎打不开,目前放在相册,但是 iOS 的相册文字 OCR 搜索并不靠谱,目前就先放着吧
  • 硬件
    • 新增了 [[Mac Mini M2]]
  • 信息流
    • Twitter liked + 书评 + etc -> Readwise -> Obsidian
  • 最后,完整版本的工具库抄录如下
    • 输入
      • 社交网络:Twitter
      • 论坛:V2EX, [[hacker news]]
      • RSS 订阅([[miniflux]]),主要信息来源,订阅了包括博客、newsletter、微信公众号、微博时间线等内容
      • 视频:Youtube, Netflix, BiliBili
      • 音乐:Spotify
      • 播客:Spotify,Overcast,小宇宙
      • 书籍:Kindle 墨案
    • 输出
      • 笔记:[[Obsidian]]
      • 博客
      • 书评:goodread
      • Twitter
    • 工具
      • 即时通信 [[telegram]], Wechat
      • Dropbox, Google Drive 文件同步与备份,在线文档
      • Pinboard 网络书签
      • Cubox 作为个人网络收藏内容仓库
      • Toggl 时间记录
      • Anki 背诵
      • Instapaper 稍后阅读
      • Bitwarden 自建的密码管理及两步验证管理工具
      • RSSHub 自建 RSS 辅助工具
      • Surge 代理
      • 滴答清单 待办管理工具
      • Google Calendar 个人日程管理
      • Beanocunt 个人金融数据
      • Airtable 个人物资管理 [[inventory]]
      • iOS photoes 作为扫描小票收纳仓库
      • fastmail 托管邮件服务
      • Readwise 作为回顾工具
      • iCloud 2T 用于照片和备份
    • 硬件
      • 计算机 [[MacBook Air M1]] [[Mac Mini M2]]
      • 鼠标 [[鼠标 罗技(G)G304 LIGHTSPEED无线鼠标]] [[鼠标 罗技(G)G102 有线鼠标 黑色]]
      • 键盘 PFU HHKB Professional HYBRID Type-S
      • iPhone 12, 128G
      • [[Apple Watch S8]]
      • AirPods Pro
    • 信息流
      • miniflux saved → Instapaper -> Cubox (IFTTT)
      • Douban RSS -> Pinboard (IFTTT)
      • Instapaper/Twitter → Pinboard (self)
      • Twitter liked + 书评 + etc -> Readwise -> Obsidian
      • Web -> Cubox (manual)

2022新冠病程记录

在三年防疫结束之际,我也不能逃脱,感染新冠病毒。具体感染渠道已经不可考,猜测有二:其一为戴着口罩与阳性人员沟通(送东西),此可能性较小; 其二为楼上楼下通过排风下水系统空气传播,个人倾向于该渠道。

病程 #

12-19,Day 1 #

早起嗓子疼,鼻塞,以为是最近北京空气太差,嗓子因为干燥而疼痛,正常上班。中午回来午休的时候畏冷,在被窝里双脚冰凉,轻微鼻塞,测体温38.0度,此时怀疑中招,结束午休前往办公室准备工作交接的材料,避免耽误后面工作。15:47办公室抗原测试阳性。

立刻回宿舍躺着,体温渐升,15:49 38.8度,躺了一小时多一点,试图睡觉,心率超过70,被尿憋醒,起来把电解质水拿出来加热,发热初期不要喝太冰的饮品。17:22 体温38.5度,19:40 体温38.9度,布洛芬缓释片2片,之后继续躺着休息至21:57,2207体温38.9度,躺着看视频,凌晨00:13 体温37.8度,体温终于降下来,之后休息。后续皆为居家休息。

12-20,Day 2 #

08:56醒来,36.5度,有出汗感,体温完全降下来,上午10:06 体温36.5度,此时基本无任何不适症状,轻微鼻塞。

下午躺着休息,但是由于鼻塞加重,导致无法入睡。17:00开始畏寒,寒颤。17:36 体温 38.7度,晚饭后洗澡,18:36 服用一片乐松退烧,18:49 体温 39.3度,看来洗澡后有助于升温?躺着休息,同时配合毛巾+冰块的物理降温,20:52 体温下降,大量出汗,37.8度,此后精神状态较好,可以看视频做笔记等。凌晨02:30入睡。

12-21,Day 3 #

08:37醒来,09:27体温37.7度,下午14:49体温36.9度,白天体温都比较正常。晚上17:46体温38.2度,开始升温,同时严重闭塞,晚饭后 洗澡,18:26服用酚麻美敏2片休息,21:23睡醒,鼻子通畅了。22:18体温37.5度。

12-22,Day 4 #

醒的比较早,未测体温,之后回笼觉,11:25醒来。睡眠质量很差,回笼觉倒还行,咽痛严重。下午13:29体温36.3度,21:05 体温36.5度,今天未服用任何药物,开始出现咳嗽和咳痰症状,同时鼻塞依旧较为严重,不过不需要服用缓解药物。

12-23,Day 5 #

轻微鼻塞,咳痰。

12-24,Day 6 #

晚外出就餐,冷风受寒,咳嗽出现流血症状,好在并非一直咳嗽,鼻塞依旧。

12-25,Day 7 #

本日上午进行核酸检测,直到第二天都未出结果,应为阳性。本日注意到嗅觉丧失,味觉部分丧失。

12-26,Day 8 #

鼻塞,咳痰。抗原转阴。

12-27,Day 9 #

鼻塞,大量擤鼻涕。

12-28,Day 10 #

鼻塞有缓解,几乎无鼻塞,擤鼻涕有缓解。

...

用 Calibre 把有趣的博客历史文章转换成电子书

偶尔在网上会碰到有意思的个人博客,欣喜之余第一件事情便是寻找 RSS 链接添加到 miniflux 订阅中,但是对于历史文章怎么解决呢?毕竟 RSS 阅读器一般只会抓取最近几十条。正常情况下,我是一般会翻上个几页看看,把感兴趣的添加到 Instapaper 等服务中稍后阅读,或者直接把网页保存到方便的地方,有空的时候在手机上用浏览器翻阅。但是对于历史文章多的博客,这么操作总会遗漏可能感兴趣的文章。最近又遇到这个问题,便准备找方案将历史博文打包成电子书放到 Kindle 上阅读。依稀记得很久之前看到过类似的需求,但是没有找到,搜索后发现找到的大部分方案都是基于 Calibre 的新闻抓取功能。

Calibre 是知名的电子书管理软件,且有抓取新闻的功能,自带了不少新闻网站,还可以添加自定义的新闻来源。正是利用其自定义新闻来源的功能,我们可以添加自己的 Python 脚本,在 Calibre 中称为 recipe,进去文章的抓取并制作成 mobi 格式的电子书,之后需要 epub 直接利用 Calibre 强大的转换功能即可。

Recipe 的编写主要是编写继承自 BasicNewsRecipe 的类,主要需要修改的函数为 parse_index(),该函数抓取索引页,返回文章的名称及链接,这里用到的主要是 BeautifulSoup 这个类,观察分析网站源码的 html 结构即可自定义出自己需要的 recipe。我将自己抓的两个博客使用的 recipe 放到 Github 上的 blog-to-ebook 仓库了,有兴趣可以参考修改使用。为了方便调试,在上面的代码仓库中还有不依赖 Calibre 函数库的测试文件 test.recipe.py

下面的参考链接包括 Calibre 的文档和 recipe 继承类的源代码,以及其他相关文章,供参考。相似项目是 Github 上其他 recipe 的仓库。

参考链接 #

相似项目 #

【译文】使用 WireGuard 远程接入局域网

原文地址:https://www.laroberto.com/remote-lan-access-with-wireguard/

本文中,让我们来看看如何使用WireGuard建立一个简单而安全的隧道(VPN)到你的本地局域网(homelab)。我们将采用VPS的方式,这样我们就不必向互联网暴露任何端口。

我们将模拟以下设置

角色:

  • Router - 将作为你的局域网网关(向内)的机器。
  • Server - 具有公网IP的机器,所有客户将连接到它,也被称为Bounce Server。
  • Client - 你,试图在某个地方远程连接到局域网。

配置 #

注意:所有的机器都基于 Ubuntu,根据你选择的 Linux 发行版调整设置

Server 和 Router #

对于Server 和Router执行以下操作

sudo apt update && sudo apt upgrade
sudo apt install wireguard
wg genkey | tee privatekey | wg pubkey > publickey
sudo sysctl net.ipv4.ip_forward=1

注意:要持久化 IP 转发,编辑 /etc/sysctl.conf,添加 net.ipv4.ip_forward=1

对于Server,创建 /etc/wireguard/wg0.conf:

[Interface]
Address = 192.168.10.1/32
ListenPort = 51820
PrivateKey = <Server's Private Key>

# Router Peer
[Peer]
PublicKey = <Router's Public Key>
AllowedIPs = 192.168.10.0/24, 10.0.20.0/24

对于Router,创建 /etc/wireguard/wg0.conf:

...