没有巴德膜的日偏食:一台四不像“投影仪”的观测记录

2026 年 8 月 12 日的日全食,全食带从北冰洋掠过冰岛,最后在西班牙结束。我所在的地方(北纬 49 度附近)不在全食带内,只能看到一次食分相当深的日偏食:太阳最大被遮挡 88.9%,本地食甚时刻为 20:15 左右,可见时段从 19:22 持续到 20:47,几乎贴着日落。也就是说,整个过程发生在太阳高度角只有不到 10 度的傍晚,观测窗口低。 问题:没有巴德膜 观测日食的正经做法是在望远镜或双筒镜物镜前加巴德膜,把阳光衰减到安全亮度后直视。我手头没有。临时买也来不及了,所以只剩一条经典的路:投影法。不用眼睛看目镜,而是让望远镜把太阳像投射到一张白纸上,看纸上的像。这个方法对器材没有任何特殊要求,唯一的纪律是全程绝对不能把眼睛凑到目镜后面。 于是我把手头能用的东西全堆在了一起:一副 7x50 双筒望远镜、一个旅行三脚架、一颗球形云台,再加上快装板和 L 板七拼八凑出来的连接件。双筒镜侧躺着被夹在架子上,镜身朝天,目镜端斜指向地面。整套东西没有一个零件是为这个用途设计的,组合出来的形态相当离谱,但它能稳定指向太阳,也能微调跟踪,这就够了。 对准太阳也有讲究:不能通过目镜瞄准,我用的是看影子的办法。调整镜身姿态,直到双筒镜在地面上的影子缩成最小、最对称,太阳就进入视场了。之后在目镜后方二三十厘米处举一张白纸,慢慢前后移动找焦点,纸上就会出现一个明亮清晰的太阳像。 纸上的日食 食甚前后,纸上的太阳已经缺成了一弯细细的月牙。双筒镜和云台的影子投在纸面上,中间悬着这一钩亮弧,旁边甚至还能看到目镜杂散光形成的几个小像。傍晚的阳光本来就偏金黄,整个画面意外地好看。 我选的观测点是一座电车站的高架平台,视野开阔,正对西边低空。到了傍晚,平台上陆陆续续聚起了不少人,有戴日食眼镜的,有支着相机和脚架的,也有路过停下来看一眼投影纸的。白纸一直举在我手里,纸上的月牙比任何解说都直观,不时还有路人举起手机对着它拍照,效果居然都不错。 还有一个和直觉相悖的发现:即使在食分接近 88% 的时候,肉眼看太阳依然刺眼,眯起眼睛也只能勉强辨认出一点月牙的轮廓。我原本以为遮掉近九成的太阳会像黄昏一样暗淡下来,实际上天色只是略微发沉,太阳本身还是亮得看不了。剩下那一成多的日面,亮度已经远超眼睛的承受范围。太阳终究还是太亮了。后面有路人主动把眼镜借给我戴上,我才真正看到它的全貌。 几点记录 投影法的效果比我预期的好。7x50 的口径集光足,投出的像亮度和锐度都够,月牙边缘干净利落。凑近了仔细看,纸面上甚至能认出两三个黑子,一副 7 倍的双筒镜能做到这一步,是我完全没有想到的。代价是跟踪要勤:太阳在低空移动加上下沉,隔一两分钟就得拧一下云台。另外投影端温度会升高,我每隔一段时间就把物镜盖盖上让它歇一会儿,避免目镜组件长时间被聚焦的阳光烤着。 这次没有巴德膜反而成了一件好事。直视式观测是一个人的事,投影法却把太阳摊在一张纸上,谁走过来都能看。器材不体面,画面很体面。我计划以后有条件专门坐飞机去全食带看日全食,到时候我大概能带上完整的观测设备。

2026年8月12日

搭建一个可分流的个人VPN网关:WireGuard、sing-box与Gluetun的组合实践

