2024-11-18 17:30:16
最近在参与 Follow 以及 RSSHub 这两个开源项目的一些开发维护工作,因为牵扯到与很多订阅源的“斗智斗勇”,有一些很有意思的开发实践,于是开了这个新坑系列记录下来。
本篇是这几周使用 Telegram 官方 API 与 MTProxy 来实现对 TG 频道更新的开发实践与完整配置部署教程。
Follow 中提供了一种便捷的订阅信息源的方式,例如用户可以输入对应的 Telegram 频道名称(如 pseudoyulife
)来订阅某个频道的更新,这样就无须跳转到各个频道里去逐个查看,这一部分特性依赖的是背后 RSSHub 的实现。
RSS (Really Simple Syndication) 是一个古早的信息聚合标准,它通过统一的数据格式,让用户能够便捷地订阅和获取网站更新。然而,随着社交媒体和移动互联网的兴起,原生支持 RSS 的网站正在减少。
而 RSSHub 秉持着"万物皆可 RSS"的理念,通过开源社区的力量将包括 Telegram、YouTube、播客在内的众多现代内容平台转换为标准的 RSS 格式,让用户能够重新掌控自己的信息获取方式,远离算法推荐的干扰。
RSSHub 中现在包含了上千个平台,针对不同平台和类别也都有着包括但不限于网页爬虫、官方接口、逆向 API 调用等多种处理方式,能够涵盖绝大多数我们日常使用到的信息源,也非常适合作为对平台的一些加密算法和反爬机制学习的实践,例如下文所要介绍的 Telegram 频道 RSS 订阅的实现。
Telegram 提供了频道的网页预览功能,例如可以通过 t.me/s/pseudoyulife 这一链接直接查看我频道的更新,因此 RSSHub 很早之前就实现了通过抓取网页上的内容并转换为 RSS 格式的方式集成了对 Telegram 频道更新的订阅。
然而后来许多用户反馈说部分频道抓不到,去测试了一下,发现 Telegram 用一种黑盒的机制来限制了部分频道的网页预览功能,例如我一直在订阅的「Reorx’s Forge」以及「Newlearnerの自留地」等频道,当使用 /s
来访问页面时会被强制重定向,提示需要打开客户端来查看内容,因此对于这类频道我们没办法直接抓取到内容并转化为 RSS。
为了解决这一问题, 我又去查了 Telegram 的官方文档,发现他们将 API 分为以下几种:
其中 Telegram API 中的有一个 channels.getMessages 方法可以返回某个频道的消息,可以满足我们的需求,具体的实现逻辑在 RSSHub 代码仓库 —— lib/routes/telegram/channel.ts 和 lib/routes/telegram/tglib 这两部分,有兴趣的朋友可以看一下代码。
使用 Telegram API 需要访问 telegram core,通过手机号登录。
点击 API development tools 模块,创建一个 Telegram Application(详见「Creating your Telegram Application」)。
在 App configuration 模块,我们能够获取到 api_id
、api_hash
两个参数,记录下值,后续会用到。
使用 Telegram API 新建一个 client 的流程比较严格,需要通过 SMS 验证手机号登录,在代码中交互获取使用并不现实,因此我们需要预先创建 client 并且获取其 session,后续直接通过 session 来使用 api。
拉取脚本「pseudoyu/telegram-api-scripts」后,先运行 npm i
或 pnpm i
安装依赖,然后运行 npm run start
或 node index.js
,按照提示输入 api_id
和 api_hash
和手机号(需要和申请 Telegram App 时的手机号一致),通过短信或 Telegram App 获取验证码后即可在命令行输出获取 session。
需要注意的是,由于我们后续需要在 RSSHub 服务中使用这个 session,尽量在 RSSHub 服务部署的同一服务器上运行脚本获取 session,这样能避免 Telegram 对于 IP、设备的一些限制。
注:如果 RSSHub 是使用的 Serverless 平台或其他方式,则也可以通过额外配置 MTProxy 的方式来保持 IP 一致,后文会详细说明。
之前在 Follow 的 RSSHub 实例上添加了 Telegram API 相关逻辑和配置后,过一会儿就会报一个 AuthKeyDuplicatedError
错误,查看了一下很多开发者也遇到过 —— 「AuthKeyDuplicatedError Eror problem #1488」,猜测是由于我们的 RSSHub 实例是 k8s 集群部署的,会从不同的机器调用 Telegram API,因而受到了一些限制。
于是又开始找针对这一情况的解决方案,发现 Telegram 提供了一种叫 MTProxy 的专属代理协议,可以通过部署一个 MTProxy Server 来代理所有的 API 请求,这样能够确保不同机器发送的请求都来自同一个 IP。
找到了「Dofamin/MTProxy-Docker」这个项目,拉取仓库后,新建一个 .env
文件,添加 MTPROTO_REPO_URL
这一环境变量(默认的官方代码已经不怎么维护,这个版本添加了一些补丁):
MTPROTO_REPO_URL=https://github.com/GetPageSpeed/MTProxy
SECRET
默认值为 ec4dd80983dbf12d6b354cf7bcfe9a48
,也可以选择自定义的值;IP
不填写则会自动通过 curl ifconfig.co
获取本机 IP;其他环境变量可以查看仓库的 README.md
文件自行修改。
配置完成后,运行 docker compose up -d
启动,代理服务则运行在 <IP>:8443
上。
注:如果 RSSHub 是通过 Docker、Docker Compose 等方式单实例进行部署,且能够保障在同一台部署机器上运行脚本获取 Session,则可以跳过这个代理步骤。
经过了上述的服务部署,我们获取了以下信息:
api_id
和 api_hash
session
字符串SECRET
、IP
、PORT
这时可以开始部署/更新我们的 RSSHub 实例了,具体可以根据文档选择不同的方式,例如 Docker、Docker Compose、Serverless 等。
推荐通过 Docker Compose 的方式来部署,比较便于维护,需要在 docker-compose.yml
的 RSSHub 服务中添加如下变量:
environment:
- TELEGRAM_API_ID=<Telegram API ID>
- TELEGRAM_API_HASH=<Telegram API Hash>
- TELEGRAM_SESSION=<Telegram Session>
- TELEGRAM_PROXY_HOST=<MTProxy IP,如 123.123.123.123>
- TELEGRAM_PROXY_PORT=8443
- TELEGRAM_PROXY_SECRET=<MTProxy SECRET>
我是通过自己维护的模板部署在 Zeabur 平台上的,可视化部署,比较易用,只需要在部署完成后在 RSSHub 服务的 Variables
模块中添加以下变量并重启服务即可生效:
TELEGRAM_API_ID=<Telegram API ID>
TELEGRAM_API_HASH=<Telegram API Hash>
TELEGRAM_SESSION=<Telegram Session>
TELEGRAM_PROXY_HOST=<MTProxy IP,如 123.123.123.123>
TELEGRAM_PROXY_PORT=8443
TELEGRAM_PROXY_SECRET=<MTProxy SECRET>
经过上述步骤后,我们拥有了自己添加了 Telegram 相关配置的 RSSHub 实例,访问主页显示如上页面即部署成功,可以通过 <RSSHub URL>/telegram/channel/<Channel Name>
来订阅 Telegram 频道。
例如可以通过我的公开实例 https://rsshub.pseudoyu.com/telegram/channel/NewlearnerChannel 来订阅「Newlearnerの自留地」频道。
本篇记录了通过 Telegram API 在 RSSHub 中实现对部分受限制频道的更新订阅的开发实践与部署方案,受限于平台,方案可能会在未来某个时刻失效,我们也会持续研究更稳定的解决方案,使用中有任何问题可以留言或在 RSSHub 仓库中提 Issue 反馈/交流。
2024-11-04 15:20:39
我在三个月前作为第一批用户体验到了 Follow 这一产品,很兴奋,使用了一周后就写了一篇文章「周报 #67 - 使用 follow 重塑我的信息输入系统」分享了对 Follow 的一些想法。
而现在三个月过去了,Follow 本身迎来了许多更新,正式开启了 beta 测试;其在我日常信息输入和输出系统中也已经不仅仅是一个 RSS 阅读器 alternative,而是彻底改变了我的信息获取形态。
因此想再写一篇文章更系统性地分享一下我对 Follow 的看法,以及我是如何使用它的。
在讲 Follow 之前,我想先介绍一下与之密切相关的 RSS 协议。
RSS (Really Simple Syndication) 是一种能够将网站内容转换为标准数据格式的协议,最早版本诞生于 1999 年,几乎可以算得上是互联网活化石了。
简而言之,它制定了一个包含了 title
、link
、description
、author
与 pubDate
等核心字段的协议标准,采纳并实现了这一标准的网站则可以输出统一的格式以供一些阅读器或代码进行解析,例如可以通过 https://sspai.com/feed 这一链接来获取网站的最新更新;而支持 RSS 的阅读器就像是一本自带目录的刊物,里面收录着来自不同网站和作者的内容,方便我们进行阅读。
但随着移动互联网的发展、社交媒体和音视频等媒体形式的兴起以及网站出于对平台用户流量的保护,支持 RSS 协议的网站越来越少,这一概念也有些式微,慢慢淡出了普通用户的视野,成为了一些爱好者和极客的玩具。
直到 RSSHub 这一项目的出现。
RSSHub 是由「DIYgod」发起的一个开源项目,其初衷是“万物皆可 RSS”,通过社区贡献,将 Bilibili 视频、网易云音乐、小宇宙播客、即刻用户动态等图片、音视频、社交媒体网站甚至是 App 中的信息转为标准的 RSS 格式。
借助 RSSHub,我们可以把自己习惯性会打开的社交媒体或是关注的各种平台账号都转换为「订阅」这一简单的行为,即可自动获取更新,减少了算法推荐与信息的干扰,提取信息的效率也会更高。
然而,RSSHub 终究还是更中间层一点的工具,即使有了标准的 RSS 数据,大部分阅读器依然只能处理文本显示,对于音视频图片的处理基本上只停留在当作一个 url 这一程度,依然需要点击源链接跳转到对应的网页查看,使用起来常常有些割裂。
直到 Follow 的出现。
其实就软件的本质而言,Follow 并没有改变或是拓展 RSS 协议本身,而是通过对 RSS 信息内容媒介呈现方式的改变、浏览体验的优化及与 RSSHub 的深度集成,更面向用户层去解决信息获取与浏览的问题。
确实有一种看久了 pure html 突然飞跃到加了现代化 css 效果的感觉。其实技术层面做到这一步算不上有太高的壁垒,不论是视频 iFrame、音频播放器或是图片预览都有比较成熟的组件可以使用,但 follow 几乎是唯一一个依然在针对这一协议做且做好这一步的产品。
有时候,做好一点就足够了。
软件/应用层面的 Follow 给我带来了很好的体验,但不止于此,其更深的影响是对我获取信息的流程与方式潜移默化的改变。
不知道从什么时候起,其实能很明显感受到自己对网络世界信息的依赖。可能有别于游戏瘾或是经常被诟病的短视频算法鸦片,我的这种依赖并不是机械性地刷刷刷,而是一种对于信息获取的渴求,甚至内化为了一种生活方式。
而我每天从起床开始就会被来自各个平台的信息流所裹挟,依赖于网络世界其实最难免的是与社交媒体与算法的抗争,一方面是要避免自己被过载的贩卖焦虑的信息或是熟人社交圈的“Peer Pressure”所困扰,另一方面也需要警惕算法所构造的信息茧房。
实话说这一点挺难做到,即使自己多少算是具备一些克制和过滤信息的能力并有意识在这样做,但依然难以避免被其所扰乱思绪或是引导。
我最后采取了一种简单的方式 —— 关闭微信朋友圈入口与大部分软件通知提醒,并且把用于信息获取的平台(如 B 站、即刻等)的关注数量控制在 100 以内,如果新增则筛选优化之前的关注,减少无关内容的干扰。
行之有效,但由于依然需要使用多个平台/App,每当我打开 B 站常常还是会被一些有趣的内容吸引,而 Twitter 这样的平台又多少带了一些社交属性,自己又没有屏蔽或是关键词过滤的习惯,依然难以避免信息噪声。
Follow 的出现让我看到了另一种新的形态 —— “Self-custodial Feeds”,即可以自己掌控的信息源。
首先就是厘清我对于 Feeds(信息源)维度的定义与标准。对于我来说,我的信息源由以下组成:
我会尽量避免关注那些像是「v2ex 最热主题」这些热搜类的信息源,并不是对这些资讯不感兴趣,而是刻意减轻自己的信息消化的压力;并且慢慢发现其实也不会错过什么,真正自己会感兴趣的话题也已经在我关注的人的社交媒体分享或博文中了。
也可以说这是自己打造的另一座“信息茧房”,但随着对这些信息源的不断迭代与剔除,最终会慢慢建立一个贴合自己信息获取频率与消化能力的“数字花园”。
这些信息源形态各异,但却又刚好符合了 Follow 中的「视图(View)」这一概念。Follow 中除了按照标签和域名分组外,还可以在 Feed 层面设置视图,我上述的这些信息源就可以分别归到文章、社交媒体、图片、视频、音频和通知这几类视图中。
比如图片就会有画廊和瀑布流的呈现、社交媒体视图就更像是一条条动态博文,视频可以直接点击播放,而音频/播客则可以全局播放,甚至带进度条或是时间线跳转等功能,这也解决了我需要在 Apple Podcast、Spotify 和小宇宙等多个播客应用之间反复横跳的问题。
而对于那些只提供 newsletter 的博主/网站,Follow 提供了内置 Inbox 收件箱功能,可以使用对应的邮箱地址来收取 newsletter 并自动将邮件内容转为 Feed 内容,又减少了需要从成堆的邮件里找文章的繁琐,也保障了统一的阅读体验。
RSS 与 RSSHub 的结合确实让信息获取与阅读变得更加简单,但脱离了平台的那些“关注”、“阅读量” 、“点赞”等特性却也容易让这一个个 RSS 信息源成为孤岛。
Follow 将每一个 RSS 订阅源作为一个单元,记录下了这个订阅源的关注与阅读数据,当另外的人通过名称或是链接在搜索时,能看到有哪些人「Follow」了这一信息源(如这个页面 https://app.follow.is/share/feeds/41215011978385440),便于检索的同时,也天然形成了对其内容质量与价值的一种背书。
「Follow/Subscribe」这一行为在社交媒体平台已经几乎成为了标配,但这一概念用于重新建立这些 RSS 孤岛之间的联系却显得尤为巧妙,甚至更进一步,使其变得更为紧密与开放。
而在某个 Feed 的文章页面中,我们还可以看到有哪些人阅读过这篇文章,点进那一个个头像又能够看到 Ta 们所订阅的其他 Feeds。
同时,Follow 也提供了打赏(Tip)与助力(Boost)的功能让读者可以通过自己的方式支持创作者,创作者只需要通过一个所有权认证即可收取奖励,形成一种正向的循环。
创作者与读者之间仿佛多了一条细微的橙色细线,感知并不明显,不会形成什么社交压力或是被窥探的不适,但却温暖而坚韧地存在着。
有时我们也会想看看他人尤其是同温层的人在关注些什么以丰富自己的信息源,但常常每个人关注点可能分布在不同的网站,而 Follow 提供了用户 Profile 页面可以直接关注,并且也支持直接关注用户的订阅列表,可以很方便地看到 Ta 们关注了哪些信息源以及后续新增加了哪些。
对于有些想要创建自己的「数字花园」的用户来说,也可以创建付费 Lists,感兴趣的用户则可以通过支付一定费用来订阅,形成一种新的信息分享与获取的形态,即不仅仅信息源本身有价值,筛选过滤出高质量的信息源也同样值得付费。
Follow 还提供了一些自动化规则,例如可以将非中文内容自动翻译并使用 AI 进行摘要总结,对正文沉浸式翻译等,根据这些规则提升我们的信息处理效率。
我用的最多的一个 Action 是对个人博客的内容进行摘要、向我推送通知并开启阅读模式(可以自动去抓取一些不提供全文输出的 RSS 源),这样我能够不错过我所关注博主的更新。
Follow 的出现并不只是优化了阅读体验,而是让我对信息源整理这一起点有了更深的思考,慢慢建构起了自己信息获取的新形态,如果将自己关注的订阅源视作一颗颗种子的话,那 Follow 则是这些种子发芽成长的沃土,呵护着自己的「数字花园」。
另外 Follow 目前刚开启公测,可以直接访问 https://follow.is/ 体验。公测账户有一些限制,需要邀请码才能解锁完整版功能,可以评论留言,我会发放一些邀请码。
2024-11-04 08:42:00
本篇是对 2024-10-29
到 2024-11-03
这周生活的记录与思考。
最近不知怎的又久违地开始折腾开发环境和设备了。
在 Ares 的技术支持下终于拥有了心心念的 NAS;把闲置已久的 Chromebook 重新装了一下并刷了 Arch Linux,甚至还把 MBP 刷了一个 Asahi Linux(不过作为主力机还是不行,先卸载了,打算回家把家里的台式机刷了);Zeabur 支持了 Dedicated Server 之后我也把 RSSHub 等比较消耗资源的服务迁移到了 Hetzner 的 CAX-31 Arm 主机上;还有很多有意思的事。
其实好久之前就对 NAS 很感兴趣,但其实自己看番剧和剧集都是直接在流媒体平台上或者 Infuse 连网盘,对于家庭存储的需求并不那么高,所以一直没下定决心入手。
再加上自己有个 Mac Studio,平时也都是长期开机的,配合上公网 ip 和 Cloudflare Argo Tunnel,其实也已经满足了绝大多数的家用服务需求了。不过由于系统架构的限制等,我在配置 HomeAssistant 的时候网络配置总是有一些奇怪的问题。
有一次跟 Ares 聊的时候,他提到有个自己组好的 NAS 可以出给我(他自己已经迭代了),很是心动,于是找了一个周末来我家里配置完成了,有了技术支持自己少走了无数弯路,一切都完美 work 了。
四盘位(8T 存储外加 8T 的备份),任意热插拔掉两个盘位依然可以正常运作,把之前网盘里的一些照片和影像资料迁移了过来;用的是 openmediavault 这一界面有些古老但是完全够用的系统;使用 Portainer 管理了一些 Docker 服务,16G 内存也基本够用。
两年多前在重温 Teahour 的这期「#95 - 用 Chromebook 做开发是什么样的体验?」时对瘦客户端开发模式很是着迷,自己还写了一篇「基于 frp 内网穿透的瘦客户端开发工作流」来实践,顺便也种草了 Chromebook 这一国内并不流行的设备,入了一台 2019 款的 Google Pixbook Go(产品线很快就被 Google 砍掉了,所以倒是有点纪念意义的最后一代)。
但其实因为后来远程办公以及依赖了很多 macOS 专属的软件,这台设备的利用率一直很低,最近在清迈看另一个 mentor 把自己的 Chromebook 刷了 Pop!_OS,很酷,于是想着回来折腾一下。
本来也是想彻底刷成其他 Linux 发行版的,升级了一下发现 ChromeOS 的 UI 和各类交互很舒服,折腾了一下把内置的 Debian 系统换成了 Arch 也很足够我对于 Linux 的需求,不那么“正统”但够用,折腾了一天,达到了很惊喜的体验,用了几个跨平台的方案保障体验几乎是一致的了。
我其实有很多高性能设备,例如日常在用的 M2 Max 的 MacBook Pro,由于性能和续航达到了一个很不错的平衡,导致我即使出门在外也随时都能打开来进入工作状态,甚至爬山和散步都会背着,有时候其实并不能很放松地出门或是陪伴身边的人,但我又有“电脑分离焦虑症”,不在手边的时候总是担心有什么紧急事务要处理而焦躁不安。
这台 Chromebook 算是一个完美的方案,同时有满血版的 Chrome、Arch 和 Android 系统,性能不强、轻便好看,所有依赖浏览器的工作都完全能胜任,真的要调试工作项目的代码稍微有点卡但也能用,在缓解我焦虑的同时,每次有需求后也多了一步掂量一下,是不是真的紧急到我即使需要更费力地调试也要当下完成,绝大多数情况下我也都会选择等到家了换上主力设备了再处理。
这一点很有意思,其实设备性能已经过剩到并不会制约自己的效率,反而是需要刻意的约束来让我的目光更多转向周遭。
我算是 Serverless 平台的重度玩家和 Zeabur 的早期用户了,现在自己的很多服务依然部署在 Cloudflare Pages/Workers、fly.io 和 Zeabur 平台上;同时之前也是各种 vps 的折腾爱好者,有好几台搬瓦工的传家宝,再加上前两年有点上头,又新添置了几台,导致利用率很低。
最近正好 Zeabur 支持了 Dedicated Server,利用 k3s 外加一些 monitor 服务能够在平台上直接使用自己的服务器进行部署,而关联 GitHub Repo、镜像 build、拉取等高消耗任务则是通过 Zeabur 来进行(目前都是免费的,不知道后面会不会按量计费),不占用服务器本身的资源。
于是把我的 RSSHub 和 Node 节点等一系列服务直接迁移过来了,终于把月账单又控制在 Developer Plan 的 5 刀以内了。
Zeabur 的模板也比较强大,我现在在维护 RSSHub 的 Zeabur 模板,可以无须域名等额外配置,一键部署自己的实例;顺便还把之前自己用的 n8n、Remark42、GoatCounter 等服务都做了模板,欢迎大家直接部署使用。
虽然大部分有意思的输入会在 「Yu’s Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。并且把 Telegram Channel 消息作为内容源搭建了一个微博客 —— 「daily.pseudoyu.com」,可以更方便浏览了。
2024-10-30 08:42:00
本篇是对 2024-10-21
到 2024-10-28
这周生活的记录与思考。
前两天读到了「第三夏尔 | Third Shire」写的一篇「从亲密关系中学到的」,也想写一篇来总结一下自己和学姐这一年多来的一些感受和变化,很多事远远没有像原作者一样找到“最优解”,但也心知亲密关系的一些问题因为有了爱作为挡箭牌而容易拖延甚至搁置,直到矛盾爆发,因此也想记录一下作为自省和对自己的提醒。
我想独立和自我空间是亲密关系中最常见也最难解决的课题了,在我和学姐这样的模式下尤其。两个人其实缘起于互相欣赏,我羡慕她的精力与心境,在香港、北京这样的工作节奏下依然能够保持对生活的热情,画画、攀岩、看书、写作,让我看到了原来还有另一种人生;而她或许也欣赏我的独立和对技术的专注。
但进入到亲密关系后,两个人不免地会变得更依赖对方,不论是情感还是时空上。
之前杭州北京异地的时候,我大概每个月会去北京两三周,留下一周的各自独处的空间和期待下一次见面的心情;而现在一起到了杭州后,在小区隔壁楼各租了一个房间,谈起了异楼恋。但由于两个人都不需要固定通勤,常常连续几天高密度地相处在一起,独立也成为了一个伪命题。
起初我并不很能理解,即使同处一个空间但是做自己的事为什么还会有“不独立”的感受,后来渐渐发现了,学姐更为敏感也更依赖于一个独处的环境才能专注地看书写字甚至只是发呆,而我其实对于环境的感知并不高,打开电脑我就能够进入另一个世界,也并不容易被干扰到。
当我们两个人在一个空间时,我随时可以去看她、问她在做什么,或仅仅是路过的时候抱一下,学姐依然会有一种“侵占感”,本身是享受两个人的亲密,却多了一层隐隐的不安全感。
其实我们也做过一些调整,比如约法三章,一三五各自相处,剩下的时间一起,但依然并不解决问题,因为真正离开后即使一楼之隔也会想念,找各种理由再待在一起,因此常常这样循环。
最近尝试的是早上白天时间里各自专注做自己的事,到了饭点或是下班时间可以约会出去吃或自己做点简餐,似乎完整时空里分割的三个小时会让相见和相处多了一些仪式感,也常常戏言道这个男朋友只有三小时赏味期,时间到了就该放到冰箱里重新保鲜了。
伍尔芙在「一间自己的房间」中写到:
一个女人要想写作 必须拥有两样东西 钱和一间只属于自己的房间
我想这句话的重点可能不在于“房间”这一实体,而是“只属于自己”,即使是亲密关系中的另一个个体,也依然需要排除在外。
亲密关系中的另一大难题其实是“真实的自己”与对彼此缺点的包容。在与亲近的人相处时人似乎总是会更不加掩饰一些,而在长久相处中也难免会有一些矛盾。
我是个对生活质量要求很低的人,可以连续一两天懒得吃饭和睡觉、几个月不买衣服;对周遭空间也很不敏感,家里我可以只在电脑和床这几平米的空间里活动,一个掉在地上的瓶子我可能一两周后才发现;夜晚也常常是困到开着灯和电脑不知怎么睡着的。而学姐是很认真在生活的人,空间的整洁、物品的摆放、生活的仪式感,都是她很在意的点;对于环境也更敏感些,夜晚的一丁点光亮和声音都会让她难以入眠。
日常的相处中就常常会因为这些习惯上的差异而累积一些小情绪,事情都不大但是很难解决,可能会需要更长久的时间去理解和磨合。
比起这些生活习惯上的琐事,目前更严重的是在漫长的日常中对于对方的尊重。
有时候我手上在忙一些事,跟学姐说了 15 分钟后可以出门,但实际上可能早就过了半小时甚至更久。或许本身其实早 10 分钟晚 10 分钟出门并不会对实际的行程产生太多影响,但其实这种行为是对她时间的一种不尊重,如果预估的时候就说了半小时,学姐就可以坐下来更完整地读几页书或是处理点工作,而不是消耗在毫无意义的等待中。
几次之后我才意识到,在远程办公时间自由以及自己同时在做/想做的事越来越多后,其实自己对于时间的预估和掌控越来越差,但常常又执拗地不愿意承认,有的时候真的忙到无法兼顾依然强行多线程。
发生了好几次之后才更认真地对待这一趋势,也和学姐聊了自己在其中的感受和情绪,其实是可以通过沟通和调整来缓解的,但似乎即使是在亲密关系中,坦言真实的自己和不足依然是一件需要勇气的事。
上周末飞了一天又回到清迈了,很累,前几天都在宅着休息,没力气学习和处理太重的工作,就干脆继续折腾 Chromebook 了。
最终还是刷了 Arch,太喜欢了,翻好多 AUR 包贡献者的博客翻了好久,完美配置完了,follow、cursor 这些比较新的软件都有好心人打包和维护,Wiki 也很详细。
接下来这几周就继续游民生活啦,这次就会一直待到曼谷 devcon 之后了,到时候我们厂也会有主办的活动,欢迎来玩~
虽然大部分有意思的输入会在 「Yu’s Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。并且把 Telegram Channel 消息作为内容源搭建了一个微博客 —— 「daily.pseudoyu.com」,可以更方便浏览了。
2024-10-24 02:52:00
本篇是对 2024-09-19
到 2024-09-28
这周生活的记录与思考。
最近在一个喜欢的博主的频道看到这样一段描述:
因为大学毕业后直接读了博士,博士毕业后就继续研究者的工作,说是说工作,但是和念书时也没啥太大区别,所以总感觉现在的自己和学生也没什么区别,哪怕教过许多的大学生,但我也不认为自己和他们有什么区别,只是比他们早学几年而已。不过区别肯定是在某些时刻发生了。在生活中也偶尔会冒出诧异的感觉,譬如在看剧时、或者在消费时,发现自己的收入已经比家长高很多了,虽然匮乏的记忆仍旧历历在目,但那些好像是发生在另一个人身上的事。再譬如看一些文艺作品,讲那些大姐姐和大哥哥,那些我想以之为生活目标的人,一看发现他们年纪比我还小。再譬如每天起来洗漱时,真真切切地感觉到自己的年岁在增长。
智识是增长了、但是我的情感能力却完全停留在学生时代。虽然读过许多激动人心的文学作品,但仍旧对讲青春期的故事着迷,到现在还在追相关的新番并为之感动。我怀疑自己还在青春期中,似乎就只是在象牙塔里空长了年岁。这十年我在干什么呢,我不理解。身边的人如何进入自己的生活,生活的洪流又是怎么吞噬一个个人的,我不理解。但是更令我难受的是,当我看到现在的中学生时,我也不理解。
我觉得人的经验中是有很多问题需要被解决的,我不知道别人是怎么解决这些问题的,但我不解决它们我就没法进入下一个阶段。当我搁置它们的时候,我就并没有在成长,物理时间、精神时间和情感时间完全错开了。我现在也很困惑自己是否也能和别人一样成为看起来很正常的大人,又或者是否有能力保卫住我现在这样能让自己胡思乱想的生活。每次想到这里我就感到难过。我没有勇气进入新的生活,就像一个因为执念而仍旧留存于世的幽灵一样。
心里的某一块似乎一下子被击中了,想到了最近刚听说的一个词「Adulting」,印象里是博主学会了车窗被路上飞来的小石子砸坏是可以走保险之类的这样一个冷知识,称之为 「Adulting 技巧」,很喜欢这个形容 —— “正在学会成为一个大人”。
随着自己年岁渐长,即使没有刻意去比较,其实比起学生和孩童时期变化已然很大了。
工作已经三年多,生活独立,买东西时似乎已经可以相对地“随心所欲”;走南闯北,踏过的土地也远远比父母去过的地方要多得多;遇到什么人生的重大决定,似乎也不再那么慌张了。
前几个月考了驾照,现在常常开车出门;前段时间在整理自己一团糟的财务信息,办了一些卡、买了一些定存等等。在做这些时,跟学姐说了句,“我现在好像个大人呀,会开车出门还有很多银行卡。”
学姐回话说,“只有小孩子才会比谁的卡多,大人也不会因为自己像大人了而高兴。”
或许跟我一直以来的经历有关,初高中之后爸妈就不怎么管我,大学后更是按照自己的想法在生活。好处是似乎看上去处事不惊,性格多少成熟稳重些,“坏处” 是并不受父母长辈的标准约束,也早早关了朋友圈屏蔽了 peer pressure 的影响,导致似乎自己的生活和同龄人所在经历的似乎是有些脱轨的。
这两年参加了三场高中同学的婚礼,其中两对孩子应该就在这两个月就要出生了,应该不会有人还在为考出驾照而高兴好几周,或是因为一束「送错的花」而沮丧好几天。
大多数时候我还是乐得如此的,似乎努力保留一点“学生气”也让我面对这世界的时候多一些乐观和勇气,离世界的那些污浊的死气沉沉的真相远一些。
但真的能一直这样么?
和学姐刚在一起的时候,有一次她去公司的一个活动,下班后一脸疲态,跟我倾诉说,同样一件事需要用好几种截然不同的方式向不同的领导汇报和其中察言观色的部分很消耗心力,很累。
我突然发现我没办法给出有效的安慰,并不是不懂其中的门道和“人情世故”,也明白生活在不断吞噬每一个人,只是这些事第一次如此真实地出现在我最亲近的人身上时,而我却也无能为力。
我在周报中也曾大言不惭道要追寻月亮,不能因为要去捡六便士而成为自己所不喜欢的样子,但其实世界原本就是这样运作的,即使我能侥幸逃脱这些桎梏,也没有能力荫庇身边重要的人。
学姐说了一句,“你能有选择不成为这样的人是很幸运的,总好过让这世上再多一个无聊的大人”,有些惭愧和心虚,似乎本该学会长大的自己执拗地搁置了这些,真的是对的么?
我真的有能力守住这样能够继续任性继续胡思乱想的生活么?
虽然大部分有意思的输入会在 「Yu’s Life」 Telegram 频道里自动同步,不过还是挑选一部分在这里列举一下,感觉更像一个 newsletter 了。并且把 Telegram Channel 消息作为内容源搭建了一个微博客 —— 「daily.pseudoyu.com」,可以更方便浏览了。