奇技淫巧:在 Cloudflare 边缘网络部署你的 Bitwarden

Intro

Demo

项目:qaz741wsd856/warden-worker

!> 此项目不保证对 Bitwarden 所有功能的完整实现,也不保证安全性,图一乐就是!

部署

设置 Github 项目

fork 前言中的仓库,并在 settings - Secrets and variables - Actions 中设置好 Repository secrets

Name Secret
CLOUDFLARE_ACCOUNT_ID 你的 Cloudflare 账号 id
CLOUDFLARE_API_TOKEN API 密匙
D1_DATABASE_ID D1 数据库的 id

其中,API Token 在这里创建,在模板”编辑 Worker“的基础上,再授予编辑 D1 和 Worker KV 的权限即可。

D1_DATABASE_ID 需要创建一个 D1 数据库,并复制它的 id。

最后,运行 Build Action 即可自动构建。

设置 Worker

在 Cloudflare 控制台,找到自动生成的 warden-worker,配置以下密钥:

Name Secret
ALLOWED_EMAILS 允许注册的邮箱,半角逗号分隔
JWT_SECRET 32 位以上随机字符串
JWT_REFRESH_SECRET 32 位以上随机字符串

其他环境变量参见项目内 document。

最后,添加路由即可。

如何在海鲜市场买到正品英睿达笔记本内存

笔者今天为了给笔记本更换内存条,逛了一下午海鲜市场,见到了无数假货,遂决定写此文。

引入

先来看英睿达的笔记本内存长啥样:

英睿达的笔记本内存

其中,左侧二维码下方应该是六位数字,为 Material number,右侧二维码下方为八位 16 进制字符串,左侧四位数字为生产时间,中间会有 Product of xxx 的字样,代表生产地。

在第二行则是 Part number.

下面介绍几种防伪方法,只有所有方法检验结果都为真才可信,任一方法检验其为假则为假条。

方法一

英睿达官网通过 Material number 查询 Part number

打开官网后,选择地区(美国、中国都可以),产品类别选择 DRAM。输入 Material number 后查询,并比对 Part number 是否与内存条上的一致(只需要比对小数点前的即可)。

方法二

扫描标签上左右两二维码,左侧二维码扫描结果应为 Part number,且与标签和官网查询记录一致。

右侧二维码扫描出来结果应为 S802CXXYYYY+二维码下方八位16进制数字,其中 XX 代表生产地代号(中国为 14,马来西亚为 1A,其余暂时未知),YYYY代表生产时间(应与二维码左侧生产时间一致,且比颗粒生产时间晚)。

方法三

首先查看 Part number 小数点后几位。通常为 XxFY 格式。其中,X 为颗粒供应商编号(M/C 代表镁光颗粒,K 代表三星颗粒,有时会没有这一位);x 为颗粒数(例:8 即代表内存由八个颗粒组成);Y 代表颗粒版本(应与颗粒上的信息一致,后文会提到)。

该方法不一定 100% 准确,因为正版内存在这里有时会出现明显不合理的信息

方法四

观察颗粒。

正品颗粒上的二维码应为独特的,即你无法在一根内存上找到任何两个二维码完全相同的颗粒。

颗粒丝印第一行的前两位代表生产日期。第一位应为数字,代表生产年份的最后一位;第二位为字母,代表第 x 周生产(例:U 在字母表中排第 21 位,则其代表该颗粒在第 21*2=42 周生产)。这里计算出的生产日期应该早于内存标签上的日期,但相差一般不会超过一年

颗粒丝印第一行的第三位代表颗粒版本,在理论上应与标签上 Part number 的信息一致

FBGA & part decoder 上查询颗粒丝印第二行的信息,并核实其与丝印上其他信息是否一致。

封装系统过程中完美删除 Edge 浏览器的方法

今天研究了一天,找到了一个完美地在封装系统过程中移除 Edge 浏览器的方法。

需要的工具:

  • install_wim_tweak.exe
  • MSMG Toolkit (可选)

直接教学:

先用 MSMG Toolkit 挂载 wim 镜像(如果你不喜欢这个可以使用别的工具挂载)。挂载后打开提升权限了的 cmd

1
install_wim_tweak.exe /c Microsoft-Windows-Internet-Browser-Package /r

然后输入你的挂载路径,等待脚本运行完毕后,使用 MSMG Toolkit 的移除功能移除 Edge 即可(新版和旧版都要移除)。

如果你不喜欢 MSMG Toolkit ,这里提供另一个方案:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
@echo off
set "Mount=D:\\Mount"

