博客 | Blog

悲智双运

看完汉洋的伤痕椅子,

很多年前就知道信息不对称,看完文章居然回忆了好一会才又想到这个词。技术很重要,技术的扩散也很重要。

所以是不是别太执着当下的选择?毕竟有限的见识怎么可能让我们做出最完美的选择呢。

学习到一个新的佛教用语,悲智双运。

向 ChatGPT 请教,告知这是佛教中的一个重要概念,它包含了两个方面的修行:悲和智。

悲,或称为悲心,是指对众生的苦难和痛苦产生深切的同情心和关怀。它是一种无私的、无条件的爱和慈悲,不仅仅局限于个人的幸福,而是关心所有众生的福祉。通过培养悲心,佛教徒努力解除众生的痛苦,并帮助他们摆脱轮回的苦难。

智,或称为智慧,是指超越表面现象,深入理解事物真实本性的能力。它是通过反思和观察,超越迷惑和糊涂的认知,认识到事物的真实性质和宇宙的本质。智慧帮助人们认识到所有事物都是无常、无我和苦的,从而超越执着和執著,追求解脱和智慧的境界。

悲智双运强调慈悲和智慧的双重修行,认为这两方面的修行是相辅相成的。悲心促使佛教徒关心他人并帮助他们,而智慧帮助佛教徒认识到如何最有效地帮助众生。只有通过悲心和智慧的双重修行,佛教徒才能实现自己的解脱和成佛,并最大限度地利益他人。悲智双运是佛教修行的核心理念之一,也是追求智慧与慈悲的佛教徒的目标之一。

In English, the concept of “悲智双运” can be expressed as the “twin cultivation of compassion and wisdom” or the “practice of compassion and wisdom in tandem.”

Compassion refers to the deep sympathy and concern for the suffering of all beings, extending beyond personal happiness. It is an altruistic and unconditional love and compassion that seeks to alleviate the suffering of others and help them transcend the cycle of suffering.

...

Obsidian 同步方案

Obsidian 是一款优秀的双链笔记软件,这里不多做介绍,能搜索到这篇文章的读者应该对此有了解。 我的笔记使用历程非常久远了,简单而不完全的回忆包括:Evernote、vimwiki、simplenote、onenote 、notion、roam research、logseq、obsidian。这些笔记软件都有各自的优势,但是目前我使用的是 Obsidian。

在桌面的使用场景下,使用 Dropbox 同步可以满足 Windows、Ubuntu、MacOS 三个平台的同步需求。 但是移动端 iOS 场景下,由于 iOS 的机制问题,Dropbox 同步无法获得好的体验。下面整理相关同步方案, 供读者备选。先后顺序表示优先级。

官方同步服务 Obsidian Sync #

官方链接 <obsidian.md/sync>

除了贵没有什么缺点,正常用户年付价格 8 USD/month,学生年付价格6折即 4.8 USD/month。早鸟用户 年付价格5折即 4 USD/month。

