阅读视图

发现新文章,点击刷新页面。

从写一个 WordPress 插件说起

之前博客的《目录》页面用的是 List category posts 这个插件生成。可这个插件虽然功能比较多,但是不支持(还是我不知道?)我要生成的页面。

再往前用的插件是 Dagon Design Sitemap Generator,它可以生成一个以「分类目录」为主题的文章页面列表(例子可以看文章存档 – 木遥的窗子)。但是这个插件很长时间没更新了,甚至它的官网都打不开了,没办法重新下载这个插件。

考虑到这个插件功能并不复杂,索性自己写好了。我的文章本身不多,因此也不用做分页或者其他的配置,用最简单的方式即可。这个插件应该符合以下功能:

  • 生成一个双层级的 bullet list
    • 以「分类目录」为第一层,排序方式按单词字母正序
    • 以该分类目录下属的文章为第二层,排序方式按文章创建时间倒序
  • 「分类目录」的展示需要加前缀 “Category”,且这个前缀需要加粗
  • 「分类目录」的内容为分类标题,该标题为该分类的 URL
  • 文章列表都是可点击的 URL
  • 文章标题后面增加文章创建的时间

以上功能其实不复杂,最后只用把它们拼成 HTML 语法的代码即可。

问题在于,我从来没写过 WordPress 插件,甚至我也不会 PHP。换在两年前,如果需要完成这项任务我应该需要:

  1. 用至少 2 天时间学习 PHP 的基本语法,其中可能包括:
    • 找到合适的上手文档/教材
    • 搜索无数次 StackOverflow 搭一套可运行环境
    • 学点基础语法,并且在写的过程中反复查文档
  2. 用至少 2 天时间学习 WordPress 的开发过程,其中可能包括:
    • 为了性能和效率,先在本地机器跑起一个 WordPress 页面
    • 从 WordPress 的文档看怎么写出一个 Hello World 插件
    • 搜索无数次 StackOverflow 看别人怎么解决各种意想不到的问题

但是自从有了生成式 AI 后,完成这么一项任务变得无比简单。以这次写插件为例,用的是 Anthropic 新发布的模型 Claude 3.5 Sonnet,前后只用了 30 分钟就完成了。我并没有学 PHP 的基础语法,也没有查过 WordPress 的文档。只需要通过合适的 Prompt 引导 AI 生成合适的代码,同时让 AI 告诉我怎么把插件安装到 WordPress 即可。

当然,初次生成的代码不是完美的,但是把需要改进的内容告诉 AI 即可慢慢引导到正确的结果。

这与程序员目前写代码是一样的过程:刚开始写好的大概率是不完善的,有错误或此前没考虑到的地方,一步步改好重新运行,通过不断的试错达到最终的效果。

这就是 Sam Altman 提到的完全使用自然语言编程。几十年前的程序员写的是汇编语言,而今天绝大多数的程序员都不再用,而是通过 Python 等高级语言(这里的高级并非褒义词,而是高度封装的意思,类似于预制菜和炒菜的区别)完成任务。而如今的 AI 是一个新的编译器,它可以让大多数人直接通过自然语言编程。

或者类比一下,coder 有点类似于国内较早学习英文的人,有能力将中英文互相翻译。而现在的 AI 可以充当一个翻译器,让人可以直接用自然语言和计算机交流。

但这并不意味着编程就成为一件无门槛的事—尽管门槛降低了些。我们依然要整理好需求和思路才能完成任务。以刚刚的 WordPress 插件为例,如果只是说「做一个插件支持以『分类目录』归类展示文章列表」,那么有可能会作出很多不同版本的插件。

事实上,这也是 software engineer 和 coder 的区别。前者更多的工作在于将一个较大的任务拆分成小任务,通过合适的方式组合起来完成;而后者更强调翻译这项工作。

这也让我想起,前段时间和朋友聊起,我们这行未来能做什么。我并没有想好这个问题,但是会让我想到如果要转行,什么能力是通用的?在我看来其中一个就是解决问题的思路。小的问题比如家里一颗灯泡坏了怎么修?大的问题类似如果要设计一套银行系统需要怎么完成(我现在自然还不能胜任这项工作)?

也正是因此,前段时间教两个朋友编程的时候,我并没有怎么注重语法,而是更关注解决问题的思路。通过自然语言把问题拆解出步骤,然后翻译成代码。回想起当年自己自学的时候那种无力感实在痛苦,已经忘记是怎么熬过来的了。幸运的是,现在的人不必如此。

前段时间去了趟大英博物馆,看到了镇馆之宝罗塞塔石碑。两百多年前,法国人商博良 (Jean-François Champollion) 以这块石碑为突破口,破译了古埃及圣书体,成为埃及学创始人。这块石碑上印有三种文字,分别是古埃及圣书体、世俗体及古希腊文。或许在未来,非自然语言的代码都会被人遗忘。而某一段写着自然语言注释的代码会成为新的罗塞塔石碑。

教堂的交响乐团

在经历了一整天疲惫的旅程后,我准备走回旅社。

爱丁堡确实是座不错的城市—它并不大,其实只需要一天就可以逛完整个旧城。 尤其是五月底的苏格兰,一天中真正属于黑夜的时间只有不到 7 个小时,非常适合时间紧迫的游客。第一次踏足欧洲的城市让我有许多的新鲜感。与年轻的深圳不断向天空索取空间不同,这里的建筑更倾向于在二维层面上延伸,居民楼可以长达上百米作为单体建筑。从卡尔顿山往市区看,只有教堂才能算天际线的一部份。可尽管能看出建筑已经非常陈旧,却一点也不破败。街道并不笔直,甚至也不平坦,上下坡比比皆是。如果不是靠着手机上的地图准会迷路。

尽管如此,这里依然是一个很适合行走的城市,至少比深圳走起来舒服许多。人行道并不宽阔但也没有电动车横冲直撞,也没有成排的单车停着占用人行道,甚至在人行道上也基本没有植树(这是我最近意识到的点,人行道上的树几乎可以占用到深圳人行道宽度的一半)。与之对应的是,开车或者坐车都是一个痛苦的过程。我没有看到超过双向六车道的路,而且马路还要跟偶尔驶过的轻轨共用车道,都会让人觉得能走路就不坐车。

但我并不那么喜欢这座城市—尽管我并不讨厌它,我却无法想象我会长期住在这里。或许正是因此,我才会在旅行的第一天感到如此疲惫。唯一让我觉得惊喜的可能只有苏格兰国家博物馆,它的藏品远不如大英博物馆,但给我的感觉是对每件藏品都足够重视,动线设计和藏品排布上非常用心。然而我并不是为了一座或几座博物馆而选择生活城市的人,或许大多数人都不是。

旅途的第一天最让我难忘的是,在我刚吃完晚餐走回家的路途中,突然看到路边的教堂即将在十分钟后举办一场免费的交响乐演出,乐团是 Open Orchestra,一个爱丁堡当地的一个业余爱好者交响乐团。曲目是门德尔松的《D 小调第五交响曲》

即使是业余爱好者组成的团队,他们的演出依然出色。在演出前他们的一位成员对观众说,他们为了这场演出排练了半年时间。尽管我对门德尔松的作品不太熟悉,尽管表演的过程中有几处明显的失误,我依然听得感动得想哭。半个小时的演奏期间没有人左右交谈,没有人拿起手机录像。轻快的音乐在小小的教堂回荡,让我忘记了一整天的疲惫和失落。曲目终了,指挥在大家的掌声中回场。我没听清楚他说的 encore 的曲目是什么,但依然是非常精彩的表演。

演出结束后,一些演奏者下来和观众打招呼。他们显然认识了很多年,像是街坊邻居那般熟悉。我则走到门口和捧着赞助箱的人聊了两句。他是个长居于此的华人,问我感受如何。我则向他表达这是今天最大的惊喜。所以就算这是一场免费的演出,就算他说没有现金完全可以不给(我先开口问是否可以刷信用卡),我还是把自己仅有的十英镑现金赞助给了他们。

这大概是旅行中我最喜欢的地方,在于你可能计划中的所有行程最终发现不过如此。但是在无意间你就会发现,惊喜就在转角处。而如果不是我停下了回去的脚步,如果不是那个华人邀请犹豫不决的我进去听,或许那天就会变得平平无奇。而正是这些计划之外的时刻,在我的记忆中留下长久的不可磨灭的标记。

演出结束后我并没有直接回旅社,而是重新走上了卡尔顿山。晚上九点的卡尔顿山上好不热闹,斜坡草地上坐了许多人聊天、喝酒,旁边还有一些人开着音乐跳着舞。最好玩的是,国家纪念堂总有尝试各种方式爬上去和爬下来的人。太阳缓缓沉下,柔和的光洒在远处的古堡和教堂上,像是披上一层金黄色的轻纱。人们纷纷掏出手机、相机,试着抓住这一瞬间。然后,人潮渐渐散去,沿街的路灯微微亮起,照亮人们回家的路,也避免打破这一静谧的平衡。

这是爱丁堡的一天的结束,也是爱丁堡旅程的结束。


早晨的卡尔顿山,带着小狗散步的人
演奏风笛的表演者
教堂音乐会演出前的准备
傍晚跳舞的人们
等待日落的人们

伦敦失窃记

来到伦敦不到 24 小时,我的手机就被飞车党抢走了。

昨天早上大约十点多,我在 KCL 门口闲逛,拿出手机打开地图查找位置。突然一个飞车党就从我手里把我的手机抢走了。

被抢走的时候我大概愣了一秒多,然后意识到遇上了窃贼。本能的反应是往前追。但跑步始终比不上摩托车的速度。大概追了不到半分钟我就放弃了。整个人很恐慌,然后抓着路人希望带去最近的警察局。

路人小哥非常好,马上查了一下最近的警察局然后带我走过去。在走过去的路上还提醒了我有没有 Apple ID 可以远程先锁住设备。但是我的密码都是随机生成的,存在密码管理器的密码。当下十分崩溃。

但突然想到手上还戴着 Apple Watch,试了一下发现只要能联网就可以远程锁定设备。于是小哥打开热点让我连上,第一时间锁定了设备。

到警察局后,小哥就跟我道别了。警察局里报案还需要排队(由此可见伦敦治安多么差劲)。现场也见到了另外两个同样是被抢走手机的人。

事实上报案并没有用,警察已经见多不怪了,让我上网去提交申请,考虑到我已经没手机了,伦敦警察就没想过让人上网报案很荒谬吗?

但眼下更紧迫的问题是怎么与朋友取得联系。我之前约了和朋友 13 点要见面,时间越来越近,我便想着先去见面的地点等。但是巧合的是,路过了一家 Apple Store,我于是想着借用一台设备打个 FaceTime 给家人。

然而又遇到了一个阻碍。现场展示的所有设备都是没有登录 Apple ID 的,也就意味着我需要登录我自己的 Apple ID 才可以打视频通话。然而如前文所述,我的密码是随机生成的,我自己并不记得。

此时苹果店的员工提醒我可以连上 Apple Store 的 Wi-Fi 使用 iMessage 发信息。果然有效,我和家人取得了联系,然后让他们用我放在家的电脑把我的 Apple ID 密码发给我,二步验证会通过手表发给我,之后便可以在 Apple Store 登录我的账号打视频了。

但是此时又遇到一个难题。我和朋友之间的联系方式一直是微信,所以没有手机号。但是要在一台新设备上登录微信一直是一件很麻烦的事。事实上在手机和手表断开连接后,手表上的微信也用不了了(我实在无法理解这样的设计)。

好在,我此前已经把微信绑定的手机号换成了 Google Voice(再次感慨天无绝人之路,如果是国内手机号的话,SIM 卡已经随着我的手机被抢走了。)。在家里的 iPad 上输入密码后弹出了三个两步验证的选项,其中一个就是手机验证码验证。家里的电脑可以收 Google Voice 的验证码,顺利登上了微信,通过家人和朋友取得了联系。

从手机被抢到能与家人朋友取得有限联系大约花了两个小时。虽然过程很曲折但最终还算有惊无险。手机自然是找不回来了,当天感谢有朋友的帮忙,我在伦敦也不是个无头苍蝇。

昨晚想了一下,今天早上去 Apple Store 买了台 iPad 应急使用到回国前一天再去退掉(Apple Store 员工说只要是 14 天内都能无理由退货)。

回过头来想,如果能做到以下几点则应该不至于那么狼狈:

  1. 被抢的时间是早上十点,此前我想当然的以为作案时间都是在晚上,事实是全天都不能大意。
  2. 应该买个防盗链条绑着手机的,但是我没买。
  3. 如果不想用防盗链条或者考虑到可能怕受伤,应该出国前买多几台便宜的手机做导航使用。自己日常生活的手机放包里锁起来。
  4. 多使用手表导航,设置好导航路线后只看手表。如果实在要用手机一定要找个角落,最好是室内使用。
  5. 手表或者其他设备可以在联网后取得与外界的有限联系,第一时间远程锁定设备后与家人联系报备安全。
  6. iMessage 的联系尽量少提供信息,必要的信息通过视频通话的形式表达,最好通过家乡话等方言交流(防止 AI 模仿)。
  7. 不能把交际圈绑定在微信上,头脑一定要记住几个重要的电话号码,剩下的一些可以存在通讯录里,通过云端同步。
  8. 可以考虑去就近的 Apple Store 买一台新的设备(我这次选择的是 iPad,控制自己使用地点),在指定的时间内退货不会产生任何费用。

最后还想说,事情发生后恐慌是非常正常的反应,不要责怪自己。朋友同伴需要做的是安慰以及快速解决问题。

最后再次感谢几位热心路人,Apple Store 员工,家人,以及周老师和黄老师在这次事件对我的帮助~

伦敦失窃记

来到伦敦不到 24 小时,我的手机就被飞车党抢走了。
昨天早上大约十点多,我在 KCL 门口闲逛,拿出手机打开地图查找位置。突然一个飞车党就从我手里把我的手机抢走了。
被抢走的时候我大概愣了一秒多,然后意识到遇上了窃贼。本能的反应是往前追。但跑步始终比不上摩托车的速度。大概追了不到半分钟我就放弃了。整个人很恐慌,然后抓着路人希望带去最近的警察局。
路人小哥非常好,马上查了一下最近的警察局然后带我走过去。在走过去的路上还提醒了我有没有 Apple ID 可以远程先锁住设备。但是我的密码都是随机生成的,存在密码管理器的密码。当下十分崩溃。
但突然想到手上还戴着 Apple Watch,试了一下发现只要能联网就可以远程锁定设备。于是小哥打开热点让我连上,第一时间锁定了设备。
到警察局后,小哥就跟我道别了。警察局里报案还需要排队(由此可见伦敦治安多么差劲)。现场也见到了另外两个同样是被抢走手机的人。
事实上报案并没有用,警察已经见多不怪了,让我上网去提交申请,考虑到我已经没手机了,伦敦警察就没想过让人上网报案很荒谬吗?
但眼下更紧迫的问题是怎么与朋友取得联系。我之前约了和朋友 13 点要见面,时间越来越近,我便想着先去见面的地点等。但是巧合的是,路过了一家 Apple Store,我于是想着借用一台设备打个 FaceTime 给家人。
然而又遇到了一个阻碍。现场展示的所有设备都是没有登录 Apple ID 的,也就意味着我需要登录我自己的 Apple ID 才可以打视频通话。然而如前文所述,我的密码是随机生成的,我自己并不记得。
此时苹果店的员工提醒我可以连上 Apple Store 的 Wi-Fi 使用 iMessage 发信息。果然有效,我和家人取得了联系,然后让他们用我放在家的电脑把我的 Apple ID 密码发给我,二步验证会通过手表发给我,之后便可以在 Apple Store 登录我的账号打视频了。
但是此时又遇到一个难题。我和朋友之间的联系方式一直是微信,所以没有手机号。但是要在一台新设备上登录微信一直是一件很麻烦的事。事实上在手机和手表断开连接后,手表上的微信也用不了了(我实在无法理解这样的设计)。
好在,我此前已经把微信绑定的手机号换成了 Google Voice(再次感慨天无绝人之路,如果是国内手机号的话,SIM 卡已经随着我的手机被抢走了。)。在家里的 iPad 上输入密码后弹出了三个两步验证的选项,其中一个就是手机验证码验证。家里的电脑可以收 Google Voice 的验证码,顺利登上了微信,通过家人和朋友取得了联系。
从手机被抢到能与家人朋友取得有限联系大约花了两个小时。虽然过程很曲折但最终还算有惊无险。手机自然是找不回来了,当天感谢有朋友的帮忙,我在伦敦也不是个无头苍蝇。
昨晚想了一下,今天早上去 Apple Store 买了台 iPad 应急使用到回国前一天再去退掉(Apple Store 员工说只要是 14 天内都能无理由退货)。
回过头来想,如果能做到以下几点则应该不至于那么狼狈:
  1. 被抢的时间是早上十点,此前我想当然的以为作案时间都是在晚上,事实是全天都不能大意。
  1. 应该买个防盗链条绑着手机的,但是我没买。
  1. 如果不想用防盗链条或者考虑到可能怕受伤,应该出国前买多几台便宜的手机做导航使用。自己日常生活的手机放包里锁起来。
  1. 多使用手表导航,设置好导航路线后只看手表。如果实在要用手机一定要找个角落,最好是室内使用。
  1. 手表或者其他设备可以在联网后取得与外界的有限联系,第一时间远程锁定设备后与家人联系报备安全。
  1. iMessage 的联系尽量少提供信息,必要的信息通过视频通话的形式表达,最好通过家乡话等方言交流(防止 AI 模仿)。
  1. 不能把交际圈绑定在微信上,头脑一定要记住几个重要的电话号码,剩下的一些可以存在通讯录里,通过云端同步。
  1. 可以考虑去就近的 Apple Store 买一台新的设备(我这次选择的是 iPad,控制自己使用地点),在指定的时间内退货不会产生任何费用。
最后还想说,事情发生后恐慌是非常正常的反应,不要责怪自己。朋友同伴需要做的是安慰以及快速解决问题。
最后再次感谢几位热心路人,Apple Store 员工,家人,以及周老师和黄老师在这次事件对我的帮助~

2024-02 熊野古道中边路攻略脱水版

写在前面

  • 熊野古道中边路是一条很成熟的徒步路线,路牌很清晰,不用担心迷路。

背景

  • 时间: 2024.02.14 ~ 2024.02.17 四天
  • 气温:约 5 ~ 17 摄氏度
  • 天气:Day 2 全天下雨,其余阴天或小雨

携带物品

非徒步相关

  • 护照
  • 手机(如果拍照多可考虑挂绳套)
  • 现金(尽量多几张 1000 面值的)
  • 钱包及零钱袋(日本有很多硬币)
  • 信用卡(有 Visa 即可)
  • 充电宝、充电线及充电头
  • 耳机
  • Suica(iPhone 用户可在手机开通)

徒步相关

  • 速干抓绒打底衣
  • 冲锋衣
  • 冲锋裤
  • 运动鞋(防水登山鞋更佳)
  • 背包(容量取决于行程,建议 30L 以上)
  • 登山杖(一定要两根)
  • 背包防雨罩(背包防水的话可不带)
  • 防水鞋套(防水鞋除外,要带防滑底)
  • 高热量小零食
  • 隐形眼镜

