博客 | Blog

豆子考证

  • 今天看 [[谢益辉]] 今年更新的博客,提到了他特别喜欢吃的一种豆子斑豆 Pinto bean ( https://yihui.org/cn/2021/06/pinto-bean/ ),好奇之下搜了一下图片,发现很像我儿时在老家经常吃的一种豆子。
  • 好奇问了妈妈,老家吃的那种豆子叫什么名字,得到“大米豇豆” “麻雀蛋” 等俗称,以此为关键字搜索,前者没有任何相关信息,后者倒真是让我找到了类似的豆子,名为雀蛋豆,又称为花豆,和斑豆并无关系。
  • 斑豆:植物界 被子植物门 木兰纲 蔷薇亚纲 豆目 蝶形花科 菜豆族 菜豆属
  • 花豆:植物界 被子植物门 植物纲 豆目 豆科 蝶型花科 菜豆族 菜豆属 花豆

数字生活 2021Q2

  • 介绍2021年上半年个人工具库方面发生的变更。其他未变更部分参考前文 [[post/赛博 2021]]。
  • 输入
    • 播客客户端开始使用小宇宙,其实之前刚出来的时候就尝试过,但是对其主打的社交功能并不感冒,当时的功能也比较简陋。最近发现对于播客推荐功能还是可以尝试,评论也可以发现更多相关信息,以及最重要的功能也更全面了(人声增强)。遂开始使用。不过使用频率并不高,毕竟现在听播客的频率也不像以前那么高。
    • 阅读方面也开始尝试实体书,在某些场合比电子书来得方便,以及确实可以提供更多沉浸感和对已读篇幅的实体感知。
  • 完整版本的工具库抄录如下
    • 输入
      • 社交网络:Twitter,朋友圈和微博看的频率非常低了已经
      • 论坛:V2EX, [[hacker news]]
      • RSS 订阅(Inoreader),主要信息来源,订阅了包括博客、newsletter、微信公众号、微博时间线等内容
      • 视频:Youtube, Netflix, BiliBili
      • 音乐:Spotify
      • 播客:Spotify,小宇宙
      • 书籍:微信读书
    • 输出
    • 工具
      • 即时通信 [[telegram]], Wechat
      • Dropbox, Google Drive 文件同步与备份,在线文档
      • Pinboard 网络书签/全文存档
      • Toggl 时间记录
      • Anki 背诵
      • Instapaper 稍后阅读
      • Bitwarden 自建的密码管理及两步验证管理工具
      • RSSHub 自建 RSS 辅助工具
      • Surge 代理
      • 滴答清单 待办管理工具
      • Google Calendar 个人日程管理
      • Beanocunt 个人金融数据
      • Airtable 个人物资管理 [[inventory]]
      • Evernote 作为扫描小票收纳仓库
    • 硬件
      • 计算机 Macbook Pro 2016 late, 15'
      • 鼠标 Logitech [[MX Anywhere 2s]]
      • 键盘 PFU HHKB Professional HYBRID Type-S
      • iPhone 12, 128G
      • Apple Watch series 5
      • AirPods Pro
    • 信息流
      • 主要使用 IFTTT 和 Pinboard 进行管理,所有的信息存档在 Pinboard,因为购买了 Archive 账户,全文搜索也是可能。
      • RSS/Instapaper/Inoreader stared → Pinboard (IFTTT)
      • Douban RSS → Pinboard (IFTTT)
      • Swarm → Google Calendar (IFTTT)
      • Twitter → Pinboard (self)
      • Web → Pinboard (manual)

如何获得 Youtube 视频字幕

现在视频成了传递信息的重要媒介,但是并不是所有的信息都适合使用视频这个媒介。厨师王刚的介绍做菜使用视频当然没有问题,财经类的信息使用视频实在是降低了信息获取速度。本文介绍如何获取视频的文字稿。内容直接启发自 https://twitter.com/shell909090/status/1351371503019847681 由于原推主锁推,引用如下。

最近在看很多财经频道,里面一个人说说说讲了半天,其实干货可能就十句话。问题是怎么从几十分钟的内容里看到这10句干货呢?我找了一个简单办法。先用youtube-dl -f ‘bestaudio[ext=m4a]‘下载音频。然后用下面这个项目转换为字幕。最后直接看字幕,三分钟完事。https://github.com/agermanidis/autosub

下载 Youtube 视频的音频内容

youtube-dl -f 'bestaudio[ext=m4a]' "URL"

使用 autosub 获取字幕,autosub 的原始仓库现在已经不维护,我使用的是目前活跃维护的 fork 版本,简介有简体中文。

Ubuntu 下的安装

pip install git+https://github.com/BingLingGroup/autosub.git@alpha ffmpeg-normalize langcodes```

使用

```autosub -s zh-CN -i audio.m4a```

简单尝试发现使用的效果一般。不过总比看十几分钟的视频快多了。转文字利用的是 Google Cloud Speech 的 API,需要将音频文件分段转为文字,所以速度不算快。不过敲好命令可以看别的去。总体来说还是节约了大量时间的。

如果懒得自己折腾的,可以考虑提供类似功能的商业服务 (未尝试): Get The tldr Of Any YouTube Video In Seconds <https://you-tldr.com/>

数字生活 2021Q1

个人数字生活一览。距离上次发布类似的文章已经 3 年了,这三年变化当然很大。受 Julian Shapiro 启发,以后每季度对个人工具库进行更新。

输入 #

  • 社交网络:Twitter,朋友圈和微博看的频率非常低了已经
  • 论坛:V2EX, Hacker News
  • RSS 订阅 (Inoreader),主要信息来源,订阅了包括博客、newsletter、微信公众号、微博时间线等内容
  • 视频信息:Youtube, Netflix, BiliBili
  • 音乐:Spotify
  • 播客:Overcast, Spotify
  • 书籍:微信读书

输出 #

工具 #

  • Telegram, Wechat 即时通信
  • Dropbox, Google Drive 文件同步与备份,在线文档
  • Pinboard 网络书签/全文存档
  • Toggl 时间记录
  • Anki 背诵
  • Instapaper 稍后阅读
  • Bitwarden 自建的密码管理及两步验证管理工具
  • RSSHub 自建 RSS 辅助工具
  • Surge 代理
  • 滴答清单 待办管理工具
  • Google Calendar 个人日程管理
  • Beanocunt 个人金融数据
  • Airtable 个人物资管理
  • Evernote 作为扫描小票收纳仓库

硬件 #

  • 计算机 Macbook Pro 2016 late, 15'
  • 鼠标 Logitech MX Anywhere 2s
  • 键盘 PFU HHKB Professional HYBRID Type-S
  • iPhone 12, 128G
  • Apple Watch series 5
  • AirPods Pro

信息流 #

主要使用 IFTTT 和 Pinboard 进行管理,所有的信息存档在 Pinboard,因为购买了 Archive 账户,全文搜索也是可能。

...

Beancount 账户命名

命名是计算科学中最难的两件事,Beancount 的账户的命名尤其困难。对于从其他记账工具迁移过来的用户,直接将原先的账户结构迁移过来当然是可以的。但是 Beancount 这种文本记账工具,对于账户的处理几乎没有成本,可以任性地添加更多的账户。直接复制原来工具的账户结构可能无法完全发挥 Beancount 的能力。

我个人为 Beancount 的账户命名有提供以下几点指导:

  1. 账户命名在可接受的范围内尽量详细,有账户补全这样的功能在,多级账户名锁造成的额外负担是很小的。带来的好处是显而易见的,最终形成的报表详尽而清晰。此外,在后期使用正则替换合并账户是很容易的,但是拆分账户只能对每一条记录进行检查。
  2. 多使用多级账户,在 fava 中折叠次级账户后,可以清晰地看到上一级账户的总额。
  3. 尽量遵从你的直觉,想象你在以后遇到一笔账户,直觉告诉你应该放到哪个账户。这样可以最大地降低记账的认知负担。当然,这一点可以随着使用慢慢优化自己的账户命名,毕竟文本账本的一大优点就是可以方便地进行正则替换。

最后附上一些其他记账工具默认的账户命名,可供参考。

  • MoneyWiz 默认账户名

      Automobile
          Accessories
          Car Insurance
          Gas/Fuel
          Lease
          Maintenance
          Other
          Parking
      Bills
          Cable
          Electricity
          Gas
          Internet/Broadband
          Mobile Phone
          Other
          Phone
          Water
      Clothing
          Accessories
          Clothes
          Jewelry
          Other
          Shoes
      Digital
          Apps
          Books
          Movies
          Music
          Other
          Podcasts
          TV Shows
      Food & Dining
          Dining/Eating Out
          Groceries
          Other
      Health Care
          Dental
          Eye Care
          Health Insurance
          Medical
          Other
          Pharmacy
      Housing
          Furniture/Accessories
          Home Insurance
          Maintenance
          Mortgage
          Other
          Rent
      Leisure
          Entertainment
          Fitness/Sport
          Other
          Personal Care
      Loans
          Other
          Taxes
          Transportation
          Travel
    
  • mint-categories https://www.mint.com/mint-categories

    ...

Beancount 投资回报计算与可视化

TL;DR 使用 fava-portfolio-returns1 ,可在 fava 中直观展示投资回报率详细数据,该插件的数据来源是 beangrow2

几种方案概述 #

fava-portfolio-returns + beangrow #

对于使用 Beancount 记录投资帐目的人来说,如何评估自己的投资回报一直是一个未解决的问题。前一段时间 Beancount 的开发者 Martin 写了一个计算回报率的小工具32,姑且可以算是 v3 版本功能的一个小前瞻,尝试使用之后,虽然目前还是比较粗糙的脚本,但是基本可以计算出来年化的投资回报率了。Beancount 用户 Redio 也写了详细的 Review4,可以作为第一个文档的补充,使用时参考。

2023-08-29 更新 近日在邮件列表看到了 fava-portfolio-returns1 项目,这是一个用于在 fava 中展示投资历史回报的插件,后端数据来自 beangrow,尝试了一下发现运行良好,当然运行良好的前提是解决一堆报错,这个插件对 beangrow 配置文件的错误容忍程度较低,遇到错误时可开启 debug 模式查看报错信息。这里放两张官方的截图,展示了该插件的功能。具体使用方法参见官方仓库 README。

![report_overview]({{ site.cdn_url }}/img/report_overview.png)

![report_vht]({{ site.cdn_url }}/img/report_vht.png)

fava_investor #

fava_investor 5 是另一个试图在 fava 中进行投资回报可视化的插件,目前处于开发中,由于我的投资帐目比较复杂,目前没有办法成功运行。对于简单的投资帐目(例如不包含数字货币),可以尝试使用。

beancount_portfolio_report #

另外还有一些比较小的工具,例如 beancount_portfolio_allocation6是一个根据当前市值计算持有资产比例的脚本,方便用来进行资产重新配置。我在此插件的基础上,进行了一些简单的修改,重新命名为 beancount_portfolio_report7,用于输出当前各类资产的市值、回报和总体回报率(非年化)。

beancount-boilerplate-cn #

beancount-boilerplate-cn 有部分净值计算的工具,但是同样不适合我这种比较复杂的投资记账。没有尝试。

beancount.io #

beancount.io 在网站上也提供了 Stock Analysis 工具,可惜没有看到开源,处于数据安全顾虑,目前没有体验。从 demo 来看完成度还是比较高的。侧重点在于比较不同风险资产的盈利情况。

...

关于 bottleneck 的几种含义

机器学习的语境中,经常可以看到 Bottleneck 这个词,其含义差别较大,为了解决自己的困惑,本文整理了几种常见的含义。

  1. information bottleneck theory 由 Naftali Tishby 2000 年的论文 The information bottleneck method 中提出,后来试图解释深度学习的泛化性能。当然关于这个理论本身也有不少反驳意见。

  2. ResNet 中的结构名称,bottleneck design 2015 年底最新给出的,也是当年的 imagenet 比赛冠军。可以说是进一步将 conv 进行到底,其特殊之处在于设计了“bottleneck”形式的 block(有跨越几层的直连)

  3. bottleneck 是我们经常用于描述网络最后一层之前的那些实际完成分类任务的网络层的一种非正式称谓 http://shartoo.github.io/tensorflow-retainmodel/

  4. MLP 中一类隐层 源于1994年的《CONNECTIONIST SPEECH RECOGNITION A Hybrid Approach》,里面首先提出到 BN 层应该要同时比input&output结点数都要少的概念。参考 https://www.zhihu.com/question/51793452

日常轻松制作 Anki 卡片

Anki 是一款能让记忆事物变得简单的程序。Anki 比传统的学习方法更为有效,因此你可以大幅减少花在学习上的时间,或是大幅提升学习量。(来自 anki 官方中文介绍)。

我个人很早就耳闻 anki 的大名,2019 年 10月份够买了 iOS 上的官方 APP。但是日常使用仅限于背诵单词,有一搭没一答的在使用。2020 年底学习了 Youtuber Ali 关于 Anki 的课程 Learn Anything With Flashcards The Ultimate Guide To Anki,了解到很多之前不知道的 anki 的强大功能。新的一年开始,希望能坚持 anki 打卡,背诵单词。下面简单介绍一下使用 anki 的 workflow。

我一直不太习惯背诵单词书,一来没有备考的压力,动力不足,其次没有语境的背诵单词,对我来说印象不够深刻。这么多年的英语学习经历,我几乎没有背诵过单词书。高中积累单词的方法是,在日常考试中遇到的生词,记录到生词本,之后有空没空多翻翻。这样的效果是十分显著的,在后期英语阅读理解速度比较同龄人提高了很多,个人积累的单词量也显著进步。这样的习惯一直断断续续保持着,这么多年使用过有道的单词本,欧陆词典的生词本,用来记录在互联网上浏览遇到的生词,但是效果不佳。原因主要是,互联网上遇到的生词数量太多(有些难度较大的文章可能一篇就会积累数十个),没有了应试压力后很难经常性地回顾,这就导致生词本中不熟悉的单词越来越多,定期背诵带来的沮丧感大增,很难坚持下去。

Anki 通过自己的算法可以完美的解决这个问题。所以要解决的问题是,如何将生词本迁移到 Anki 词库?

最直观的办法是,直接将生词本导出,简单处理下格式,并导入 Anki。这样当然是可行的,但是日常积累遇到的新词如何处理?定期从生词本导入到 Anki 当然是可以的,不过毕竟增加了额外的步骤。永远不要低估自己的惰性,时间长了可能就这多的一步阻碍你继续背诵单词。我们需要的方案是,能够将遇到的生词直接添加到 anki 中,非常幸运的是,现在有很多这样的工具。本文主要介绍我个人经常遇到的两种场景。

在浏览器中添加生词到 Anki #

幸运的是,有现成方案可以完美解决这个场景需求。大力推荐 在线词典助手 (含Anki制卡功能) 这个 Chrome 扩展,插件安装地址。项目的是开源的,代码托管在 Github

安装完毕,简单配置后,可以直接在浏览器进行划词翻译,一键添加到预先配置好的 Anki 词库。个人使用一年多,偶尔遇到不能制卡多是配置失效,重新配置即可。

查单词的同时添加到 Anki #

在非浏览器页面遇到生词,查单词后希望添加到 anki,如何解决这个需求呢?具体来说,我查单词的地方默认是命令行,感谢 ydcv,能够在命令行迅速方便的查询单词。但是该工具只是一个非常简单的查词工具,没有更复杂的,例如单词本这样的功能。 最初我是这样解决这个问题的,手动添加了生词本功能。实现的非常简单,就是在查单词的同时,将单词保存到一个文本文件。通过 shell 函数实现:

# youdao  
function s() {
    local spath="${HOME}/sh/ydcv.py"
    $spath $*
    echo $* >> ${HOME}/Dropbox/Dat/words.txt
}

在决定使用 Anki 之后,这个实现当然不够,如何能够让在 ydcv 中查询的单词保存到 Anki 词库呢?前段时间特地抽时间搜索了一下,找到了一个在命令行中与 anki 词库交互的工具 apy,该工具没有采用 Ankiconnect 等接口,可以在 Anki 没有运行的情况下,通过读取 Anki 数据库的方式,直接添加新卡片。那么问题就简单了,我们可以用该工具将使用 ydcv 查询的单词和返回的意思直接添加到 Anki 词库,简单升级下上面的 shell 函数:

...

socks 代理问题排查

昨天晚上 Roam 今天一直没办法同步,F12 查看后台发现是到 firebaseio.com 的请求全部失败了。一个示例请求是 https://firescript-577a2-dbs-0017.firebaseio.com/.lp?start=t&ser=83912017&cb=14&v=5

这个域名我这边需要使用代理访问,之前都正常,直到今天,浏览器无论是否使用代理都无法访问。已经做了如下测试

  1. 使用浏览器代理无法访问(浏览器尝试了 Chrome 和 Firefox,代理类型尝试了 socks5 和 http)
  2. 使用 curl 配置了 socks5 代理在终端直接请求正常,在境外 VPS 直接 curl 请求也没有问题
  3. 使用全局的 anyconnnect vpn,浏览器访问正常
  4. 检查了浏览器的 DNS 解析是正确的

上文是我在自己排查了很久找不到原因后在 V2EX 上发的求助帖子。同时我还在 Tuna 的技术群中发了类似的东西。 等了许久之后有人指出了问题,可能是 socks 代理的问题,最终确定是代理节点出现了故障(与此同时代理的群里也有人反馈节点问题,可是我没有仔细看)。 觉得困惑的原因主要在于,终端是可以访问的,但是浏览器无法访问。明明是用了同样的代理,VPN 和 境外 VPS 可以访问说明服务端没有问题,除了 firebaseio 这个域名,其他域名包括 Google 等的访问正常,说明代理服务器没有出问题(这里是重点),那么问题究竟在哪里呢?

事后来看,遇到这个问题无法解决的原因是,不懂浏览器和 curl 的 socks 代理机制差异,下面简单总结一下。

  1. 浏览器中无法访问的原因是,Chrome 和 Firefox 设置的 socks 代理,需要远程解析 DNS,而远程服务器节点解析 firebaseio 域名出现了问题,导致无法访问。(FIrefox 默认 socks5 代理是本地解析,然而我很久以前修改了)
  2. curl -x socks5://127.0.0.1:7891 会在本地解析,所以访问没有问题
  3. 全局的自然没有问题
  4. 浏览器本地解析的 DNS 并没有什么意义(应该是我在采用 Direct 模式解析到的 DNS 缓存)

在本地使用 curl -x socks5h://127.0.0.1:7891 请求失败,这种方式类似浏览器,在远程解析 DNS,重现出了浏览器碰到的故障。附上一个记录

...

Ubuntu LTS 版本升级

Ubuntu 16.04 升级到 18.04 过程中,出现了和 miktex 相关的一个错误。升级顺利完成,但是发生了这个错误。导致了一些包并没有更新,以及 apt 的依赖被搞崩了,提示如下

You might want to run 'apt --fix-broken install' to correct these.
The following packages have unmet dependencies
miktex : Depends: libcurl3 (>= 7.16.2) but it is not installed
E: Unmet dependencies. Try 'apt --fix-broken install' with no packages (or specify a solution).

这时候使用 apt remove miktex 也是没有用的,提示这个错误

Removing miktex (2.9.6650-1) ...
miktexsetup: /usr/lib/x86_64-linux-gnu/libcurl.so.4: version
`CURL_OPENSSL_3' not found (required by miktexsetup)
dpkg: error processing package miktex (--remove):
installed miktex package pre-removal script subprocess returned error exit status 1
Errors were encountered while processing:
miktex
E: Sub-process /usr/bin/dpkg returned an error code (1)

错误的原因是 Ubuntu 18.04 将 libcurl3 升级成 libcurl4,对应的库也进行了更新,导致依赖 libcurl3 的应用程序例如 miktex 崩坏,进而导致 apt 崩坏,小白用户面对这种情况基本就手足无措了。

...