Logo

site iconVincent Yang

DeepLX作者。2000年,天秤座,美国计算机科学硕士。篮球爱好者,金州勇士队粉丝,喜欢旅行,尤其是海边,Golang编程。
请复制 RSS 到你的阅读器,或快速订阅到 :

Inoreader Feedly Follow Feedbin Local Reader

Vincent Yang RSS 预览

WeChat multi-opening on iOS

2025-06-12 12:27:11

在过去写过一篇 「iOS App Self-Signing and Multi-Opening」,在 2025 年的今天,有必要更新一下, 尤其是针对 微信 的多开。现在完全可以支持无后台推送,这是相比过去最大的改进。

关于签名的部分我在这里不会重复赘述,因为之前的文章已经写的非常清楚了。如果你不知道如何签名可以参考之前的文章。我最推荐的签名 App 仍然会是 Esign,它简洁易用无广告完全免费。

当然前段时间 Esign 已经关闭了他们官方签名的服务器,不过没有关系,你完全可以使用我自己写的在线签名服务。

https://sign.missuo.me

你可以使用这个服务来签名 Esign v5.0.2,未签名的 IPA 的下载链接为:

https://github.com/qbap/ONEJailbreak-IPAs/raw/refs/heads/main/esign_5.0.2_unsigned.ipa

WeChat

无后台推送

如果你想要无后台推送,过去只有官替(替换商店版本),不修改 Bundle ID 才能做到。现在不同的是多开也完全可以做到。你只需要把 Bundle ID 改为以下几个:

com.tencent.qy.xin
com.tencent.wx
com.tencent.mm.xin

其中 com.tencent.mm.xin 有些特殊,你必须要使用 Development 证书,而不能够使用 Distribution 证书。我一般只使用 com.tencent.qy.xin

请注意,请必须在 Apple Developer 的 Identifiers 中创建一个不是 wildcard 的 Bundle ID,并且开启以下 Capabilities:

App Groups
Communication Notifications
Extended Virtual Addressing
HealthKit
HealthKit Estimate Recalibration
iCloud
In-App Purchase
Increased Debugging Memory Limit
Increased Memory Limit
Push Notifications

App Groups 至少选择一个。有些 Capabilities 是为了启用消息推送带头像的。我这里就不展开细说了。

为了方便你直接使用,我已经打包好了一个 IPA 文件,你可以从这里下载:

点我下载

你在签名的时候需要注意的是,不要勾选 移除所有插件,不要勾选 移除 mobileprovision。另外,你必须将 Bundle ID 修改为 com.tencent.qy.xin。有的朋友可能会好奇,现在最新的 WeChat Beta 已经是 8.0.61,而正式版也已经来到了 8.0.60,为什么还在坚持使用 8.0.57 呢?不是我不想更新,而是因为大于 8.0.57 的版本模拟 iPad 登录的 UI 会存在问题,如果你只使用 iPhone 模式当然不受影响,但是我日常模拟 iPad 模式,为了完美的体验,我只能使用 8.0.57。

效果

如果权限正常,你看到的应该是这样的:

20250612uIIZrH

如果一切顺利,你收到的消息推送应该是这样的:

20250612tyY7ck

I applied for Real ID

2025-05-10 21:56:40

2023 年刚来美国的时候,申请了 State ID,这样就不需要护照就可以坐飞机了,包括在美国的几乎 99% 需要出示身份证件的场合都可以使用。比较害怕护照随身携带丢失,所以我一般情况下只会随身携带 State ID。后来因为想拿 Driver’s License,还参加了 Pennsylvania 的笔试拿到了 Permit。但是后来放弃了路考,原因是路考需要自己准备车,按照官方的说法,从租车公司租的车应该还不符合要求。再加上 PA 的规定,DL/State ID 的有效期严格与身份挂钩,最长只能能到 I-20 到期后两个月整。

2024 年得知,原来在 New Jersey 可以直接用中国驾照换取 NJ DL,并且更吸引人的是 NJ DL 并不与身份挂钩,默认给到四年后的生日。经过一般研究,我成功在 2025 年花了一些时间去 NJ 办理了 NJ DL。感兴趣的可以参考 这篇文章。其实有很多小坑,比如同样的材料并不是所有的 MVC 都能成功 waive 路考的。

