中文圈程序员的碎碎念
509 subscribers
3.52K photos
21 videos
129 files
28.7K links
嘿!你也来看码农又在写啥BUG了吗
Download Telegram
20251216

今日想分享的书中内容,开始有点相信正念是可以改变大脑的。

今天才打开雨白之前买的后摇黑胶 boxset 仔细看,制作的相当精美和用心,居然还有乐队成员们的签名。

专辑封面做成这样的周边也不错。

我原来的小办公室空着,阳光特别好,吃完午饭就把小沙发挪过来坐着晒太阳。

刚想好一个新的需求,交给 Codex,准备自己再做点别的事情。突然想起,忘记在手表上用 OffScreen 开始专注了,当我正要去操作的时候,目光瞟过电脑屏幕,发现 Codex 已经写完了 😂。今天又给 SnapVinyl 的 All Versions 列表增加了过滤和排序,特别是 Label 过滤,是我特别需要的功能,因为我买的基本就是几个固定厂牌的复刻,这样方便快速精准定位到某一版本。不过今天遇到了解决不了的 bug,请日杰帮我修了。

今天是贝多芬生日,听完瓦尔特指挥的贝多芬第六交响曲刷小红书发现的。

做了好久好久好久的谜底黑胶新版终于在我今天的催促下半夜上线了,就刚刚。这个版本我们重新设计了分享功能,音乐的分享在我看来非常重要,我几乎每天都会分享我听的唱片,我也会通过别人的分享挖掘新的宝藏歌曲。新版除了增加更好看的卡片模版,我们还支持了导出视频,黑胶终于可以转起来了。此刻正在听。

via 61’s life
OPPO 快游戏在浏览器复现运行(四)之游戏入口加载

一直以来,`web.sdk.js`都是通过以下方式加载快游戏的。
```html

```
在大部分的游戏中也是没有问题的,由于`web.sdk.js`中存在大量的异步加载逻辑,因此将`main.js`定义为模块,并在代码最前面补充加载等待是对游戏原代码侵入较小的一种方案,而且恰恰是模块,因此顶级 await 也就非常顺理成章了。
```js
await window.qg.ready();
```

直到遇到下面某款游戏的入口(代码片段)

```js
await window.qg.ready();

window['qg'].setIsUnityGame(true);
const xgame = qg;
require("ral.js");
```

初步一看,看似没啥毛病对吧,非常简单的一个代码片段,但问题就出在了那行平平无奇的`const xgame = qg;`,由于`main.js`是模块,自带作用域隔离,因此此时的作用域是模块内部作用域,并非全局作用域,然后加载`ral.js`时就出问题了,`ral.js`是访问不到`xgame`的,会直接报错导致游戏加载中断。

为了解决这个问题,那么就不能将游戏入口定义为模块,不定义为模块,就没法在顶级 await,而且还得同时兼顾执行上下文的问题,在众多动态执行JS代码的方案中,那么很明显就只有动态创建script标签加载是最合适的了。

那么没办法,就只能在`web.sdk.js`中初始化自身后动态加载`main.js`了,由于快游戏的入口是固定的,因此直接硬编码加载也是没得问题的,这里处理后,`main.js`也就不需要`await window.qg.ready();`了,游戏入口代码零侵入。
```
window.qg._ready = true;

await requireAsync("main.js");
```

via LiesAuer's Blog
macos Shadowrocket与本地DNS冲突

开着 Shadowrocket,本地 dns 全部失效,都走了代理,无法访问,关闭 Shadowrocket 恢复正常。

解决办法如下:

点击 ` 配置 ` 按钮,选择下方本地配置右边的感叹号,并进入通用页面

接着找到跳过代理的列表,在下方添加你要跳过的本地域名,也可以使用通配符

保存后,测试通过

via clark
父范学堂 2549 聊崩了

在育儿方面,本周比较平静,没有什么大事儿发生。 周末带他们去了Lynnwood Recreation Center 戏水。我和妻子决定让他们自己去玩儿,我们去走走,说说话,聊聊天。 聊崩了。

via Conge
白嫖党福利!免费 .frii.site 子域名推荐,可用于学习测试

今天给童鞋们再推荐一个免费域名!可用于测试学习使用!该子域名不支持托管到 CloudFlare。但是可托管到he.net!frii.site 将且永远会为所有人免费使用。我们的主要目标是为无法购买自己域名的用户提供免费域名。当然,即使您拥有域名,也欢迎使用我们的服务!更多内容:免费域名 / 便宜域名

