博客 | Blog

如何部署私人 DoH 服务器

DNS

DNS 是一个古老的协议,在互联网诞生之初的纯真年代便已出现,自然也有有古老协议的通病:不设防,或者说不安全。为了解决明文传输的问题,加密 DNS 的方案有很多,DoH 是其中之一,DoH 全称是 DNS Queries over HTTPS,其协议设计参考 RFC8484 。

在正常国家应该不太需要考虑自己部署 DoH 服务,但是中国大陆存在的 DNS 污染以及对国外公共 DoH 服务器的阻断导致了本文描述的这个需求。我的使用场景主要是作为 Adguard Home 的上游 DNS,提供无污染的/加密的境外服务域名解析。本文采用的技术方案是 coredns,下面简述步骤。

  1. 需要一台境外服务器,一个域名[^1],建议使用 acme.sh 项目申请 https 证书

  2. coredns 官网下载二进制文件,配置文件如下,注意该配置文件只启用了 DoH 服务。

    https://.:443 {
        tls ./acme/fullchain.pem ./acme/key.pem ./acme/ca.pem
        whoami
        forward . tls://1.1.1.1
        log
        errors
    }
    
  3. 使用 DoH 测试工具 https://github.com/curl/doh 进行测试

当然你也可以采用 docker 方式部署。

参考链接

脚注

  • [^1] Cloudflare 的 DoH 地址是 https://1.1.1.1 ,自然是可能给 IP 颁发 https 证书的,只是更罕见,限制更多。至少 Let’s Encrypt 不允许。

数字生活 2022

  • 发现进行增量更新并不方便,还是在进行增量更新后附上一份最新的工具库清单。
  • 输入
    • 微博因为组织审查注销
    • 因为审查的原因还是放弃了小宇宙,overcast 总是出问题貌似和代理规则有关,目前已经解决,重新用上。
    • 阅读方面购买了 Kindle paperwhite 5,epub 格式的电子书开始用 Kindle 阅读,逐步放弃使用微信读书
    • tg 关注了一些新闻的频道
  • 输出
    • 几乎没有输出,所以也就没有变化
  • 工具
    • 引入了 Cubox,试图取代 Pinboard 的存档功能,毕竟付费的价格感人(又涨价了)
    • 使用 Google Keep 作为小票管理工具
    • 使用 Readwise 作为回顾工具
    • 使用 fastmail 托管邮件服务,Google Suite 虚晃一枪让我付费了,不过为了添加新域名付费也是不可避免
    • iCloud 2T 用于照片和备份
  • 硬件
    • 计算机 MacBook Air M1
    • 鼠标 鼠标 罗技(G)G304 LIGHTSPEED无线鼠标 鼠标 罗技(G)G102 有线鼠标 黑色,MX Anywhere 2s退役了,因为错在点击无法触发的问题,估计是进了灰尘诸如此类,可以考虑挂闲鱼
  • 信息流
    • 主要是添加了 cubox 的内容
    • Inoreader stared → Pinboard (IFTTT)
    • Douban RSS -> Pinboard (IFTTT)
    • Instapaper/Twitter → Pinboard (self)
    • Twitter liked + 书评 + etc -> Readwise -> Roam Research
    • Inoreader stared -> Cubox (IFTTT)
    • Instapaper -> Cubox (IFTTT)
    • Web -> Cubox (manual)
  • 最后,完整版本的工具库抄录如下
    • 输入
      • 社交网络:Twitter,朋友圈
      • 论坛:V2EX, hacker news
      • RSS 订阅 (Inoreader),主要信息来源,订阅了包括博客、newsletter、微信公众号、微博时间线等内容
      • 视频:Youtube, Netflix, BiliBili
      • 音乐:Spotify
      • 播客:Spotify,Overcast
      • 书籍:Kindle 墨案 微信读书
    • 输出
    • 工具
      • 即时通信 telegram, Wechat
      • Dropbox, Google Drive 文件同步与备份,在线文档
      • Pinboard 网络书签
      • Cubox 作为个人网络收藏内容仓库
      • Toggl 时间记录
      • Anki 背诵
      • Instapaper 稍后阅读
      • Bitwarden 自建的密码管理及两步验证管理工具
      • RSSHub 自建 RSS 辅助工具
      • Surge 代理
      • 滴答清单 待办管理工具
      • Google Calendar 个人日程管理
      • Beanocunt 个人金融数据
      • Airtable 个人物资管理 inventory
      • Google Keep 作为扫描小票收纳仓库
      • fastmail 托管邮件服务
      • Readwise 作为回顾工具
      • iCloud 2T 用于照片和备份
    • 硬件
      • 计算机 MacBook Air M1
      • 鼠标 鼠标 罗技(G)G304 LIGHTSPEED无线鼠标 鼠标 罗技(G)G102 有线鼠标 黑色
      • 键盘 PFU HHKB Professional HYBRID Type-S
      • iPhone 12, 128G
      • Apple Watch series 5
      • AirPods Pro
    • 信息流
      • Inoreader stared → Pinboard (IFTTT)
      • Douban RSS -> Pinboard (IFTTT)
      • Instapaper/Twitter → Pinboard (self)
      • Twitter liked + 书评 + etc -> Readwise -> Roam Research
      • Inoreader stared -> Cubox (IFTTT)
      • Instapaper -> Cubox (IFTTT)
      • Web -> Cubox (manual)