补充说明

  • 路上一般不会洗衣服,即便洗了也要考虑晾/烘干,不如带多几套。
  • 雨伞比较鸡肋,考虑到路途中两只手会被登山杖占用,不如雨衣方便。
  • 如果没有防水鞋,防水鞋套很有用。
  • 如果冲锋衣和冲锋裤防水,可不带雨衣,否则建议带上。
  • 运动期间眼镜可能不太稳,如果下雨更是会遮蔽视线。隐形眼镜是不错的选择。

  • 上身:速干抓绒衣 + 冲锋衣外套
  • 下身:冲锋裤

补充说明

  • 因运动期间会产生热量,日常情况下需要穿 3 ~ 4 件衣服的情况下,在徒步的时候只需要两件即可。
  • 通常情况下不用带或穿太多的衣服,带太多只会徒增重量。
  • 可以考虑带多一件抓绒或羽绒服,徒步完的晚上会比较冷。
  • 考虑到部分朋友可能会在徒步结束去白滨玩,可以将部分多余行李寄存到纪伊田边站,或者旁边的田边市观光案内所。不过需要注意营业时间(可在 Google Map 查到)。

定的民宿基本都可选择包三餐或至少两餐。如果是有午餐盒尽量选上,我定的两次午餐盒都做得很不错。 路上的食物补给较少,高热量零食很有必要。即便早上吃再饱,徒步三个小时也会饿。

在 Kumano Travel 提前订即可。一般下单后处理时间在一周左右,所以建议至少提前两个星期订(据说旺季很难订,建议至少一个月。很多民宿最多只能提前三个月)。
旅途中我住的三家民宿分别是:
  1. Day 1: 「继樱王子」的 Minshuku Tsugizakura
  1. Day 2: 「汤峰温泉」的 Minshuku Yunotaniso
  1. Day 3: 「小口」的 Minshuku Momofuku
住宿体验上我的评价是 Minshuku Tsugizakura >= Minshuku Momofuku > Minshuku Yunotaniso。

Minshuku Tsugizakura

这家是三天里住得最舒服的一天,由两位中年夫妻运营。体验上考虑得很周到,食物也准备得很用心。没有可以挑剔的地方。

Minshuku Yunotaniso

这家的好处是在民宿里有自己的温泉。但是可能是因为第一个晚上体验太好了显得这家比较平庸。

Minshuku Momofuku

这里面比较难订的应该是「小口」的住宿,因为「小口」是一个很小的村,可选项除了 Momofuku 就是 Koguchi Shizen-no-Ie。后者是一个学校改造而成的,规模会大一些。而 Momofuku 看了一下应该一天只能接待两组人。我比较喜欢人少点的环境。
这家是由一位大叔运营的,民宿的墙上很多照片,看得出来大叔很喜欢吃鱼(实际上他做的鱼也很不错)。
除了没有温泉可以泡,没有可以挑剔的地方。

补充说明

  • 最后一天住在「纪伊胜浦」,但是住宿体验不太好就没写了。如果预算充足可以考虑住在「浦岛酒店」,这家可以在携程或 Booking 上订。
  • Day 0 在纪伊田边,我住在 DJANGO Hostel & Lounge。这家的缺点在于隔音差,而且因为这是楼下清吧楼上住宿的形式,会有点吵。其他都还不错。这家也可以在 Booking 上订。

Day 0 深圳-大阪-纪伊田边

深圳(时间 UTC+8)

  • 09:30 抵达深圳机场
  • 10:30 办好手续并走到登机口
  • 10:55 登机

补充说明

  • 登山杖需要包装好,可以考虑用纸箱子包好并封上。如果要办理托运最好把单件行李封到 2kg 及以上,否则可能无法托运。

日本时间(时间 UTC+9)

  • 15:45 着陆
  • 16:19 过海关
  • 16:45 拿到行李前往电车站
  • 20:27 抵达「纪伊田边站」
  • Check in 完先去 7-Eleven 买第二天的早餐及午餐,因为 7-Eleven 晚上 10 点关门
  • 晚上吃「そば・うどん処 一吉」,个人感觉很不错。

补充说明

  • 出发前可以在 Visit Japan Web 填好此前入境卡所需的信息,这样就不需要填写入境卡,只需要展示 VJW 的二维码即可。
  • 关西空港有两个电车站,一个是「南海快线」(NANKAI),另一个是 JR 线。记得选择 JR 线。
  • 拿行李很长时间是因为找不到我托运的登山杖,最后在工作人员的帮助下找到了。
  • 日本的电车比国内复杂很多,一定要看清楚电车类型。具体可以略读日本列车类别
  • Google Map 很好用,有些线路会标注在几号站台,直接前往站台即可。
  • Check in 的时候旅店老板会问是不是要去徒步,会给地图及盖章手册(听说有两本手册,我只拿了一本)。
  • 地图非常有用,会标记出休息点、卫生间、自动贩卖机、盖章点等。
  • 因为徒步路线在农村地区,很多商店会比较早关门。记得规划好时间。

Day 1 「泷尻王子」-「继樱王子」

  • 05:35 起床
  • 06:16 坐 81 路公交车从「纪伊田边站」去「泷尻王子」
  • 06:50 抵达「泷尻王子」
  • 07:00 开始徒步
  • 08:41 抵达「高原」
  • 10:06 抵达「十丈王子」
  • 12:08 抵达「レストラン」(牛马童子休息站)
  • 14:16 抵达「近露王子」
  • 15:38 抵达「继樱王子」

补充说明

  • 坐公交车只能付现金,需要提前准备好散钱或者 1000 面值的纸币。1000 面值的会找钱。
  • 「泷尻王子」到「高原」一上来就是一段高度 300 米的爬坡。爬坡不可怕,主要是路不那么好走。
  • 「泷尻王子」到「高原」有一个「乳岩」石那里,对于高个子来说要蹲下来才能看到路。
  • 「十丈王子」到「大坂本王子」这段下山的路比较多,需要多考虑落脚点。对我个人来说比较难。
  • 「レストラン」是一个比较大的休息站,可以在这里给手机充电,还可以吃午餐。
  • 真正的「牛马童子」不在休息站,需要回到原来的路继续走几百米。
  • 我去的时候「近露王子」的「熊野古道美术馆」没开门,貌似要四月份才营业。

Day 2 「继樱王子」-「熊野本宫大社」-「汤峰温泉」

  • 06:10 起床
  • 06:30 吃早餐
  • 07:30 开始徒步
  • 09:15 抵达「迂回路」起点
  • 10:40 抵达「蛇形地藏」
  • 11:17 抵达「三越峠」休息站
  • 12:51 抵达「发心门王子」
  • 14:11 抵达「伏拜茶屋」
  • 15:17 抵达「熊野本宫大社」
  • 16:40 搭 81 路公交从「本宫大社」去「汤峰温泉」

补充说明

  • Day 2 一整天下雨,出发前就穿上防雨鞋套,给背包套上防雨罩。
  • 前面三公里很简单,都是水泥路走得飞快。走到迂回路挑战开始。因为下雨,山里的路很湿滑,尤其是踩在岩石表面要格外小心。
  • 迂回路中间需要爬升 400 米,然后又是一段下山的急坡。中途路途因为下雨,加上路比较窄还是有点危险。这一段应该是 Day 2 最难的一段。
  • 在「三越峠」休息站休息了半个小时,在这个休息站解决午餐。
  • 在「三越峠」之后基本没有什么比较难走的路了,就是路上有不少积水,鞋套还是很管用的。
  • 全天第一个自动贩卖机在「发心门王子」,因此路途上记得带好饮用水,最好保证出发前有两瓶。
  • 「熊野本宫大社」门口就有一家商店的雪糕很好吃,尤其是徒步后的雪糕。
  • 「熊野本宫大社」往前面走,转个角就能看到「大斋原」,可以去打个卡。

Day 3 「汤峰温泉」-「熊野本宫大社」-「小口」

  • 07:00 起床
  • 07:30 吃早餐
  • 09:30 开始徒步
  • 10:28 完成「大日越」
  • 11:59 搭 51 路公交从「本宫大社」去「请川」
  • 12:40 开始徒步「小云取越」
  • 16:19 完成「小云取越」

补充说明

  • 早上起得比较晚,收拾完出门快九点了,没搭到早上的巴士,最近的巴士要 11 点多才开,索性走到本宫大社坐巴士(然后意外地爬了「大日越」)。
  • 午餐是在「请川」的「小云取越」入口的「下地桥」吃。
  • 「小云取越」一路上没有任何补给,全程在山里。
  • 「百間ぐら」的景色是最好的,眼前一望无际,连绵的山非常漂亮。
  • 「小云取越」全程没难度。
  • 「小口」这个村是整趟旅途最惊喜的地方,天空非常清澈,可以看到很美的星空。

Day 4 「小口」-「熊野那智大社」-「纪伊胜浦」

  • 06:30 起床
  • 07:00 吃早餐
  • 07:30 出发
  • 09:29 抵达「越前峠」
  • 10:32 抵达「地藏茶屋遗址」
  • 13:34 抵达「那智高原公园」
  • 13:59 抵达「熊野那智大社」
  • 15:42 搭公交从「熊野那智大社」去「纪伊胜浦」

补充说明

  • 官网给的参考时间是 7 ~ 9 小时,实际上不需要那么长时间。
  • 如果订「纪伊胜浦」的住宿,需要注意「熊野那智大社」-「纪伊胜浦」末班车的时间。
  • 出发前可以在「小口」的「南方商店」买点水,店主是个很可爱的奶奶。
  • 「大云取越」需要的爬升比较多,但实际上都不是急坡,路也好走,因此我认为并不太难。也可能是徒步了几天适应了。
  • 一路上只有「地藏茶屋遗址」有自动贩卖机,注意补给及消耗。
  • 印象里「大云取越」没有垃圾桶,包括自动贩卖机处也不能扔塑料瓶,因此要自备够一整天的垃圾袋。

开销

汇总开销

  • CNY: 4,729.00
  • JPY: 57,758.00

具体开销(Beancount 语法)

近况

好像有段时间没写 blog 了。
其实也没有特别多想说的,我也该控制一下自己的表达欲。听听别人的故事,总觉得会比自己的故事精彩不少。生活寡淡也不是一件坏事,就是回想起来还是觉得无聊。
最近还在纠结要不要买新的 M2 MacBook Air,自己的需求倒是挺明确的,内存 16G 是一定要加上的,但是看到评测提到 256G 的 SSD 只用了一颗闪存芯片,速度大概是去年的同型号的一半一下子又开始纠结了。这台电脑买来不是作为主力机的,本职工作上有公司配的电脑,要用到高性能的时候有家里的台式机。我基本能确定自己用不到多少硬盘空间(个人文件基本都放在云端),如果是为了苹果这次退步而花更多钱总觉得是不值。当然我也知道这次闪存颗粒的变化对于实际使用体验几乎可以忽略不计,但想到花了这么多钱却比几年前的款式退步总会很不爽。这电脑从四年前就说要换一台新的,到现在还没换到。属实是严重拖延症了。
于是突然想了想自己的消费观,发现自己在给别人花钱的时候一点也不肉疼,比如给家里花钱的时候毫不犹豫,甚至会调贵的买,而对自己的开销扣扣嗖嗖。早就听说金牛座抠门,但好像抠门也是有所区分的😂
对了,今天促使我写下这篇碎碎念的契机是一个 B 站博主,是最近从主页推荐里发现的。做了好多翻唱视频,质量都好高!!!于是那天想起朋友借给了我把吉他(他买了新的,家里放不下了)。拿出吃灰了一个多月的吉他,调一下音结果把一弦调断了😂。于是又想起自己去年想学日语结果后来不了了之了,于是现在也每天打开 Duolingo 学一学。现在 50 个平假名也快学完啦,希望这次能坚持下来。
末尾附上我的入坑视频,最近这段时间工作的需求好多,打代码的时候把视频放到角落,平复一下紧绷的神经。

玩偶

火车在雪地里停了下来。
木村合上了书,揉了揉眼睛,看向窗外。白雪覆盖在草原上,像给大地盖上一层厚厚的毛毯。广播响起沙沙的声音,而后传来列车长的通知:「各位乘客,非常抱歉。列车出现了一些故障,我们将在维修好后继续行驶。现在乘客可以下车活动,但请不要走远,谢谢。」列车长的广播重复了三遍。许多乘客刚从睡梦中醒来,带着起床气听到这个意外,嘟嘟抱怨。
木村倒是不在意,反倒觉得这火车坐累了,能下车活动也算因祸得福。他早已习惯独自坐着绿皮火车旅行,带着些许行李以及几本书便可远离城市喧嚣的生活。
回想十几年前,在他二十多岁的黄金时代,一场瘟疫席卷全球,他足足被困在家里接近半年。那是他出来工作后五年左右,娇生惯养的他硬是在那段时间学会了所有家务相关的事。也是那段时间,他学会了与自己独处。
他曾经觉得,去居酒屋和旁边的陌生人闲扯才是男人最快乐的事。从大学开始,他就混迹于学校附近的那些居酒屋,和那些中年男人谈天说地。女人、足球、股票、房子是永恒的话题。噢对了,忘了提到,木村年轻时候的长相非常老气,丝毫看不出是还在学校上学的学生。他留着蓬松的络腮胡,头发留得像他的偶像木村拓哉。木村这名字也是从他的偶像那里拿来的,并不是他的真名。不过这也不重要。
不只是长相,他总是早于同龄人体验不同的经历。早在小学开始他就规划好了自己未来的人生。当大家还在纠结于要不要向暗恋的同班同学表白的时候,木村已经凭借他死皮赖脸的性格跟不少初中女生交往了。他相信跟高年级的人交往能更快地成长,事实也如他所愿,在后来面对比他小的女生时总能游刃有余地掌握对方情绪,但也正是这种游刃有余让他觉得缺乏新鲜感。等到现在,在 38 岁的年纪,他依然没有结婚。这和他小学的时候规划的人生有不小出入。
倒也不是没有遇到过让他心动的姑娘,他还记得 12 年前,在公司的茶水间,他偶然撇见了一个姑娘。她穿着一件黑色的卫衣,下半身穿着白色的小短裙还有长长的黑色筒袜。他只看到她的背影,还有一点点侧脸。当时木村就觉得,多么漂亮的姑娘。但仅仅是擦肩而过,没有停留下什么,只有空气中一股淡淡的香。
过了大概半个月,木村又一次见到了她。这次他看清了她的脸。她不认得他,只是跟小伙伴在聊天,在笑。木村没看手机,时不时瞟她一眼。队伍一点点往前进,在拐角处慢慢靠近她。他看到她的大学的文化衫卫衣,里面的灰色衬衫露出了领子。下半身穿着一条紧身灰褐色长裤,还有黑色靴子。她戴着白色口罩,只露出有神的双眼。长长的黑色头发盖住她的耳朵,是他很喜欢的中分。他看到她紫色的指甲油,还有手上那被毛茸茸手机壳套着的手机。
他夜不能寐,闭上眼睛都是那个姑娘的身影,已经很久没有这种小鹿乱撞的感觉了。他不知道她叫什么,只是会经常想着去茶水间碰运气,看看能不能偶遇她。他只知道上次见到她的茶水间在 26 楼,而他在 24 楼,每天大概也只能去一次。于是他每天挑不同的时间去,坚持了一个月却还是见不到她。他留意着公司大群的所有消息,期待有个熟悉的头像出现。他甚至不知道她是否用她本人的照片做头像,但他顾虑不了那么多。
可木村再也没见到她,就像她未曾出现那样。
突然,木村的手指感觉到一股热。手里的香烟已经燃到他的手指上。他把燃尽的烟丢到地上,踩上一脚。他又点上一支烟,狠狠地吸上一口。「这是在想什么呢?十几年前的事了,还纠结这些做啥?」他看到隔壁的小孩,拿着一只玩偶在雪地里玩。玩偶早已支离破碎,看得出来已经被重新缝合了好多次。左边的手臂上是短袖,右边的则是长袖。更离奇的是,玩偶心脏的位置还被缝上了一个绿色的爱心。
「那玩偶可真丑。」木村暗暗想着。

无题

写代码到现在。
很是喜欢安静的时刻,下午的咖啡因还在发挥功效。凌晨的家里只有外面公路上汽车时不时呼啸而过的声音,一阵阵的。仔细听的话不像以前觉得的那么嘈杂,反而有些像海浪。
看着屏幕上一条条红线,那是一个又一个的错误提示。最近在学 Rust,和编译器斗智斗勇是最近的日常,近来总觉得想写点自己的项目。今年以来看了不少别人的案例,有做基础设施的(Apache Pulsar),有做创新应用的(Figma),还有各种各样长尾的工具(Logseq)。从 Podcast 也听到了不少其他的项目,尤其是 PLG 及团队协作的工具感觉正处于爆发期。许多老的工具都能被重新发明,也真是看着这些才不会想现在国内的经济大环境的问题。好的产品总会有市场,重要的是产品,而不是环境。
工作到现在也快四年,再往后,可能单纯的上班带给自己的提升边际递减。而且总感觉,工作中用到的专业知识和自己做项目有很大的不同。需要自己思考要做什么,怎么做,在没有 KPI 的情况下怎么让自己 stick to the plan。
我也不知道这个项目能不能做出来,甚至初期调研后发现跟本来预想的有所出入。切换过几个方向,最后目前看来还是先做着目前手头这个。或许做到后面原本的限制就能被支持了呢?不论如何,假若能做出来,也是对自己这段时间的交代吧。

倒春寒

已经不记得是今年的第几次失眠了。
不知什么时候开始,似乎大家都知道我不喜欢过年。其实过去几年并没有那么强烈的感觉,但今年尤甚。 2022 已快过半,心情却从来没好起来过。这大概是我工作以来遇到的最大的一次低谷——并不是工作的问题,而是突然意识到现在的自己正处于人生的一个关键的时间节点却不知道该如何应对。我不知道我的前辈们在我现在的年纪是否也会这样迷茫,还是只是我想太多。
和朋友聊了不少,总觉得需要自己做点事情,看了不少案例却总觉得有力无处使。工作后的这四年感觉自己成长了不少,转专业后到了行业内的大公司工作,但或许也正是因此开始对后续的目标感到迷茫。我突然理解前些年为什么有些人会放弃大公司的工作跳到小的创业公司,我想换做是现在的我大概也会那么做。
焦虑。
其实不该那么焦虑,这种状态实在对自己也没好处。同事说总以为我是很开心的人,看不出我会焦虑的感觉。是不是我在外人看来总是那么积极呢?有人跟我说:「我发现你还蛮会安慰人」,但慰人者终归无法自我安慰,又该怎么办呢?
我不知道。
或许是连着看了好几天的代码,走在路上也在想着项目里的逻辑。但长时间这样反而效率上不来。看到一些时候总会走神,反应过来后又忘了逻辑是怎么走到这一步的,回过头来重看。在文件间不停跳转,就像失眠时思绪总会到处神游。
然后迷路,就像现在这样。
雨下了一天,并不能把生活的烦恼冲刷干净。我以前还挺喜欢下雨的,但是现在我不喜欢。我知道这不是雨的问题,但那天下了雨。其实该怪罪的是自己,为什么突然表现得那么奇怪,给人留下那么差的印象。以至于现在每个下雨天都会想起来,懊悔不已。
朋友离开了公司,我们因为一件事相识,后来发现还是有不少共同话题。工作中我们其实没有交集,但是也能一起吐槽一些事情。她跟我说了一些烦恼,而我一边安慰她一边跟她一起吐槽。其实我也帮不上什么忙,她也知道我做不了什么。只是在遇到不开心的事情的时候,有能和自己站在一起的朋友总归觉得自己更有力量。
但换到安慰的对象是自己的时候,才会发现,低头认输可能是更需要勇气的一个选项。
有时候只能骗自己,或许还能做点什么呢?天无绝人之路,总归有能做的事情。只要找到一个合适的方法,还是能峰回路转的吧。
但我也知道,生活不是代码写好的。那不是只要达成某些条件就能做成一些事情。我虽然早就知道这个道理,但真正落到自己身上的时候,还是太难接受了。