call :WORK 2>nul
pause
exit /b

:WORK
if not exist "%Mount%\\Windows\\explorer.exe" exit /b
reg query "HKU\\S-1-5-19" >nul 2>nul || exit /b
set "E1=x86\_microsoft-windows-edgechromium\_31bf3856ad364e35\_10.0.19041.3636\_none\_181897eb58d04a07"
set "E2=x86\_microsoft-windows-edgechromium\_31bf3856ad364e35\_none\_83204c2f0ca4ce9b"
if exist "%Mount%\\Windows\\SysWOW64" (
set "E1=amd64\_microsoft-windows-edgechromium\_31bf3856ad364e35\_10.0.19041.3636\_none\_7437336f112dbb3d"
set "E2=amd64\_microsoft-windows-edgechromium\_31bf3856ad364e35\_none\_df3ee7b2c5023fd1"
)
set "F1=%Mount%\\Windows\\WinSxS\\%E1%"
set "F2=%Mount%\\Windows\\WinSxS\\Manifests\\%E1%.manifest"
if exist "%Mount%\\Program Files (x86)\\Microsoft\\Edge\*" rd /s /q "%Mount%\\Program Files (x86)\\Microsoft"
if exist "%Mount%\\Program Files\\Microsoft\\Edge\*" rd /s /q "%Mount%\\Program Files\\Microsoft"
takeown /F "%F1%" && cacls "%F1%" /E /G %USERNAME%:F && rd /s /q "%F1%"
takeown /F "%F2%" && cacls "%F2%" /E /G %USERNAME%:F && del /f /q "%F2%"
reg load HKLM\\TK\_COMPONENTS "%Mount%\\Windows\\System32\\config\\COMPONENTS"
reg load HKLM\\TK\_SOFTWARE "%Mount%\\Windows\\System32\\config\\SOFTWARE"
reg load HKLM\\TK\_SYSTEM "%Mount%\\Windows\\System32\\config\\SYSTEM"
reg delete "HKLM\\TK\_COMPONENTS\\DerivedData\\Components\\%E1%" /f
reg delete "HKLM\\TK\_SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\SideBySide\\Winners\\%E2%" /f
reg delete "HKLM\\TK\_SOFTWARE\\Microsoft\\Active Setup\\Installed Components\\{9459C573-B17A-45AE-9F64-1857B5D58CEE}" /f
reg delete "HKLM\\TK\_SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options\\MicrosoftEdgeUpdate.exe" /f
reg delete "HKLM\\TK\_SYSTEM\\ControlSet001\\Services\\edgeupdate" /f
reg delete "HKLM\\TK\_SYSTEM\\ControlSet001\\Services\\edgeupdatem" /f
if exist "%Mount%\\Windows\\SysWOW64" (
reg delete "HKLM\\TK\_SOFTWARE\\WOW6432Node\\Microsoft\\EdgeUpdate" /f
reg delete "HKLM\\TK\_SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Microsoft Edge" /f
reg delete "HKLM\\TK\_SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Microsoft Edge Update" /f
@REM reg delete "HKLM\\TK\_SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Microsoft EdgeWebView" /f
) else (
reg delete "HKLM\\TK\_SOFTWARE\\Microsoft\\EdgeUpdate" /f
reg delete "HKLM\\TK\_SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Microsoft Edge" /f
reg delete "HKLM\\TK\_SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Microsoft Edge Update" /f
@REM reg delete "HKLM\\TK\_SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Microsoft EdgeWebView" /f
)
reg unload HKLM\\TK\_COMPONENTS
reg unload HKLM\\TK\_SOFTWARE
reg unload HKLM\\TK\_SYSTEM
goto :eof

本方法无任何图标残留。

2025 生竞日志

!> 本文较水,不建议阅读

天气真好~心情畅快
2025 年 5 月 11 日早 10:00,我准时参加了 2025 年全国中学生生物学联赛(上海赛区)决赛。老实说,作为一名末流市重点的学生,纵使我对生物有较高的兴趣,且在生物课外内容上的积累相比于同水平学生来说较为丰富,我仍不对比赛结果保有太大的期望。

进入考场后,令我感到意外的是今年的联赛题型被改为了判断题(与国际竞赛接轨),题目难度相比前几年也简单了一些,考察到的许多知识点其实回归了高中生物教材之中,与前几年的“氨基酸记忆大赛”相比可谓人性化了许多。

考完出来我却丝毫没有感到解脱,对完答案之后更是发现自己有几道不该错的题目(虽然相比于我在学校考试犯得低级错误来说可以说是占比非常低了),但对完答案估分给我的期望与大家普遍分数偏高给我带来的冲击形成了一种微妙的平衡。