一个降低费用的方法是合租,因为一个 Obsidian Sync 付费账可以建立5个 remote vault (< https://help.obsidian.md/Obsidian+Sync/Limitations>) 每个 vault 可设置独立的密码 ( https://help.obsidian.md/Obsidian+Sync/Set+up+Obsidian+Sync ) 因此不用担心你的数据泄漏。 但是账户密码公开,每个成员均有权限删除仓库、删除账户、修改账户邮箱及密码,以上风险后果是损失一年的订阅费用,但是数据是安全的。相关信息可参考参考链接部分中的论坛合租讨论。 以及淘宝/闲鱼中也有相关车位出售。

rev-obsidian-sync 官方同步服务的逆向实现 #

来自高中生 @acheong08 大神的逆向实现。

相关链接

livesync #

https://github.com/vrtmrz/obsidian-livesync

...

使用 chatGPT 编写自动添加 beancount balance 断言语句

我使用 beancount 记账流程中的有一步是这样的,将每张信用卡的账单日添加到滴答清单中,每月重复。 每当到达账单日时,提醒我在 beancount 文件中添加一条对应帐目的 balance 断言语句,由于大部分信用卡 的出账是有滞后的,所以该balance断言通常需要同时加上!标记,便于后续账单出来后修改。

这个过程是比较机械的,所以我想到了使用 chatGPT 来自动化这个过程,这样我只需要在出账后手动更新自动添加 的断言语句,将金额修改为正确的还款金额,同时去除!标记。最终的脚本如下。

import datetime

def add_balance_statement(ledger_path, account, date, balance, currency):
    with open(ledger_path, 'a') as file:
        file.write(f"{date} balance {account} {balance} {currency}\n")

def auto_add_balance_statements(ledger_path, credit_cards):
    today = datetime.date.today()
    for card in credit_cards:
        bill_date = card['bill_date']
        accounts = card['accounts']
        balance = card['balance']
        currency = card['currency']
        if today.day == bill_date:
            for account in accounts:
                add_balance_statement(ledger_path, account, today, balance, currency)
                print(f"Balance statement added for {account} on {today}.")

# Specify the path to your Beancount ledger file
ledger_file_path = "<ledger_path>"

# Specify your credit card details (bill date, accounts, balance, and currency)
credit_cards = [
    {
        'bill_date': 1,  # Example: 1st of the month
        'accounts': [
            {'account': 'Assets:CreditCards:Card1:Account1', 'currency': 'USD'},  # Example: Account1 for Card1 with USD currency
            {'account': 'Assets:CreditCards:Card1:Account2', 'currency': 'EUR'},  # Example: Account2 for Card1 with EUR currency
        ],
        'balance': 1000.00,  # Example: Current balance for Card1
        'currency': 'USD'  # Example: Currency for Card1
    },
    {
        'bill_date': 15,  # Example: 15th of the month
        'accounts': [
            {'account': 'Assets:CreditCards:Card2:Account1', 'currency': 'USD'},  # Example: Account1 for Card2 with USD currency
            {'account': 'Assets:CreditCards:Card2:Account2', 'currency': 'GBP'},  # Example: Account2 for Card2 with GBP currency
        ],
        'balance': 2000.00,  # Example: Current balance for Card2
        'currency': 'USD'  # Example: Currency for Card2
    },
    # Add more credit card details as needed
]

# Call the function to automatically add balance statements
auto_add_balance_statements(ledger_file_path, credit_cards)

对于有兴趣的读者,可以看我和 chatgpt 的几轮对话。

...

MiniFlux Starred as Feed

Miniflux 是一个非常好用的 RSS 自托管方案,支持自建,支持多种客户端,支持多种订阅方式。 最近由于在折腾 Archivebox,需要将 Miniflux 中的 Starred Feed 作为一个 Feed 输出,以便于 导入星标条目到 Archivebox。 Miniflux 本身并不支持这个功能,但是其提供了 API,可以比较简单的导出 Starred 内容。

备选方案 #

如果是自己使用 Python 写的话,可以利用 https://github.com/miniflux/python-client 这个库,配合 feedgen 也能写个大概的,核心代码大概如下:

import miniflux
from feedgen.feed import FeedGenerator

client = miniflux.Client("https://miniflux.example.com", api_key="api_key")
entries = client.get_entries(starred=True, limit=50)

def create_rss_page(data):
    fg = FeedGenerator()
    fg.title('Miniflux Starred Feed')
    fg.link(href='https://miniflux.wogong.net', rel='self')
    fg.language('en')
    fg.description('Miniflux Starred Feed')

    for entry in data['entries']:
        fe = fg.add_entry()
        fe.id(entry['id'])
        fe.title(entry['title'])
        fe.link(href=entry['url'])
        fe.description('nothing')
        fe.author(name=entry['author'])
        fe.pubDate(entry['published_at'])

    rss_feed = fg.rss_str(pretty=True)
    fg.rss_file('rss.xml')
    return rss_feed

但是本着不自己造轮子的原则,找到了一些现成的工具,例如

...

Clash 作为网关的透明代理(更新)

距离上一篇介绍该主题的文章已经过去了接近三年,[Clash 作为网关的透明代理]({% post_url 2020-11-27-clash-transparent-proxy %}) 中间使用到的方案其实多次变更,例如使用了很长一段时间 的 shellclash,这个方案胜在省心,可以直接在支持的 路由器上部署,但是内核更新缓慢,作者对配置加了很多自定义设置,虽然出发点是为了方便大部分小白用户,但是 严重降低了自定义的能力。而且默认的一些设定大概率会导致 DNS 泄漏问题,关于这个话题可以参考 不良林的相关视频。这是不可接受的,因此前段时间又回归到使用 PVE 上虚拟机的方案。

简单摸索了一下最新方案发现 redir-host 模式已经被 Clash 官方放弃,不建议再使用。 TProxy 模式当然 没啥问题,但是毕竟得自己处理 iptables 规则。在没有性能瓶颈的情况下,更推荐使用 tun 模式,可以自动 处理路由等问题。下面简单介绍一下相关配置。

首先,在网关机器上打开 ipv4 转发, echo net.ipv4.ip_forward=1 >> /etc/sysctl.conf && sysctl -p

其次 Clash 配置文件头部添加如下

tun:
  enable: true
  stack: system # or gvisor
    #dns-hijack:
    #    - any:53
    #    - tcp://any:53
  auto-route: true
  auto-detect-interface: true
dns:
  enable: true
  ipv6: false
  listen: 0.0.0.0:53
  enhanced-mode: fake-ip       # redir-host or fake-ip
  fake-ip-range: 198.18.0.1/16    # Fake IP addresses pool CIDR
  use-hosts: true                 # lookup hosts and return IP record
  nameserver:
    - 114.114.114.114

最后在局域网的 DHCP 服务器设置网关为该机器 IP 即可,也可以手动在希望走代理机器的网关设置未该机器 IP。

...

用于 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/gitcredentials 和 https://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 是部门主管;香农也在那里,还有其他人。我继续思考“为什么”和“有什么区别”。后来我通过阅读传记、自传,并向人们询问“你是怎么做到这一点的?”来进一步探究这些问题。我试图找出区别所在。这就是这次演讲的内容。

...