注册地址

https://canary.frii.site/login?ref=ruyo

含AFF,介意移除 ref=ruyo 访问即可

支持域名

*.frii.site

解析方式

A / AAAA / CNAME / TXT / NS

简要步骤

1,访问官网,登陆账户,支持Google一键授权登陆

2,选择自己心意的域名点击注册

3,域名注册上限?官方说是 5个,但貌似超过5个还能注册。

演示域名

http://ruyo.frii.site

最后总结

免费域名千万不要用于线上或者重要服务。随时可能翻车!

为什么选择免费域名?之前博主说过,移步到下文文末:速度啦!免费获取2年子域名支持托管CloudFlare

via 如有乐享 (author: 我是小马甲~)
Free for Dev Updates on Dec 15, 2025

APIs, Data, and ML

Earnings Feed - Real-time SEC filings, insider trades, and institutional holdings API. Free tier includes 15 requests per minute.

via Track Free for Dev Updates Daily
Let’s Encrypt 证书即将变更

2027年,我们将把默认证书有效期降至64天,2028年进一步缩短至45天。完整时间表及详情请参阅我们关于缩短证书有效期至45天的公告

via TecHug (author: techug)
那些「酷,但用不着」的 self-hosted 应用

Self-host 即「自部署」,指的是在自己的服务器上部署软件程序,从而替代 SaaS 应用。

前几年我有一种 self-hosted 狂热。没事就刷刷 awesome-selfhosted,总想让服务器承载更多好玩的功能。得益于 Docker 和 Caddy,只需要写一个 compose.yml,一个新的应用就能立即上线并通过 skywt.cn 的子域名访问,部署体验方便快捷。

这些软件的开源的精神非常宝贵,也是这个世界所需要的。然而不得不承认,大多数开源产品的软件更注重功能而非设计,不少设计非常缺乏品味,这并不是我想要的。加上由于:1)自从工作以来,属于自己的折腾时间大大减少了,我不希望再花太多精力在这些服务的维护上;2)我已被绑定在 Apple 生态中,结合 iCloud 有很多产品都能找到 Apple 体系的替代品。

因此,现在我身上的这种 self-hosted 狂热有些退烧了。

最近,正值网站改造之际,我将服务器上不常用的 self-hosted 软件都下线了,只保留我真正会用到的几个。下线的这些所有软件,都是我以前感兴趣过、折腾过、兴奋过的。这篇文章将它们记录下来,以表纪念。

酷,但用不着

这些是我已经下线的应用。以前部署过,或许用过一段时间,但后来因为各种原因已经用不着了。

Supabase self-hosted:Supabase 的自部署版,全面的后端解决方案。**不要自部署,会变得不幸(虽然看起来很酷)。**我们使用 Supabase 无非是想要将后端复杂度外包出去,但自己部署则完全且彻底地违背了这一初衷。光是示例的 compose.yml 文件长达五百余行,包含这些组件:studio、kong、gotrue、postgrest、realtime、storage-api、darthsim/imgproxy、postgres-meta、edge-runtime、logflare、postgres、timberio/vector、supavisor、minio。还是用 Supabase 在线服务吧。
CloudBeaver / phpMyAdmin:管数据库用的 WebUI,不用写 SQL 就能增删改查。有段时间我甚至拿 CloudBeaver 当我的网站后台,直接在这儿发博客。酷,但现在我的数据库都上了 Supabase,这些都不需要了。
Authelia / Keycloak:自建 SSO,给所有 self-hosted 应用一个统一的用户系统。酷,但我不再需要单独自建 SSO 了。Supabase 提供作为 OAuth Server 的功能,这样账户体系可以直接共用我的 skywt.net。这更酷了!
FreshRSS:简洁好用的 RSS 阅读器。酷,但我现在使用开源 RSS 客户端 NetNewsWire,足够简洁,通过 iCloud 同步是更方便的选择,不再需要在 Web 里看 RSS 了。
VaultWarden:BitWarden 的开源服务端。酷,但我已经完全使用 Apple Passwords 代替将近一年,没有发现任何场景下的问题。
NextCloud:历史悠久、功能强大的网盘系统,应用生态异常强大,足够折腾很久。酷,但基于 PHP 的古老技术栈让使用体验一言难尽。大多数功能都属于「看起来很酷,但实际上你不会用」的(真的有人会在 NextCloud 这种东西里管理菜单食谱购物清单吗?)。或许在团队协作的场景中会很有用,但对个人而言,没必要。
Cloudreve:强大的云盘。酷,但我有 iCloud了。
Memos:最开始是 flomo 浮墨笔记的开源替代品。酷,但我有什么想法都发推特了,和这个形式也很类似。另外吐槽一下,这个软件的产品设计改来改去的,每过几个版本 UI 就大改一次,真的有点难适应。
Gitea:类似 GitLab 的平台。酷,但目前想不到将任何一个项目传到自己的平台而非 GitHub 的理由。
Snapdrop:传文件工具。酷,但有太多替代品了。Apple 生态内 AirDrop 体验也比这个好太多了。
Code-server:网页里的 VSCode。酷,但我究竟在什么情况下会放着本地的 IDE 不用而在浏览器里受罪呢?
Calibre-web:给 Calibre 里的电子书一个 web 页面。酷,但如果我要看我有哪些书,打开自己本地的 Calibre 看起来更方便……
Overleaf:强大的 all-in-one 在线 LaTeX 编辑器。酷,但只有写非常正式的论文用得着,且自己部署占用资源太大了,使用体验还不如用官方的在线服务 overleaf.com。
Outline:支持团队协同编辑的知识库。酷,UI 好看,协同体验很不错(有点类似飞书文档),但部署非常麻烦,个人使用真的没必要。
WeWeRSS:将微信公众号转为 RSS feed。利用的是(逆向得到的)微信阅读的接口。酷,但账号失效太频繁,我不得不隔三差五就去重新扫码认证账号,维护成本太高。万恶的微信,