在之前的文章中,我介绍过一种比较直接 的链式 VPN 方案:所有设备先连接到自己搭建的WireGuard 服务器,再由服务器把流量转 发到 Gluetun,最终通过上游 VPN 服务商的出口访问互联网。 这个方案的核心价值很明确: 所有设备只需要配置一个 WireGuard; 上游 VPN 只需要在服务器端维护; 可以把手机、电脑、平板、家用设备统一接入同一个虚拟局域网; 出口 IP 由商业 VPN、公司 VPN 或其他上游 VPN 提供,而不是直接暴露 VPS IP; 整套系统可以通过 Docker 部署,尽量不污染宿主机环境。 相比于直连VPN,该方案下VPN服务商能看到的只是你的VPN网关出口(你的VPS服务 器),而不是每个设备的真实 IP。 另外,本地的ISP等也看不到你是否是在使用主流VPN,因为他们只能知道你在连接到一个 VPN网关(你的VPS服务器),但流量最终去了哪里是未知的。 不过,随着使用场景变多,原来的结构也逐渐暴露出一些局限。最典型的问题是,对流量的 控制不够细粒度。默认情况下所有流量都必须进入上游 VPN 隧道,这对于某些服务可能会 触发风控,或者导致访问问题。而且比较难方便地进行流量工程,对不同服务采用不同的出 口策略。原先通过 iptables 和路由表的方式虽然能实现分流,但规则一多就难维护。 因此,我把原来的方案重新整理成了一个更完整的个人 VPN 网关架构。新版方案不再只是 简单的 WG-Easy + Gluetun,而是变成了: WG-Easy + sing-box + Gluetun + AdGuard Home + config.yaml 统一配置生成 对我来说,这套方案已经不只是“VPN 套 VPN”,而是一个可以长期维护、可扩展、可观察的 个人网络出口。它既可以服务日常上网,也可以服务远程办公、家庭内网访问、开发测试和 多设备统一管理。如果你只需要最简单的全局 VPN 转发,旧版思路仍然够用。但如果你希 望在隐私、可控性、分流规则和 DNS 管理之间取得更好的平衡,新版架构会更合适。 ...

2026年5月23日

个人 VPS 自部署的长期主义:干净与安全

我开始认真折腾个人 self-host,大概已经有五六年了。严格意义上开始管理我自己的 VPS 的时间点,应该还可以往前追溯。最初的动机其实很简单:有些服务我每天都在用,比如密 码管理器、音乐播放、笔记同步、个人网站、代码仓库等等。既然如此,为什么不干脆自己 部署?这样一来数据在自己手里,也不用被各种平台订阅和涨价牵着走。 这几年一路走下来,说实话,self-host 并不省心。我要维护系统、备份数据、关心安全、 偶尔还要救火。但它给我的回报也很明确: 数据完全掌控在自己手里 不再被订阅价格牵着走 对系统、网络和安全的理解明显更深 现在我一台服务器跑着十几个服务,成本只是一台服务器的钱。在这两年取消了不少第三方 平台的订阅后,算下来,整体成本可能反而更低。对我来说,这种“复杂但可控”的状态,反 而比依赖一堆外部服务更安心。当然不这适合所有人,我感觉有:有一定技术背景的人、喜 欢折腾的人以及愿意为稳定与掌控付出时间的人,这三者合一就适合这样。 到现在,我并不觉得自己成了什么“专家”,但有到现在两件事的感受越来越强烈:安全性 以及服务器环境的整洁程度,这也是这篇文章的两个主线。这两个问题,几乎决定了 你这台服务器上的各类服务能不能长期稳定地用下去。然后就是需要迁移的时候,比如换了 一个更便宜或者更好的 VPS 供应商,这个时候的工作量(我自己就换了好几次,知道真的 换不动了才稳定下来)。 草莽阶段 最开始的时候,我的做法非常朴素。我会直接在宿主机上安装服务,然后安装 Nginx 或者 Apache2(httpd)。比如用 Nginx 做反向代理,Nginx 这类 Web 服务器 的好处是配置文 件可以拆开,每个站点一份,用域名来区分各个服务而不是端口号,看起来井井有条。那时 候我觉得这套方案挺优雅的。 但随着服务慢慢变多,问题开始一点点浮现。有的服务需要特定版本的依赖,我很难在同一 个环境安装不同版本的各种依赖库或者数据库。而有的会在系统里留下各种临时文件;配置 文件散落在 /etc、数据放在 /srv,日志又在 /var。一开始你还能记得“这是哪个服 务的”,时间一长就完全混在一起了。 这期间,当我想删除一个不用的服务时,我已经不敢确定自己删得干不干净。特别是有的服 务提供“一键安装脚本”,安装的时候一时畅快,等到了你想摆脱它的时候,你会发现当初的 脚本不知道做了什么改动,如何复原都毫无头绪。你很难确认还有没有残留的配置、后台进 程,甚至不知道删错东西会不会影响别的服务。这种不确定感,本身就是一个风险,对于强 迫症来说,每每想起简直是如鲠在喉。 容器化阶段 后来我把几乎所有服务都迁移到了 Docker 里。而且,到现在越来越倾向于将所有能用的到 的服务或者工具软件容器化,再去部署。有些不提供标准的容器化部署方案的,但又很想用 的服务,我会直接自己进行容器化包装,形成自己的容器化的解决方案。 真正改变体验的不是 Docker 本身,而是 Docker Compose。容器这东西,本质上就不 应该被当成“长期维护对象”,它随时都可以被删掉、重建,你需要意识到这个。早期的时 候,我觉得 Docker Compose 配置文件麻烦,为什么不用命令直接创建一个容器,然后让这 个容器长期运行。后来等我要更新,或者这个服务依赖多个底层的其他容器的时候,问题就 逐渐浮现出来。如果当初将对服务的部署写下来,写到一个配置文件中,然后每次就执行这 个配置文件就能完美复现原先的部署,不需要自己额外配置什么 Bridge 网络,或者什么 hostname,亦或者是重启策略。这个节省了大量的时间和精力,并且配置的时候出错的可能 性,也大大降低了。 ...