也许我该考虑在暑假做一些高中生物/化学有关的复习视频网课?可以提上日程

【全网首发】东方有线 ac9v300/ac9v600 改桥接教程

必要准备

  • 记录下盒子的 mac 地址
  • 记录下宽带账号密码
  • (可选)导出盒子设置 防止炸鸡

开始操作

进入 192.168.100.1,正常登录。

跳转到 http://192.168.100.1/internet/waninternet.shtml。模式选择 bridge去掉下方 WLAN1 的勾!!!

一定要注意去掉下方 WLAN1 的勾,否则会触发网络环路只能重置盒子。

在你的路由器内拨号,需要伪造 MAC 为盒子的,否则无法拨号。

MySql 千万级数据去重

主播没有落网 主播只是懒得写文章

前言

前情提要:博主在搞一些奇奇怪怪的东西,需要对千万级别数据进行去重。

常规的 GROUP BY 语句去重挂着跑了一天一夜都没跑完,遂放弃。研究了一会之后搞出来了个新方法。

操作

id

首先需要给表上一个 id 字段,方便后面去重。

1
2
3
4
alter table TABLE_NAME add column id int(11) not null first ;
SET @row_number = 0;
UPDATE TABLE_NAME
SET id = (@row_number := @row_number + 1);

为什么不用自增:innodb 自增字段表无法压缩,占用空间非常大。反正我也不需要自增 id,去重后就删了。

索引

然后给 id 和需要去重的字段加上索引(查重的时候会快很多)。
索引

临时表

temp_delete_code 用于存放要删除的 code 。字段 delete_code,类型根据你的索引类型来,也需要添加索引。
temp_keep_id 用于存放去重保留的 id。字段 keep_id int(11),需要添加索引。

插入数据

temp_delete_code 表中插入要删除的 code

1
insert into temp_delete_code (delete_code) SELECT code FROM `TABLE_NAME ` GROUP BY `code` HAVING count(code) > 1;

temp_keep_id 插入不能保留的id

1
2
insert into temp_keep_id (keep_id)
SELECT min(id) FROM `TABLE_NAME ` GROUP BY `code` HAVING count(code) > 1;

删除

1
delete fromTABLE_NAME WHERE `code` in (select delete_code from temp_delete_code) and id not in (select keep_id from temp_keep_id);

DJI Pocket 2 初体验: 四年前的口袋相机还能打吗?

前言

博主近几天收了个二手的 DJI Pocket 2 云暮白用来在校拍一些素材用。今天正式上手体验了一下拍摄。对于标题给出的问题,我的回答是:能,但也不能。

官方参数指路:DJI 大疆创新,在此不作赘述。

体验感受

下方的每个项目,我都会以我自己的拍摄体验谈谈 Pocket 2 在我所处的场景内的优点与缺点。

拍摄效果

对于我来说,我会拍摄白天/剧场灯光下的素材,因此 1/1.7 英寸的 IMX686 传感器对于我来说能满足大多数要求。阳光下的素材并没有太多噪点,但动态范围明显不够宽容,在日光下部分稍微暗一些的物品就会变得较难辨认。哪怕是录制 D-Cinelike 影像再后期调色也比较难拉回来。

而在剧场,它的表现就比较难看了。由于剧场整体比较暗,仅靠环境灯光只能打亮舞台主题,周围的暗区噪点会当场爆炸。目前还没有试过向右曝光录制,不过根据理论应该会稍微改善一点点。

机内麦克风的录音质量还说得过去,连接上 DJI 无线麦克风(没错,比 DJI mic 还早的产品)的话得到的录音效果还是不错的(虽然我用不到录音)。但整体录出来的声音有点偏小。

操作逻辑

个人认为在 Pocket 2 原生屏幕上操作虽然可能比较难上手,但是整体逻辑还是比较简单的。只需要向四个方向滑动即可进入对应的功能区域。如果要调整参数,用手机远程调整将会更好。但连接手机后屏幕会被自动锁定是一件比较蛋疼的事情,我只能重复地用手机调完参数再断开用屏幕监看,非常反人类。

续航问题

出我机器的老哥是连着全能手柄一起出的,连接上手柄后续航很尿崩。我录制 2.7k 60fps 的视频大概两分钟左右就能用掉 1% 的电。因此要长时间录制的话必须得链接着充电宝来录。