文件的消逝

一、应用
写这篇文章的时候我想起来的是之前看到的一段轶事。具体的文字已经不可考,但大致如下:
在一节计算机课堂上,教授跟学生说:「请大家打开 C 盘下的 xxx 文件。」这时有学生问道:「教授,请问我要用哪个 App 来做到这件事?」后来教授惊讶地发现,这一代的学生有些从来没有接触过文件管理器这个概念。他们从小到大接触到的都是一个个的 App,以及 App 内一个个具象的视频、音乐、文档等。对于他们来说,文件及文件夹是一个陌生的概念。
这一现象是什么时候开始的?或许有些人会认为是 iPhone 的诞生作为开端,但我更倾向与认为是 2004 年 Gmail 的诞生引领了这一趋势。
2004 年的愚人节,Google 正式发布了第一个版本的 Gmail,并宣布提供给每个用户 1GB 的存储空间。这在当年是非常具有轰动性的产品。在那之前,用户使用邮箱是通过客户端(Outlook 或者 Thunderbird)把邮件下载到本地后使用。因为当年邮箱提供商给予用户的免费空间一般按 MB 来计算,因此 Gmail 的推出一下子引发大量用户的迁移。
或许有很多人对 2004 年这一概念感到模糊,但我印象还算比较深。因为 2004 年正是我家刚买入第一台个人电脑的那年。当年我们家选配的硬盘为 80GB。
可能你会疑惑,只是增大免费容量为什么会作为一个趋势的起点?在我看来,这带来了用户使用习惯的改变。前文提到,在那之前用户使用邮箱是需要把邮件下载到本地后处理,因为邮箱提供商分配的空间有限,这意味着邮件的处理都是发生在本地的行为。邮箱提供商主要的服务仅仅在于发送与接收。但是当存储空间提升后,用户为什么还要将邮件下载到本地后处理呢?用户可不可以直接在网页上处理呢?事实上,当时已经有人这么做了。
注意,在以上的描述中我还没引入云的概念。对于大多数用户来说,最先让用户意识到云这一概念的产品是 iCloud。但在这之前还有一项划时代的产品需要介绍。同样出自 Google 之手,那便是今天大多数人的浏览器 — Google Chrome 的内核 Chromium。
二、基础设施
今天,除了苹果的 Safari 和 Mozilla 的 Firefox,大多数现代浏览器都是以 Chromium 为内核的应用。在当年,IE6 已经很久没有人维护了,网页技术的发展停滞不前。Chrome 的推出迅速刺激了沉寂已久的技术发展,人们意识到原来浏览器可以如此的快。注意,这里的快不仅是网页加载得快,而是在网页上做出复杂操作的时候响应速度的快。
同时,Chrome 也将 Web App 这一概念第一次让广大用户认知。但 Web App 这一概念并非由 Google 提出,
让我们把时间再往前几年,1995 年 Netscape 推出了 Javascript 编程语言。这一编程语言允许浏览器在网页上进行动态处理。2007 年,在 Chrome 推出的一年前,Mozilla 便推出了一个项目 — Mozilla Prism。Prism 将 Web App 和桌面操作系统深度整合,用户可以在桌面上直接打开某个 Web App。与在桌面建立某个网页书签不同,Prism 允许用户针对不同的网页配置不同的偏好设置。
以上一项为技术基础,一项更偏向理念,Google 在推出 Chrome 的时候便充分受益于此。在 Chrome 发布前夕,Google Blogoscoped 的作者 Philipp Lenssen 便将 Chrome 的主要特性总结为以下几点
  • Chrome 是 Google 的开源浏览器项目(编者注:此处说法有误,Chromium 才是开源的项目)
  • Chrome 会包含一个新的 Javascript 引擎叫 V8
  • Chrome 的标签页会放置在地址栏顶部
  • Chrome 会有快速拨号页
  • Chrome 会有隐私浏览模式
  • Web App 拥有自己的浏览器窗口
  • Chrome 内置防病毒及恶意软件功能
在我看来,以上特性中,真正具有革命性的功能为 V8 引擎以及将 Web App 的概念在浏览器设计之初便作为其重要特性。前者是后者的技术基础,而后者是消灭文件的基础。
三、云
2011 年,随着 iOS 5 一起发布的还有 iCloud 服务。至此,所有的拼图都完成了。iCloud 类的远程存储让广大用户意识到数据存储在本地不一定是安全的。这里的安全并不是私密性上的安全,而是能极大地降低数据丢失的风险。同时,只要网络条件允许,用户可以在任何物理设备上访问到自己的数据。换言之,本地存储不再是唯一选项。甚至随着网速的提升及网络延迟的降低,除了数据敏感性高的内容外,一切数据都可以放在云端。
但 iCloud 并不是第一个做云端硬盘的公司,早在 2005 年,Aaron Levie 就发布了 Box.net 这一云端硬盘产品。它允许用户将自己的文件放置于网盘上,并且可以像在本地文件一样管理。更先进的产品是 2008 年发布的 Dropbox,与 Box.net 一样提供云端硬盘服务。不同的是它提供了增量同步功能。这意味着如果用户对一个文件进行修改,Dropbox 可以做到只同步修改的部分。
从技术上看,Dropbox 将用户的文件拆分为许多小块,并将这些小块的属性计算出一个数值。我们只需要知道如果某一小块的数据有变更,那么这一小块的数值便会改变。通过对比本地和云端的数值便可以决定需要同步本地及云端的哪些内容。
增量同步除了提高同步速度外,还意味着文件存储形式的改变。用户的文件不再是原来的文件,而是被拆分成一段段数据,通过后期的拼接组合成用户原来的文件。虽然文件在本地硬盘的存储方式也是类似,但与本地存储不同,云端硬盘可以将用户文件拆分出来的一段段数据分散存储在不同的硬盘,甚至不同的数据中心。这一特性还有什么应用我们在此按下不表,后面会讲到。
iCloud 更为激进,在刚开始发布时它直接屏蔽了用户访问具体文件的选项。与 iOS 类似,用户使用 iCloud 是通过一个个 App 来实现。iCloud 和系统的整合更深,用户无法感知文件的存储及同步过程,本地存储和云端存储的边界更模糊了。用乔布斯的话来说就是 It Just Works。
但在这一步走得更远的依旧不是苹果。作为一家卖硬件为主要利润的公司,iCloud 主要的服务对象依然是苹果用户。对于其他操作系统,iCloud 显得过于封闭。而打破这一局面的仍然是 Google。在 iCloud 发布一年后,Google 也推出了自己的云端网盘 Google Drive。一开始发布时我以为这是一款比上不足比下有余的产品。它没有 Dropbox 的增量同步,也没有 iCloud 那般与操作系统深度整合的能力。似乎是一款可有可无的产品。但经过这些年发展,我发现它走的是另一条路,一条真正杀死用户文件的路。
四、文件的消逝
让我们暂且把目光转向更娱乐的地方 — 音乐。
我还记得以前听音乐的流程。在酷狗音乐上搜索自己喜欢的作品,然后点击下载。通过酷狗或者其他播放器打开刚才下载的 mp3 文件收听。有些音乐在各大音乐平台找不到,便到百度搜索,通过 BT 或者网盘下载到本地并整理好文件的元数据(歌手、专辑等)。在整理好后,将一些最近比较火的音乐整理好传到 MP3 里听。
后来我发现了豆瓣 FM。豆瓣 FM 和酷狗音乐最大的区别在于,豆瓣 FM 是纯流媒体的模式,即我们没法下载单曲,而只能在网页上播放。与之带来的变化是,我不再与一个个 mp3 文件打交道,将其手动整理好存到电脑里。甚至我不再需要下载程序,只需要登上豆瓣 FM 的网页就能开始听音乐。另外在存储空间不再是掣肘后,收听的音乐种类大大拓宽。通过不同的电台,我可以听到许多未曾接触的音乐。
这便是流媒体。
在今天这显得非常普遍,我们在 Netflix 上看电影,在 Spotify 上听音乐。理想情况下,我们不再需要下载这些内容,甚至下载这一概念已经变得陌生,取而代之的是离线观看(收听)。用户不再需要跟文件打交道,服务商也可以将这些内容用 DRM 锁定防止盗版,并更激进地使用私有协议。比如苹果通过 Apple Music 推出 Spatial Audio,在以往是很难实现的。
同时得益于流媒体的发展,获取新内容的成本大大降低。因为大多数流媒体都是按月收费,即用户付出一定的成本后,获取新内容的边际成本几乎为 0。这便带来了更多长尾内容。以往一个创作者创作出一张专辑,要说服未曾听过的人购买是很难的。但当获取新内容的边际成本降低为 0 后,用户消费新内容的门槛更低了,独立创作者的内容也更容易被消费到。
用户失去了文件的所有权,但也换来了更蓬勃的生态,以及更方便的使用体验。
这不仅发生在内容消费领域,在内容生产领域也略显端倪。
以文档处理为例,以往文档处理工具便是 Microsoft Office 三件套。诚然,Office 三件套功能十分强大,但它一开始的设计并没有考虑到云时代,所有文档的操作都是基于单一文件。而 Google Docs 则完全建立在云时代的基础上,也正是得益于这一后发优势,Google Docs 从设计之初就考虑到团队协作。也正是对用户屏蔽了文件这一形式,在线协作才成为可能,因为单一文件在修改的时候总是具有排他性的。
事实上,Google Docs 的文档会在 Google Drive 上显示出来,但如果我们将其下载下来会发现,这个文件只是一个链接。这也是我在前面提到的 Google Drive 设计的更先进之处 — 对于用户来说,文件并没有用,用户需要的是文件的应用。而与苹果的 iCloud 不同,Google Drive 真正做到了全平台。用户在本地不需要安装任何应用,在 Google Drive 上无数开发者提供了许多 Web App 让用户使用这些文件。与 Dropbox 不同的是,Google Drive 本身不实现增量同步,而是将这一工作下放给应用方实现。在线协作正是增量同步的体现。
Google Drive 的设计真正得益于前面三部分 — 应用、基础设施、云。通过应用(Google Docs)随时随地在基础设施(Google Chrome)上打开云(Google Drive)上的数据生产或消费。Google Drive 并不是传统的网盘,它更像是一个入口。
不止 Google,如今许多其他的应用也如雨后春笋般出现。比如 Figma,在 2016 年推出后迅速成为设计师最爱的生产力工具。比如 Notion,几乎只需要维护一份代码便可以提供全平台应用。
上述两个应用在创立之初都摒弃了传统文件的概念,比如在 Figma 里,我们不需要关心一个项目的所有 Page 是否是同一个文件。也正得益于屏蔽文件的设计,协作办公可以非常自然地实现。设计师和产品经理不再需要传输一个个 Sketch 文件,在某个有疑问的地方圈圈点点地沟通,而是直接在设计的过程中添加注释(改需求)。
即便是对文件系统最熟悉的程序员也逐步有屏蔽文件系统的趋势。在 Golang 里,外部依赖包是通过包的自定义地址引入。比如我要引用 MySQL 包,只需要在引入里写上 github.com/go-sql-driver/mysql 即可。在未来,Golang 是否还需要将外部包下载到本地再使用呢?进一步来推进,是否可以有一款新的编程工具如 Figma 那样,用户不再需要像现在一样整理文件的编排,而是用类似 Page 的形式整理,通过类似标签的形式引用别处的代码?
上述应用的发展都充分体现了一点:传统操作系统正在式微,而浏览器正在取代操作系统。事实上,Chrome 也推出了 ChromeOS 操作系统以及对应的 ChromeBook 笔记本。
目前这一替代还未成熟,对于计算密集型的应用还无法替代。比如音视频剪辑的应用还未成熟,虽然已经有产品正在尝试(比如 Dropbox Replay)。更难替代的是专业的工业软件。但对于大多数用户,文件确实已经消失了。尽管文件是操作系统最基本的单位,但用户并不需要知道这些。

年会

年会结束了,有惊无险。
做过活动策划的人都清楚,策划一场两百人参加的活动有多么不容易,特别是还涉及到跨城市的举办的时候。要从零到一计划时间、交通、住宿、饮食,甚至大家最关心的,奖品的内容,抽奖方式等。中途需要打无数电话,沟通,修改方案。说修改方案可能还算简单,到后来可能原始方案早已全盘替换,最初的方向在终稿里已经不见踪影,只留下一个名字相同。这一切的工作还要在不影响到当时具体工作内容的情况下完成,而且几乎不会获得任何收益。全凭一腔热血,用爱发电。
在外人看来,这一切都似乎是理所应当地发生,不就是吃饭订酒店抽奖罢了,经费都已经准备好了,剩余的事情水到渠成。但即便是最简单的,两三个人的短途旅行都涉及到复杂的规划,何况是人数成倍增加的年会。具体参与人数不确定,举办的时间几乎没有别的选择。预算之下餐厅选择有限,还需要应对突如其来的正常工作需求…… 在极其有限的时间内完成这场设计,难度不亚于一套复杂的计算机系统。它们同样需要在有限的资源环境下,按计划地完成一系列任务,最后收尾。这中间的过程涉及到做什么、怎么做、化简为繁、化繁为简,还有与其他系统的沟通(都知道跟外部团队的沟通有多么不容易)。
但当这一切都设计完成准备执行的时候,当天早上的两例新冠病例将这场活动推向未知的方向。
这或许就是所有计划最害怕的情形,当所有事情都完成,但在执行当天不确定是否要上线。群里的同事都在问是否还要继续年会,策划人等着我们这边及酒店的答复,所有的准备可能就此毁于一旦。但此时并不是所有人都站在你这边,这也是人之常情,参加这些活动总归是麻烦的事,如果没有获奖的可能谁还会去,尤其是在这种情况下。
但策划人们不一样,并不是说策划人不怕发生问题,他们显然更害怕,但投入那么多沉没成本自然也不希望所有成果石沉大海。没有人是错的,当我们站在任何一方的角度思考问题都会得出相同的结论。
这也是新冠给我们带来的改变,变得更加拘谨,束手束脚。当这些问题变得越来越多后,自然会让人更加烦躁。于是感同身受变得更加困难,我们总不能要求人们无时无刻不站在别人的角度思考问题,那自己怎么办?如果自己不站在自己的角度思考问题,自己又怎么会过得快乐?
或许最好的方法,是参与进来。参与有很多种方式,可以是最复杂的总策划,也可以是最简单的搭把手搬东西。当参与进来后,人之常情自然希望能办好。扩展来看,当我们为世界创造出更美好的事物的时候,我们为这个世界的美好添砖加瓦的过程中,会更爱这个世界。或许这个过程中,会有很多挫败,但你的成果会让自己在面对这些事更强大,更有信心。
所以在这次活动的过程中,会比以往更积极地参与进来。从最简单的搬东西、点人数,到在晚会的时候在后勤帮忙,以及表演一场节目(虽然效果不甚理想)。这都是为了让这场活动更加正常地进行,虽然这些东西微不足道,虽然饿到活动结束才去吃东西,但总归是做出了一些改变,更让这场活动朝更好的方向前进了一点点。
自然的,也让这个世界更好了那么一点点。
这当然也有其他因素,比如策划组有的是我的朋友,或者新认识的朋友。我自然也不希望他们的成果就这么付之东流,因此也会为了此做些事情。就像我在脱口秀里说的,人和人的交往要真诚,自然也会让自己更快乐。
这大概是 2021 我自己最大的转变,在于想让自己变得更好,与此带来的也会让这个世界朝自己更希望的方向挪动一点点。我不知道为什么今年突然变得这样,找不出一个让自己突然变化的时间点。但回过头来看,就这么发生了。可能在多年后回忆起来,2021 会是自己很重要的转折点,虽然今年并没有发生什么事。
活动的当天,彩排的时间被测核酸的时间吞噬,在大家都几乎毫无准备的情况下,还是很好的完成了晚会。晚会后大家聚在一起吃宵夜,狼人杀,玩到凌晨两点多。已经很久没玩到那么晚了,这大概是最好的结局。

石榴籽