目前遇到的问题是,在 2025 年 5 月 7 日,Real ID 法案真的在美国生效了。你要知道这个法案从 2005 年就开始提出了,在疫情那会本来要开始执行了,结果又推迟到了 2025 年。本来以为这个法案应该没办法执行,原因是所有的美国居民都需要重新申请身份证件,这对任何人来说都是很大的一笔成本。

Real ID 法案生效之后,也就是我无法使用不是 Real ID 的身份证件坐飞机了。当然截止到我写这篇文章的时候,我不太确定 TSA 是否已经严格开始执行。因为才刚开始三天,我猜可能开始会放水,毕竟大部分人都没有 Real ID。

申请 Real ID

PA 的 PennDOT 是不需要预约的,直接 walk in 即可办理。别的州可以自行打电话询问。

由于 Real ID 相当严格,需要准备的材料也很多。

  • 两份地址证明(我用了水电费账单和银行账单)
  • 护照 + 美签
  • 有效的 I-20
  • SSN
  • I-94

20250510NXY9af

20250510Cb71Yi

实际测试下来,如果你的 I-20 是带 OPT 的版本,会给到你 OPT 到期的那一天。如果你的 I-20 没有 OPT 的话,会给到你 I-20 到期后的 60 天,也就是会覆盖 Grace Period。

申请过程其实非常顺利,也没什么需要问你的,就是填表签字拍照。最后就是等 15 天 Real ID 寄到你家。

值得吐槽的一点是,这个 Real ID 非常贵,Real ID 是 $30,再加上 Renew State ID 的费用是 $42.5,总共是 $72.5。

目前持有的证件

  • PA State ID (Real ID):用于坐飞机和日常带出门
  • NJ Driver’s License (with IDP):用于在美国和全世界开车

为什么不把 NJ DL 换成 PA DL (Real ID)?

因为这样会大大缩短我的 DL 的有效期。

不与身份挂钩的 DL

顾名思义,DL 的有效期与你的身份无关。众生平等,任何人都会有相同的有效期,例如 NJ 即使你是没有身份的非法移民,DL 的有效期也是到四年后的生日。当然 Real ID 的法案比较严格,如果你希望获得更长的有效期,不建议申请 Real ID。

  • New York (4 years)
  • Maryland (8 years)
  • New Jersey (4 years)
  • Washington (6 years)

以上信息来自 usdrive.org

Know ShadowTLS too late

2025-05-05 22:10:28

正如标题写的那样,ShadowTLS 相见恨晚

偶然在 Mihomo 的 Issue 里面看到作者说 ShadowTLS 还很稳,所以没必要支持 XHTTP。看了一下 ShadowTLS 的作者竟然是我关注了很久的大佬 ihc

看了一下 GitHub 的文档,发现部署 ShadowTLS 其实非常简单。我尝试在日本 IIJ 的服务器上部署了一下,发现速度很不错。并且 Surge 和 Shadowrocket 都支持 ShadowTLS。之前一直在用 Snell,但是苦于 Snell 必须要依赖 Surge,很难分享给没有 Surge 的朋友使用。ShadowTLS 刚好解决了这个问题。

由于 老刘没有提供 Snell Server 的 Docker Image,我在 geekdada/snell-server-docker 的基础上改进了一下,支持了 Github Actions 的自动构建,并且支持了更多的环境变量。

如何部署

本文只介绍如何使用 Docker Compose 部署 ShadowTLS + Shadowsocks 和 ShadowTLS + Snell。

https://github.com/missuo/snell-server-docker

ShadowTLS + Shadowsocks

# Create directory and navigate to it
mkdir shadowtls-shadowsocks
cd shadowtls-shadowsocks

# Download compose file
wget -O compose.yaml https://raw.githubusercontent.com/missuo/snell-server-docker/refs/heads/master/compose-shadowsocks.yaml

# Generate random password for enhanced security
openssl rand -base64 32