2026年1月2日

让树莓派 5 跑上“香草”主线内核:精简裁剪、交叉编译与部署全流程

摘要 本文系统记录了我如何将树莓派 5 打造成主线 Linux 内核(Vanilla Kernel)的极简开发 与测试平台——包括仓库极简裁剪思路、定制化内核配置、交叉编译与自动部署脚 本、overlay 移除技巧,以及长期与主线社区同步维护的实战心得。适合关注 Linux 主 线、ARM64 适配、内核开发、Upstream 贡献或喜欢折腾内核的极客们参考和实践。 背景与动机 最近一段时间,我在深入研究 Linux Kernel 的理论和架构,准备正式切入操作系统内核领 域。因此,特意购买了树莓派 5 作为开发板,用于学习和实践内核开发。然而刚上手就发 现,目前树莓派 5 并不能直接跑主线 Linux 内核,只能依赖树莓派团队维护的内核仓 库。当时最新的分支是 rpi-6.14.y(现在是 rpi-6.16.y),仓库的维护方式是“动态拉取上游主线代码+rebase+大量自定义补丁”,涉及 上万行的修改和历史反复变动。 这些定制补丁对于官方内核在树莓派上稳定运行、兼容所有功能确实非常重要,但对我这种 纯粹想研究主线内核特性、关注内核本身的开发者来说,这些补丁反而变成了负担: 主线同步困难,merge 经常出冲突, 版本历史频繁重写,难以回溯和比较, 验证主线新特性或做反馈变得不直观。 我对比了 x86 开发板,发现它们大多能直接运行主线内核,但价格昂贵,性价比远不如树 莓派 5。因此,我开始思考,如何让树莓派 5 也能顺畅运行主线内核,真正实现随时体验 和测试内核最新特性,并为 ARM64 平台反馈问题、贡献补丁提供便利。我的目标很明确: 用最少的补丁、最贴近 upstream 的方式,让树莓派 5 成为个人主线内核实验和学习的理 想 ARM64 平台。 仓库结构与修改范围 我的做法十分简单却又直奔核心——只保留最必要的驱动与补丁,其余全部紧跟主线。仅对 drivers/ 目录做补丁,聚焦核心硬件支持,主要包括: SD 卡驱动:保证树莓派能正常引导,内核能加载根文件系统。虽然启动固件自带部 分初始化功能,但主线内核仍需驱动挂载根文件系统。 有线网卡(Ethernet):方便通过 SSH 实现远程登录、下载新内核镜像、远程开发 和调试,是内核开发过程中最重要的 IO 通道之一。 UART 串口:作为内核调试和 early print 的输出窗口,可以直接观察内核日志,判 断启动和运行状态。 ...

2025年6月14日

搭建个人链式VPN网络:高效隐私保护、设备无限制管理与远程访问