各民族要像石榴籽那样紧紧拥抱在一起。— 习近平
「君朋友圈发了去新疆旅游,你要去吗?」朋友问到。
君是我们的同事,我跟她并不认识。
「有行程安排吗?可以发来我看看。」我说。
那是九月中旬的时候,我的国庆假期还完全没有安排。本来就这么想着睡上那么七天,但也太无聊了。已经两年没有出去旅游了,上次旅游恰好也是两年前的国庆。憋坏了,其实只要有个去处就好。
行程安排上的大多数地方我都不认识,「库尔勒是哪里?塔县有什么特别的?噢有峡谷应该可以拍点壮观的了。」我当然没问君这些问题,「行程都安排好啦,只需要过来玩就好。」正合我意,作为一个选餐厅必踩坑,点菜总是过剩的人,安排一次旅途实在不在我的能力范围。「我去。」其实没考虑多长时间,「太好了呀。」她说。
在库尔勒落地是下午六点多,出来自然先做核酸。在深圳我已经提前一天做了一次,但这里不认。后续这类异地系统不互认的事情还有许多,暂且不表。
天还是很亮,大概相当于深圳的四点。「好热、好干。」我跟君说。君跟我的第二程是一班飞机,晃荡了五个小时从重庆到这里。本以为新疆这边至少会凉快些,结果这个点比深圳还热。失策了,没带多少夏天的衣服。想起出发前几天还把行程单上所有地方的天气预报都查了个遍,只能感叹准备永远是不充分的。「我得叫老丁多拿几件夏天的衣服过来」,君说。老丁是君的男朋友,因没法请假只能和君分头行动。直到过几天老丁来了之后我才知道这是一件对他们多么残忍的事。
民宿老板来接了我们,车上蒙着一层厚厚的沙尘。「不去洗车吗?」我问老板,「这儿的车都这样。」在路上我看着路过的车,有些干净得一尘不染,而有些就像老板的车那样,盖着一层土黄色飞驰而去。这样看着不难受吗?我想,直到过了大概一周在喀什我们也遭遇了一场沙尘暴,大概他们早已见多不怪了吧。
君和我先到的民宿,直到晚上九点多剩下的三位小伙伴才到。mercy 是东北人,一开口就听得出来的那种。H 和小丁是一对情侣,老夫老妻相。「卷儿丁卷儿丁」,H 叫到,是小丁又在忙打工作电话了,而我们在听着民宿老板的朋友讲故事。「我从库尔勒要去喀什,想了所有的交通工具,最后采用了最新疆的方式。我选择了骑驴。于是我去集市买了头驴,训练了半个多月,还做了那种维族的驴车,专门去农村买的木头,花了 58 天从库尔勒一路骑到喀什。」大哥说道。大哥是个探险家,四海为家。「老板听说了我的故事硬把我留下来住几天,过几天我要去塔里木河漂流了。」
听故事意犹未尽,但也得先填饱肚子。「卷儿丁」终于打完电话了,看着老板打包来的拌面我们的肚子早就咕噜咕噜叫了。开着租来的车去市区吃饭已经是晚上十点多了,直奔烤肉店。羊肉串只是填下肚子,酸奶粽子不过是餐前甜点,烤羊排、大盘鸡才是正餐。喝上一杯卡瓦斯,五个人在新疆的第一餐直接吃撑了。没有吃菜,不像广东人。
直到连着吃了几天羊肉后,我们对青菜倍感思念。「有冇青菜呀?」后续的每顿饭我都这么问。即便大盘鸡椒盐鸡烤全羊涮耗牛缸子肉都非常好吃,但是一行人已经吃不太下了。广东胃非常想念番茄茼蒿金针菇胡萝卜,哦对了,还有北方胃非常喜欢而我吃不惯的蒜头。以前在家都不太喜欢吃青菜,来之前还说「我全程都要吃羊肉」,但不到一周就败下阵来了。父亲打视频来说「真羡慕你天天吃羊肉哇」,我表示应该回去后几个月都吃不了了。「是不是现在很想吃家里的菜呀?」母亲问,点头点头。
旅途末期实在太累了,「我们要不要点米粉和冒菜?」,mercy 和 meyou 问。meyou 是 30 号在阿克苏跟我们汇合的,她说自从第一天吃了羊肉后就有点排斥了。「最后一天还要吃烤全羊哇,今晚实在不想吃肉了。」又回想起之前看到有人在旅行的过程中在酒店吃外卖,以前还不理解,而现在我们仨也变成了这样。
「请出示健康码、身份证、喀什和易行、巴州和易行……」已经忘了在这边出示过多少次二维码了。在加油站,乘客要先下车在出口等待,司机一个人开进去。刷身份证、出示行程码、可能还有各个州的登记码。在高速公路时不时会被强行引导到服务区,公安例行检查。进服务区上也是测体温、扫码……
「新疆人防得起但得不起呀,所有病例都要去乌鲁木齐才能治。」喀什的民宿老板跟我说。「这里一定是查得最严格的地方,所有人每七天都会自觉去做一次核酸检测,所以从疫情爆发到现在新疆还没多少病例。」meyou 的新疆朋友跟我们说道,非常自豪。
即便如此,在我们行程过半之际,伊犁还是出现了病例。「啊,伊犁好像有疫情了,我朋友说伊犁那边都封城了。」小道消息总比官方要迅速。「喀什好像封城了,只出不进」,酒店的前台说道。我们无法判断真假,旅行过程中这些消息就像一股近在咫尺的沙尘暴,不知道会不会到来。即便我们没有去到伊犁,但人心还是不太安定。在这里,政策和规定近乎不可预测,只能总想着最坏的打算。有一次车里五个人的手机同时响起,「如果在喀什请记得明天之前要做核酸检测。」机器人说道。把所有人都原子化地管理起来,就像计划经济时期的样子。在市区,平均每两个路口就有一辆警车或者警察亭,一切都是实名制,刀要用链子拴起来不能随意移动。「在新疆,你很安全。」确实如此 ,老大哥的眼睛时时刻刻盯着这里的人,无处遁形。「以前太乱了,路上时不时会有爆炸,还有枪战,死了太多无辜的人了」还是喀什的民宿老板跟我说,「从暴乱到戒严到现在我都经历过,还是现在这样好呀,大家都很安全,井然有序的。」
所以这里的人都习惯了这样的生活了吗?或者说,如果把我丢在这边生活多长时间我会习惯这样的生活呢?赛博空间如此紧密地服务着现实社会,我不禁想知道,疫情前的新疆又是怎样的呢?就这样防控到病毒消失吗?疫苗本应扛起的重任现在看来还是无法改变什么。电视上播着新闻,美国单日确诊又破十万例。大家的生活都改变了许多,「怎么进入卡内基音乐厅?patience, patience, patience」或许人类确实可以非常 patience,只是这种 patience 的代价也太大了。
远处的天山看着不高,却一路陪伴着我们。顺着天山从库尔勒到塔县,它始终在我们车窗右边。时而像不想上班的人那样,苍白、毫无生机,等到了太阳快下山的时候,又在阳光的照耀下显出酒红色,像是微醺的姑娘,向我们展示她最美的模样。一路往西行,气温越来越低,雪也渐渐在山顶冒尖儿。到了傍晚,远处的雪山在阳光下显得格外不真实,落日余晖映衬着皑皑白雪。夜晚的塔县,往外开几公里的路程,远离城市的灯光,繁星点点洒在天上如穹顶般包裹着我们,已经很久没有见过这么清澈的天空了。翌日往回开的路程,阳光洒在喀拉库勒湖上闪闪发光,远处的慕士塔格峰害羞地躲在雾气身后只露出模糊的轮廓。山脚下的牛羊安详地吃着草,压根懒得抬头看一眼。偶尔穿过马路,完全不理会路上飞驰的汽车,好像是在宣誓自己的主权。盘龙古道的脚下,「今日走过了所有的弯路,从此人生尽是坦途」。慢慢地开上盘山公路,前方的视线只够看到一个弯道入口,总有一些不负责任的人开得飞快地从上面弯下来。但往下看,一览众山小。从 3000 米的海拔开到 4200 多米,我们终于可以平视远方的雪山了。雾非常及时地散去,老丁的无人机飞起来也可以拍下盘山公路的壮丽。
再往前开,我们就可以到达国界了。但是国界并没有开放,于是我们朝着下一站阿克陶开去。一路上大家都睡不着,单反、手机、Go Pro 都派上了用场。在一条笔直的大道上开着,路的尽头像是远方的雪山,旁边的行道树也已泛黄。没有什么车,终于可以停下拍照。坐在路边的石尊上摆着 pose,大胆的直接坐在马路中央,构图、调光、调焦、咔嚓。上了车再慢慢欣赏刚拍的照片。路过边境站,下车买个烤玉米,甚是舒服。
但伊犁的疫情风暴还是影响到了我们。「阿克陶不让进,进去要隔离 7 天。」小丁接到了君的电话后说。我们赶紧掉头,往喀什开去。因祸得福,今天恰好是 meyou 的生日。早上在手机上查的阿克陶生日蛋糕简直不忍直视,若到了喀什选择便多了起来。后排的姑娘们赶紧联系蛋糕店,前排的我们被对面的远光灯闪得犯晕,强撑着注意力,用黑色的眼睛躲避光明。「哎哟我的天啊,这些人怎么开车的。」我和 H 一路感慨。连警车都开着远光灯,在双向两车道的县道上,不只有车,还有摩托车、三轮车、牛车驴车,甚至还有背着草走路的人。「这些人在这种路上就是这么开的吗?」我想。习惯了深圳严格的交通规则,到了新疆总会有些水土不服。开始的几天我们看着他们的车掉头,似乎路总是不够宽,掉头横跨了四条车道最后回到最左边,甚至完全无视中间的实线。直到后来我们也习惯了,打不过就加入吧。路上的摄像头不知道是否在工作中,不重要。
仪式感总得要有的,曾经我也不喜欢过生日,后来觉得跟二三朋友在这个日子一起庆祝一下也是一件幸事。戴上王冠、唱着生日歌儿、许个愿、吹蜡烛、吃蛋糕。这次路上,小倩、丰哥、meyou 都在这几天生日,还是补上一句生日快乐。
但还是人才是最美好的。
喀什古城,虽已变成旅游景点,居民还是在这里生活。孩子们在路上追逐,老鹰捉小鸡。或晃荡着秋千,看着游客若有所思。走进巷子里,坐在桌子前面玩着水瓶,早就忘记了桌上还有作业。游客们如果想要跟孩子们拍照还很配合,一副老练的样子,好像这就是他们天生就是这块料。老人们坐在椅子上聊天,有些害羞的看到镜头还会躲闪,有些则会咧开嘴笑。
12 点了,该是睡觉的时候,迪厅却刚刚开始热闹。总得看看这里的夜生活是怎样的。来得比较早,坐在二楼中间正对着舞台的位置。歌手开始暖场了,唱着我们一句也听不懂的维语歌儿,摇摆着双手扭着身子。舞台上,几个姑娘已经上去了,在歌手饱满的唱腔下翩翩起舞。看起来整个迪厅没多少汉族,甚至可能只有我们六个,不敢下去。小喝几杯,学着歌手哼两句,身体热乎起来了。楼下已经有些热闹,时间到了。我们下去学着他们摆动着双手转着圈儿,在音乐的节奏下谨慎地学习。直到后来,节奏变快,便忘记了自己在何处。不由自主蹦跶了起来,像在电音节那样。周围的人有些疑惑地看着我们,有些在笑,我也只是看在眼里不管不顾。两个维族姑娘加入了我们,但也有些谨慎。烟雾弥漫,礼炮响起,音乐的节奏也快到了极点,空气中弥漫着荷尔蒙的气息,双手随意挥舞,不知道在跳什么舞。直到节奏慢下来,人也有些累了,从这氛围中慢慢退出,末了,互相打招呼,然后离开。
但我更喜欢在莎车的经历。
从王宫对面的广场走进巷子里,几个孩子在随意玩耍。看到我们几个游客非常高兴,但又有些谨慎地保持距离。「你们有去过那边吗?」一个小孩指着前方问道。 「这里晚上会很漂亮,灯亮起来的时候。」我们今天没有什么安排,也只是在县城里随意晃悠。「可以跟你们拍照吗? 」「可以可以。」有几个小孩还有点害羞,长得高的几个则非常热情。「去那里拍好看点。」他说,指着那个贴满彩色装饰花纹的门。竖着大拇指,看着镜头一脸严肃。后来,我们在县城胡乱转,竟不小心走到墓地边缘。离开后,到老城门看到骑着马车的一个叔叔。 「坐车吗?二十块钱一个人。」那当然坐,于是坐着马车转了城区一圈,沿途看着奇奇怪怪的店名。 《父权馕坑烤肉店》、《自豪化妆品销售店》、《传家宝美食》、《古老烤肉店》…… 边坐着马车便复述这些奇怪的店名,看着晚上熙熙攘攘的人,甚是惬意。最终到达王宫门口,马车行程结束,依依不舍。灯终于亮起来了,黄色的建筑撒上了暖暖的灯,像是上海南京路那排古式建筑。钻进另一条小巷子,正对着我们的是另一个舞台。三个老头拿着乐器沉醉地表演着,几个维族姑娘和男人在上面跳着他们的舞蹈。我们站在旁边看着,几个人对着我们指着上面, 「上去跳」,他们邀请着我们。我不会跳舞,怕破坏了这般祥和,而我们的姑娘们在她们的带动下跳了起来。 「跳得真好」,台下的人说……
各民族要像石榴籽那样紧紧拥抱在一起。
「飞深圳的飞机好像延误了」 ,群里有人说。狮子山台风偏偏在这时登陆了。 「吃火锅!」好在是在重庆中转,可以去半天市区游了。开始我们还很开心,以为只是延误到九点多起飞,吃个火锅刚刚好。没想到最后一点多才起飞,回到家已经快天亮了。深圳的朋友回家的路途不容易,我和 meyou 还算好的,回到家大概四点钟。H 和小丁直到我躺床上才落地,君和老丁的航班直接被取消,被迫改乘动车回家。十几天的旅程,相当疲惫。然而强迫症的我,又花了两个小时记好账才睡觉。
下趟旅程还会去哪儿呢?
===========新疆照片的分割线===========
天山神秘大峡谷,可以做下一代 macOS 的壁纸
天山神秘大峡谷,可以做下一代 macOS 的壁纸
塔县回来的路上,每一秒都美如画
塔县回来的路上,每一秒都美如画
塔县的夜空,可惜还是有点光,如果再往外开几公里应该更好
塔县的夜空,可惜还是有点光,如果再往外开几公里应该更好
莎车王宫的老爷爷,看到我们拍照还抬头打招呼
莎车王宫的老爷爷,看到我们拍照还抬头打招呼
倒数第二天丰哥生日,一起吃蛋糕的维族小孩
倒数第二天丰哥生日,一起吃蛋糕的维族小孩
盘龙古道脚下,愿各位人生平坦。
盘龙古道脚下,愿各位人生平坦。

初看《灌篮高手》

我小时候看的动画片基本是翡翠台播什么我看什么,所以在我印象里《哆啦 A 梦》是说粤语的,直到现在重温的时候看着只有普通话和日语选项,总感觉不是滋味。那时还有数码暴龙、宠物小精灵、四驱兄弟、七龙珠等动画,当然还少不了猫和老鼠。我的童年几乎就是看着这些动画长大的。
但是没有《灌篮高手》。
其实很奇怪,明明《哆啦 A 梦》是比《灌篮高手》还早的动画片,但是不论是翡翠台本港台还是后来的星空卫视华娱卫视似乎都没有重播过。而在那个互联网还没如今天那么普及的年代,自然是电视播什么我们看什么。虽然我印象里在楼下书店有看到过封面,但是预算有限的零花钱还是会拿来买熟悉的小人书。所以当我最近看《灌篮高手》的时候,别人听到会说重温童年,其实只是给童年补课而已。
在爱奇艺的弹幕上可以看到很多年龄段的人会打出 XX 年大叔 / 阿姨回来重温,里面不乏有 00 后。他们很多应该是小时候没接触过日漫的(可能是偏见,我记得 00 后看的是喜羊羊?),那是怎么会倒过来看十几年前的日漫呢?我也不知道。不过看到有些大概现在是初中年纪的小孩来看,真的非常羡慕。如果初中的时候能够看到那么热血的动漫,可能会更努力去打球吧。
但是,如果是小时候看,我可能只会喜欢樱木。很简单的原因是因为他是主角,而可能讨厌流川枫,也只是因为樱木讨厌他。但是现在看,不论是湘北五虎还是陵南仙道鱼住我都很喜欢。甚至可以说在井上的这部漫画是一部没有反派(可能只有铁男之前的手下)只有青春的作品,而小时候我大概是无法理解这样的世界观的。即便《哆啦 A 梦》也有胖虎这样的小反派,从这个意义上来看,小时候没有看到《灌篮高手》实在是个遗憾。即便我刚开始看到湘北 V.S. 陵南第一场的时候依然先入为主地把陵南当成反派,而无反派的作品即便在今天也是很稀有的。无论是动漫还是现在豆瓣上高分的电影电视剧,大多会树立明确的正反派。如果我早点接触到它,我的世界观大概会不一样吧。
看到对翔阳的比赛中三井的表现,不由想到 30 岁的罗斯在对阵爵士的时候砍下 50 分。同样是天之骄子,历史最年轻 MVP,经历无数伤病后拯救球队的巅峰表现。罗斯在那场比赛后接受采访的时候哭了,三井也不负安西教练。在对阵海南的时候赤木受伤后依然带伤出场。虽然最后输了也是虽败犹荣。流川在对阵陵南的时候默默追分以及木慕最后的三分球,以及翔阳·陵南合作鱼住在被人质疑了三年除了长得高一无是处的最后一场……
在童年错过这部动漫实在是遗憾。好在现在都补上了。而且全国大赛的电影版也要开始制作了,过几年应该可以补上动漫版的后续了。
看的时候会想到两年前在镰仓,七里滨站旁边有家小小的拉面馆。当时是随便找的一家店进去的,没有看过任何点评,意外的好吃。大叔一个人在那里当着面做菜,边吃边问我们口味如何。
不知道为什么那是我在日本吃到的印象最深的一顿饭,可能是那种亲和力?还是那天就非常饿?
好想去再吃多一次呀。

爷爷

