Tag: Tech

  • 把日常阅读的网页,用 RSS 推荐给好友

    虽然大家写 blog 的频率都没那么勤了,但是,RSS 还是有其它可以玩的方式的! 很多人都有用各种 read it later、或者书签类工具,把有意思的网页保存下来。在这些工具里,可以通过某些手法,把一些想要分享的网页,生成 rss。其他好友订阅这个 rss 地址,就可以自动刷新,看到你推荐的文章啦! 下面介绍一些,常见的书签网站,生成 rss 的方式。但首先—— 我的 RSS 分享地址是: 有兴趣和我分享的,欢迎留言或私信交换!! Instapaper 免费版 感觉 Instapaper 生成 RSS 的功能是最好用的,可以把特定的文件夹设为公开,直接得到它的 rss,形如: Pocket 免费版 好像 Pocket 的免费用户,内容都只能是公开的(无语…),只要知道了用户名,就可以通过 RSS 查看全部的内容(所以生成的 rss 需要转录才安全)。而且不能自定义分类,只有默认的: 最后一条 …/read 会返回所有 Archived 了的文章,可以勉强用它作为分类的手段。 Readwise 这个只有收费版,我就不去试了。有它家的用户,可以帮忙把生成 rss 的方法分享一下? Wallabag 我在用 Wallabag,可以自建,也有收费的服务可用。生成的 rss 是全文输出,效果很好。在 Config – Feed 里,生成一个 token,然后点开任何一个 tag,点击列表上方的…

  • 在外置硬盘上,加密安装 ubuntu

    需求: ——这篇攻略和是否外置硬盘盒,没多大关系。普通内置硬盘也可以这样加密安装。 最新的 Ubuntu 22.04 之后的版本,在安装界面里自带了 LVM 全盘加密安装的选项。但是并不能满足第 3 条需求。所以还需要一些复杂的手动操作。 安装过程尽量围绕 ubuntu 的图形安装界面,对新人友好。参考并验证了这篇教程。但原文连同 /boot 引导分区也一起加密了,于是在配置上略显繁琐。我觉得加密 /boot 并不是很有必要,做了一些改动。最终的硬盘分区结构为(以 512GB 硬盘为例): 操作步骤: 下载 Ubuntu,制作 USB 安装盘(过程略)。——然后,强烈建议在整个安装过程之前,在电脑的 BIOS 里,把内置的其它硬盘暂时卸载。 插上移动硬盘和 USB 启动盘。从 U 盘启动电脑,选择 Try Ubuntu。最新的 Ubuntu 22.04 安装程序里,已经内置了所需的 cryptsetup 和 cryptsetup-initramfs 软件包。因此,整个安装过程中,应该不需要连接互联网。 首先,把硬盘预分区。分区软件有很多种,可以用原文的 sgdidk,也可以直接用图形界面下的 Disk 或者 Gparted。在硬盘上创建 GPT 分区表,然后分成: 这些分区都先不用格式化。记住第二个分区的名字,本文假定为 /dev/sda2。 分区成功后,关闭分区软件,打开 Terminal 命令界面,执行 root 权限 将系统分区加密。按提示输入密码,——这个密码,就是以后每次启动时,挂在硬盘用的密码。和安装…

  • Mastodon: 将媒体文件存放在本地(docker 版)

    本攻略适用于—— 这个搭配虽然不多见,但其实用起来满爽的。很多人用的 s3 服务都是在薅羊毛,而 mastodon 那个变态的,把别人家的媒体文件缓存到自家的架构,流量的吞吐其实很大的(开了 relay 就更夸张),薅羊毛时很容易就超出了。反而是 vps 本身的流量上限很高。对于个人建站而言,媒体文件总量通常 <50GB,某些 vps 自带 200GB 硬盘,足够用了。 缺点是,除了数据库定期备份外,也要考虑媒体文件的异地备份问题。但其实只需要备份存储本地附件的 media_attachments,而 cache 是不需要备份的,所以工作量也不大。 两年前我把媒体文件转移到本地时,参照了 antisocial science 的设置。但因为我用 docker,官方默认的设置,docker 内外权限不一致,无法将媒体文件写到本地。于是匆匆又在本地建了个 minio s3 来中转……这样其实很浪费资源了,minio 的开销也不小。所以最近趁着搬家,又试了一下,终于把 docker + 本地存储 跑通了。 1. 在 docker-compose.yml 里, web 和 sidekiq 容器中,已经预设了媒体文件的卷映射 这个不用动。——也可以改成其它的路径,但要和后面的设置一致(本文用相同的颜色标明)。 2. 修改 .env.production PAPERCLIP_ROOT_URL 是服务器的所有媒体文件链接的子文件夹名称,形如: 默认值是 /system;但是建议改成独特一些的名字,而且建议和 S3_BUCKET 一致。以后需要在本地存储和 s3 之间转换时,可以省一点心。(所以要独特一些,防止回头在 s3 上和别人撞名)…

  • 关于 RSS 订阅器,以及推荐自建 tt-rss

    RSS 订阅器,大致上分三种: 现有的网络服务,如当年的 Google Reader 单机版的订阅器 自建网络服务 从 Google Reader 停止服务,到现在快 10 年了。之后的所谓「老牌」订阅服务,如 feedly、inoreader,都限制了免费用户的订阅数量,不能超过 100 或 150 条。倒不是非要坚持用免费的,只是: 首先,这些服务并没有如当年大家期望的,在用户与用户之间,发展出推荐阅读之类的社区功能; 其次,如果有一天,它们也像 Google Reader 那样倒闭了,在这些订阅器里镜像的 blog 文章也全都消失,才是最大的损失。 单机版的订阅软件有很多,一些邮件客户端甚至手机浏览器,也有这方面功能。所以问题还是 抓取的文章能不能长久保存?哪怕重新装机,原来的文章也还在?有很多免安装的 RSS 订阅器,但其中大部分都是十几年前 blog 时代的作品,早已停止更新,对新的操作系统以及新的 rss atom 协议,支持都不好。Windows 下我在用 QuiteRSS,感觉不错。免安装,数据保存在 sqlite 文件里,似乎也有 Mac 版本。 以及,这类本地订阅器,有没有可能,通过网盘同步数据,从而实现多台机器或手机同时使用?我还没有见过这方面靠谱的方案。 自建 RSS 服务里,很多人推荐界面简洁的 Miniflux,我以前试过,感觉还行,但似乎有因为过于简化而不适的地方,忘了具体是什么了。/ 最终选择了 tt-rss (Tiny Tiny RSS),界面确实要比 Miniflux 臃肿一些,响应慢一些,但是它有一个非常亮眼的功能:你在 tt-rss 订阅器里,可以选择「发布」某些喜爱的文章,而这些发布出来的文章,是能够生成一个新的 RSS…

  • 三分钟

    我觉得,可能需要准备一份,在聊天时,让对方能够更加了解我的谈话方略了。很多次闲聊,话题都围绕在,以前做过的一些有趣的事情上,——那些事确实很有趣,让人忍不住想了解更多细节。但这个样子聊下去,最终往往让对方,对我这个人本身,匆匆打上一个模式化的 tag,譬如 :所以你一直没有稳定的生活? 呃,关于这个问题,我随手就可以写几千字。关于为什么要选择这样的生活,以及我并没有坚持选择这样的生活,只是在保留选择能力的同时,还没有去选择任何一种生活,所以其实是为什么别人在并没有选择的时候,就默认做了某种选择……这样的思路,我不觉得自己能在这个问题被提出后的短暂闲聊时光里,讲述清楚;也不觉得对方听了我的讲述,而总结出的答案,就是我认为的答案。 类似的问题还有很多:如何对社会问题保持敏感和激情同时让对方明白我并不极端、女性主义、消费主义与自由意志……这并不是类似「三分钟讲明白你的研究论文」的活动。——讲论文的时候,你对听众的理性、听取过程中的思维方式,是有预判的。而闲聊时并没有。——可能确实有,只是我还不知道,总之要研究一下,如何迅速把自己展示的更深入的技巧。 换个角度想:那些也想过这些问题的人,在茫茫人群中也会感到茫然,也会在闲聊中隐约留出接口,希望有人能够一起深入聊下去。所以我没讲清楚的时候,可能只是对方根本不想弄清楚?——这么想就是怠惰 借口了。所以还是要努力把聊天接口弄得漂亮些、更有效率些,尽量不要错过。

  • [php] 将多个 RSS 地址合并成一个

    弄了个 php 程序,可以把自己的(or 别人的)多个 blog 的 RSS 订阅地址,合并成一个,供人订阅。例如,现在本站的几个 blog 的统一订阅地址为: https://feed.fivest.one/ 程序基于 DigitalFreelancing 的代码,略作修改,调用了 SimplePie 处理 RSS 的项目库,为每个原始的 RSS 地址生成缓存,避免了频繁读取。我修改后的版本,可以从【这里】下载。 使用说明 配置支持 PHP 的网络服务器,过程略; 下载源文件后,解压到新的 RSS 地址相应的文件夹里; 编辑 index.php,修改如下部分: 根据你的网络服务器的权限配置方式,可能需要把 cache 文件夹设为群组或全部可写 也可以把 index.php 改名,或者复制到其它位置,分别配置,生成多个这样的聚合 RSS。注意要调整文件中的相对路径:

  • 箭术或禅心 – 1

    箭术或禅心 – 1、2、3…… 1920s,德国哲学博士赫立格尔(Eugen Herrigel)在日本讲课期间,学习弓道,后来把他的感悟写了一本小册子《箭术与禅心》1。多年之后,这本书,作为「一位西方哲学家的禅悟」,渐渐火了起来。 在书里,作者重点描述了「禅」在撒手放箭这一瞬间的体现:并不是拉弓的人主动地把手松开,而是在进入禅意之后,让箭自己射出。 我问师父:「如果我不去放箭,箭怎么会射出去呢?」:「是它射的。」「那一箭完全与你无关。」 在一个 现代射箭爱好者&器材党 的眼里,射箭的准确度,大概受这些因素影响: 器材质量:不要松动。 箭的质量(不要弯)和一致性:重量、均匀度、弹性(挠度 spine)…… 弓对箭的干扰:箭是否从弓的中心射出?箭羽会不会蹭到弓?解决方法: 中心箭窗 箭台(arrow rest)、箭侧垫(button) 瞄准的方法: 没有瞄准器时的替代参照物,或某些「直觉」瞄准法 使用各种瞄准器(sight) 复合弓使用窥孔(peep)更精确瞄准 每次拉弓的幅度,也就是弓的拉力,是否一致?解决方法: 更稳定的姿势 弓弦和拉弦的手靠在脸的固定部位, 信号片(clicker,更精确地提示箭头和弓身的相对位置) 复合弓(拉到固定位置就无法再拉) 手指对弦的干扰:撒放的瞬间弓弦蹭到手指。解决方法: 撒放姿势的改进 使用指板(finger tab) – 似乎这只是让手指不痛,而不是降低手指触弦干扰 复合弓使用撒放器(release),彻底避免手指和弦接触。 人在拉弓和瞄准时的手臂晃动解决方法: 更稳定的发力方式 稳定杆(stabilizer):力臂越长,晃动越小 复合弓(拉满弓时用力更少) 手感 – 主要是弓的设计和调校方面 弓的重心和质量分布 搭箭点上下两部分的力是否均衡,几根手指之间的受力分布 在追求准确性的现代射箭运动中,同样考虑到了,放箭一瞬间手指触弦造成的干扰。很多经典射箭教材中都提到了这一点,如何避免松手时肌肉僵硬,体会在若有若无之间撒放的感觉。——在上述的诸多因素中,手指对弓弦的干扰,只占很小的一部分;而且远不是最重要的那部分。而弓道,则在基本不触及其它因素的同时,把手指撒放的因素,放大到了超级重要的位置。 btw,弓道中也有很大一部分,是关于开弓的姿势,但似乎更集中于如何更平稳、有力地把弓拉开,而并没有在动作一致(以提高准确性)上,涉及太多。 另一方面,弓道强调手指撒放,并不是为了提高准确性。——事实上,相对于其它射箭运动,弓道已经把对准确性的要求,降到了最低点。在弓道低段位的审核中,只看射箭者的姿势和气质,完全不管箭有没有射中;高段位的审核中包括了对准确度的要求,然而,并不是要求射中多少环,而是……能射到靶子。 于是,手指撒放、乃至整个弓道本身,成为了一种媒介,让人通过它来感受「禅」。在这个过程中,感受「禅」,和技术提升,甚至是互斥的。《箭术与禅心》中,作者曾通过改进技术动作,来使自己达到和禅意类似的平滑撒放。师父发现后,立刻就翻脸了…… 但在对「禅」的描述中,仍然能看出结果导向的痕迹。在师父的描述中,尽管会经常说能否中靶不重要,要「无所求」;但对禅的境界的描述中,箭自己射出后,箭也会自己命中。——所以「禅」仍然是一种导致准确率的神秘技术? D 问我:那么,体育运动中的「技近乎道」,到底是说的什么呢? 我:呃……我觉得是,肌肉动作的协调性,超过了意识的控制能力和描述能力。就像乒乓球,初学者如果一直想着「入射角等于反射角」,再考虑重力、摩擦力,如何在空间中用二维平面去冲击一维矢量……肯定打的乱七八糟。而熟悉了之后,用什么角度击球是不需要思考的,击球者也无法把他的动作解释清楚。 而如果击球者,在达到肌肉自发动作之后,在回头来品味这个动作形成的过程,在自省中,重新构建无意识动作和意识本身的连接,这也就是一种「禅」了吧? 赫立格尔的这段经历,轴心国的味道十分浓郁。查了一下,果然作者在二战开始后不久,就成为纳粹党员,并且一直试图在学术领域,用禅来阐释纳粹思想2。在书里能看出这种苗头:弓道师父让徒弟进行的,很多不明就里的强硬单调指令,我们今天看来,是很典型的规训,当时却被描述为让徒弟自行开悟禅意的必要行为…… 以及,弓道在日本,直到今天,仍然是右翼的重灾区。整个弓道机构,基本是上层阶级垄断的沙龙,内部等级制度十分严厉。甚至,有学术认为,在赫立格尔的小册子之前,日本箭术和禅道之间,根本就没什么关系,一切都是轴心国商业互吹的结果……3 1. Herrigel,…

  • WordPress 使用 SQLite 数据库

    之前写了一半的,如何在轻量级个人 VPS 上搭建各种服务的帖子。一时懒得去把坑填完了。但前几天突然发现自己落入了思维误区:为了配合 Mastodon 或 Pleroma,总想着如何把 WordPress 从 MySQL 迁移到 PostgreSQL。——但是,其实完全可以用 SQLite 啊!对于偶尔才更新一篇的个人 blog 用户,把数据库放在一个 SQLite 文件里,不需要另外安装数据库服务,完全是可行的。 用 Docker 观察内存开销。对于新建的 wordpress 站点,wordpress 本身(包括 php-fpm、nginx)占用内存大约是 40-100M(使用缓存插件后会减少);MySQL 数据库占用内存 200M,随着渐渐使用,有着近千篇文章和评论的 blog 站点,MySQL 占用内存会达到 500M 甚至更多。 ——数据库的这部分内存,使用 SQLite 后,完全是可以省下的。 可以通过 SQLite Integration 插件,安装基于 SQLite 的 WordPress。 WordPress 官网的插件页面,因为作者失联而停更。但隐藏的插件下载链接,一直都还有效: UPDATE:上面这个原作者已经停更了的代码,只支持到 php 7.4,在 php 8 里已经失效了。大家可以继续用,但要注意 wordpress 的 php 环境版本。推荐使用 Github…

  • WordPress 的 ActivityPub 插件

    试用一下 WordPress 的 ActivityPub 插件(官网 / Github)。 主要功能,就是在 wordpress 上,建一个 Fediverse 账号,Mastodon / Pleroma / Misskey / Honk……的用户可以 follow 这个账号。新的 blog 文章发布时,这个账号会发一条嘟文,大家可以转发这条嘟文。followers 对这条嘟文的回复,会自动同步到 blog 文章的评论区。 就像我为这个 blog 建的 fedi 账号:@[email protected] 需要指出的是,并不存在 blog.fivest.one 这样一个 fediverse 实例。陌生人搜索这个账号,看不到任何历史嘟文;这个账号不能去 follow 别人,不能对别人说话,不能回复别人对自己嘟文的回复,也不能看到多少人转发点赞了自己的嘟文。——这些功能也许以后会有,但目前,这个插件所做的,只是在新 blog 发布的那一刻,向所有 follow 这个 id 的账号,push 一条嘟文。这条嘟文,在 blog 服务器上,并没有保存;而只存在于 follow 它的那些实例上,再被人转发到更多实例。 当 blog 的文章被删除时,这个插件也会通知所有的 followers,从他们的实例上删除对应的嘟文。但是就像我说过的,这个机制并不能把那些,被转发到其它实例的嘟文,也一起删除。所以,当你在 blog 按下发布按钮的一刹那,带着你所写的全部内容(或者摘要,可设置)的嘟文,就可能会永远飘在 fediverse…

  • 关于 fediverse 的删除机制

    在当前的很多 fediverse 服务(mastodon、pleroma…)里,当 A 站的用户 a 被另一个实例(譬如:B 站)的用户关注时,他所发的嘟文,会在 B 站的服务器上储存一个副本,B 站的用户,通过访问这个副本,来阅读这条嘟文。当原本的嘟文被删除时,A 站会通知 B 站,删除相应的副本。但这个时候,这条嘟文未必像人们期待的那样,从 fediverse 上彻底消失。 假设存在如下情况: A 站的 a 用户 B 站的 b 用户,b 在关注 a C 站的 c 用户,c 在关注 b,但 C 站没有人关注 a a 发了一条公开嘟文,此时 b 可以看到这条嘟文,而 c 是看不到的。 b 转发了 a 的这条嘟文,此时 c 可以看到这条嘟文了。C 站的所有人,在查询 a 的时候,也都可以看到 a 的这条嘟文。 如果这个时候,a 再把这条嘟文删除,那么…

  • Mastodon 的「去中心化」所导致的……?

    论文研究表明,在 Mastodon 的去中心化网络里,用户之间的关联状况,其实比 twitter 更加高度集中。——但这种现象可能仅仅是因为 Mastodon 的机制设计问题,而并不应该归咎于「去中心化」。

  • 个人 VPS 上的服务安装(未完稿)

    这篇文章要讨论的是,如何在一台轻量级的 VPS 服务器上,基于自己的域名,同时安装如今各种流行,去中心化的网络服务: 个人博客:Wordpress ActivityPub 社交网络:Pleroma 或 Mastodon Matrix 聊天服务器:Synapse 或 Dendrite 个人网盘和在线办公套件:Nextcloud 然而,原本我一直在用 Linode 每月 5 美元,1C1G(1个CPU,1G内存)的服务器,打算安装的服务,也是基于这个级别的配置。然而弄到一半,突然被乔乔推荐了 Contabo 每月 5 欧元(要一次缴一年,不然有额外费用),4C8G 的服务器。虽然实际速度和网速,并不比 Linode 或 Vultr 好多少,但 8G 内存,选择各种服务的余地可就大多了。所以我整理出来的 1C1G 方案,自己并没有在用……原因我后面会说。 之前也犹豫,既然同样价钱都能 4C8G 了,那为啥还要写 1C1G 的方案?很快大家的配置也都会变高级了吧?但想想也未必,还是整理一下吧。 这篇文章讨论如何在轻量级服务器里塞进各种服务。——前提是这台服务器,假定只会有你一个人在用,最多加上你的闺蜜和男朋友。我并不知道几十个用户的 Mastodon 会有怎样的开销,至少在 1C1G 上这样做非常不靠谱。我所面向的,只是两三个好友自用的私人 VPS 而已。 这篇文章不是写给小白用户的。整个系统还是很复杂的。指望有一个教程,或者一个 docker-compose,能够让完全不懂 Linux 的用户,通过逐行复制命令,就能搞定所有的安装,目前还不现实。你至少要有在完全理解的基础上,用 LNMP 搭出 Wordpress 的能力。所以我也没必要把用过的每一条命令,都放在这篇文章里。——对于每一项服务,我会尽量给出相关靠谱攻略的链接,并且讨论一下里面的坑,和我个人所作的选择。 所以,其实这篇文章本质上就一句话: 是的,这些服务都可以装到一台机器上,不冲突。我弄过了,没问题,你们放心慢慢弄吧。 安装环境:一台 1C1G(或更好的) VPS 服务器,一个你自己的域名。