在某些场景中,我们可能需要搭建一个链式 VPN 结构,即先让内网设备连接到自建的 WireGuard 服务器(如个人 VPS),再通过该服务器将所有流量转发到另一个 VPN(公司、 学校或商业 VPN 服务)后才进入互联网。搭建这种「VPN 套 VPN」的网络架构,有以下明 显优势: 强大的隐私保护:内网设备的数据流量首先通过自己搭建的 WireGuard 加密隧道传输至 个人 VPS,再由 VPS 二次通过商业或公司 VPN 进行转发,最终从该 VPN 的 IP 出口访 问互联网。这种方式彻底避免了使用 VPS 自身 IP 地址直接访问目标网络,大大降低了 个人 IP 被跟踪或泄露的风险。 集中化便捷管理:所有客户端设备统一连接到单个 WireGuard 服务,免去逐一配置每台 设备的麻烦。更重要的是,它还能巧妙绕过一些商业 VPN 服务商设定的账号设备数量限 制,一次付费,所有设备共享。 灵活便捷,轻松切换:由于商业或公司 VPN 配置仅在自建 WireGuard 服务器端修改一次 即可生效,下游客户端(手机、电脑等)无需单独调整。这使得更换或重新配置上游 VPN 时更加迅速和便捷,大大提高日常维护的效率。 打造专属虚拟局域网,实现跨设备互通:一旦所有设备连接到自建的 WireGuard VPN 服 务器后,将自动获得统一的 VPN 虚拟局域网 IP 地址(例如:10.8.0.0/16)。处于该网 络中的设备能够直接互相通信,无需额外设置。 这种便捷性意味着无论你身处何处,都能轻松实现: 远程 SSH 登录:随时访问家中或办公室的服务器。 私有 NAS 媒体访问:在外轻松访问家中 NAS 存储的媒体文件。 远程办公:随时随地安全访问公司内部网络资源。 方案 经过本人的探索和实践,我逐步摸索出了自己的一套链式 VPN 方案。总体来看,我的方案 完全基于 Docker 部署,所用到的核心组件有: ...

2025年6月2日

自建图床服务并配置免费CDN全球加速 过程记录

个人有一些图片托管的需求,在很多场景下比如说在博客文章中插入图片,在社交网站上分 享图片,抑或是个人开源项目中的图片等等,都需要在文档(特别是 MarkDown)中嵌入一 个 URL 直链来指向图片。对于一些免费的图床服务商,个人感觉并不是很信任。数据安全 是一方面,另一方面如果服务商跑路了,那么很多原先我创建的链接都会失效。据我所知, 这样的例子比比皆是。 网上还有一些教程将 GitHub 当成免费图床来用。这样做弊端也很明显,GitHub 在国内的 访问速度非常慢,图片加载很慢。另外,缺少很多图床该有的功能,比如说自动压缩,自动 转换成 Webp,自动重命名等等。这样做也是不太可行的。下面就是一个我将 GitHub 用作 图床的例子。每次我还需要将图片移动到代码仓库里,然后 commit,push,我个人感觉很 麻烦。 还有一段时间我试过把 WordPress 的 Midea 库当作图床来使用,但是我发现图片链接中带 有 wp-content/upload 这样的路径。然后链接中还会出现图片的名称。我感觉并不是很雅 观,而且在隐私的保护中有一种说不好的感觉。就像是别人一看这个 URL 链接,就能获知 一些图片以外的信息。下面就是用 WordPress 的 Media 库当图床例子。可以看到,产生的 直链不是很美观,而且还能暴露一些信息。 所以,我这边产生了自建图床服务的想法。这种图床最好能自动转换 jpg、png 格式的图片 为 webp。这样图片就能比较高质量、快速地在用户浏览器中加载出来。有关 WebP 的简要 介绍如下: WebP is a raster graphics file format developed by Google intended as a replacement for JPEG, PNG, and GIF file formats. It supports both lossy and lossless compression,[8] as well as animation and alpha transparency. ...

2023年11月18日

搭建一个免费开源好用的Docker面板 Portainer

Portainer 是一个好用的 Docker 容器控制面板。它的代码仓库在这 里。它支持单节点和集群部署。 在此之前,我已经将个人服务器完全容器化了。如果能够可视化操作、监控各种容器,对于 日常的运维帮助很大,感觉一切尽在掌握。 可以看看搭建好后的效果,界面还是很美观 的。 可以快速拉取镜像 可以可视化发布容器,并灵活设置环境变量、网络、重启策略等等参数。 可以在镜像更新的时候,快速用新镜像更新容器。 还可以快速进入接入容器命令行,查看容器日志。 可以说,我日常需要的功能都有,感觉很完善了。 搭建 那么对于单点服务器来说,该如何搭建呢,首先你要确认你的服务器目前有安装 Docker。 可以输入docker -v来看看当前环境中是否存在 docker。 如果不存在,需要安装 docker,你可以在 Google 找找教程。对于 AWS 的 EC2,可以输入sudo yum install docker -y来安装。 确认安装好 Docker 后。确认一下 Docker 是否启动。然后看看 /var/run 路径下是否有 docker.sock 文件。 然后,确认 8000 端口和 9443 端口都没有 被占用,因为 Portainer 后续要用到这两个端口。 将应用数据存储在 Docker Volume 如果你想将 Portainer 产生的应用数据存在 Docker Volume 中,你可以直接执行下面的命 令。后续部署完成后,Portainer 所使用的 Docker Volume 也可以在 Portainer 看到并管 理。如果 8000 端口被占用了,可以将-p 8000:8000改成其他端口,类似-p 12345:8000。9443 端口也是类似。 如果你想指定容器名为其他,可以修改–name 参数, 比如说--name myportainer。 ...