爷爷是位老党员──我们家族唯一的党员。
我不知道他对这一身份有什么看法,在他那个年代这似乎是件稀松平常的事。或许是因为他的「成分」非常干净,碰巧被别人拉去就入了。不像现在要写申请书,要做各种调查手续等等。我还记得初中入团填写申请表的时候还用爷爷的名义写了一封推荐信,尽管他并不识字,就跟那个年代大多数农民一样。
在我印象里,爷爷总是笑笑的没发过脾气,就像教科书里经典的慈祥老头那样。爷爷爱抽烟,到八十岁了还抽得跟二十几岁小伙子那么多;他也爱喝酒──但并不嗜酒,每天午饭总要喝上那么二两。我毫不怀疑他的社交能力,上至他这把年纪的老人,下至还没读高中的学生他都能聊得来。父亲说他以前脾气可差了,家里七个小孩都怕他,以前打小孩的时候是用的擀面杖,比父亲(打我们)用的衣架还疼。
我想起父亲对我们说过的,如果以后他带孙子也是信奉棍棒底下出孝子,或许也是跟爷爷一样?
爷爷的身体一直不差──至少对于他这个年纪的人来说。他的房间在大伯家的四楼,每天都要爬上爬下好几次。几年前爷爷的腿脚越来越没力了,父亲买了支拐杖给他,他还说那是给很老的老人用的,现在这年纪用多丢脸──出自一个快九十岁的老人。尽管住在大伯家,但他每天白天会和奶奶过来我们在老家的房子。他喜欢坐在一张破破的塑料椅上,看拳击、篮球、足球。虽然看不懂电视上的字,听不懂解说依然看得津津有味。父亲说他以前因为长得高,是村里的篮球队员,对于那个年代的南方人,一米七几的确是挺高的了。
这些年爷爷奶奶岁数越来越大,我们每年过年都要回老家过年。尤其是近几年中秋也是假期后,中秋节也回家过节,因为这是我们乡比过年还热闹的节日。2013 年的过年,兄弟姐妹们觉得父母岁数大了,凑齐了整个家族的所有人拍了家族的全家福。照片上爷爷奶奶坐在最前面的中间,旁边后面跟着三十几个儿孙,这是他们眼里最大的成就。但是前些天,爷爷偷偷跟姑丈说,他有个很大的遗憾就是没能抱到自己的男曾孙。堂哥倒是有一个小女孩,但是在他眼里只有男孩才是香火。他并没有跟大伯或者父亲说,大概是觉得跟外戚说比较不会给自己的儿孙那么大压力。这些年我越来越能理解老一辈这些传统观念—这当然不代表认同。爷爷对我们结婚生子这件事的问候一直是善意的,只是稍稍提一下,并没有过分追问。他一直很能拿捏跟人说话的尺度,不会咄咄逼人。我们也能通过其他渠道知道他的一些想法,这也是他的处世之道。
两年前,爷爷的弟弟过世了。他是村里祠堂的管理员,一个鳏老头。父亲和大伯帮忙做完他的后事,爷爷也没了兄弟姐妹。大概是在那之后,爷爷慢慢戒了烟,酒也少喝了。我那时候刚开始工作,问起他想不想喝茅台,我有钱买给他喝了,他说茅台也并没有那么好喝。
可能只是现在不好喝了。
年初的疫情让我们提前回深圳,彼时爷爷的身体看起来还算健康。后来我才知道那时爷爷已经得了癌症,但那时还看不出什么征兆。他的腿脚已经不太有力──虽然依然拒绝用那只拐杖,每天骑着那辆破破的单车慢慢溜着通勤于大伯家和我们家。看起来还有很长时间,理所当然。
中秋前夕,爷爷腰椎盘旧病复发,父亲提前去带他到市区住院。这次出院和以往不一样,情况并没有什么好转。中秋节我们回去的时候,他每天只能躺在床上,一只耳朵已经听不到了,眼睛也有点花,稍微远一点就看不清人。但是意识还很清醒,我还记得假期结束回家的时候在他房间聊了一个小时天。他聊起以前的事都还记得,村里发生了什么大多都知道。除了站起来坐起来没什么力其他都还好,吃得也跟以前一样多。当时我还不知道他的病情,心安理得地回去。
他只剩一个月了。
上周回老家看爷爷,他已经完全听不到了,跟他说话也没了意识,他说的话也很难让人听懂。他已经认不得人了,把别人统统称为同志。姑姑和母亲不忍看到这样,偷偷啜泣。奶奶还不知道发生了什么,只知道老头子身体不太好。偶尔进来问两句老头子好点了吗,被我们挡了回去。我还记得一幕:爷爷躺在床上突然叫了两声「惨呐,惨呐」。我不知道他是太痛了还是条件反射。他已经吃不下药了,好几天吃不下东西。周日回家前我跟堂哥说,下周再回来看他,堂哥说:「不知道能不能到下周呢」。
周三早上,爷爷去世了,在他自己盖的老房子里。
后来父亲跟我们说,周二那天就感觉爷爷呼吸都不一样了,于是几个人把爷爷搬到老房子里。老爷子到老房子后似乎安心了些。
但爷爷最挂念不下的还是奶奶。
周三早上,父亲和大伯坐在爷爷旁边。父亲问爷爷:「你还有什么要交代的吗阿爹?」爷爷此时已经说不出话了。父亲接着说:「如果你挂念的是阿姆(奶奶)的话,我们兄弟姐妹一定会照顾好她的。你就放心吧。」
爷爷的眼角流下了点眼泪,那是父亲和大伯第一次看到爷爷的眼泪。
父亲把爷爷的眼泪擦掉,过了一会爷爷的眼角又有点湿润了,大伯帮他擦干净。后来他们出来坐了一会,让爷爷休息一下。过了不到十分钟,大伯进去看了一下爷爷,爷爷已经走了。他今年九十五岁,从疾病恶化到离去大概两个月的时间,在他自己盖的房子里儿子的陪护下安静地离去。我觉得这是最好的归宿。

2024-02 熊野古道中边路攻略脱水版

写在前面

背景

  • 时间: 2024.02.14 ~ 2024.02.17 四天
  • 气温:约 5 ~ 17 摄氏度
  • 天气:Day 2 全天下雨,其余阴天或小雨

携带物品

非徒步相关

  • 护照
  • 手机(如果拍照多可考虑挂绳套)
  • 现金(尽量多几张 1000 面值的)
  • 钱包及零钱袋(日本有很多硬币)
  • 信用卡(有 Visa 即可)
  • 充电宝、充电线及充电头
  • 耳机
  • Suica(iPhone 用户可在手机开通)

徒步相关

  • 速干抓绒打底衣
  • 冲锋衣
  • 冲锋裤
  • 运动鞋(防水登山鞋更佳)
  • 背包(容量取决于行程,建议 30L 以上)
  • 登山杖(一定要两根)
  • 背包防雨罩(背包防水的话可不带)
  • 防水鞋套(防水鞋除外,要带防滑底)
  • 高热量小零食
  • 隐形眼镜

补充说明

  • 路上一般不会洗衣服,即便洗了也要考虑晾/烘干,不如带多几套。
  • 雨伞比较鸡肋,考虑到路途中两只手会被登山杖占用,不如雨衣方便。
  • 如果没有防水鞋,防水鞋套很有用。
  • 如果冲锋衣和冲锋裤防水,可不带雨衣,否则建议带上。
  • 运动期间眼镜可能不太稳,如果下雨更是会遮蔽视线。隐形眼镜是不错的选择。

  • 上身:速干抓绒衣 + 冲锋衣外套
  • 下身:冲锋裤

补充说明

  • 因运动期间会产生热量,日常情况下需要穿 3 ~ 4 件衣服的情况下,在徒步的时候只需要两件即可。
  • 通常情况下不用带或穿太多的衣服,带太多只会徒增重量。
  • 可以考虑带多一件抓绒或羽绒服,徒步完的晚上会比较冷。
  • 考虑到部分朋友可能会在徒步结束去白滨玩,可以将部分多余行李寄存到纪伊田边站,或者旁边的田边市观光案内所。不过需要注意营业时间(可在 Google Map 查到)。

定的民宿基本都可选择包三餐或至少两餐。如果是有午餐盒尽量选上,我定的两次午餐盒都做得很不错。 路上的食物补给较少,高热量零食很有必要。即便早上吃再饱,徒步三个小时也会饿。

在 Kumano Travel 提前订即可。一般下单后处理时间在一周左右,所以建议至少提前两个星期订(据说旺季很难订,建议至少一个月。很多民宿最多只能提前三个月)。

旅途中我住的三家民宿分别是:

  1. Day 1: 「继樱王子」的 Minshuku Tsugizakura
  2. Day 2: 「汤峰温泉」的 Minshuku Yunotaniso
  3. Day 3: 「小口」的 Minshuku Momofuku

住宿体验上我的评价是 Minshuku Tsugizakura >= Minshuku Momofuku > Minshuku Yunotaniso。

Minshuku Tsugizakura

这家是三天里住得最舒服的一天,由两位中年夫妻运营。体验上考虑得很周到,食物也准备得很用心。没有可以挑剔的地方。

Minshuku Yunotaniso

这家的好处是在民宿里有自己的温泉。但是可能是因为第一个晚上体验太好了显得这家比较平庸。

Minshuku Momofuku

这里面比较难订的应该是「小口」的住宿,因为「小口」是一个很小的村,可选项除了 Momofuku 就是 Koguchi Shizen-no-Ie。后者是一个学校改造而成的,规模会大一些。而 Momofuku 看了一下应该一天只能接待两组人。我比较喜欢人少点的环境。

这家是由一位大叔运营的,民宿的墙上很多照片,看得出来大叔很喜欢吃鱼(实际上他做的鱼也很不错)。

除了没有温泉可以泡,没有可以挑剔的地方。

补充说明

  • 最后一天住在「纪伊胜浦」,但是住宿体验不太好就没写了。如果预算充足可以考虑住在「浦岛酒店」,这家可以在携程或 Booking 上订。
  • Day 0 在纪伊田边,我住在 DJANGO Hostel & Lounge。这家的缺点在于隔音差,而且因为这是楼下清吧楼上住宿的形式,会有点吵。其他都还不错。这家也可以在 Booking 上订。

Day 0 深圳-大阪-纪伊田边

深圳(时间 UTC+8)

  • 09:30 抵达深圳机场
  • 10:30 办好手续并走到登机口
  • 10:55 登机

补充说明

  • 登山杖需要包装好,可以考虑用纸箱子包好并封上。如果要办理托运最好把单件行李封到 2kg 及以上,否则可能无法托运。

日本时间(时间 UTC+9)

  • 15:45 着陆
  • 16:19 过海关
  • 16:45 拿到行李前往电车站
  • 20:27 抵达「纪伊田边站」
  • Check in 完先去 7-Eleven 买第二天的早餐及午餐,因为 7-Eleven 晚上 10 点关门
  • 晚上吃「そば・うどん処 一吉」,个人感觉很不错。

补充说明

  • 出发前可以在 Visit Japan Web 填好此前入境卡所需的信息,这样就不需要填写入境卡,只需要展示 VJW 的二维码即可。
  • 关西空港有两个电车站,一个是「南海快线」(NANKAI),另一个是 JR 线。记得选择 JR 线。
  • 拿行李很长时间是因为找不到我托运的登山杖,最后在工作人员的帮助下找到了。
  • 日本的电车比国内复杂很多,一定要看清楚电车类型。具体可以略读日本列车类别
  • Google Map 很好用,有些线路会标注在几号站台,直接前往站台即可。
  • Check in 的时候旅店老板会问是不是要去徒步,会给地图及盖章手册(听说有两本手册,我只拿了一本)。
  • 地图非常有用,会标记出休息点、卫生间、自动贩卖机、盖章点等。
  • 因为徒步路线在农村地区,很多商店会比较早关门。记得规划好时间。

Day 1 「泷尻王子」-「继樱王子」

  • 05:35 起床
  • 06:16 坐 81 路公交车从「纪伊田边站」去「泷尻王子」
  • 06:50 抵达「泷尻王子」
  • 07:00 开始徒步
  • 08:41 抵达「高原」
  • 10:06 抵达「十丈王子」
  • 12:08 抵达「レストラン」(牛马童子休息站)
  • 14:16 抵达「近露王子」
  • 15:38 抵达「继樱王子」

补充说明

  • 坐公交车只能付现金,需要提前准备好散钱或者 1000 面值的纸币。1000 面值的会找钱。
  • 「泷尻王子」到「高原」一上来就是一段高度 300 米的爬坡。爬坡不可怕,主要是路不那么好走。
  • 「泷尻王子」到「高原」有一个「乳岩」石那里,对于高个子来说要蹲下来才能看到路。
  • 「十丈王子」到「大坂本王子」这段下山的路比较多,需要多考虑落脚点。对我个人来说比较难。
  • 「レストラン」是一个比较大的休息站,可以在这里给手机充电,还可以吃午餐。
  • 真正的「牛马童子」不在休息站,需要回到原来的路继续走几百米。
  • 我去的时候「近露王子」的「熊野古道美术馆」没开门,貌似要四月份才营业。
  • 「继樱王子」有家店叫「オールド トレイル カフェテリア」。是一对法国-日本夫妇经营。他们的蛋糕和披萨是手工做的,非常不错。

Day 2 「继樱王子」-「熊野本宫大社」-「汤峰温泉」

  • 06:10 起床
  • 06:30 吃早餐
  • 07:30 开始徒步
  • 09:15 抵达「迂回路」起点
  • 10:40 抵达「蛇形地藏」
  • 11:17 抵达「三越峠」休息站
  • 12:51 抵达「发心门王子」
  • 14:11 抵达「伏拜茶屋」
  • 15:17 抵达「熊野本宫大社」
  • 16:40 搭 81 路公交从「本宫大社」去「汤峰温泉」

补充说明

  • Day 2 一整天下雨,出发前就穿上防雨鞋套,给背包套上防雨罩。
  • 前面三公里很简单,都是水泥路走得飞快。走到迂回路挑战开始。因为下雨,山里的路很湿滑,尤其是踩在岩石表面要格外小心。
  • 迂回路中间需要爬升 400 米,然后又是一段下山的急坡。中途路途因为下雨,加上路比较窄还是有点危险。这一段应该是 Day 2 最难的一段。
  • 在「三越峠」休息站休息了半个小时,在这个休息站解决午餐。
  • 在「三越峠」之后基本没有什么比较难走的路了,就是路上有不少积水,鞋套还是很管用的。
  • 全天第一个自动贩卖机在「发心门王子」,因此路途上记得带好饮用水,最好保证出发前有两瓶。
  • 「熊野本宫大社」门口就有一家商店的雪糕很好吃,尤其是徒步后的雪糕。
  • 「熊野本宫大社」往前面走,转个角就能看到「大斋原」,可以去打个卡。

Day 3 「汤峰温泉」-「熊野本宫大社」-「小口」

  • 07:00 起床
  • 07:30 吃早餐
  • 09:30 开始徒步
  • 10:28 完成「大日越」
  • 11:59 搭 51 路公交从「本宫大社」去「请川」
  • 12:40 开始徒步「小云取越」
  • 16:19 完成「小云取越」

补充说明

  • 早上起得比较晚,收拾完出门快九点了,没搭到早上的巴士,最近的巴士要 11 点多才开,索性走到本宫大社坐巴士(然后意外地爬了「大日越」)。
  • 午餐是在「请川」的「小云取越」入口的「下地桥」吃。
  • 「小云取越」一路上没有任何补给,全程在山里。
  • 「百間ぐら」的景色是最好的,眼前一望无际,连绵的山非常漂亮。
  • 「小云取越」全程没难度。
  • 「小口」这个村是整趟旅途最惊喜的地方,天空非常清澈,可以看到很美的星空。

Day 4 「小口」-「熊野那智大社」-「纪伊胜浦」

  • 06:30 起床
  • 07:00 吃早餐
  • 07:30 出发
  • 09:29 抵达「越前峠」
  • 10:32 抵达「地藏茶屋遗址」
  • 13:34 抵达「那智高原公园」
  • 13:59 抵达「熊野那智大社」
  • 15:42 搭公交从「熊野那智大社」去「纪伊胜浦」

补充说明

  • 官网给的参考时间是 7 ~ 9 小时,实际上不需要那么长时间。
  • 如果订「纪伊胜浦」的住宿,需要注意「熊野那智大社」-「纪伊胜浦」末班车的时间。
  • 出发前可以在「小口」的「南方商店」买点水,店主是个很可爱的奶奶。
  • 「大云取越」需要的爬升比较多,但实际上都不是急坡,路也好走,因此我认为并不太难。也可能是徒步了几天适应了。
  • 一路上只有「地藏茶屋遗址」有自动贩卖机,注意补给及消耗。
  • 印象里「大云取越」没有垃圾桶,包括自动贩卖机处也不能扔塑料瓶,因此要自备够一整天的垃圾袋。
  • 那智大社非常能出片,包括那张著名的「青岸渡寺」和「那智瀑布」合影

开销

汇总开销

  • CNY: 4,729.00
  • JPY: 57,758.00

具体开销(Beancount 语法)

2024-01-15 * "相馆" "护照照相"
    Expenses:Photo:Photograph               40.00 CNY
    Assets:CN:Bank:DebitCard

2024-01-17 * "出入境管理局" "护照"
    Expenses:Travel:Visa                   120.00 CNY
    Liabilities:CN:CreditCard

2024-01-18 * "深圳航空" "深圳-大阪"
    Expenses:Transport:Airline            4059.00 CNY
    Liabilities:CN:CreditCard

2024-01-20 * "淘宝" "电话卡"
    Expenses:Internet:Mobile               130.00 CNY
    Liabilities:CN:CreditCard

2024-01-23 * "Minshuku Tsugizakura" "住宿"
    Expenses:Living:Hotel                15200.00 JPY @@ 742.54 CNY
    Liabilities:CN:CreditCard

2024-01-23 * "Minshuku Yunotaniso" "住宿"
    Expenses:Living:Hotel                10100.00 JPY @@ 493.40 CNY
    Liabilities:CN:CreditCard

2024-01-23 * "Minshuku Momofuku" "住宿"
    Expenses:Living:Hotel                14300.00 JPY @@ 698.57 CNY
    Liabilities:CN:CreditCard

2024-02-03 * "旅行社" "签证"
    Expenses:Travel:Visa                   380.00 CNY
    Assets:CN:Bank:DebitCard

2024-02-03 * "DJANGO Hostel & Lounge" "住宿"
    Expenses:Living:Hotel                 4770.00 JPY @@ 231.66 CNY
    Liabilities:CN:CreditCard

2024-02-13 * "7-Eleven" "零食"
    Expenses:Food:Snake                    311.00 JPY
    Assets:JP:Transfer:Suica:AppleWatch

2024-02-13 * "Japan Railway" "関西国際空港-紀伊田辺駅"
    Expenses:Transport:Metro              2530.00 JPY
    Assets:JP:Transfer:Suica:AppleWatch

2024-02-13 * "7-Eleven" "早餐"
    Expenses:Food:Breakfast                837.00 JPY
    Assets:JP:Cash:Paper

2024-02-13 * "そば・うどん処 一吉" "晚餐"
    Expenses:Food:Dinner                  1300.00 JPY
    Assets:JP:Cash:Paper

2024-02-13 * "自动贩卖机" "水"
    Expenses:Beverages:Water               260.00 JPY
    Assets:JP:Cash:Paper

2024-02-14 * "公交车" "紀伊田辺駅-滝尻"
    Expenses:Transport:Bus                 970.00 JPY
    Assets:JP:Cash:Paper

2024-02-14 * "レストラン" "午餐"
    Expenses:Food:Lunch                    750.00 JPY
    Assets:JP:Cash:Paper

2024-02-14 * "自动贩卖机" "水"
    Expenses:Beverages:Water               120.00 JPY
    Assets:JP:Cash:Paper

2024-02-14 * "自动贩卖机" "饮料"
    Expenses:Beverages:Sodas               170.00 JPY
    Assets:JP:Cash:Paper

2024-02-14 * "オールド トレイル カフェテリア" "零食"
    Expenses:Food:Snake                   1200.00 JPY @@ 57.74 CNY
    Expenses:Food:Snake                    600.00 JPY @@ 28.87 CNY
    Liabilities:CN:CreditCard

2024-02-15 * "自动贩卖机" "水"
    Expenses:Beverages:Water               240.00 JPY
    Assets:JP:Cash:Paper

2024-02-15 * "石原商店" "雪糕"
    Expenses:Food:Snake                    350.00 JPY
    Assets:JP:Cash:Paper

2024-02-15 * "公交车" "本宮大社前-下湯の峰(バス)"
    Expenses:Transport:Bus                 310.00 JPY
    Assets:JP:Cash:Paper

2024-02-16 * "自动贩卖机" "水"
    Expenses:Beverages:Water               130.00 JPY
    Assets:JP:Cash:Paper

2024-02-16 * "自动贩卖机" "饮料"
    Expenses:Beverages:Sodas               180.00 JPY
    Assets:JP:Cash:Paper

2024-02-16 * "公交车" "本宮大社前-下地橋(バス)"
    Expenses:Transport:Bus                 250.00 JPY
    Assets:JP:Cash:Paper

2024-02-16 * "とりそば下地橋" "午餐"
    Expenses:Food:Lunch                   1100.00 JPY
    Assets:JP:Cash:Paper

2024-02-16 * "自动贩卖机" "水"
    Expenses:Beverages:Water               120.00 JPY
    Assets:JP:Cash:Paper

2024-02-16 * "自动贩卖机" "饮料"
    Expenses:Beverages:Sodas               170.00 JPY
    Assets:JP:Cash:Paper

2024-02-17 * "南方商店" "饮料"
    Expenses:Beverages:Sodas               170.00 JPY
    Expenses:Beverages:Water               120.00 JPY
    Assets:JP:Cash:Paper