# Edit the compose file with your configuration
nano compose.yaml

# Start the containers
docker compose up -d

# Check logs
docker compose logs

ShadowTLS + Snell

# Create directory and navigate to it
mkdir shadowtls-shadowsocks
cd shadowtls-shadowsocks

# Download compose file
wget -O compose.yaml https://raw.githubusercontent.com/missuo/snell-server-docker/refs/heads/master/compose-shadowsocks.yaml

# Generate random password for enhanced security
openssl rand -base64 32

# Edit the compose file with your configuration
nano compose.yaml

# Start the containers
docker compose up -d

# Check logs
docker compose logs

其中我提供的 compose 文件使用的是 ShadowTLS V3 (Strict Mode)。

PostgreSQL Master-Slave Synchronization

2025-05-04 13:43:07

本来一直在用 Supabase,但是苦于 Free Plan 只能创建两个 Database,所以不得不寻找其他方案。

最初的想法是,在我美国的不同地区的 Servers 上部署 PG Instance,并且实现 HA (High Availability) 和 Replication。但是我发现如果要实现 HA,至少需要三个 Servers,而且需要保证三个 Servers 之间的优秀的网络。我又没有那么多 Servers,所以最后放弃了 HA。仅保留了主从 Replication,也就是说只要我在 Master 上创建了 Database,那么从数据库也会自动创建一个相同的 Database,并且自动同步数据。

我找到了一个相对来说比较简单的方案,就是使用 bitnami/postgresql 这个 Docker Image。

部署

Master Instance

services:
  postgres-primary:
    image: bitnami/postgresql:latest
    env_file:
      - .env
    restart: always
    volumes:
      - ./data/primary:/bitnami/postgresql
    ports:
      - "5432:5432"
# .env
POSTGRESQL_REPLICATION_MODE=master
POSTGRESQL_REPLICATION_USER=replicator
POSTGRESQL_REPLICATION_PASSWORD=password_hard_to_guess
POSTGRESQL_USERNAME=postgres
POSTGRESQL_PASSWORD=password_hard_to_guess
POSTGRESQL_DATABASE=mydb

Slave Instance

services:
  postgres-replica:
    image: bitnami/postgresql:latest
    env_file:
      - .env
    restart: always
    volumes:
      - ./data/replica:/bitnami/postgresql
    ports:
      - "5433:5432"
POSTGRESQL_REPLICATION_MODE=slave
POSTGRESQL_REPLICATION_USER=replicator
POSTGRESQL_REPLICATION_PASSWORD=password_hard_to_guess
POSTGRESQL_MASTER_HOST=master_instance_public_ip
POSTGRESQL_MASTER_PORT_NUMBER=5432
POSTGRESQL_USERNAME=postgres
POSTGRESQL_PASSWORD=password_hard_to_guess
POSTGRESQL_DATABASE=mydb

其中 Slave Instance 的 Port 其实可以不用映射到公网,因为 Slave 只负责同步数据,不负责对外提供服务。当然,我暴露 5433 是为了连接 Slave Instance 测试是否能实现自动同步。

我的 Master Instance 部署在 Los Angeles, CA,然而 Slave Instance 部署在 Pittsburgh, PA 家里的 PVE 的 Debian VM 上,实际测试下来效果非常好,能否实现几乎无延迟的同步。

优化

  • 使用 TLS 加密所有 Postgres 连接。
  • 计划实现真正的高可用性 (例如 Patroni 或 pg_auto_failover) 。

Proxmox VE smooth upgrade

2025-04-11 01:38:10

Recently, PVE released version 8.4.0, while I am still using 8.3.0 and plan to upgrade to the latest version.

  1. Open the PVE management backend, select pve, and click Shell. This will open the command line for PVE.

  2. By default, if there is no enterprise subscription, updates cannot be checked, so you need to add a no-subscription source.list.

nano /etc/apt/sources.list.d/pve-no-subscription.list
# Enter the following line
deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription
  1. Update the PVE source and upgrade the PVE.
apt update
apt list --upgradable
apt dist-upgrade
reboot
  1. After the upgrade is complete, check the PVE version.
pveversion -v