Fitbit Ionic 召回事件

最近 Fitbit Ionic 大规模召回告一段落,由于第一次体验这种产品召回,经历比较神奇,特此记录一下。 Fitbit 是 2007 年在加州成立的一家公司,主营产品是运动追踪器和智能手环手表等。与这家公司结缘是在 2016 年 4 月 17 日,当时在京东购买了 Fitbit Surge,一款运动手表。2016 年 Apple Watch 已经非常成熟了。当时在选购运动手表的时候,不选择 Apple Watch 的原因主要有两点,首先是价格昂贵,其次是一天一充当时的我无法想象。因此作为试水尝试在京东购买了时价 1398 CNY 的 Fitbit Surge,显然价格便宜多了,而且由于是黑白屏幕和功能简单,Surge 的续航应该有接近一周,远远超过 Apple Watch 了。

接下来的两年里,这支运动手表主要是陪伴我跑步,记录睡眠,续航够长,功能也满足我的需求,整体体验还是非常满意的。因此,在 2018 年 2 月的时候发现 Fitbit 发布了新一代产品 Fitbit Ionic 的时候,略作犹豫便在美国亚马逊海淘了这款产品。由于时间过于久远,当时记得买之前最大的期待是更新了防水功能,因此 Ionic 是支持游泳的,作为偶尔会游泳的 Surge 用户,对此颇为激动。2018 年那个时间点没有买 Apple Watch 的原因同样是续航问题。 然而这次的使用体验并不佳,首先是游泳记录功能,界面丑陋就算了,功能本身的准确度也低的可怜,记录的数据几乎没办法用,此时我是非常羡慕 Apple Watch 用户的,准确度不谈,至少页面好看啊。最重要的是,这款产品在 1 年多后就变砖了,无法开机,无法充电。此后犹豫了一段时间便在 2019 年 9 月的时候买了 Apple Watch S5,前几年担心的续航问题根本没有成为烦恼,游泳记录功能也准确多了,这些都是后话,暂且不表。

2019 年中便成为尸体的 Fitbit Ionic 我并没有第一时间扔掉,而是静静躺在抽屉角落,直到去年的时候才挂上闲鱼几十元出掉了。是的,你没看错,没有没人要的垃圾,只是定价不够低,变砖的智能手表也有需要它的人。 几个月前在社交媒体上看到了 Fitbit Ionic 由于电池问题导致损害人身安全的报道,因为官方决定召回。当时并未细想。直到今年 3 月 5 日收到这样一封邮件:

...

数字生活 2021Q4

  • 介绍2021年第4季度个人工具库方面发生的变更。其他未变更部分参考前文 赛博 2021。
  • ADDED TO INVENTORY
    • 硬件:
      • 年底购入了 MacBook Air M1,为何在 M1 Pro 和 M1 Max 发布后还购买上一代产品呢?对我来说,购买 Mac 最大的需求是续航和便携,至于性能,大部分时候都是 Web 和 终端,M1 足够满足需求了。此外,新款 MBP 的外观太过 Pro (不好看),相比更喜欢 MBA 的轻薄,(我知道是视觉效果而已)。
  • TESTING
  • 启发自 https://julian.digital/activity/increasing-productivity/
  • This is a quarterly update and review of new tools and products I have recently added to my personal productivity stack.