2022年11月23日

有关下一阶段的计划

实际撰写时间:2017-05-20 20:57:23 不得不承认,去年是一个低落的一年,不管是生活上,学习上,还是精神上。眼看着和目标 渐行渐远,自己又无力改变。 但是,现在不同了。在度过了种种困难后,终于在艰难种找到了一种新的思考问题的方式, 也第一次发现了自我。在解决了一系列问题后,内忧趋于瓦解,我觉得,终于可以集中自己 的所有能力而不会受制于自己本身了。 该找到的答案,我已经找到了。这个时候,内心感到宁静。是时候开始奔跑了。学会奔跑的 我,再也不会是被自己折磨苟且爬着和别人比赛的我。在我学会奔跑后,被我超越的,再也 不可能赶超回来。

2022年11月9日

Ubuntu双系统重装Windows后修复grub2引导 UEFI

如果你在安装了 Ubuntu 和 Windows 双系统后,又重装了 Windows 系统。那么 Grub 引导 项大概率会被 Windows Boot Manager 覆盖,这时候你就进不了 Ubuntu 了。但不要慌,按 照下面的步骤可以修复 grub2 引导,而且不需要安装额外的软件。 制作 Ubuntu 的 U 盘启动盘 为了修复引导项,我们需要用到 Ubuntu 系统提供的软件工具。虽然我们暂时进不去原来的 Ubuntu 系统,但是我们可以使用写在 Ubuntu U 盘中的镜像来获得一个可用的基本 Ubuntu 环境。 在Ubuntu 官网下载镜像文件。 制作 U 盘启动盘可以使用免安装、小巧好用的rufus。你可以使 用 rufus 快速创建一个 U 盘启动盘,注意选择 GPT 模式。 引导 U 盘启动盘 重启电脑,在 BIOS 引导设置中引导 U 盘,然后进入 Ubuntu 引导安装程序后,在安装界 面选择 Try Ubuntu 进入 Ubuntu Live。 执行 Grub2 重建操作 使用 fdisk,找到 EFI 分区,/boot 挂载点所在的分区(如果你没有设置/boot 挂载点则 为/挂载点)。 挂载/boot 挂载点所在的分区到/mnt 下(我的分区在 nvme 固态硬盘 上)。 ...

2021年11月26日

解决yarn安装electron、chromedriver等软件包超时、缓慢的问题

在国内使用 yarn 安装 electron、chromedriver 是经常出现无法连接的问题,这个时候, 相对于设置代理,我们可能更希望使用在国内的镜像仓库来加速这个过程。并且安装 electron 的时候,单单设置 yarn 的全局代理是没有用的。那如何根据不同的软件包设置 代理呢?你可以按照以下列表中提供的命令样例来设置。 yarn 全局设置 设置 yarn 安装一般的软件包时使用的仓库地址。 yarn config set registry https://r.npm.taobao.org 注册模块镜像 yarn config set disturl https://npm.taobao.org/dist # node-gyp 编译依赖的 node 源码镜像 这是运行以上命令的结果,你可以很清楚地看到设置是否成功。 yarn 安装特定软件包设置 设置 yarn 安装 electron 、chromedriver 等软件包安装使用到的仓库地址。你可以按照 需要选择一两个命令来设置,一股脑全部加上是被必要的。 yarn config set sass\_binary\_site https://npm.taobao.org/mirrors/node-sass # node-sass 二进制包镜像 yarn config set electron\_mirror https://npm.taobao.org/mirrors/electron/ # electron 二进制包镜像 yarn config set puppeteer\_download\_host https://npm.taobao.org/mirrors # puppeteer 二进制包镜像 yarn config set chromedriver\_cdnurl https://npm.taobao.org/mirrors/chromedriver # chromedriver 二进制包镜像 yarn config set operadriver\_cdnurl https://npm.taobao.org/mirrors/operadriver # operadriver 二进制包镜像 yarn config set phantomjs\_cdnurl https://npm.taobao.org/mirrors/phantomjs # phantomjs 二进制包镜像 yarn config set selenium\_cdnurl https://npm.taobao.org/mirrors/selenium # selenium 二进制包镜像 yarn config set node\_inspector\_cdnurl https://npm.taobao.org/mirrors/node-inspector # node-inspector 二进制包镜像 和上面的类似,运行命令后你可以很清楚地看到设置是否成功。 ...

2021年11月22日