2024-02-17 * "自动贩卖机" "饮料"
    Expenses:Beverages:Sodas               170.00 JPY
    Assets:JP:Cash:Paper

2024-02-17 * "青岸渡寺横、見晴亭" "雪糕"
    Expenses:Food:Snake                    400.00 JPY
    Assets:JP:Cash:Paper

2024-02-17 * "公交车" "那智の滝前-紀伊勝浦駅"
    Expenses:Transport:Bus                 630.00 JPY
    Assets:JP:Cash:Paper

近况

好像有段时间没写 blog 了。

其实也没有特别多想说的,我也该控制一下自己的表达欲。听听别人的故事,总觉得会比自己的故事精彩不少。生活寡淡也不是一件坏事,就是回想起来还是觉得无聊。

最近还在纠结要不要买新的 M2 MacBook Air,自己的需求倒是挺明确的,内存 16G 是一定要加上的,但是看到评测提到 256G 的 SSD 只用了一颗闪存芯片,速度大概是去年的同型号的一半一下子又开始纠结了。这台电脑买来不是作为主力机的,本职工作上有公司配的电脑,要用到高性能的时候有家里的台式机。我基本能确定自己用不到多少硬盘空间(个人文件基本都放在云端),如果是为了苹果这次退步而花更多钱总觉得是不值。当然我也知道这次闪存颗粒的变化对于实际使用体验几乎可以忽略不计,但想到花了这么多钱却比几年前的款式退步总会很不爽。这电脑从四年前就说要换一台新的,到现在还没换到。属实是严重拖延症了。

于是突然想了想自己的消费观,发现自己在给别人花钱的时候一点也不肉疼,比如给家里花钱的时候毫不犹豫,甚至会调贵的买,而对自己的开销扣扣嗖嗖。早就听说金牛座抠门,但好像抠门也是有所区分的😂

对了,今天促使我写下这篇碎碎念的契机是一个 B 站博主,是最近从主页推荐里发现的。做了好多翻唱视频,质量都好高!!!于是那天想起朋友借给了我把吉他(他买了新的,家里放不下了)。拿出吃灰了一个多月的吉他,调一下音结果把一弦调断了😂。于是又想起自己去年想学日语结果后来不了了之了,于是现在也每天打开 Duolingo 学一学。现在 50 个平假名也快学完啦,希望这次能坚持下来。

末尾附上我的入坑视频,最近这段时间工作的需求好多,打代码的时候把视频放到角落,平复一下紧绷的神经。

玩偶

火车在雪地里停了下来。

木村合上了书,揉了揉眼睛,看向窗外。白雪覆盖在草原上,像给大地盖上一层厚厚的毛毯。广播响起沙沙的声音,而后传来列车长的通知:「各位乘客,非常抱歉。列车出现了一些故障,我们将在维修好后继续行驶。现在乘客可以下车活动,但请不要走远,谢谢。」列车长的广播重复了三遍。许多乘客刚从睡梦中醒来,带着起床气听到这个意外,嘟嘟抱怨。

木村倒是不在意,反倒觉得这火车坐累了,能下车活动也算因祸得福。他早已习惯独自坐着绿皮火车旅行,带着些许行李以及几本书便可远离城市喧嚣的生活。

回想十几年前,在他二十多岁的黄金时代,一场瘟疫席卷全球,他足足被困在家里接近半年。那是他出来工作后五年左右,娇生惯养的他硬是在那段时间学会了所有家务相关的事。也是那段时间,他学会了与自己独处。

他曾经觉得,去居酒屋和旁边的陌生人闲扯才是男人最快乐的事。从大学开始,他就混迹于学校附近的那些居酒屋,和那些中年男人谈天说地。女人、足球、股票、房子是永恒的话题。噢对了,忘了提到,木村年轻时候的长相非常老气,丝毫看不出是还在学校上学的学生。他留着蓬松的络腮胡,头发留得像他的偶像木村拓哉。木村这名字也是从他的偶像那里拿来的,并不是他的真名。不过这也不重要。

不只是长相,他总是早于同龄人体验不同的经历。早在小学开始他就规划好了自己未来的人生。当大家还在纠结于要不要向暗恋的同班同学表白的时候,木村已经凭借他死皮赖脸的性格跟不少初中女生交往了。他相信跟高年级的人交往能更快地成长,事实也如他所愿,在后来面对比他小的女生时总能游刃有余地掌握对方情绪,但也正是这种游刃有余让他觉得缺乏新鲜感。等到现在,在 38 岁的年纪,他依然没有结婚。这和他小学的时候规划的人生有不小出入。

倒也不是没有遇到过让他心动的姑娘,他还记得 12 年前,在公司的茶水间,他偶然撇见了一个姑娘。她穿着一件黑色的卫衣,下半身穿着白色的小短裙还有长长的黑色筒袜。他只看到她的背影,还有一点点侧脸。当时木村就觉得,多么漂亮的姑娘。但仅仅是擦肩而过,没有停留下什么,只有空气中一股淡淡的香。

过了大概半个月,木村又一次见到了她。这次他看清了她的脸。她不认得他,只是跟小伙伴在聊天,在笑。木村没看手机,时不时瞟她一眼。队伍一点点往前进,在拐角处慢慢靠近她。他看到她的大学的文化衫卫衣,里面的灰色衬衫露出了领子。下半身穿着一条紧身灰褐色长裤,还有黑色靴子。她戴着白色口罩,只露出有神的双眼。长长的黑色头发盖住她的耳朵,是他很喜欢的中分。他看到她紫色的指甲油,还有手上那被毛茸茸手机壳套着的手机。

他夜不能寐,闭上眼睛都是那个姑娘的身影,已经很久没有这种小鹿乱撞的感觉了。他不知道她叫什么,只是会经常想着去茶水间碰运气,看看能不能偶遇她。他只知道上次见到她的茶水间在 26 楼,而他在 24 楼,每天大概也只能去一次。于是他每天挑不同的时间去,坚持了一个月却还是见不到她。他留意着公司大群的所有消息,期待有个熟悉的头像出现。他甚至不知道她是否用她本人的照片做头像,但他顾虑不了那么多。

可木村再也没见到她,就像她未曾出现那样。

突然,木村的手指感觉到一股热。手里的香烟已经燃到他的手指上。他把燃尽的烟丢到地上,踩上一脚。他又点上一支烟,狠狠地吸上一口。「这是在想什么呢?十几年前的事了,还纠结这些做啥?」他看到隔壁的小孩,拿着一只玩偶在雪地里玩。玩偶早已支离破碎,看得出来已经被重新缝合了好多次。左边的手臂上是短袖,右边的则是长袖。更离奇的是,玩偶心脏的位置还被缝上了一个绿色的爱心。

「那玩偶可真丑。」木村暗暗想着。

无题

写代码到现在

​很是喜欢安静的时刻,下午的咖啡因还在发挥功效。凌晨的家里只有外面公路上汽车时不时呼啸而过的声音,一阵阵的。仔细听的话不像以前觉得的那么嘈杂,反而有些像海浪。

​看着屏幕上一条条红线,那是一个又一个的错误提示。最近在学 Rust,和编译器斗智斗勇是最近的日常,近来总觉得想写点自己的项目。今年以来看了不少别人的案例,有做基础设施的(Apache Pulsar),有做创新应用的(Figma),还有各种各样长尾的工具(Logseq)。从 Podcast 也听到了不少其他的项目,尤其是 PLG 及团队协作的工具感觉正处于爆发期。许多老的工具都能被重新发明,也真是看着这些才不会想现在国内的经济大环境的问题。好的产品总会有市场,重要的是产品,而不是环境。

工作到现在也快四年,再往后,可能单纯的上班带给自己的提升边际递减。而且总感觉,工作中用到的专业知识和自己做项目有很大的不同。需要自己思考要做什么,怎么做,在没有 KPI 的情况下怎么让自己 stick to the plan。

​我也不知道这个项目能不能做出来,甚至初期调研后发现跟本来预想的有所出入。切换过几个方向,最后目前看来还是先做着目前手头这个。或许做到后面原本的限制就能被支持了呢?不论如何,假若能做出来,也是对自己这段时间的交代吧。

倒春寒

已经不记得是今年的第几次失眠了。

不知什么时候开始,似乎大家都知道我不喜欢过年。其实过去几年并没有那么强烈的感觉,但今年尤甚。 2022 已快过半,心情却从来没好起来过。这大概是我工作以来遇到的最大的一次低谷——并不是工作的问题,而是突然意识到现在的自己正处于人生的一个关键的时间节点却不知道该如何应对。我不知道我的前辈们在我现在的年纪是否也会这样迷茫,还是只是我想太多。

和朋友聊了不少,总觉得需要自己做点事情,看了不少案例却总觉得有力无处使。工作后的这四年感觉自己成长了不少,转专业后到了行业内的大公司工作,但或许也正是因此开始对后续的目标感到迷茫。我突然理解前些年为什么有些人会放弃大公司的工作跳到小的创业公司,我想换做是现在的我大概也会那么做。

焦虑。

其实不该那么焦虑,这种状态实在对自己也没好处。同事说总以为我是很开心的人,看不出我会焦虑的感觉。是不是我在外人看来总是那么积极呢?有人跟我说:「我发现你还蛮会安慰人」,但慰人者终归无法自我安慰,又该怎么办呢?

我不知道。

或许是连着看了好几天的代码,走在路上也在想着项目里的逻辑。但长时间这样反而效率上不来。看到一些时候总会走神,反应过来后又忘了逻辑是怎么走到这一步的,回过头来重看。在文件间不停跳转,就像失眠时思绪总会到处神游。

然后迷路,就像现在这样。

雨下了一天,并不能把生活的烦恼冲刷干净。我以前还挺喜欢下雨的,但是现在我不喜欢。我知道这不是雨的问题,但那天下了雨。其实该怪罪的是自己,为什么突然表现得那么奇怪,给人留下那么差的印象。以至于现在每个下雨天都会想起来,懊悔不已。

朋友离开了公司,我们因为一件事相识,后来发现还是有不少共同话题。工作中我们其实没有交集,但是也能一起吐槽一些事情。她跟我说了一些烦恼,而我一边安慰她一边跟她一起吐槽。其实我也帮不上什么忙,她也知道我做不了什么。只是在遇到不开心的事情的时候,有能和自己站在一起的朋友总归觉得自己更有力量。

但换到安慰的对象是自己的时候,才会发现,低头认输可能是更需要勇气的一个选项。

有时候只能骗自己,或许还能做点什么呢?天无绝人之路,总归有能做的事情。只要找到一个合适的方法,还是能峰回路转的吧。

但我也知道,生活不是代码写好的。那不是只要达成某些条件就能做成一些事情。我虽然早就知道这个道理,但真正落到自己身上的时候,还是太难接受了。

文件的消逝

一、应用

写这篇文章的时候我想起来的是之前看到的一段轶事。具体的文字已经不可考,但大致如下:

在一节计算机课堂上,教授跟学生说:「请大家打开 C 盘下的 xxx 文件。」这时有学生问道:「教授,请问我要用哪个 App 来做到这件事?」后来教授惊讶地发现,这一代的学生有些从来没有接触过文件管理器这个概念。他们从小到大接触到的都是一个个的 App,以及 App 内一个个具象的视频、音乐、文档等。对于他们来说,文件及文件夹是一个陌生的概念。

这一现象是什么时候开始的?或许有些人会认为是 iPhone 的诞生作为开端,但我更倾向与认为是 2004 年 Gmail 的诞生引领了这一趋势。

2004 年的愚人节,Google 正式发布了第一个版本的 Gmail,并宣布提供给每个用户 1GB 的存储空间。这在当年是非常具有轰动性的产品。在那之前,用户使用邮箱是通过客户端(Outlook 或者 Thunderbird)把邮件下载到本地后使用。因为当年邮箱提供商给予用户的免费空间一般按 MB 来计算,因此 Gmail 的推出一下子引发大量用户的迁移。

或许有很多人对 2004 年这一概念感到模糊,但我印象还算比较深。因为 2004 年正是我家刚买入第一台个人电脑的那年。当年我们家选配的硬盘为 80GB。

可能你会疑惑,只是增大免费容量为什么会作为一个趋势的起点?在我看来,这带来了用户使用习惯的改变。前文提到,在那之前用户使用邮箱是需要把邮件下载到本地后处理,因为邮箱提供商分配的空间有限,这意味着邮件的处理都是发生在本地的行为。邮箱提供商主要的服务仅仅在于发送与接收。但是当存储空间提升后,用户为什么还要将邮件下载到本地后处理呢?用户可不可以直接在网页上处理呢?事实上,当时已经有人这么做了。

注意,在以上的描述中我还没引入云的概念。对于大多数用户来说,最先让用户意识到云这一概念的产品是 iCloud。但在这之前还有一项划时代的产品需要介绍。同样出自 Google 之手,那便是今天大多数人的浏览器 — Google Chrome 的内核 Chromium。

二、基础设施

今天,除了苹果的 Safari 和 Mozilla 的 Firefox,大多数现代浏览器都是以 Chromium 为内核的应用。在当年,IE6 已经很久没有人维护了,网页技术的发展停滞不前。Chrome 的推出迅速刺激了沉寂已久的技术发展,人们意识到原来浏览器可以如此的快。注意,这里的快不仅是网页加载得快,而是在网页上做出复杂操作的时候响应速度的快。

同时,Chrome 也将 Web App 这一概念第一次让广大用户认知。但 Web App 这一概念并非由 Google 提出,

让我们把时间再往前几年,1995 年 Netscape 推出了 Javascript 编程语言。这一编程语言允许浏览器在网页上进行动态处理。2007 年,在 Chrome 推出的一年前,Mozilla 便推出了一个项目 — Mozilla Prism。Prism 将 Web App 和桌面操作系统深度整合,用户可以在桌面上直接打开某个 Web App。与在桌面建立某个网页书签不同,Prism 允许用户针对不同的网页配置不同的偏好设置。

以上一项为技术基础,一项更偏向理念,Google 在推出 Chrome 的时候便充分受益于此。在 Chrome 发布前夕,Google Blogoscoped 的作者 Philipp Lenssen 便将 Chrome 的主要特性总结为以下几点

  • Chrome 是 Google 的开源浏览器项目(编者注:此处说法有误,Chromium 才是开源的项目)
  • Chrome 会包含一个新的 Javascript 引擎叫 V8
  • Chrome 的标签页会放置在地址栏顶部
  • Chrome 会有快速拨号页
  • Chrome 会有隐私浏览模式
  • Web App 拥有自己的浏览器窗口
  • Chrome 内置防病毒及恶意软件功能

在我看来,以上特性中,真正具有革命性的功能为 V8 引擎以及将 Web App 的概念在浏览器设计之初便作为其重要特性。前者是后者的技术基础,而后者是消灭文件的基础。

三、云

2011 年,随着 iOS 5 一起发布的还有 iCloud 服务。至此,所有的拼图都完成了。iCloud 类的远程存储让广大用户意识到数据存储在本地不一定是安全的。这里的安全并不是私密性上的安全,而是能极大地降低数据丢失的风险。同时,只要网络条件允许,用户可以在任何物理设备上访问到自己的数据。换言之,本地存储不再是唯一选项。甚至随着网速的提升及网络延迟的降低,除了数据敏感性高的内容外,一切数据都可以放在云端。

但 iCloud 并不是第一个做云端硬盘的公司,早在 2005 年,Aaron Levie 就发布了 Box.net 这一云端硬盘产品。它允许用户将自己的文件放置于网盘上,并且可以像在本地文件一样管理。更先进的产品是 2008 年发布的 Dropbox,与 Box.net 一样提供云端硬盘服务。不同的是它提供了增量同步功能。这意味着如果用户对一个文件进行修改,Dropbox 可以做到只同步修改的部分。

从技术上看,Dropbox 将用户的文件拆分为许多小块,并将这些小块的属性计算出一个数值。我们只需要知道如果某一小块的数据有变更,那么这一小块的数值便会改变。通过对比本地和云端的数值便可以决定需要同步本地及云端的哪些内容。

增量同步除了提高同步速度外,还意味着文件存储形式的改变。用户的文件不再是原来的文件,而是被拆分成一段段数据,通过后期的拼接组合成用户原来的文件。虽然文件在本地硬盘的存储方式也是类似,但与本地存储不同,云端硬盘可以将用户文件拆分出来的一段段数据分散存储在不同的硬盘,甚至不同的数据中心。这一特性还有什么应用我们在此按下不表,后面会讲到。

iCloud 更为激进,在刚开始发布时它直接屏蔽了用户访问具体文件的选项。与 iOS 类似,用户使用 iCloud 是通过一个个 App 来实现。iCloud 和系统的整合更深,用户无法感知文件的存储及同步过程,本地存储和云端存储的边界更模糊了。用乔布斯的话来说就是 It Just Works。

但在这一步走得更远的依旧不是苹果。作为一家卖硬件为主要利润的公司,iCloud 主要的服务对象依然是苹果用户。对于其他操作系统,iCloud 显得过于封闭。而打破这一局面的仍然是 Google。在 iCloud 发布一年后,Google 也推出了自己的云端网盘 Google Drive。一开始发布时我以为这是一款比上不足比下有余的产品。它没有 Dropbox 的增量同步,也没有 iCloud 那般与操作系统深度整合的能力。似乎是一款可有可无的产品。但经过这些年发展,我发现它走的是另一条路,一条真正杀死用户文件的路。

四、文件的消逝

让我们暂且把目光转向更娱乐的地方 — 音乐。

我还记得以前听音乐的流程。在酷狗音乐上搜索自己喜欢的作品,然后点击下载。通过酷狗或者其他播放器打开刚才下载的 mp3 文件收听。有些音乐在各大音乐平台找不到,便到百度搜索,通过 BT 或者网盘下载到本地并整理好文件的元数据(歌手、专辑等)。在整理好后,将一些最近比较火的音乐整理好传到 MP3 里听。

后来我发现了豆瓣 FM。豆瓣 FM 和酷狗音乐最大的区别在于,豆瓣 FM 是纯流媒体的模式,即我们没法下载单曲,而只能在网页上播放。与之带来的变化是,我不再与一个个 mp3 文件打交道,将其手动整理好存到电脑里。甚至我不再需要下载程序,只需要登上豆瓣 FM 的网页就能开始听音乐。另外在存储空间不再是掣肘后,收听的音乐种类大大拓宽。通过不同的电台,我可以听到许多未曾接触的音乐。

这便是流媒体。

在今天这显得非常普遍,我们在 Netflix 上看电影,在 Spotify 上听音乐。理想情况下,我们不再需要下载这些内容,甚至下载这一概念已经变得陌生,取而代之的是离线观看(收听)。用户不再需要跟文件打交道,服务商也可以将这些内容用 DRM 锁定防止盗版,并更激进地使用私有协议。比如苹果通过 Apple Music 推出 Spatial Audio,在以往是很难实现的。

同时得益于流媒体的发展,获取新内容的成本大大降低。因为大多数流媒体都是按月收费,即用户付出一定的成本后,获取新内容的边际成本几乎为 0。这便带来了更多长尾内容。以往一个创作者创作出一张专辑,要说服未曾听过的人购买是很难的。但当获取新内容的边际成本降低为 0 后,用户消费新内容的门槛更低了,独立创作者的内容也更容易被消费到。