使用 Docker 进行深度学习环境配置

  • 如何跑旧版本的 tf 代码?这个问题的产生就是值得思考的,但是总有这样那样的需求场景,导致我们确实要跑远古的代码。
  • 旧版本代码最大的问题就是环境配置。tf 1.4.0 版本依赖 cuda 8,但是 cuda 8 只有 Ubuntu 16.04 的安装包,没有任何代码能够做到硬件上向前兼容,因为未来不可预测。难道我们要重装系统为 Ubuntu 16.04 吗?对于使用 3080 等全新硬件的人来说,cuda 8 可能根本无法兼容新显卡,对于这类用户难道就无法跑旧版本代码了么?
  • 针对这个问题,有两个解决方案,从层次上来说分别介绍。
    1. 使用 nvidia 维护的 tensorflow 版本
    • nvidia 显然早就意识到了这个问题,tf 从 1.x 到 2.x 的更新,API 发生了重大变化。如何让尊贵的 3090 用户用上 tf 1.x 呢?NVIDIA 和 Google 合作,维护了一个支持最新硬件的 tf 1.5.0 版本。
    • 使用请参考官方仓库 nvidia/tensorflow
    1. 使用 Docker
    • Docker 是一个开源的应用容器引擎,简单来说可以把它当作一个轻量的虚拟机。由于使用的是 Linux 容器技术,Docker 优于虚拟机的一个重要方面是几乎没有性能损失,相当于主机的一个进程。
    • 也就是我们可以使用 Docker 虚拟一个 Ubuntu 16.04 的环境,安装 cuda 8 和 tf 1.4.0,这样就提供了一个远古环境用来跑远古的 tf 版本代码。
    • 具体使用需要用到 nvidia-docker 和 tensorflow 两个镜像,安装方法参考 https://www.tensorflow.org/install/docker 和 https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#docker
    • 步骤
      • 安装docker
        curl https://get.docker.com | sh \
        && sudo systemctl --now enable docker
        
      • 安装 nvidia-docker2
        distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
           && curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - \
           && curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
        sudo apt-get update
        sudo apt-get install -y nvidia-docker2
        sudo systemctl restart docker
        sudo docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi
        
      • 拉取对应版本的 docker image,并安装 pip 依赖
        docker pull tensorflow/tensorflow:tags
        
        docker run --gpus all -it -v tensorflow/tensorflow:tags bash
        # in docker
        pip install -r requirements
        
        docker ps # find the container_id
        docker commit <container_id> dsin:v1 # save the configed docker container as a new image
        
      • 如何将一台机器的docker 镜像复制到其他机器?
        docker save -o <path for generated tar file> <image name>
        docker load -i <path to image tar file>
        
  • 下面介绍如何使用 Docker 进行深度学习训练
    • 我们首先安装获得了 tensorflow 的镜像,之后使用 pip 安装项目相关依赖,获得了 DSIN 镜像
    • 进入虚拟机的 bash 环境
      docker run --gpus all -it -v ~/DSIN:/DSIN dsin:v1 bash
      
      -v host_path:vm_path
      
    • 进入 /DSIN 路径,可以看到映射过来的代码目录,在该 bash 环境中运行 python 即可进行训练
  • 其他参考链接
docker run --gpus "0" --ipc=host --ulimit memlock=-1 --ulimit stack=67108864 -it --rm nvcr.io/nvidia/pytorch:23.05-py3

docker run --gpus "0" -p 8888:8888 -v ~/datasets:/datasets -v ~/Dropbox/Inbox:/workspace/inbox --ipc=host --ulimit memlock=-1 --ulimit stack=67108864  -it --rm nvcr.io/nvidia/pytorch:23.05-py3
  • 基于Docker的深度学习环境
  • dl-env

数字生活 2021Q3

  • 介绍2021年第三季度个人工具库方面发生的变更。其他未变更部分参考前文 赛博 2021。
  • ADDED TO INVENTORY
    • 工具
      • 使用 Google Keep 作为小票存档记录,相应地替换掉了 Evernote 发挥的作用。原因主要在于 Evernote 臃肿缓慢,且使用 Google Keep 后可以彻底告别 Evernote,从精简的角度来看也有收益。
    • 硬件:
      • 联想台式机 电脑 联想刃7000P主机,使用 Windows 系统
      • 小米 10s,手机国产化要求,添加一部性能还不错的 Android 手机
      • 电脑 ThinkPad X230 其实是非常老旧的电脑了,但是因为在办公室要求电子产品国产化,这部2012年购买的笔记本再次发挥余热,目前的文字就是在这台设备上输入的。
  • REMOVED FROM INVENTORY
    • 工具:Evernote
    • 硬件:Apple Macbook Pro 15‘ 2016 送给 张培
    • 断舍离的一堆闲置的物品,不过这些物品本来也没添加在我的工具库当中。故这里不再具体记录。
  • TESTING
  • 启发自 https://julian.digital/activity/increasing-productivity/
  • This is a quarterly update and review of new tools and products I have recently added to my personal productivity stack.

豆子考证

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

数字生活 2021Q2

  • 介绍2021年上半年个人工具库方面发生的变更。其他未变更部分参考前文 赛博 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,需要将音频文件分段转为文字,所以速度不算快。不过敲好命令可以看别的去。总体来说还是节约了大量时间的。

2026-02-22 更新:目前语音转文字的LLM模型进步太多了,效果应该会好很多。可以采用 OpenAI Whisper 等先进模型

直接下载字幕 #

对于本身有字幕的视频来说,可以直接下载:

# 下载全部字幕命令
yt-dlp --write-subs --skip-download [视频URL]

# 下载自动翻译/AI生成的字幕
yt-dlp --write-auto-subs --skip-download [视频URL]

三方服务 #

如果懒得自己折腾的,可以考虑提供类似功能的商业服务 (未尝试):

数字生活 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 账户,全文搜索也是可能。

...