博客 | Blog

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/dockerhttps://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 账户,全文搜索也是可能。

...

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-category https://www.mint.com/mint-category

    ...

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。

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 来看完成度还是比较高的。侧重点在于比较不同风险资产的盈利情况。

...