用户失去了文件的所有权,但也换来了更蓬勃的生态,以及更方便的使用体验。

这不仅发生在内容消费领域,在内容生产领域也略显端倪。

以文档处理为例,以往文档处理工具便是 Microsoft Office 三件套。诚然,Office 三件套功能十分强大,但它一开始的设计并没有考虑到云时代,所有文档的操作都是基于单一文件。而 Google Docs 则完全建立在云时代的基础上,也正是得益于这一后发优势,Google Docs 从设计之初就考虑到团队协作。也正是对用户屏蔽了文件这一形式,在线协作才成为可能,因为单一文件在修改的时候总是具有排他性的。

事实上,Google Docs 的文档会在 Google Drive 上显示出来,但如果我们将其下载下来会发现,这个文件只是一个链接。这也是我在前面提到的 Google Drive 设计的更先进之处 — 对于用户来说,文件并没有用,用户需要的是文件的应用。而与苹果的 iCloud 不同,Google Drive 真正做到了全平台。用户在本地不需要安装任何应用,在 Google Drive 上无数开发者提供了许多 Web App 让用户使用这些文件。与 Dropbox 不同的是,Google Drive 本身不实现增量同步,而是将这一工作下放给应用方实现。在线协作正是增量同步的体现。

Google Drive 的设计真正得益于前面三部分 — 应用、基础设施、云。通过应用(Google Docs)随时随地在基础设施(Google Chrome)上打开云(Google Drive)上的数据生产或消费。Google Drive 并不是传统的网盘,它更像是一个入口。

不止 Google,如今许多其他的应用也如雨后春笋般出现。比如 Figma,在 2016 年推出后迅速成为设计师最爱的生产力工具。比如 Notion,几乎只需要维护一份代码便可以提供全平台应用。

上述两个应用在创立之初都摒弃了传统文件的概念,比如在 Figma 里,我们不需要关心一个项目的所有 Page 是否是同一个文件。也正得益于屏蔽文件的设计,协作办公可以非常自然地实现。设计师和产品经理不再需要传输一个个 Sketch 文件,在某个有疑问的地方圈圈点点地沟通,而是直接在设计的过程中添加注释(改需求)。

即便是对文件系统最熟悉的程序员也逐步有屏蔽文件系统的趋势。在 Golang 里,外部依赖包是通过包的自定义地址引入。比如我要引用 MySQL 包,只需要在引入里写上 github.com/go-sql-driver/mysql 即可。在未来,Golang 是否还需要将外部包下载到本地再使用呢?进一步来推进,是否可以有一款新的编程工具如 Figma 那样,用户不再需要像现在一样整理文件的编排,而是用类似 Page 的形式整理,通过类似标签的形式引用别处的代码?

上述应用的发展都充分体现了一点:传统操作系统正在式微,而浏览器正在取代操作系统。事实上,Chrome 也推出了 ChromeOS 操作系统以及对应的 ChromeBook 笔记本。

目前这一替代还未成熟,对于计算密集型的应用还无法替代。比如音视频剪辑的应用还未成熟,虽然已经有产品正在尝试(比如 Dropbox Replay)。更难替代的是专业的工业软件。但对于大多数用户,文件确实已经消失了。尽管文件是操作系统最基本的单位,但用户并不需要知道这些。

年会

年会结束了,有惊无险。

做过活动策划的人都清楚,策划一场两百人参加的活动有多么不容易,特别是还涉及到跨城市的举办的时候。要从零到一计划时间、交通、住宿、饮食,甚至大家最关心的,奖品的内容,抽奖方式等。中途需要打无数电话,沟通,修改方案。说修改方案可能还算简单,到后来可能原始方案早已全盘替换,最初的方向在终稿里已经不见踪影,只留下一个名字相同。这一切的工作还要在不影响到当时具体工作内容的情况下完成,而且几乎不会获得任何收益。全凭一腔热血,用爱发电。

在外人看来,这一切都似乎是理所应当地发生,不就是吃饭订酒店抽奖罢了,经费都已经准备好了,剩余的事情水到渠成。但即便是最简单的,两三个人的短途旅行都涉及到复杂的规划,何况是人数成倍增加的年会。具体参与人数不确定,举办的时间几乎没有别的选择。预算之下餐厅选择有限,还需要应对突如其来的正常工作需求…… 在极其有限的时间内完成这场设计,难度不亚于一套复杂的计算机系统。它们同样需要在有限的资源环境下,按计划地完成一系列任务,最后收尾。这中间的过程涉及到做什么、怎么做、化简为繁、化繁为简,还有与其他系统的沟通(都知道跟外部团队的沟通有多么不容易)。

但当这一切都设计完成准备执行的时候,当天早上的两例新冠病例将这场活动推向未知的方向。

这或许就是所有计划最害怕的情形,当所有事情都完成,但在执行当天不确定是否要上线。群里的同事都在问是否还要继续年会,策划人等着我们这边及酒店的答复,所有的准备可能就此毁于一旦。但此时并不是所有人都站在你这边,这也是人之常情,参加这些活动总归是麻烦的事,如果没有获奖的可能谁还会去,尤其是在这种情况下。

但策划人们不一样,并不是说策划人不怕发生问题,他们显然更害怕,但投入那么多沉没成本自然也不希望所有成果石沉大海。没有人是错的,当我们站在任何一方的角度思考问题都会得出相同的结论。

这也是新冠给我们带来的改变,变得更加拘谨,束手束脚。当这些问题变得越来越多后,自然会让人更加烦躁。于是感同身受变得更加困难,我们总不能要求人们无时无刻不站在别人的角度思考问题,那自己怎么办?如果自己不站在自己的角度思考问题,自己又怎么会过得快乐?

或许最好的方法,是参与进来。参与有很多种方式,可以是最复杂的总策划,也可以是最简单的搭把手搬东西。当参与进来后,人之常情自然希望能办好。扩展来看,当我们为世界创造出更美好的事物的时候,我们为这个世界的美好添砖加瓦的过程中,会更爱这个世界。或许这个过程中,会有很多挫败,但你的成果会让自己在面对这些事更强大,更有信心。

所以在这次活动的过程中,会比以往更积极地参与进来。从最简单的搬东西、点人数,到在晚会的时候在后勤帮忙,以及表演一场节目(虽然效果不甚理想)。这都是为了让这场活动更加正常地进行,虽然这些东西微不足道,虽然饿到活动结束才去吃东西,但总归是做出了一些改变,更让这场活动朝更好的方向前进了一点点。

自然的,也让这个世界更好了那么一点点。

这当然也有其他因素,比如策划组有的是我的朋友,或者新认识的朋友。我自然也不希望他们的成果就这么付之东流,因此也会为了此做些事情。就像我在脱口秀里说的,人和人的交往要真诚,自然也会让自己更快乐。

这大概是 2021 我自己最大的转变,在于想让自己变得更好,与此带来的也会让这个世界朝自己更希望的方向挪动一点点。我不知道为什么今年突然变得这样,找不出一个让自己突然变化的时间点。但回过头来看,就这么发生了。可能在多年后回忆起来,2021 会是自己很重要的转折点,虽然今年并没有发生什么事。

活动的当天,彩排的时间被测核酸的时间吞噬,在大家都几乎毫无准备的情况下,还是很好的完成了晚会。晚会后大家聚在一起吃宵夜,狼人杀,玩到凌晨两点多。已经很久没玩到那么晚了,这大概是最好的结局。

石榴籽

各民族要像石榴籽那样紧紧拥抱在一起。

— 习近平

「君朋友圈发了去新疆旅游,你要去吗?」朋友问到。

君是我们的同事,我跟她并不认识。

「有行程安排吗?可以发来我看看。」我说。

那是九月中旬的时候,我的国庆假期还完全没有安排。本来就这么想着睡上那么七天,但也太无聊了。已经两年没有出去旅游了,上次旅游恰好也是两年前的国庆。憋坏了,其实只要有个去处就好。

行程安排上的大多数地方我都不认识,「库尔勒是哪里?塔县有什么特别的?噢有峡谷应该可以拍点壮观的了。」我当然没问君这些问题,「行程都安排好啦,只需要过来玩就好。」正合我意,作为一个选餐厅必踩坑,点菜总是过剩的人,安排一次旅途实在不在我的能力范围。「我去。」其实没考虑多长时间,「太好了呀。」她说。

在库尔勒落地是下午六点多,出来自然先做核酸。在深圳我已经提前一天做了一次,但这里不认。后续这类异地系统不互认的事情还有许多,暂且不表。

天还是很亮,大概相当于深圳的四点。「好热、好干。」我跟君说。君跟我的第二程是一班飞机,晃荡了五个小时从重庆到这里。本以为新疆这边至少会凉快些,结果这个点比深圳还热。失策了,没带多少夏天的衣服。想起出发前几天还把行程单上所有地方的天气预报都查了个遍,只能感叹准备永远是不充分的。「我得叫老丁多拿几件夏天的衣服过来」,君说。老丁是君的男朋友,因没法请假只能和君分头行动。直到过几天老丁来了之后我才知道这是一件对他们多么残忍的事。

民宿老板来接了我们,车上蒙着一层厚厚的沙尘。「不去洗车吗?」我问老板,「这儿的车都这样。」在路上我看着路过的车,有些干净得一尘不染,而有些就像老板的车那样,盖着一层土黄色飞驰而去。这样看着不难受吗?我想,直到过了大概一周在喀什我们也遭遇了一场沙尘暴,大概他们早已见多不怪了吧。

君和我先到的民宿,直到晚上九点多剩下的三位小伙伴才到。mercy 是东北人,一开口就听得出来的那种。H 和小丁是一对情侣,老夫老妻相。「卷儿丁卷儿丁」,H 叫到,是小丁又在忙打工作电话了,而我们在听着民宿老板的朋友讲故事。「我从库尔勒要去喀什,想了所有的交通工具,最后采用了最新疆的方式。我选择了骑驴。于是我去集市买了头驴,训练了半个多月,还做了那种维族的驴车,专门去农村买的木头,花了 58 天从库尔勒一路骑到喀什。」大哥说道。大哥是个探险家,四海为家。「老板听说了我的故事硬把我留下来住几天,过几天我要去塔里木河漂流了。」

听故事意犹未尽,但也得先填饱肚子。「卷儿丁」终于打完电话了,看着老板打包来的拌面我们的肚子早就咕噜咕噜叫了。开着租来的车去市区吃饭已经是晚上十点多了,直奔烤肉店。羊肉串只是填下肚子,酸奶粽子不过是餐前甜点,烤羊排、大盘鸡才是正餐。喝上一杯卡瓦斯,五个人在新疆的第一餐直接吃撑了。没有吃菜,不像广东人。

直到连着吃了几天羊肉后,我们对青菜倍感思念。「有冇青菜呀?」后续的每顿饭我都这么问。即便大盘鸡椒盐鸡烤全羊涮耗牛缸子肉都非常好吃,但是一行人已经吃不太下了。广东胃非常想念番茄茼蒿金针菇胡萝卜,哦对了,还有北方胃非常喜欢而我吃不惯的蒜头。以前在家都不太喜欢吃青菜,来之前还说「我全程都要吃羊肉」,但不到一周就败下阵来了。父亲打视频来说「真羡慕你天天吃羊肉哇」,我表示应该回去后几个月都吃不了了。「是不是现在很想吃家里的菜呀?」母亲问,点头点头。

旅途末期实在太累了,「我们要不要点米粉和冒菜?」,mercy 和 meyou 问。meyou 是 30 号在阿克苏跟我们汇合的,她说自从第一天吃了羊肉后就有点排斥了。「最后一天还要吃烤全羊哇,今晚实在不想吃肉了。」又回想起之前看到有人在旅行的过程中在酒店吃外卖,以前还不理解,而现在我们仨也变成了这样。

「请出示健康码、身份证、喀什和易行、巴州和易行……」已经忘了在这边出示过多少次二维码了。在加油站,乘客要先下车在出口等待,司机一个人开进去。刷身份证、出示行程码、可能还有各个州的登记码。在高速公路时不时会被强行引导到服务区,公安例行检查。进服务区上也是测体温、扫码……

「新疆人防得起但得不起呀,所有病例都要去乌鲁木齐才能治。」喀什的民宿老板跟我说。「这里一定是查得最严格的地方,所有人每七天都会自觉去做一次核酸检测,所以从疫情爆发到现在新疆还没多少病例。」meyou 的新疆朋友跟我们说道,非常自豪。

即便如此,在我们行程过半之际,伊犁还是出现了病例。「啊,伊犁好像有疫情了,我朋友说伊犁那边都封城了。」小道消息总比官方要迅速。「喀什好像封城了,只出不进」,酒店的前台说道。我们无法判断真假,旅行过程中这些消息就像一股近在咫尺的沙尘暴,不知道会不会到来。即便我们没有去到伊犁,但人心还是不太安定。在这里,政策和规定近乎不可预测,只能总想着最坏的打算。有一次车里五个人的手机同时响起,「如果在喀什请记得明天之前要做核酸检测。」机器人说道。把所有人都原子化地管理起来,就像计划经济时期的样子。在市区,平均每两个路口就有一辆警车或者警察亭,一切都是实名制,刀要用链子拴起来不能随意移动。「在新疆,你很安全。」确实如此 ,老大哥的眼睛时时刻刻盯着这里的人,无处遁形。「以前太乱了,路上时不时会有爆炸,还有枪战,死了太多无辜的人了」还是喀什的民宿老板跟我说,「从暴乱到戒严到现在我都经历过,还是现在这样好呀,大家都很安全,井然有序的。」

所以这里的人都习惯了这样的生活了吗?或者说,如果把我丢在这边生活多长时间我会习惯这样的生活呢?赛博空间如此紧密地服务着现实社会,我不禁想知道,疫情前的新疆又是怎样的呢?就这样防控到病毒消失吗?疫苗本应扛起的重任现在看来还是无法改变什么。电视上播着新闻,美国单日确诊又破十万例。大家的生活都改变了许多,「怎么进入卡内基音乐厅?patience, patience, patience」或许人类确实可以非常 patience,只是这种 patience 的代价也太大了。

远处的天山看着不高,却一路陪伴着我们。顺着天山从库尔勒到塔县,它始终在我们车窗右边。时而像不想上班的人那样,苍白、毫无生机,等到了太阳快下山的时候,又在阳光的照耀下显出酒红色,像是微醺的姑娘,向我们展示她最美的模样。一路往西行,气温越来越低,雪也渐渐在山顶冒尖儿。到了傍晚,远处的雪山在阳光下显得格外不真实,落日余晖映衬着皑皑白雪。夜晚的塔县,往外开几公里的路程,远离城市的灯光,繁星点点洒在天上如穹顶般包裹着我们,已经很久没有见过这么清澈的天空了。翌日往回开的路程,阳光洒在喀拉库勒湖上闪闪发光,远处的慕士塔格峰害羞地躲在雾气身后只露出模糊的轮廓。山脚下的牛羊安详地吃着草,压根懒得抬头看一眼。偶尔穿过马路,完全不理会路上飞驰的汽车,好像是在宣誓自己的主权。盘龙古道的脚下,「今日走过了所有的弯路,从此人生尽是坦途」。慢慢地开上盘山公路,前方的视线只够看到一个弯道入口,总有一些不负责任的人开得飞快地从上面弯下来。但往下看,一览众山小。从 3000 米的海拔开到 4200 多米,我们终于可以平视远方的雪山了。雾非常及时地散去,老丁的无人机飞起来也可以拍下盘山公路的壮丽。

再往前开,我们就可以到达国界了。但是国界并没有开放,于是我们朝着下一站阿克陶开去。一路上大家都睡不着,单反、手机、Go Pro 都派上了用场。在一条笔直的大道上开着,路的尽头像是远方的雪山,旁边的行道树也已泛黄。没有什么车,终于可以停下拍照。坐在路边的石尊上摆着 pose,大胆的直接坐在马路中央,构图、调光、调焦、咔嚓。上了车再慢慢欣赏刚拍的照片。路过边境站,下车买个烤玉米,甚是舒服。

但伊犁的疫情风暴还是影响到了我们。「阿克陶不让进,进去要隔离 7 天。」小丁接到了君的电话后说。我们赶紧掉头,往喀什开去。因祸得福,今天恰好是 meyou 的生日。早上在手机上查的阿克陶生日蛋糕简直不忍直视,若到了喀什选择便多了起来。后排的姑娘们赶紧联系蛋糕店,前排的我们被对面的远光灯闪得犯晕,强撑着注意力,用黑色的眼睛躲避光明。「哎哟我的天啊,这些人怎么开车的。」我和 H 一路感慨。连警车都开着远光灯,在双向两车道的县道上,不只有车,还有摩托车、三轮车、牛车驴车,甚至还有背着草走路的人。「这些人在这种路上就是这么开的吗?」我想。习惯了深圳严格的交通规则,到了新疆总会有些水土不服。开始的几天我们看着他们的车掉头,似乎路总是不够宽,掉头横跨了四条车道最后回到最左边,甚至完全无视中间的实线。直到后来我们也习惯了,打不过就加入吧。路上的摄像头不知道是否在工作中,不重要。

仪式感总得要有的,曾经我也不喜欢过生日,后来觉得跟二三朋友在这个日子一起庆祝一下也是一件幸事。戴上王冠、唱着生日歌儿、许个愿、吹蜡烛、吃蛋糕。这次路上,小倩、丰哥、meyou 都在这几天生日,还是补上一句生日快乐。

但还是人才是最美好的。

喀什古城,虽已变成旅游景点,居民还是在这里生活。孩子们在路上追逐,老鹰捉小鸡。或晃荡着秋千,看着游客若有所思。走进巷子里,坐在桌子前面玩着水瓶,早就忘记了桌上还有作业。游客们如果想要跟孩子们拍照还很配合,一副老练的样子,好像这就是他们天生就是这块料。老人们坐在椅子上聊天,有些害羞的看到镜头还会躲闪,有些则会咧开嘴笑。

12 点了,该是睡觉的时候,迪厅却刚刚开始热闹。总得看看这里的夜生活是怎样的。来得比较早,坐在二楼中间正对着舞台的位置。歌手开始暖场了,唱着我们一句也听不懂的维语歌儿,摇摆着双手扭着身子。舞台上,几个姑娘已经上去了,在歌手饱满的唱腔下翩翩起舞。看起来整个迪厅没多少汉族,甚至可能只有我们六个,不敢下去。小喝几杯,学着歌手哼两句,身体热乎起来了。楼下已经有些热闹,时间到了。我们下去学着他们摆动着双手转着圈儿,在音乐的节奏下谨慎地学习。直到后来,节奏变快,便忘记了自己在何处。不由自主蹦跶了起来,像在电音节那样。周围的人有些疑惑地看着我们,有些在笑,我也只是看在眼里不管不顾。两个维族姑娘加入了我们,但也有些谨慎。烟雾弥漫,礼炮响起,音乐的节奏也快到了极点,空气中弥漫着荷尔蒙的气息,双手随意挥舞,不知道在跳什么舞。直到节奏慢下来,人也有些累了,从这氛围中慢慢退出,末了,互相打招呼,然后离开。