酷,且用得着

我的服务器上依然有一些我经常会用的 self-hosted 应用。这些应用一般必须依赖服务器,找不到非自部署的替代品,因此我依然保留。

RSSHub:将任何网站转为 RSS feed。公共实例可能速度慢、不稳定,因此选择自部署。
Bark:利用 APNs 给 iOS 推送通知。很好用。
Headscale:开源 Tailscale 服务端,内置 DERP Server,非常好用。由于众所周知的原因,要想使用 Tailscale 必须自己部署节点。
Matomo:我体验到的最为强大的网站监控工具。试用过 Plausible、Umami,功能都不如 Matomo 强大。(不过 Matomo 使用体验上比较一般)
ArchiveBox:将网页存档下来。在这个互联网快速崩塌的时代尤其重要。
MinIO:兼容 S3 的对象存储。部署这个是为了做国内的图床镜像。虽然我主要使用 Cloudflare R2 作为图床,但由于众所周知的原因,国内访问速度似乎被刻意劣化了(实测下载 3mb 左右的图片需要二十多秒)。因此不得不在境内网络也建镜像。然而各大老牌云厂 S3 都不便宜,不如自己服务器上建一个,性价比最高。
Caddy:能够自动申请 TLS 证书的 WebServer。配置简洁方便,一行配置即可反向代理启动一个网站。对个人而言,比 Nginx 好用太多了。特别是结合 caddy-docker-proxy,连配置 caddy 的工作都只需要在对应服务的 compose.yml 中完成。Self-hosted 玩家必备。

自从工作后,属于自己的时间更加宝贵了,不像曾经能够花一下午的时间折腾某个细微的问题,这才更加理解诸如 Serverless 这种「将复杂度外包出去」服务的价值。现在我的数据库放在 Supabase,文件存在 Cloudflare R2,前端(海外)部署在 Vercel。不用花太多精力维护,能够信任它们的稳定性,我们能将精力花在更重要的地方。

via SkyWT (author: me@skywt.net)
D-Bus 是 Linux 桌面的耻辱

相较于已有四十载历史的 X Window 系统,这款仅诞生二十年的软件竟同样糟糕得令人震惊。

via TecHug (author: techug)
与子弹笔记的“重逢”:原来它的创始人在这里

大约四五年前,我在豆瓣上翻到一本浅灰色封面的书——日本作家杉田尚的《子彈筆記術:用最簡單的方式,搞定所有事》,

via 非学·派' (author: 老派)
人工智能学习记录:流派、发展与应用挑战

上午单位组织了名为《人工智能的发展、现状与未来》的培训,主讲人是清华大学教授张钹教授。我认真听了张教授讲课,并

via 非学·派' (author: 老派)
任正非1.4万字谈话记录 强烈推荐通读

我觉得很多方面还是比较颠覆的,至少我之前没有想过这么广,这么深。 2025 年 11 月任正非与 ICPC 全

via 非学·派' (author: 老派)