配的无线麦克风的续航则很好,充一次电大概能用四五个小时左右。如果有长时间的录制需求的话充电宝+机器+无线麦的搭配也不会太重。

总结

如果你像我一样是个预算不高的学生党,并且只在光线充足的情况下录制,那么这台机器完全可以胜任大多数的任务。搭配上 Z 轴稳定装置你甚至可以组出一个如影青春版。

但如果你的预算能更高一点,那么 OSMO Pocket 3 甚至 APS-C 画幅的微单将会成为一个更好的选择。但不论如何,选购产品时请千万不要只看参数!根据自己的需求和网上的体验测评进行选择才是更有效的。

年轻人的第一个公网路由 (一): 公司与 ASN 的申请

起因

为了团队服务的安全和某些原因,我选择了自己注册一个 ASN,并将其投入我的应用程序中。很久以前就有这一个想法了

开始

想要拥有一个自己的 BGP 首先就需要有一个 ASN ,而注册 ASN 的一般流程是寻找 RIR 入会后注册。
@> 区域互联网注册机构(Regional Internet Registry,RIR),是管理世界上某特定地区Internet资源的组织。Internet资源包括IP地址(包含IPv4和IPv6)和使用在BGP路由中的自治系统号(Autonomous System number)。

然而例如 APNIC/RIPE 这一类 RIR 的入会费都十分昂贵,每年在一万刀乐到十万刀乐不等。
所以只能退而求其次,寻找 LIR 的帮助。
@> Local Internet registry (LIR) is an organization that has been allocated a block of IP addresses by a RIR, and that assigns most parts of this block to its own customers.

LIR 也就是 RIR 的一些会员,他们可以帮助你获得 ASN,而你只需要替他们支付你 ASN 的年维护费即可。
@> 关于 LIR 的推荐:这里只推荐两家。
https://alice.ws/ Alice Network
https://lir.zhnet.co.uk/ ZH Internet Services

ASN 的注册原则上是就近寻找 RIR,但是考虑到 RIPE 支持在线管理,而其他 RIR 都需要联系 LIR 帮助你修改信息,所以博主这里选择了 RIPE。
RIPE的注册类型分为两种:

  • 个人: 需要护照、地址、手机号、邮箱等,个人类型注册的 ASN 可以查询到注册人的姓名
  • 公司: 需要公司注册证书(营业执照)、地址、手机号、邮箱等

公司注册

由于隐私原因(虽然我已经被盒的差不多了),博主选择了以公司身份注册。
注册公司的方式很简单,国内国外公司均可,这里我找朋友开了个英国的空壳公司,一天就下了。

ASN 注册

RIPE 信息填写

@> 参考资料: ZH Network
下方将原文摘录,并附上一定我本人在过程中的注解。

注册 RIPE NCC Access 账号

通过此链接注册一个 RIPE NCC Access 账号以管理您未来在 RIPE NCC 区域内的资源。

创建初始 role 和 maintainer (mntner) 对象

role 对象是对由一个或多个人执行的角色的抽象,例如表示您用来处理网络事件的部门。
maintainer 对象是对维护者的抽象,记录了维护者的认证信息。其他对象通过 mnt-by 属性授权由谁维护。
在通过此链接创建 rolemaintainer 对象时,您需要填写:

mntner: maintainer 对象的标识符,可包含大小写字母、数字和 -,例如: YOURNOC-MNT
role: role 对象的名称,可包含大小写字母、数字和 ][)(.
“*@,&:!’`+/-,例如: YOURCOMPANY NOC
address: 此 role 的办公地址
e-mail 此 role 的电子邮件联系地址

填写完成后点击 SUBMIT 按钮,将同时创建一个 role 和一个 mntner 对象。

页面中上位置以 role with primary key “EXAMPLE-RIPE” 字样展示了 role 对象的主键。您需要将其作为您 AS 的 admin-c / tech-c / abuse-c 提交给您的 LIR,或通过此链接创建一组专用 role 对象作为您 AS 的 admin-c / tech-c / abuse-c 提交给您的 LIR。

新建的 role 对象中 mnt-by 属性指向了新建的 mntner 对象,这表示此 role 对象可由其修改。而创建出的 mntner 对象中 admin-c 属性指向了新建的 role 对象,这表示此 role 对象提供了该维护者的管理员联系信息。

这种相互引用关系使得您必须同时创建 rolemntner 对象。

设置滥用通知邮箱

此页面顶部的搜索框中填写上节中 role 对象的主键,点击右侧查找按钮。接下来点击搜索结果右上角的 Update object 按钮跳转至修改页面。
点击 e-mail 栏右侧 + 号按钮为此 role 对象添加 abuse-mailbox 属性。
在出现的 abuse-mailbox 栏中填写滥用通知邮箱后点击 SUBMIT 按钮保存。
RIPE NCC 会检查此邮箱的有效性,务必真实可用

**再创建一个 maintainer 对象的密码(你的 LIR 需要)
在这个页面继续搜索你的 maintainer 对象的主键,在 auth 栏目点击加号添加密码并妥善保存。

创建 organisation 对象

organisation 对象是对公司、非营利团体或个人的抽象,所有其他资源都与该对象相关。是管理 RIPE 数据库中数据的起点。
在通过此链接创建 organisation 对象时,您需要填写:

mnt-by: 由谁管理,默认自动填充此前新建的 mntner 的标识符
organisation: organisation 对象的标识符,默认填充 AUTO-1 将由系统自动生成标识符
org-name: 此 organisation 的名称,必须填写组织的法定全称或个人姓名之一
address: 此 organisation 的联系地址,必须是组织的法定地址或个人住址之一
e-mail: 此 organisation 的电子邮件联系地址
abuse-c: 此 organisation 的滥用通知联系方式,必须指向具有 abuse-mailbox 属性的 role 对象
mnt-ref: 谁可引用此 organisation,被指向的 mntner 可以添加指向此 organisation 的对象,即由谁为此组织分配资源,询问您的 LIR 以获得具体值

填写完成后点击 SUBMIT 按钮,页面中上位置以 organisation “ORG-EXAMPLE-RIPE” 字样展示了 organisation 对象的标识符,您需要将其作为您 AS 的 org 提交给您的 LIR。

提交资料

需要的资料有:

  • 公司注册证书 / 护照(中国居民身份证)正反面
  • RIPE NCC 服务区内的网络活动证明(例如欧洲 VPS 的账单)
  • AS 的活动地区(国家)
  • as-name(AS 名称,例如 CHINATELECOM-CORE-WAN-CN2)
  • org(第 4 节,organisation 对象标识符)
  • admin-c(第 2 节,role 对象主键)
  • tech-c(第 2 节,role 对象主键)
  • abuse-c(第 2 节,role 对象主键)
  • mnt-by(第 2 节,mntner 对象标识符)

全部提交后,LIR 会向你发送合同文件,签名后一并提交。

结尾

到此为止,等待一个工作日左右,你的 ASN 就到手啦!

解决 Adobe 2024 的盗版检测

未使用翻墙工具

防火墙屏蔽

直接用脚本批量创建规则屏蔽联网即可:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@Echo Off
SetLocal

echo:
echo ****** 禁止文件夹联网 ******
echo:

set /p folder=请输入文件夹(退出请直接关闭窗口):
If Not Exist "%folder%\" Exit/B
If /I "%CD%" NEq "%folder%" PushD %folder%
Set "Cmnd=netsh advfirewall firewall add rule action=block"
echo:
For /R %%a In (*.exe) Do (For %%b In (in out) Do (
echo 创建禁止 %%b 规则【%%a
%Cmnd% name="Adobe-Blocker: %%a" dir=%%b program="%%a"))

echo:
echo 搞定了,%folder% 中所有 exe 文件的禁止入站、出站规则都已成功创建!
echo ----------------------------
echo:

Hosts

不建议使用此方法,Adobe 会定期更换域名。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
127.0.0.1 dxyeyf6ecy.adobe.io
127.0.0.1 1hzopx6nz7.adobe.io
127.0.0.1 ic.adobe.io
127.0.0.1 p13n.adobe.io
127.0.0.1 p13n-mr.adobe.io
127.0.0.1 cai-identity.adobe.io
127.0.0.1 dyzt55url8.adobe.io
127.0.0.1 gw8gfjbsO5.adobe.io
127.0.0.1 2ftem87osk.adobe.io
127.0.0.1 phef2h2csf.adobe.io
127.0.0.1 7sj9n87sls.adobe.io
127.0.0.1 b5kbg2ggog.adobe.io
127.0.0.1 p7uxzbht8h.adobe.io
127.0.0.1 guzg78logz.adobe.io
127.0.0.1 crs.cr.adobe.com
127.0.0.1 photos.adobe.io
127.0.0.1 lcs-cops.adobe.io
127.0.0.1 cc-cdn.adobe.com
127.0.0.1 cc-api-data.adobe.io
127.0.0.1 cai-splunk-proxy.adobe.io

使用了翻墙软件

自定义路由规则屏蔽 adobe.io 域名即可。

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×