但我更喜欢在莎车的经历。

从王宫对面的广场走进巷子里,几个孩子在随意玩耍。看到我们几个游客非常高兴,但又有些谨慎地保持距离。「你们有去过那边吗?」一个小孩指着前方问道。 「这里晚上会很漂亮,灯亮起来的时候。」我们今天没有什么安排,也只是在县城里随意晃悠。「可以跟你们拍照吗? 」「可以可以。」有几个小孩还有点害羞,长得高的几个则非常热情。「去那里拍好看点。」他说,指着那个贴满彩色装饰花纹的门。竖着大拇指,看着镜头一脸严肃。后来,我们在县城胡乱转,竟不小心走到墓地边缘。离开后,到老城门看到骑着马车的一个叔叔。 「坐车吗?二十块钱一个人。」那当然坐,于是坐着马车转了城区一圈,沿途看着奇奇怪怪的店名。 《父权馕坑烤肉店》、《自豪化妆品销售店》、《传家宝美食》、《古老烤肉店》…… 边坐着马车便复述这些奇怪的店名,看着晚上熙熙攘攘的人,甚是惬意。最终到达王宫门口,马车行程结束,依依不舍。灯终于亮起来了,黄色的建筑撒上了暖暖的灯,像是上海南京路那排古式建筑。钻进另一条小巷子,正对着我们的是另一个舞台。三个老头拿着乐器沉醉地表演着,几个维族姑娘和男人在上面跳着他们的舞蹈。我们站在旁边看着,几个人对着我们指着上面, 「上去跳」,他们邀请着我们。我不会跳舞,怕破坏了这般祥和,而我们的姑娘们在她们的带动下跳了起来。 「跳得真好」,台下的人说……

各民族要像石榴籽那样紧紧拥抱在一起。

「飞深圳的飞机好像延误了」 ,群里有人说。狮子山台风偏偏在这时登陆了。 「吃火锅!」好在是在重庆中转,可以去半天市区游了。开始我们还很开心,以为只是延误到九点多起飞,吃个火锅刚刚好。没想到最后一点多才起飞,回到家已经快天亮了。深圳的朋友回家的路途不容易,我和 meyou 还算好的,回到家大概四点钟。H 和小丁直到我躺床上才落地,君和老丁的航班直接被取消,被迫改乘动车回家。十几天的旅程,相当疲惫。然而强迫症的我,又花了两个小时记好账才睡觉。

下趟旅程还会去哪儿呢?

===========新疆照片的分割线===========

天山神秘大峡谷,可以做下一代 macOS 的壁纸
塔县回来的路上,每一秒都美如画
塔县的夜空,可惜还是有点光,如果再往外开几公里应该更好
莎车王宫的老爷爷,看到我们拍照还抬头打招呼
倒数第二天丰哥生日,一起吃蛋糕的维族小孩
盘龙古道脚下,愿各位人生平坦

初看《灌篮高手》

我小时候看的动画片基本是翡翠台播什么我看什么,所以在我印象里《哆啦 A 梦》是说粤语的,直到现在重温的时候看着只有普通话和日语选项,总感觉不是滋味。那时还有数码暴龙、宠物小精灵、四驱兄弟、七龙珠等动画,当然还少不了猫和老鼠。我的童年几乎就是看着这些动画长大的。

但是没有《灌篮高手》。

其实很奇怪,明明《哆啦 A 梦》是比《灌篮高手》还早的动画片,但是不论是翡翠台本港台还是后来的星空卫视华娱卫视似乎都没有重播过。而在那个互联网还没如今天那么普及的年代,自然是电视播什么我们看什么。虽然我印象里在楼下书店有看到过封面,但是预算有限的零花钱还是会拿来买熟悉的小人书。所以当我最近看《灌篮高手》的时候,别人听到会说重温童年,其实只是给童年补课而已。

在爱奇艺的弹幕上可以看到很多年龄段的人会打出 XX 年大叔 / 阿姨回来重温,里面不乏有 00 后。他们很多应该是小时候没接触过日漫的(可能是偏见,我记得 00 后看的是喜羊羊?),那是怎么会倒过来看十几年前的日漫呢?我也不知道。不过看到有些大概现在是初中年纪的小孩来看,真的非常羡慕。如果初中的时候能够看到那么热血的动漫,可能会更努力去打球吧。

但是,如果是小时候看,我可能只会喜欢樱木。很简单的原因是因为他是主角,而可能讨厌流川枫,也只是因为樱木讨厌他。但是现在看,不论是湘北五虎还是陵南仙道鱼住我都很喜欢。甚至可以说在井上的这部漫画是一部没有反派(可能只有铁男之前的手下)只有青春的作品,而小时候我大概是无法理解这样的世界观的。即便《哆啦 A 梦》也有胖虎这样的小反派,从这个意义上来看,小时候没有看到《灌篮高手》实在是个遗憾。即便我刚开始看到湘北 V.S. 陵南第一场的时候依然先入为主地把陵南当成反派,而无反派的作品即便在今天也是很稀有的。无论是动漫还是现在豆瓣上高分的电影电视剧,大多会树立明确的正反派。如果我早点接触到它,我的世界观大概会不一样吧。

看到对翔阳的比赛中三井的表现,不由想到 30 岁的罗斯在对阵爵士的时候砍下 50 分。同样是天之骄子,历史最年轻 MVP,经历无数伤病后拯救球队的巅峰表现。罗斯在那场比赛后接受采访的时候哭了,三井也不负安西教练。在对阵海南的时候赤木受伤后依然带伤出场。虽然最后输了也是虽败犹荣。流川在对阵陵南的时候默默追分以及木慕最后的三分球,以及翔阳·陵南合作鱼住在被人质疑了三年除了长得高一无是处的最后一场……

在童年错过这部动漫实在是遗憾。好在现在都补上了。而且全国大赛的电影版也要开始制作了,过几年应该可以补上动漫版的后续了。

看的时候会想到两年前在镰仓,七里滨站旁边有家小小的拉面馆。当时是随便找的一家店进去的,没有看过任何点评,意外的好吃。大叔一个人在那里当着面做菜,边吃边问我们口味如何。

不知道为什么那是我在日本吃到的印象最深的一顿饭,可能是那种亲和力?还是那天就非常饿?

好想去再吃多一次呀。

爷爷

爷爷是位老党员──我们家族唯一的党员。

我不知道他对这一身份有什么看法,在他那个年代这似乎是件稀松平常的事。或许是因为他的「成分」非常干净,碰巧被别人拉去就入了。不像现在要写申请书,要做各种调查手续等等。我还记得初中入团填写申请表的时候还用爷爷的名义写了一封推荐信,尽管他并不识字,就跟那个年代大多数农民一样。

在我印象里,爷爷总是笑笑的没发过脾气,就像教科书里经典的慈祥老头那样。爷爷爱抽烟,到八十岁了还抽得跟二十几岁小伙子那么多;他也爱喝酒──但并不嗜酒,每天午饭总要喝上那么二两。我毫不怀疑他的社交能力,上至他这把年纪的老人,下至还没读高中的学生他都能聊得来。父亲说他以前脾气可差了,家里七个小孩都怕他,以前打小孩的时候是用的擀面杖,比父亲(打我们)用的衣架还疼。

我想起父亲对我们说过的,如果以后他带孙子也是信奉棍棒底下出孝子,或许也是跟爷爷一样?

爷爷的身体一直不差──至少对于他这个年纪的人来说。他的房间在大伯家的四楼,每天都要爬上爬下好几次。几年前爷爷的腿脚越来越没力了,父亲买了支拐杖给他,他还说那是给很老的老人用的,现在这年纪用多丢脸──出自一个快九十岁的老人。尽管住在大伯家,但他每天白天会和奶奶过来我们在老家的房子。他喜欢坐在一张破破的塑料椅上,看拳击、篮球、足球。虽然看不懂电视上的字,听不懂解说依然看得津津有味。父亲说他以前因为长得高,是村里的篮球队员,对于那个年代的南方人,一米七几的确是挺高的了。

这些年爷爷奶奶岁数越来越大,我们每年过年都要回老家过年。尤其是近几年中秋也是假期后,中秋节也回家过节,因为这是我们乡比过年还热闹的节日。2013 年的过年,兄弟姐妹们觉得父母岁数大了,凑齐了整个家族的所有人拍了家族的全家福。照片上爷爷奶奶坐在最前面的中间,旁边后面跟着三十几个儿孙,这是他们眼里最大的成就。但是前些天,爷爷偷偷跟姑丈说,他有个很大的遗憾就是没能抱到自己的男曾孙。堂哥倒是有一个小女孩,但是在他眼里只有男孩才是香火。他并没有跟大伯或者父亲说,大概是觉得跟外戚说比较不会给自己的儿孙那么大压力。这些年我越来越能理解老一辈这些传统观念—这当然不代表认同。爷爷对我们结婚生子这件事的问候一直是善意的,只是稍稍提一下,并没有过分追问。他一直很能拿捏跟人说话的尺度,不会咄咄逼人。我们也能通过其他渠道知道他的一些想法,这也是他的处世之道。

两年前,爷爷的弟弟过世了。他是村里祠堂的管理员,一个鳏老头。父亲和大伯帮忙做完他的后事,爷爷也没了兄弟姐妹。大概是在那之后,爷爷慢慢戒了烟,酒也少喝了。我那时候刚开始工作,问起他想不想喝茅台,我有钱买给他喝了,他说茅台也并没有那么好喝。

可能只是现在不好喝了。

年初的疫情让我们提前回深圳,彼时爷爷的身体看起来还算健康。后来我才知道那时爷爷已经得了癌症,但那时还看不出什么征兆。他的腿脚已经不太有力──虽然依然拒绝用那只拐杖,每天骑着那辆破破的单车慢慢溜着通勤于大伯家和我们家。看起来还有很长时间,理所当然。

中秋前夕,爷爷腰椎盘旧病复发,父亲提前去带他到市区住院。这次出院和以往不一样,情况并没有什么好转。中秋节我们回去的时候,他每天只能躺在床上,一只耳朵已经听不到了,眼睛也有点花,稍微远一点就看不清人。但是意识还很清醒,我还记得假期结束回家的时候在他房间聊了一个小时天。他聊起以前的事都还记得,村里发生了什么大多都知道。除了站起来坐起来没什么力其他都还好,吃得也跟以前一样多。当时我还不知道他的病情,心安理得地回去。

他只剩一个月了。

上周回老家看爷爷,他已经完全听不到了,跟他说话也没了意识,他说的话也很难让人听懂。他已经认不得人了,把别人统统称为同志。姑姑和母亲不忍看到这样,偷偷啜泣。奶奶还不知道发生了什么,只知道老头子身体不太好。偶尔进来问两句老头子好点了吗,被我们挡了回去。我还记得一幕:爷爷躺在床上突然叫了两声「惨呐,惨呐」。我不知道他是太痛了还是条件反射。他已经吃不下药了,好几天吃不下东西。周日回家前我跟堂哥说,下周再回来看他,堂哥说:「不知道能不能到下周呢」。

周三早上,爷爷去世了,在他自己盖的老房子里。

后来父亲跟我们说,周二那天就感觉爷爷呼吸都不一样了,于是几个人把爷爷搬到老房子里。老爷子到老房子后似乎安心了些。

但爷爷最挂念不下的还是奶奶。

周三早上,父亲和大伯坐在爷爷旁边。父亲问爷爷:「你还有什么要交代的吗阿爹?」爷爷此时已经说不出话了。父亲接着说:「如果你挂念的是阿姆(奶奶)的话,我们兄弟姐妹一定会照顾好她的。你就放心吧。」

爷爷的眼角流下了点眼泪,那是父亲和大伯第一次看到爷爷的眼泪。

父亲把爷爷的眼泪擦掉,过了一会爷爷的眼角又有点湿润了,大伯帮他擦干净。后来他们出来坐了一会,让爷爷休息一下。过了不到十分钟,大伯进去看了一下爷爷,爷爷已经走了。他今年九十五岁,从疾病恶化到离去大概两个月的时间,在他自己盖的房子里儿子的陪护下安静地离去。我觉得这是最好的归宿。

小记备份:从账本说起

毕业后工作一段时间以来感觉自己的花销越来越不可控,之前听闻一个朋友说毕业后第一年基本是存不下钱的,当时还不以为然,结果后来真的应验了。于是在今年国庆后正式开始记账。作为整天与纯文本打交道的程序员自然更青睐于纯文本的记账工具,于是在看了 BYVoid 兄的这个系列文章以及 SKYue 兄的这篇文章后也开始用上了 Beancount+Fava

与之而来的问题是账本作为一种私密性极高的数据,我不希望在他人的服务器上有留下任何明文的数据。Dropbox 或者类似的网盘同步显然不合适,棱镜计划的存在让我放不下心。虽说自己的数据并没有涉及到犯罪,但是这些监控行为在价值观上也与我相悖。账本一旦有他人获得明文数据后几乎可以勾勒出我从记账开始后的生活轨迹,我不希望除了自己以外有其他人能看到。墙的存在也是一个考虑因素,虽说在用上 Clash/Surge 后已经可以做到在中国/国际互联网上无缝自由穿梭,但始终会有顾虑。

在 BYVoid 兄的文章 4 中提到了用 Git+git-crypt 的组合,但是使用了 git-crypt 也有弊端。因为 git-crypt 加密后在 Git 的记录都是加密的二进制信息,这就带来了在多设备环境中 merge 的问题。如果在编辑前忘记把最新的 commit pull 下来,在解决 conflict 的时候就没法像明文数据那样比较。虽说可以看 commit 时候的 message 来区分,但是因为是账本信息 commit 的 message 不应该写得很具体,否则也会泄露隐私。

于是在试过几次解决 merge conflict 后我放弃了这个方案,转而使用 P2P 同步的方式在多设备同步。目前我已经切换到 Syncthing 并且(在折腾了一段时间搞不懂它的同步逻辑失败多次后)稳步运行了起来。目前账本的信息保存在家里的电脑、家里的树莓派和自己的笔记本上,这样每次修改账本都可以几乎实时同步到另外几台设备上。

但是在听了《内核恐慌》的 56 期后了解了备份的 3-2-1 原则,想到事实上数据做了同步但是并没有做到很好的备份,而如果家里电脑、树莓派、笔记本一起挂掉(考虑到自己瞎折腾的频率和水平这种可能性并不低)那我的账本就消失了。于是开始着手于完成那个 1,即一份数据在远程。但是如我在上文提到的不能明文存储在他人服务器,在存储到另一台服务器的时候则需要先加密后上传。

(下文偏技术向)

首先我们需要准备几个东西:

  1. 一个 GPG 密钥
  2. 一个远程服务的帐号(我用的是 Backblaze B2
  3. 一台 24*7 运行的设备(非必需)

一、准备 GPG 密钥

首先生成一个 GPG 密钥:

gpg --full-generate-key

一路选默认就可以,如果你之前已经有一个 GPG 密钥,那么可以导入。

gpg --import /path/to/keyfile

之后信任这个密钥

gpg --edit-key YOURKEYFINGERPRINT

如果你导入了你的密钥,按一下 Tab 后应该就会出现了,或者可以用 gpg --list-keys 找到你的密钥,输入 pub 的第二行就好。之后键入 trust。因为是我自己生成的密钥,我就选了 I trust ultimately

二、注册个 Backblaze 的帐号

略……同时创建好一个 B2 的 bucket。

三、安装工具

首先要有 Python 环境,如果你是在 Debian/Ubuntu 上也直接可以通过 apt 安装 backblaze-b2,或者在其他设备可以通过 pip 来安装,具体可以参考官方文档

sudo apt install backblaze-b2 -y / pip3 install b2

安装往后把 backblaze-b2 或者 b2 路径添加到 PATH 里,一般已经自动添加好了。

之后授权 b2 绑定到自己帐号,具体可以看官方文档

b2 authorize-account [<applicationKeyId>] [<applicationKey>]

准备工作就完成了,接下来写个自动化脚本定时跑备份就好了。

四、备份

首先压缩成一个文件,因为只是作为备份而且 Backblaze 有10G 的免费空间,我们尽量把文件压缩到最小。另外可能账本中有些文件是不想包含在压缩包里的,比如编辑器的配置,或者 Git 的记录,可以把它们剔除掉。然后我们用我们的密钥加密这个压缩文件。之后上传到 Backblaze B2 上。

跑脚本前先定义几个变量:

  1. LEDGER_DIR 是存放我们账本的文件夹的上级目录,比如账本在 /home/user/Private/Ledger,那么这个参数就是 /home/user/Private
  2. LEDGER_NAME 即账本文件夹的名字,比如上面的例子就是 Ledger
  3. NOW 就是现在的时间,因为定时备份脚本是把历史都备份起来,所以通过时间命名文件可以知道该备份是何时生成的。可以通过 $($(which date) --iso-8601=seconds) 获得。
  4. GPG_PUB_KEYGPG 密钥的 Fingerprint,即 edit-key 时的那串字符。
  5. BACKBLAZE_BUCKET 是在 B2 上创建的 bucket 名字。
  6. BACKBLAZE_REMOTE_FILE_DIR 是在 bucket 里备份账本的文件夹的名字。

(我在上文或者下文用了很多 $(which xxx),这样可以获得 xxx 程序的绝对位置。因为不知道为什么在 crontab 上有时不这样写会有问题。)

然后跑下面这段脚本。

$(which tar) --exclude=".vscode" --exclude=".git" --create --directory $LEDGER_DIR $LEDGER_NAME | $(which gzip) --best | $(which gpg) --encrypt --recipient $GPG_PUB_KEY --output /tmp/$LEDGER_NAME.$NOW.tgz.gpg

exclude 很好理解,剔除掉部分文件,这里的 --create 即创建一个压缩文件,--directory 是我们先移动到存放我们账本的文件夹的上级目录,之后压缩我们的账本。如果不使用这个参数那么我们的压缩文件会把整个路径的文件夹都放进来,虽然不会把整个路径下所有的文件到包含进来但是就不太好看了。然后我们用 Gzip 进一步压缩文件到最小体积,再交由 GPG 加密,保存到 /tmp 文件夹下。最后就是上传到 Backblaze B2 上。

$(which b2) upload-file $BACKBLAZE_BUCKET /tmp/$LEDGER_NAME.$NOW.tgz.gpg $BACKBLAZE_REMOTE_FILE_DIR/$LEDGER_NAME.$NOW.tgz.gpg

这样就大功告成了。完整的脚本地址我已经存在 GitHub 上,chmod +x backup_ledger.sh 给予可执行权限后在 crontab 里设置定时任务就好了。比如每 3 个小时配分一次的话:

0 */3 * * * /path/to/backup_ledger.sh >/dev/null 2>&1

以上就是我的部分备份工作流。当然这样不止可以备份账本,还有其他重要的私密文件,比如录音录像这些也可以这样保存。这样也可以做到在保护隐私的同时保护数据安全。

(最后希望 Backblaze 不要被墙_(:3」∠)_

❌