{"version":"https://jsonfeed.org/version/1","title":"Okaybook Latest","icon":"https://gateway.ipfs.io/ipfs/bafkreigxdnr5lvtjxqin5upquomrti2s77hlgtjy5zaeu43uhpny75rbga","home_page_url":"http://localhost:2222/","feed_url":"http://localhost:2222/feed/latest","items":[{"id":"60606-1","title":"哔咔漫画下载","summary":"哔咔漫画让你可以轻松看到不同的本子,介面美观易用,分类齐全,每天更新,绅士必备!","content_html":"

哔咔漫画2.0

\n

公测版现已推出

\n\n \n \n
\n
\n \n
\n
\n

IOS 用家注意,你必须透过 Cydia Impactor 安装 ipa 档案的。

\n

哔咔漫画让你可以轻松看到不同的本子,介面美观易用,分类齐全,每天更新,绅士必备!

","url":"http://localhost:2222/api/redirection?characterId=60606¬eId=1","image":"ipfs://QmbZd2R7xTKfJo54cxvgkjuffJxwUmbTHULLVfjRRZwDY5","date_published":"2024-01-12T07:17:04.000Z","tags":["post","哔咔漫画","哔咔","下载","哔咔漫画ios下载","哔咔漫画安卓下载"],"author":{"name":"哔咔漫画","url":"http://localhost:2222/api/redirection?characterId=60606","handle":"picacg"}},{"id":"56224-23","title":"麒麟9000s 芯片级解析","summary":"这篇则是 Hi36a0V120 的解析 本文写自与 mate60 发布后第三天,发布时间不明\n\n总起\n\nHi36A0V120,内部代号则为夏洛特(Charlotte)\n\nCPU: TSV120+TSV120+A510\n SUB: 自研总线\n GPU: 马良 910\n NPU: 迭代的…","content_html":"

这篇则是 Hi36a0V120 的解析
\n本文写自与 mate60 发布后第三天,发布时间不明

\n

总起

\n

Hi36A0V120,内部代号则为夏洛特(Charlotte)

\n

CPU: TSV120+TSV120+A510
\nSUB: 自研总线
\nGPU: 马良 910
\nNPU: 迭代的,应该还是 Da Vinci NPU,1b+1l 设计
\nModem: 没有叫法, 但是能从 Dieshot 看到其没有 pcie,说明其基带为集成
\n制造工艺则是 Smic7

\n

Decap 分析

\n

首先我们这次开的是 Gugugu 给的 Die,拆机来自于刚买的 Mate60Pro

\n

\"image\"

\n

很显然为 pop 封装

\n

\"image\"

\n

Top Package 为海力士颗粒
\n吹下得到

\n

\"image\"
\nTopmark 为
\nHi36A0
\nGFCV120
\nJTFQ3T0V1
\n2035-CN09
\n06

\n

DataCode(TOP Marking)解析

\n

HiSilicon 为:海思半导体
\nHi36A0 说明为 Hi36 产品线,A0 说明产品为第十代产品(123-9ABCD…)
\nV120 中的 1 在其他芯片上则是产品代数(例如电视机的,第一代 v100 第二代 v200)在 Hi36 系列只有 Hi3690 有 V100/V200,则是双方案,不确定含义
\n2 则是设计 gds 版本更改,一般是量产后慢慢优化啊,hi6260v131 啊这种
\n0 则是小优化,其余看不出来规律
\n2035CN 理论上来说是封装日期,09 代号 厂封装的

\n

X 光出来的图表示其为 FanOut Package 封装

\n

那么就是打 X 光了

\n

X Ray

\n

\"image\"

\n

X 光打出来就很明显为 FanOutPackage

\n

\"image\"

\n

边缘 3 条黑色点是 Top Package 与 Bottom Package 互联的 bump 点,但是很奇怪的是并没有在实物图中看到,不处于同一层封装 package,可能存在后期使用其他厂商的闪存芯片,(节省了重新封装的时间?)
\n也有可能是 Bottom Die 内走线

\n

\"image\"

\n

\"image\"

\n

其边缘可以很明显看到 Die 与边缘 io Phy 引出层的连接邦定点,可以预估的判断出其 DieSize,大概是 10x10 左右

\n

这些就是 x 光图可以看出来的数据,该 decap 了

\n

Decap

\n

Decaping

\n

\"image\"

\n

Decap 后拍摄可以看出

\n

\"image\"

\n

其 Diemark 疑似为 HL 02 20210603,也就是 2021 年 6 月 3 日生产
\n这是一个很奇怪的数字
\n因为外封装为 2035cn
\n其内部真实生产日期为 20210603,我认为 topmark 的 2035CN 就是伪装的,甚至是固定的

\n

其余在任何地方都没有找到疑似 Diemark
\n这次不像之前的 Kirin 采用的是 Hixxxx Vxxx 的版本号
\n直接看不到了
\n无法判断其产品具体代号 / 版本阶段(例如实际是 Hi36A0/Hi36B0?)
\n本人认为该产品属于全新一代产品,而不是简单的 V120,版本步进迭代,而是全新的产物,当然没有足够的证据以支撑本人的观点

\n

对准系统分析

\n

其边缘对准系统看到了 3 处
\n证明其部分产线设备为 asml 的步进式光刻机
\n其记号为通过套刻测量设备的自动化识别套刻记号

\n

\"image\"

\n

线条套线条记号(Bar in Bar mark)

\n

\"image\"

\n

线条套线条记号(Bar in Bar mark)

\n

\"image\"

\n

AIM 套刻记号

\n

\"image\"

\n

\"image\"

\n

AIM 套刻记号

\n

疑似佳能对准系统(i-line 和 KrF)

\n

\"image\"

\n

最重要的是这个对准系统
\n在这张图中

\n

\"image\"

\n

可以看到规律竖条条纹,一组为 9 条,一组为 8 条,每条内有 4 根均匀的竖状条纹

\n

这就是很清楚的告诉了我们,该芯片使用的最先进的机台的对准系统为
\nASML 的雅典娜对准系统 Athena
\n其中该条纹属于 Versatile Scribeline Primary Mark(VSPM) AH74

\n

\"image\"

\n

\"image\"

\n

该对准系统只有在 ASML 设备中使用
\nAH74 则更少,1960-2000i 都有

\n

既然知道了制造设备
\n就可以计算出其产能与良率了

\n

产能分析

\n

那么按照
\n已知 smic 有大概两台 NXT1980di
\n但是给华为分配了分配 60% 产能 80% 稼动率 +40 duv mask 计算
\n公式为:550wph x 24h x 60% x80%/40=158.4Wafer
\n我这个 Die 则是 2021 年 6 月生产
\n生产到现在也就是 23 年 9.1 号
\n不确定会不会有更早的 Die,但是我们这可是目前最早的 Die,遂计算之

\n

总生产时间大约为 822Day,抛开可能的休息日,800day 生产,
\n800x158.4
\n也就是 126,720Wafer

\n

良率分析

\n

那么就是计算良率了,
\n内鬼查询丝印查询可得,本 wafer 大概切割出了 300 片 Die
\n已知 Diesize 是 10.7x10.4,求 Yield
\nDpw 即可

\n

\"image\"

\n

D0 大概是 0.6 左右,0.6-0.55,yield 53.22%
\n那么到今年截止,良率爬坡呢,也就是差不多 0.3 左右

\n

按照直线图计算找中点,假设均匀爬升

\n

\"image\"

\n

400day 的时候,d0=0.45 也就是 350 Good Die 也就是 61.88% Yield

\n

D0=0.3 时

\n

\"image\"

\n

800day 的时候,d0=0.3 也就是 409 Good Die 也就是 72.28% Yield

\n

方便计算为
\n中位数为 d0=0.45

\n

126720x566x61.88%=44,382,514.176
\n那么估算的数字也就是华为生产了 4000-4500w 片 Hi36a0V120,粗略计算。

\n

Die 标识

\n

在 Die 中寻找,还有几处点
\n例如 F 状条纹

\n

\"image\"

\n

B + 数字,划线区域 / 测试点位

\n

\"image\"

\n

IO PHY

\n

\"image\"

\n

这张图很明显的能看出边上的点位来扇出

\n

还有一个很奇怪的丝印
\n2017 Mora
\nA?C?E?A?
\nA 01 0
\n不太清楚是什么疑似
\n20 年 17 周 必须?
\n2017 年必须?

\n

\"image\"

\n

蛮奇怪的

\n

还有个 sa06 左边为十字对准标识

\n

\"image\"

\n

去金属层

\n

然后就是去金属层了

\n

\"image\"

\n

因为走线为 Cu, 遂酸洗
\n酸洗出来会有报废率,但是这次运气很好,完美

\n

\"image\"

\n

很美丽,那么就进行

\n

Dieshot Layout

\n

\"Hi36A0V120

\n

那么很明显的
\n首先能判断出,该芯片不是和麒麟 9000 一样的东西,不是同一个产品
\n那么我这边也是做了麒麟 9000

\n

\"Hi36a0

\n

进行一个对比

\n

很明显这两个不是同一个芯片
\n因为 Die 的形状都不一样,大概的规模都一样
\n说明 Hi36A0 V100 与 Hi36A0V120 完全不同,不属于换皮 / 库存
\n这完全可以证明
\n麒麟 9000s 不属于类似于 9000L/9000e 换皮结构
\n也不属于类似于 985/990 的部分设计共用结构
\n而是全新的一代,没有相同部分

\n

\"抠图

\n

那么就是解析了

\n

CPU

\n

首先是 CPU 的对比

\n

\"cpu
\n能看到其 CPU Cluster 巨大的面积,相比较上代发生了巨大的变化

\n

\"图层

\n

左边是 TSMC N5 A77+A77+A55,134
\n右边是 SMIC N7 TSV120+TSV120+A510 134

\n

超大核的 Size 对比

\n

\"图层

\n

面积大了… 很大一圈

\n

性能分析不写

\n

无 L0 Cache

\n

架构太宽了,需要吃缓存

\n

关于小核是 A510,两组双核复合体 1.53Ghz,在最佳甜点频率,在 TSMC 工艺下则是 1.4Ghz

\n

以及这代的的总线,不像上代的总线与超大核使用了性能库

\n

\"image\"

\n

这代只有超大核使用了性能库,
\n\"image\"

\n

颜色变化是因为
\n我认为是 Poly 层晶体管密度导致的反射光谱变化

\n

GPU 解析

\n

\"MALIANG910\"

\n

上一代 Mali G78 Mc24 是堆料的典型
\nMali G78 基于 Valhall 架构,mc24 则说明了其为 24Core
\n其 GPU 则是 Core 设计
\n而这代的 Maliang 则是 Cu 设计
\n其设计规模与上代略微缩小了一部分
\n单元划分如图

\n

\"图层

\n

为 4CU
\n左右两组 ALU Core,每组 128Alus,总计 2x4x128Alus=1024Alus
\n频率最高 750Mhz,理论性能为 1536Gflops
\n中间的则是 GPU L2 Cache,大约为 1MiByte

\n

从其 gpu 的规格上来说
\n不与常见的 IMG/MALI/Adreno/Rdna/Cuda 相同
\n我认为这是全新自研的 GPU

\n

NPU

\n

\"NPU\"

\n

在这代 NPU 来说
\n上代则是双大核 + 1 小核 NPU,每个大核两条 Vector
\n这代则是单大核 + 1 小核 NPU ,大核两条略长的 Vector
\n其 NPU 从宏观的角度上来说,我认为其规模虽然缩减了一颗大核,但是可能因为微架构更新,性能可能会增强,但是核心规模缩减这个是事实,其节省了很大一个面积去放其他单元

\n

isp

\n

\"ISP

\n

ISP 的规模很明显相比较上代 isp6.0 增大了,但是能找到这两个 isp 的共同核心
\n中心处还疑似新增了一个双核协处理器
\n其理论图像处理速度增加,这代 Mate60pro 实测可以在取景框内就可以 HDR Vivid,以及变焦时丝滑切换,这就是 isp 算力增加带来的
\n这个 isp 跑在中频,2W,极其恐怖。、

\n

DSP

\n

Dsp 其实没什么好说的
\n\"dsp\"
\n也看不出什么,相比较上代的 Decode 好像还少了个
\n面积缩小了一点点

\n

Baseband

\n

\"Balong\"

\n

在 baseband 中
\n这代设计与之前的 Balong 5000 完全不同
\n其面积缩小了很多

\n

在这之前华为的 5G 基带一直都是 4G+5G 设计的,中间用互联桥进行数据传输
\n部分外挂基带例如 990 4G 则是走 Pcie x8+x16 进行数据传输,然后外挂巴龙 5000
\n在这代 Modem 设计中,其为纯粹的 Balong Baseband Modem Sysytem,集成了 4G 与 5G,其例如 dsp 可以共享,以及 Modem 共享,不需要单独的进行设计

","url":"http://localhost:2222/api/redirection?characterId=56224¬eId=23","image":"ipfs://bafybeihql7cexkoghpqwgdqcvccbzfyhryy4nv4rfvf7mxyi5gdzcjdgmy","date_published":"2023-10-09T09:38:13.000Z","tags":["post"],"author":{"name":"Kurnal","url":"http://localhost:2222/api/redirection?characterId=56224","handle":"kurnal"}},{"id":"54234-19","title":"无限续杯 Cursor","summary":"🚧 2024.12.13 更新:Cursor 官方更新了检测机制,每台电脑重复试用 3 次之后,就会出现下列提示: Copy\nToo many free trial accounts used on this machine.\nPlease upgrade to pro. We…","content_html":"
\n

🚧 2024.12.13 更新:Cursor 官方更新了检测机制,每台电脑重复试用 3 次之后,就会出现下列提示:

\n
Too many free trial accounts used on this machine.\nPlease upgrade to pro. We have this limit in place\nto prevent abuse. Please let us know if you believe\nthis is a mistake.\n
\n

可以试试这几个工具:
\n🔗 go-cursor-help
\n\"image\"
\n🔗 cursor-0.45.x-id-
\n\"image\"
\n🔗 cursor-auto-free
\n\"image\"

\n
\n

如果你问我 AI 时代用什么代码编辑器,我会毫无疑问的回答你:Cursor Cursor Cursor!!!

\n

其拥有智能的 Tab 补全能力、文件级别的代码读取能力、和编辑器深度融合的 AI 能力,配合强大的 Claude 3.5 Sonnet 模型,使其迅速成为程序员们的编码神器。正所谓 Cursor 在手,Bug 没有

\n

新用户首次注册 Cursor 会有 14 天的会员试用期,要想无限续杯,就要用新邮箱在官网注册一个新号,在软件内重新登录就可以继续使用 Pro 会员了,换账号不会更改编辑器内的配置,可以放心更换。

\n

安装

\n

进入🔗官网,点击右上角的 Download 下载并安装。

\n

如果你之前使用过 VS Code,安装时会提示你要不要导入 VS 配置(主题、设置、插件等等),建议导入,导入后几乎和原来的 VS 一模一样,可以做到无痛迁移,因为 Cursor 就是基于 VS Code 二次开发的。

\n

\"image\"

\n

输入框输入 中文,点击 Install \"Cursor\" 安装命令行工具,等待安装完毕,点击 OK,点击 Continue

\n

\"image\"

\n

问你是否导入 VS Code 配置,导入:点击 Use Extensions不导入:点击旁边的 Start from Scratch(从 0 开始使用):

\n

\"image\"

\n

等待导入配置中...

\n

\"image\"

\n

如果出现了这个弹窗,就点击 Continue with Default

\n

\"image\"

\n

点击 Continue

\n

\"image\"

\n

先跳过登录注册环节,点击 Skip for now

\n

\"Snipaste_2024-08-25_11-40-11\"

\n

点击 Yes, skip login

\n

\"Snipaste_2024-08-25_11-40-25\"

\n

进入主界面你会发现界面和 VS 几乎一模一样,VS 的设置、插件、主题也都同步了过来,这里说几点注意事项:

\n\n

至此,Cursor 的安装、导入工作完成🎉,下边进行账号注册、登录。

\n

方法一(推荐)

\n
\n

更新:如果遇到注销失败的情况,可以尝试切换 VPN 节点

\n
\n

经网友提醒,有一种更快速的方法恢复 Pro 试用,账号到期后,使用原账号登录官网的🔗账号设置页,展开 Advanced,点击 Delete Account

\n

\"image\"

\n

输入 delete,点击 Delete 按钮,点击后原账号会被注销,然后就可以用原账号再在官网注册一遍,此时原账号就变成新账号了,pro 试用和 500 额度就会恢复

\n

\"image\"

\n

\"image\"

\n

方法二(后备)

\n
\n

若方法一失效,就重复这之后的流程即可。

\n

倡议大家不要过度或者批量注册,每个号到期后再搞新号~~且用且珍惜

\n
\n

购买邮箱

\n

先去这里🔗买 outlook 邮箱,成本忽略不计,0.03 元:

\n

\"Snipaste_2024-08-25_13-14-48\"

\n

\"Snipaste_2024-08-25_13-15-12\"

\n

保存好邮箱账号和邮箱密码:

\n

\"Snipaste_2024-08-25_13-17-03\"

\n

登录邮箱

\n

在这里🔗登录 outlook邮箱:

\n

\"Snipaste_2024-08-25_13-26-35\"

\n

将刚才购买的邮箱账号复制进去,点击下一个

\n

\"Snipaste_2024-08-25_13-27-11\"

\n

将邮箱密码复制进去,点击登录

\n

\"Snipaste_2024-08-25_13-27-29\"

\n

\"Snipaste_2024-08-25_13-27-47\"

\n

\"Snipaste_2024-08-25_13-28-27\"

\n

进入主界面,先切换到 Junk Email,因为待会 Cursor 的邮件会被当做垃圾邮件发送到这里:

\n

\"Snipaste_2024-08-25_13-28-45\"

\n

注册 Cursor

\n

编辑器汉化

\n

注册之前,先把编辑器切换成中文界面。打开编辑器,在插件中心搜索 chinese 中文语言插件,点击 Install

\n

\"Snipaste_2024-10-31_18-21-56\"

\n

插件安装完成后,左下角或右下角会弹出提示框,点击 Change Language and Restart,等待编辑器重启即可:

\n

\"Snipaste_2024-10-31_18-22-25\"

\n

开始注册

\n

打开 Cursor 编辑器,按下组合快捷键 Ctrl + Shift + J 打开设置面板,点击 Sign in

\n

\"Snipaste_2024-08-25_13-49-54\"

\n

点击 Sign up

\n

\"Snipaste_2024-08-25_13-50-22\"

\n

输入 First name(随意)和 Last name(随意),填入刚刚购买的邮箱账号,点击 Coutinue with email code

\n

\"Snipaste_2024-08-25_13-50-53\"

\n

点击 Send email code

\n

\"Snipaste_2024-08-25_13-51-13\"

\n

可能会有一个人机验证(没有最好),点击一下那个复选框:

\n

\"Snipaste_2024-08-25_13-51-52\"

\n

等待几秒钟,邮件就会发送到刚刚登录的 outlook 邮箱中,将验证码输入到验证框即可:

\n

\"Snipaste_2024-08-25_13-51-40\"

\n

验证完成后,显示这个页面代表注册完成,可以回到编辑器:

\n

\"Snipaste_2024-08-25_13-52-27\"

\n

回到编辑器,看到账号已经自动登录,并有 14 天的 Pro 试用。

\n

未来账号到期之后,就在编辑器按下组合快捷键 Ctrl + Shift + J 进入 Cursor 账号的设置面板,先点击 Log out 退出登录,再重复一遍方法二的流程即可。

\n

\"Snipaste_2024-08-25_13-53-06\"

\n

至此,Cursor 账号注册完成,理论上可以一直这样试用下去,以后操作也就 5 分钟左右,还是很爽的。

\n

设置

\n

需要简单设置一下以启用 AI 能力,按下 Ctrl + Shift + J 进入设置面板,切换到 Models 栏,关闭其他的,只保留 claude-3.5-sonnet 开启状态:

\n

\"Snipaste_2024-08-25_14-23-39\"

\n

切换到 Features 栏,将 disabled 改为 enabled

\n

\"Snipaste_2024-08-25_14-24-08\"

\n

接着往下滑,按照下图的启用状态设置:

\n

\"Snipaste_2024-08-25_14-27-45\"

\n

设置完成,建议重启下编辑器。

\n

使用

\n

以下是使用过程中常用的三个(组合)快捷键:

\n

Ctrl + L:可以单独和 AI 对话,也可以在编辑器内选中一段代码,将这段代码加入 AI 对话中。

\n

\"Snipaste_2024-08-25_15-39-22\"

\n

\"Snipaste_2024-08-25_15-40-28\"

\n

Ctrl + K:选中一段代码,直接输入需求或者问题,让 AI 帮你完善某个功能或者改 Bug,绿色代码块是 AI 的生成结果,红色代码块是将被替换的原代码,快捷键按下或点击 Ctrl + Shift + Y 可以确认替换,Ctrl + N 拒绝替换。

\n

\"Snipaste_2024-08-25_15-50-45\"

\n

Tab:在编码时,会根据代码上下文提供预测能力,一直按 Tab 补全即可。

\n

\"Snipaste_2024-08-25_15-43-20\"

\n

\"Snipaste_2024-08-25_15-43-07\"

","url":"http://localhost:2222/api/redirection?characterId=54234¬eId=19","image":"ipfs://QmcDyKwVYifkcUUwH2PgEL8WpTZ4aaPG8DzpN7CVny7kzx","date_published":"2024-08-25T07:58:33.000Z","tags":["post","工具"],"author":{"name":"0x5E","url":"http://localhost:2222/api/redirection?characterId=54234","handle":"realyujie"}},{"id":"49903-11","title":"瓜老师の笔记","summary":"欢迎使用 瓜老师の笔记,我们为您提供高质量的在线资源和体验。以下是我们的线路和相关信息。","content_html":"

瓜老师の笔记 使用指南

\n

因国内江苏地区网络防火墙原因,部分江苏用户不能访问瓜老师的笔记,需要 vpn 开全局才能正常访问。不过我们将会在近期开设一个专用于江苏地区的线路,当江苏地区 IP 访问时自动引导到该线路。敬请期待。-24 年 11 月 25 日公告

\n

欢迎使用 瓜老师の笔记,我们为您提供高质量的在线资源和体验。以下是我们的线路和相关信息:

\n

瓜老师の笔记免翻最新线路🔥🔥

\n\n

普通用户私有线路

\n\n

大会员提示

\n\n

永久地址(需翻墙)

\n\n

获取最新地址的方法

\n\n

其他产品线路信息

\n\n

您可以直接点击上方的地址进行浏览,或复制到浏览器进行访问。感谢您的支持!

\n

投稿方式

\n","url":"http://localhost:2222/api/redirection?characterId=49903¬eId=11","image":"ipfs://QmRjrnDAYeswRGr9GkZPRkC8chSdSRxgDrrvbwT6XMetf4","date_published":"2024-08-13T17:36:59.000Z","tags":["post","瓜老师的笔记","瓜老师","黑料","吃瓜","海角社区","吃瓜排行"],"author":{"name":"瓜老师🐶","url":"http://localhost:2222/api/redirection?characterId=49903","handle":"teachergua"}},{"id":"10-87","title":"我有特别的 RSS 使用技巧","summary":"大家都知道 RSS 是一种用来消息聚合的格式规范,有着更高的阅读效率、更好的阅读体验、可以掌握主动权等等优点。 本文不会介绍 RSS 的各种好处和各式各样的阅读器,因为相关网络资料已经足够多了。这里我介绍一下怎样充分挖掘 RSS 的使用价值,因为它的用途一直被大家低估。\n\n阅读器…","content_html":"

大家都知道 RSS 是一种用来消息聚合的格式规范,有着更高的阅读效率、更好的阅读体验、可以掌握主动权等等优点。

\n

本文不会介绍 RSS 的各种好处和各式各样的阅读器,因为相关网络资料已经足够多了。这里我介绍一下怎样充分挖掘 RSS 的使用价值,因为它的用途一直被大家低估。

\n

阅读器

\n

从最简单的开始,我们可以看看如何用 RSS 订阅一个博客。

\n

假设你想订阅世界上最可爱的博客 Hi, DIYgod,巧的是它已经很贴心地提供了 RSS 地址,你只需要找一个适合自己的 RSS 阅读器。

\n

这里有几个推荐:

\n

iOS 和 macOS 平台 - Reeder

\n

Android 平台 - Palabre 和 FeedMe

\n

打开阅读器,输入链接,点击订阅

\n

\"9102rss1\"

\n

\"9102rss2\"

\n

我们便学会了 RSS 最基础的使用方法。

\n

云服务

\n

这时候你可能会发现一些问题。

\n

只有一直开着电脑或手机才能获取到更新,如果勤劳的 DIYgod 一天更新了 100 篇文章,而 RSS 的输出数量是有限的,等一天后再开电脑,这时候阅读器刷新,你只能看到最新的几篇了(当然 DIYgod 不可能一天更新 100 篇,这个例子不是很好)。

\n

还有,你同时在手机和电脑上订阅了 DIYgod,在电脑上看完,手机上还是未读状态,如果订阅了很多内容,这会很糟糕。

\n

所以我们需要一个服务端来同步和刷新 RSS 内容。

\n

其中用的人数最多的是 Feedly 和 Inoreader。

\n

它们固然很好,但我更推荐功能更强自由度更高的自建 Tiny Tiny RSS

\n

自建不仅可以使数据更可控,它还有丰富的插件可以满足各种各样的需求,比如全文内容提取、Fever API 模拟、DOM 操控、繁体转简体。上面提到的阅读器都可以配合它使用。

\n

\"9102rss3\"

\n

RSSHub

\n

看起来很美好,但提供 RSS 订阅的网站实在是太少了,原因很好理解:RSS 不利于网站方的广告投放、隐私搜集、用户存留等商业行为。

\n

我们当然不满于此,于是我发起了 RSSHub 项目,项目原理很简单:RSSHub 请求你想要的源站数据,然后把它们以 RSS 格式输出,做到了万物皆可 RSS。

\n

经过近 200 名开发者历时一年多的活跃开发,RSSHub 已经支持了 300 多个网站的近 600 种数据,而且这些数字还在快速增长中。

\n

这里分享一部分我常用的路由:

\n\n

BT 下载

\n

假设你是一个美剧爱好者,我们可以看看如何用 RSS 来追权利的游戏第 8 季。

\n

RSSHub 有一些支持 BT 下载的路由,比如权利的游戏字幕组源订阅地址为:https://rsshub.app/zimuzu/resource/10733,接着我们加一个 filter 参数过滤出第 8 季内容:https://rsshub.app/zimuzu/resource/10733?filter=S08

\n

然后挑选一个正常的 BT 客户端(迅雷不算),我用的是群晖的 Download Station。

\n

把地址添加到 BT 客户端的 RSS 订阅,这样美剧更新后 BT 客户端就会自动把最新一集下载到硬盘里,晚上下班回家打开电视就可以直接看了。

\n

最近我订阅的美剧和日剧

\n

\"9102rss4\"

\n

获取到更新并下载完成群晖会发邮件告诉我

\n

\"9102rss5\"

\n

播客

\n

假设你是一个播客爱好者,我们可以看看如何用 RSS 来扩充你的播客库。

\n

播客客户端可以访问 RSS 检查更新,以下载系列中新的集数收听,RSSHub 或 getpodcast 有一些支持播客的 RSS 可以直接使用,比如用 iOS 自带的播客应用订阅一个网易云音乐的 ASMR 电台:

\n

\"9102rss6\"

\n

联动

\n

RSS 可以通过 IFTTT 跟各种奇奇怪怪的东西联动。

\n

其中一个使用案例是我的 Telegram 频道:https://t.me/awesomeDIYgod,它通过 IFTTT 监听了很多 RSS 更新,有 DIYgod 的博客更新、DIYgod 的扇贝打卡、DIYgod 的 Twitter 更新、DIYgod 喜欢的网易云音乐、DIYgod 的 bilibili 投币视频...

\n

这样你甚至可以很容易实现通过 RSS 控制开关灯、咕咕鸡自动打印小姐姐的微博、把权利的游戏差评自动发推特艾特编剧等等操作,虽然可能没什么用就是了。

\n

6 月 2 日更新:

\n

一次优秀的联动:《优雅地下载我的 B 站投币视频》

\n

 

\n

以上是我列举的几个适合 RSS 使用的场景和方式,现在大家是不是对 “RSS 是一种用来消息聚合的格式规范” 这句话有了更深的理解呢?

","url":"http://localhost:2222/api/redirection?characterId=10¬eId=87","image":"https://ipfs.4everland.xyz/ipfs/bafkreia2qs3hugcjppvgn64c572i427ezlnrww3tqcenjl7asna6csrxsq","date_published":"2022-11-10T16:34:23.000Z","tags":["post","分享境"],"author":{"name":"DIYgod","url":"http://localhost:2222/api/redirection?characterId=10","handle":"diygod"}},{"id":"10-2532","title":"一个六岁开源项目的崩溃与新生","summary":"我有一个维护了六年的开源项目—— RSSHub,它正在面临崩溃\n\n表面上,它有接近 30k Stars、900 多 Contributors、每月 3 亿多次请求和数不清的用户、每月几十刀的赞助、有源源不断的 issue 和 pr、代码几乎每天更新,非常健康和充满活力","content_html":"

我有一个维护了六年的开源项目 —— RSSHub,它正在面临崩溃

\n

背景

\n

表面上,它有接近 30k Stars、900 多 Contributors、每月 3 亿多次请求和数不清的用户、每月几十刀的赞助、有源源不断的 issue 和 pr、代码几乎每天更新,非常健康和充满活力,但在不可见的地方,持续数年高昂的维护时间成本、每月一千多刀的服务器费用、每天重复繁琐且逐渐积累的维护工作,都让它在崩溃的边缘反复横跳

\n

项目是六年前开发的,不少当时以 Next Generation 为口号的时髦 Node.js 技术栈和依赖库已经成为时代眼泪,现在看非常陈旧,很多现在流行的新技术没法应用,比如 JSX、TypeScript、Serverless 等;它的架构也非常不合理,每个路由的信息散落在多个地方,开发或者变更一个路由需要多处修改,一个地方去注册路由,一个地方去编写路由脚本,一个地方去编写 Radar 规则,一个地方去编写文档...... 这增加了很多工作量,也很容易出错,之前路由少的时候并不是个问题,但现在已经变得难以忍受

\n

在如此糟糕的基础架构下能保持现状已经是竭尽全力,开发新功能更是无本之木,只会增加以后更新的难度,所以我有时候脑子蹦出的新奇想法也很难实现

\n

要解决这些问题,唯一的办法是使用现代化的框架和新设计的架构来重写内核,但随着路由越来越多,改造成本也越来越高,每个基础改动可能都需要多达数月的工作量,所以虽然问题越来越严重,但秉承着又不是不能用的原则一拖再拖

\n

但这又是不得不做的事情,所以我抽空花了几个月的时间重新设计和重写了它

\n

技术栈更新

\n

koa -> Hono

\n

第一步也是最基础和难度最大的是换掉之前使用的 Web 框架 koa,作为六年前流行的下一代 Web 框架,作者早就弃坑了,调研之后决定换用对 JSX、TypeScript、Serverless 支持最好的 Hono

\n

它们的 API 差异很大,需要重写所有中间件和替换所有路由中使用的 koa API

\n

主要改动:
\nhttps://github.com/DIYgod/RSSHub/pull/14295

\n

\"image\"

\n

Hono 作者也很喜欢这个改造

\n\n

JavaScript -> TypeScript

\n

改用 TypeScript 可以避免很多类型问题和低级错误,最重要的是可以保证数百名贡献者保持一致难以出错和后续贡献的路由代码质量不至于太糟糕

\n

主要改动:

\n\n

\"image\"

\n\n

CommonJS -> ESM

\n

ESM 是几年前一些 Node.js 核心开发者强推的规范,它有一些优点,但最多的是与之前 CommonJS 不兼容带来的生态割裂和功能简化带来的诟病

\n

经过这几年的发展,现在可以说大部分场景勉强可用了,tsx 也为 CommonJS 和 ESM 混用的场景提供了支持

\n

虽然已经尽了最大努力,但还是有一些 CommonJS 代码暂时难以迁移,导致现在只能使用 tsx 运行,与一些 Serverless 比如 Vercel 没法兼容,但也有机会后续慢慢解决

\n

主要改动:

\n\n

\"image\"

\n

\"image\"

\n

art-template -> JSX

\n

art-template 是一个支持 koa 的模板引擎,记得六年前还有一个更流行的模板引擎,但是不记得名字了,选用 art-template 是因为那个更流行的我当时没看懂,这个很简单

\n

Hono 自带了 JSX 支持,JSX 就不用多介绍了,根正苗红的 JavaScript 的语法扩展,等同于用 React

\n

主要改动:

\n\n

Jest -> Vitest

\n

Jest 是曾经流行的测试框架,但是在 ESM 时代到来之后就越来越不行了,对 ESM 的支持一直是实现性「experimental support」,现在更流行的是 Vitest 了

\n

主要改动:
\nhttps://github.com/DIYgod/RSSHub/commit/38e42156a0622a2cd09f328d2d60623813b8df28

\n

Got -> ?

\n

目前使用的 Got 也已经是不积极维护的状态了,也没有找到好的替代品,后续也许会换成原生 Fetch 或者自封装的 Fetch,还没有动手

\n

新路由标准

\n

我自己能力还是不够的,在与社区开发者们讨论的过程中学习和改进了很多,过程很有意思:https://github.com/DIYgod/RSSHub/issues/14685

\n

主要改动:
\nhttps://github.com/DIYgod/RSSHub/pull/14718

\n

\"image\"

\n

历史

\n

新标准主要为了解决路由信息过于分散的问题,这次应该算第三版

\n

第一版来自 RSSHub 开发阶段,当时没有预见到路由数量会有这么多,所以几乎没什么规划,所有路由在同一个文件中注册,然后再去增加路由脚本和文档,后来这个文件越来越大,很容易冲突,另外所有路由脚本都会在启动阶段被加载,程序性能越来越差

\n

第二版来自 NeverBehave 维护的时期,引入了命名空间,切割了 router.js、radar.js,同命名空间的路由集中在了一个同文件夹中和一个或多个 Markdown 文档中,还实现了懒加载,极大提升了可维护性和性能,但还是会分散在多个文件中,不同文件的信息也容易出现不一致导致错误

\n

现在

\n

本次把路由文件分为了两类,namespace.ts 和任意名字的路由文件

\n

namespace.ts 会通过导出名为 namespace 的对象来定义命名空间的信息

\n
import type { Namespace } from '@/types';\n\nexport const namespace: Namespace = {\n    // ...\n};\n\n
\n

namespace 包含的字段通过 TypeScript 限制为

\n
interface Namespace {\n    name: string;\n    url?: string;\n    categories?: string[];\n    description?: string;\n}\n
\n

这些信息会经过编译后被文档和 RSSHub Radar 利用

\n

路由文件会通过导出名为 route 的对象来定义路由的信息

\n
import { Route } from '@/types';\n\nexport const route: Route = {\n    // ...\n};\n
\n

route 包含的字段通过 TypeScript 限制为

\n
interface Route {\n    path: string | string[];\n    name: string;\n    url?: string;\n    maintainers: string[];\n    handler: (ctx: Context) => Promise<Data> | Data;\n    example: string;\n    parameters?: Record<string, string>;\n    description?: string;\n    categories?: string[];\n\n    features: {\n        requireConfig?: string[] | false;\n        requirePuppeteer?: boolean;\n        antiCrawler?: boolean;\n        supportRadar?: boolean;\n        supportBT?: boolean;\n        supportPodcast?: boolean;\n        supportScihub?: boolean;\n    };\n    radar?: {\n        source: string[];\n        target?: string;\n    };\n}\n
\n

之前 route.js mantainer.js radar.js 和文档的信息都被集中在这一个文件中,减少了多处定义也减少了出错的可能

\n

实现

\n

实现逻辑就是开发环境通过遍历整个 route 文件夹,找到所有 namespace.ts 和路由文件,读取信息,加载路由,在生成环境使用提前编译好的路径列表来避免遍历和不必要的加载过程,代码在:https://github.com/DIYgod/RSSHub/blob/master/lib/registry.ts

\n

文档也是通过遍历 route 文件夹,找到所有需要的信息然后合成一系列的 Markdown 文件,不再需要手动维护,代码在:https://github.com/DIYgod/RSSHub/blob/master/scripts/workflow/build-routes.ts

\n

当然使用之前路由标准开发的路由都需要迁移到新标准而不是直接放弃掉,已经通过脚本批量抓取整理信息后做了替换,但特别是文档比较混乱也有很多错误,所以抓取的信息也有很多错误,只能在后续逐渐人工修改了

\n

未来

\n

通过这一系列改进,RSSHub 终于能够扔掉历史包袱,安心开发新功能了,这里列出我积累的一些想法抛砖引玉:

\n\n

最后,开源是一件很昂贵的事情,RSSHub 能活到现在离不开这些开发者的帮助

\n

\"\"

\n

以及这些赞助的好心人

\n

\"\"

\n

如果 RSSHub 正在帮助你,也希望你可以积极参与进来,为信息自由的未来贡献一份自己的微小力量

","url":"http://localhost:2222/api/redirection?characterId=10¬eId=2532","image":"ipfs://QmUofaeyjsm8F65Z93HQxYLxFYzCZN9LimW5Q5y91zTTfQ","date_published":"2024-03-10T19:29:08.000Z","tags":["post","创作集"],"author":{"name":"DIYgod","url":"http://localhost:2222/api/redirection?characterId=10","handle":"diygod"}},{"id":"10-291","title":"2022 年终总结","summary":"相比国内的魔幻日常,今年在苏格兰的生活还是很安稳的","content_html":"

相比国内的魔幻日常,今年在苏格兰的生活还是很安稳的

\n
\n

\"image\"

\n
\n

年度最佳

\n

先从快乐的 DIY 年度最佳颁奖仪式开始吧

\n

影视

\n

看过的 19 部动漫和 18 部剧集和 6 部电影:https://movie.douban.com/people/62759792/collect?mode=list

\n

DIY 年度番剧: 《鬼灭之刃 游郭篇》

\n

今年动漫神仙打架,《夏日重现》、《来自深渊》、《赛博朋克》、《间谍过家家》、《更衣人偶坠入爱河》、《电锯人》... 太多优秀的作品,但其中最喜欢的还是《鬼灭之刃 游郭篇》

\n

鬼灭老粉了,燃点和泪点都很戳我,凯旋而归,谢谢飞碟社款待

\n
\n

\"image\"

\n
\n

DIY 年度剧集: 《人民公仆》

\n

闪闪发光的剧集和主角,但生活永远比戏剧更魔幻,愿世界没有战争

\n
\n

\"image\"

\n
\n

DIY 年度电影:无

\n

今年电影看得实在太少了,没有遇到能欧呼一整年程度的电影

\n

图书

\n

今年看过的 9 本书:

\n\n

虽然数量屈指可数,但相比 2021 年的 1 本还是有了很大的进步,带来的收获和快乐也不少

\n

DIY 年度图书:《富兰克林自传》

\n

《富兰克林自传》是对我影响最大的一本,朴实无华的语句中处处透漏着人生智慧和实用主义思想,给我带来了很多思考,其中每日自省的 13 条美德也被我沿用

\n
\n

\"image\"

\n
\n

电子产品

\n

DIY 年度电子产品: 米家 PGG 颈椎按摩仪

\n

相比于《颈椎病康复指南》,按摩仪要实用得多, 程序员必备,注意一定是带全身按摩贴的米家 APP 款,腰酸背痛时候的救命神器,反而颈椎按摩功能感觉没那么好用

\n

产品链接:https://www.mi.com/shop/buy/detail?product_id=14282

\n
\n

\"image\"

\n
\n

应用

\n

DIY 年度应用:Obsidian

\n

在 Notion 出 bug 弄丢了我一堆笔记后,我开始寻找本地笔记应用,就这样发现了 Obsidian, 瞬间被它强大的自动化能力和极高的自由度吸引,具体见《基于 Obsidian 的生活记录系统》。但缺点也很明显,受限于 Markdown 格式,表格和排版能力比 Notion 弱了很多,本地为主所以协作和分享做得也不够

\n
\n

\"image\"

\n
\n

游戏

\n

今年玩的游戏:

\n\n

DIY 年度游戏:艾尔登法环

\n

开放世界、魂系,手残也能玩,艾尔登法环是神

\n

印象最深的是狼哥的剧情,实在不忍心,我扭头就跑,强行 happy ending

\n
\n

\"image\"

\n
\n

手办

\n

DIY 年度手办:绊爱 Hello World 金发 Ver. 手办

\n

太可爱了,虽然一直在延期,苦等了两年,等到绊爱本尊都休眠了,但看到实物的一刻一切都值得了

\n
\n

\"image\"

\n
\n

生活

\n

去年年底终于结束了异国恋跟发小团聚了,心理健康和生活质量都改善了不少

\n

还有体重

\n

\"image\"

\n

酸奶很遗憾没能带来,各种手续早就准备好了,但一直没等到中英的直航,中介给的最好方案是从马来西亚中转,耗时很长,很担心安全就先算了

\n

\n

英国的食物一直让我很痛苦,但一个人的时候做饭时间效益很低,两个人就不一样了,做饭时间差不多但收益加倍,还省了洗碗的时间

\n

一开始是发小做,但发小实在没什么做饭天赋,还偶尔触发火警,让我又痛苦又害怕,后来就换成了我做

\n

起步是从 B 站的 泡厨房的顾小胖美食作家王刚 R 学的,刚开始有点手足无措,入门之后发现很多东西都是通用的,还是挺容易的

\n

比较满意的有番茄腊肠焖饭、番茄鸡蛋面疙瘩汤、可乐鸡翅、辣椒炒肉、包菜炒肉、寿喜锅、番茄肉酱芝士意面

\n

\"IMG_3404\"

\n

\n

苏格兰租房的法律保障很完善,但找房子特别麻烦,一方面因为房东需要负很多法律责任,就会很谨慎,另一方面苏格兰人口稀少,房子流动性差,再加上今年我所在城市的大学不负责任地扩招了很多很多,狼多肉少

\n

\"IMG_2658\"

\n

在苏格兰正常租房房东一般会要求有比较高的收入、本地担保人、工作证明、公司推荐信、上任房东推荐信、第三方信用检查等等一大堆资料,其中信用检查一般还会要求在英国有 6 个月以上的稳定住所,都满足条件后就有资格申请看房了,看房是必须的,相当于找工作的面试,在双方都满意后,就有资格提交租房申请了,房东在收到足够的申请后,会从中挑选一个最喜欢或条件最好的申请者来租,如果有幸被选中,这才完成了租房的过程

\n

所以过程不是一般的困难,我从 8 月份开始就每天沉浸在各大租房网站,一封封私信一通通电话,周边 Airbnb 都快住遍了,心酸曲折都是寻常,好在结局是好的,终于在 10 月租到了远超预期满意的房子,房东是个很会生活的室内建筑师,布局、装修都超棒,街区安全便利,光线充足,有地暖和大电视,还带一个很好玩的阁楼

\n

\n

今年被发小拉着去了很多地方

\n

\"image\"

\n

1 月

\n

在诺丁汉和 Henry 一家过年,放烟花和看鹿打架

\n

\"IMG_3424\"

\n

4 月

\n

和 Henry 一家在湖区国家公园自驾游

\n

\"IMG_3433\"

\n
\n\n
\n

接着还去了伦敦

\n

\"IMG_3434\"

\n
\n\n
\n

5 月

\n

曼彻斯特,GAY 街和一家漫画店(当时还不知道链锯人)

\n

\"IMG_3421\"

\n

7 月

\n

和 Henry 一家去北爱尔兰和苏格兰高地(这里拖更了一个 vlog)

\n

\"IMG_3437\"

\n

\"IMG_3438\"

\n

跟发小同学去周边爬山和野餐

\n

\"image\"

\n

8 月

\n

和 Henry 一家、年年去了伯明翰,没去成发小想玩的实弹射击,缩在酒店通宵玩剧本杀

\n

\"IMG_2630\"

\n

12 月

\n

去了利物浦、巴塞罗那,和粗粗去了罗马、梵蒂冈、威尼斯、米兰、苏黎世、因特拉肯、巴黎

\n

在巴塞罗那被偷了手机,但是波盖利亚市场便宜又好吃,好喝的鲜榨果汁只要一欧;在罗马发现意大利的意大利面很难吃;在梵蒂冈过了圣诞节,还第二次得了新冠;威尼斯到处都是水,没有公交车只有公交船;在米兰吃到了很好吃的北京烤鸭,但粗粗作为一个北京人吃得很生气;发小在因特拉肯滑雪扭伤了腿,被几个瑞士好心人从雪山上背着滑下来,取消了冰岛的行程;在巴黎的急诊室跨年;在机场发小作为残疾人享受到了超 VIP 服务...

\n

后面还会补一个 vlog

\n

\"IMG_6093\"

\n

一些小事

\n

还有一些让我印象深刻的小事

\n

1 月

\n

学校公园的松鼠很亲人,跟可爱的小松鼠击了掌 Twitter

\n

\"image\"

\n

6 月

\n

感染了新冠,发了几天烧,但也没什么大不了的 Twitter

\n

\"image\"

\n

7 月

\n

小米 10 Pro 电池鼓包,在英国没地方修,就在淘宝转运了一块第三方电池,成功换上 Twitter

\n

\"image\"

\n

10 月

\n

空中出现的黑魔标记(奇怪的云)

\n

\"image\"

\n

11 月

\n

送发小上学路上看到了双彩虹 Twitter

\n

\"image\"

\n

薅了 20TB 机械硬盘,见新玩意 | 2022 黑五买了啥?

\n

\"IMG_3012

\n

12 月

\n

《苏格兰居民可下楼活动》 这篇博客应中国政府要求删除,成为了 “正确的集体记忆” 的一部分

\n

(原来被墙了也会被盯着,也可能被盯得更紧

\n

\"image\"

\n

生活管理

\n

从 2020 年就开始使用子弹笔记记录每天的生活(见《2020 年终总结
\n》
《基于 Obsidian 的生活记录系统》),这对我帮助很大,可以帮助我及时了解最近的生活状态,还部分弥补了我记忆力差的缺点

\n

\"image\"

\n

之前有看到 新一 每周会公开发布自己的周报,感觉也是个很好的形式,公开能让自己更认真地对待生活和可以获得一些朋友的反馈,所以也在考虑开始公开写周报或月报

\n

越来越感觉生活记录 all-in-one 不太可行,所以把一些功能分给了 Toggl 和 TickTick,使用 Toggl 记录每个时间点在做什么和某些事项花费了多少时间,使用 TickTick 做任务管理

\n

另外还在使用 Eagle 管理图片(期待下个大版本的插件系统),Anybox 管理书签,MoneyWiz 管理钱

\n

生产

\n

今年公司发展得非常快,也面临了很多挑战,变得越来越强了,具体见 《给 RSS3 社区的一封信》,很高兴熊市没给我们造成太大的影响,我们还可以继续做喜欢和有意义的事情

\n

公司项目(几乎)都是开源的所以现在也不用分开总结了,这也让今年参与的仓库有很多,有很多有意思的项目,而其中我花了比较多时间和最喜欢的是 xLog,它是一个依托于 Crossbell 区块链的博客平台,所有文章、订阅、评论等都会上链,也是当前博客用的平台,你可以在页面底部看到本文的区块链信息

\n

但今年对旧项目的维护缺席了很多,RSSHub 工作不能停所以出钱找了 TonyRL 来做日常维护,而其他项目的维护几乎为零

\n

\"contributions

\n

2023

\n

在英国的最后一年,下半年会去新加坡了

\n

愿望

\n

最大的愿望是可以早日跟酸奶团聚 😭

\n

已经过了身体巅峰年龄,第二愿望是身体健康

\n

OKR

\n

2023 Q1 的个人 OKR

\n\n

🥳 2023 快乐!

","url":"http://localhost:2222/api/redirection?characterId=10¬eId=291","image":"https://ipfs.4everland.xyz/ipfs/bafybeieowx3ddxwiedrlgckrohchscdiomz3yi2snrxnvjlwypxf6nxpsu","date_published":"2023-01-12T00:45:20.000Z","tags":["post","日记本"],"author":{"name":"DIYgod","url":"http://localhost:2222/api/redirection?characterId=10","handle":"diygod"}},{"id":"56516-237","title":"YouTube油管镜像网站","summary":"YouTube 油管镜像网站介绍 Piped 一个开源的 YouTube 油管镜像网站,无广告,无追踪,轻量级,支持深色和浅色主题,支持 4K,支持 PWA,不连接 Google 服务,对国内网络环境非常友好了,A 姐我试了一下,内容没有过滤,而且电信网络可以直接播放…","content_html":"

YouTube 油管镜像网站介绍

\n

Piped 一个开源的 YouTube 油管镜像网站,无广告,无追踪,轻量级,支持深色和浅色主题,支持 4K,支持 PWA,不连接 Google 服务,对国内网络环境非常友好了,A 姐我试了一下,内容没有过滤,而且电信网络可以直接播放,其他的网络的 话大家自行测试,这种 YouTube 油管镜像网站可以推荐给身边网络不好有需要使用 YouTube 油管服务的同学。
\nYouTube 油管镜像网站
\nPiped:https://piped.kavin.rocks/

\n

油管 Youtube 镜像网站 - INVIDIOUS

\n

INVIDIOUS 是一个油管 Youtube 镜像网站,而且开源免翻,支持多种语言,无需登录,不追踪,无广告,不过滤,支持订阅和 YouTube 数据导出导入,A 姐试了一下,虽然可以打开,播放速度的话还是得看你的网络,毕竟这个油管 YouTube 镜像的服务器在国外的,可以挑一个速度还行的访问。
\n油管 Youtube 镜像网站
\n镜像列表:https://redirect.invidious.io/(免翻墙)

\n

LibreTube 是一款安卓版的开源 YouTube 镜像软件,简单来说就是一款油管的第三方客户端,不过这款软件可以使用国内网络直连,界面非常清爽,免登录无广告,视频质量也 1080p 以上,连会员费都省了,对于国内网络不好的朋友非常赞的,然后 A 姐搜索了一下即使国内网络访问貌似没有过滤掉某些账号和内容,估计是全部同步的,目前都是流畅播放的,低调用了。

\n

\"image\"

","url":"http://localhost:2222/api/redirection?characterId=56516¬eId=237","image":"https://ipfs.4everland.xyz/ipfs/QmUMPhn5RtjFNZ2K3AN2Kp7YnNjnMSWe7ZA5FyMSP9uDmm","date_published":"2023-12-16T12:54:04.000Z","tags":["post","技术"],"author":{"name":"andrewji8","url":"http://localhost:2222/api/redirection?characterId=56516","handle":"andrewji8-9527"}},{"id":"10-914","title":"我得了软件更新强迫症","summary":"我必须让身边所有软件都保持最新版本,就像走路不能踩到地砖缝缝一样,没有意义,但也危害不大,所以我放任它发展","content_html":"

我必须让身边所有软件都保持最新版本,就像走路不能踩到地砖缝缝一样,没有意义,但也危害不大,所以我放任它发展

\n
\n

\"image\"

\n
\n

操作系统和固件

\n

最基础的,大到主力生产力 MacBook,小到吃灰的 Dockcase 扩展坞,都要更新,这是我的 Checklist,基本上靠更新提醒就够了

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
设备截图
MacBook\"image\"
NAS\"image\"
路由器\"image\"
iPad\"IMG_0531\"
iPhone\"IMG_6D8DCEB3D457-1\"
小米手环\"IMG_3744\"
小米家居\"IMG_3745\"
相机\"Pasted
PS5\"image\"
Switch\"image\"
Dockcase 扩展坞\"Pasted
\n
\n

应用

\n

操作系统下的应用也需要更新

\n

MacBook

\n

Homebrew Cask 出现之前 macOS 的应用更新一直是一个难题,App Store 的自动更新最好用但是应用很少,曾经困扰了我很久,但现在没问题了

\n

对 macOS 的应用我秉持这样的原则:

\n\n

其中 Web 版不需要更新,App Store 会自动更新,Homebrew 只需要每天执行下命令

\n
brew update && brew upgrade && brew cu -a -y && brew cleanup\n
\n

但 App Store 有时候会好几天才能自动更新上,这不能忍,安装上 mas 用命令行触发强制更新,再加上鼠须管的词库更新和 alias,下面就是我的总命令了

\n
alias up=\"brew update && brew upgrade && brew cu -a -y && brew cleanup && mas upgrade && ~/plum/rime-install iDvel/rime-ice:others/recipes/full\"\n
\n

\"image\" \"image\"

\n

NAS

\n

有两部分,群晖的套件会自动更新,Docker 部分用 Watchtower 自动更新

\n

\"image\"

\n

其他

\n

iPad 和 iPhone 应用虽然也会自动更新,但也是经常好几天才更新,所以每天早上起床第一件事就是手动刷一下这两个的更新,其他不那么常用的设备就等提醒或自动更新,这个还是能忍的,毕竟我的强迫症还没那么严重

\n

插件

\n

应用内的插件也需要更新

\n

浏览器

\n

通常会自动更新,但也有遇到卡住几天都没更新的情况,还不是很懂,偶尔会去手动点下 Update,这些是我目前用到的浏览器插件

\n

\"image\"

\n

Obsidian

\n

Obsidian 的 community plugins 和 themes 都需要更新,官方没有自动更新的方法,可以通过再装一个插件 Beta Reviewers Auto-update Tester 来实现自动更新,这些是我目前用到的 Obsidian 插件

\n

\"image\"

\n

VS Code

\n

VS Code 有很好的自动更新,这些是我目前用到的 VS Code 插件

\n

\"image\" \"image\"

\n

Home Assistant

\n

Home Assistant 就没那么顺利了,我装了一个 Home Assistant Community Store (HACS) 来获取更多的集成,但它没有自动更新,也没有更新提醒,要点进去才能看到

\n

\"image\"

\n

项目依赖

\n

项目的依赖也需要更新,我用 Dependabot 来自动提交依赖更新的 pr,对于有完善自动化测试的项目,比如 RSSHub,就可以再用 Github Action Merge Dependabot 自动合并,一秒都不用多等

\n
  automerge:\n    if: github.actor == 'dependabot[bot]' && github.event_name == 'pull_request'\n    needs: [ jest, puppeteer, docs, all ]\n    runs-on: ubuntu-latest\n    permissions:\n      pull-requests: write\n      contents: write\n    steps:\n      - uses: fastify/github-action-merge-dependabot@v3\n        with:\n          github-token: ${{ secrets.GITHUB_TOKEN }}\n          target: patch\n
\n

Changelog

\n

默默更新有时候还是不够的,对一些重要或者感兴趣的软件我会用 RSS 订阅它们的 Changelog,及时了解它们都更新了什么

\n

\"image\"

\n

目前想到的只有这些了,习惯了的话检查一遍很快的,就能换来一整天的舒适

\n

不要学我,即使学了也不要说是我教的

\n","url":"http://localhost:2222/api/redirection?characterId=10¬eId=914","image":"https://ipfs.4everland.xyz/ipfs/bafybeidy2jmclbfvtlgv2fluz2rglny7wkbdbyd3y4teqnmibp36y6ihrq","date_published":"2023-04-08T22:59:58.000Z","tags":["post","闲言语"],"author":{"name":"DIYgod","url":"http://localhost:2222/api/redirection?characterId=10","handle":"diygod"}},{"id":"65380-25","title":"免费AI服务列表(持续更新)","summary":"本文提供免费使用AI服务的网站列表。在我自己收集的列表基础上,参考两位大佬的成果,在验证后写就此文。该列表将持续更新。","content_html":"

在互联网上,存在很多支持开源和公益项目的大佬。正是他们以及他们提供的服务,为其他人提供了巨大的便利。我在这里收集这些大佬提供的、可供免费使用人工智能服务的列表;此列表将持续更新,方便来者;欢迎提供反馈,维持这个列表。

\n

免费 ChatGPT4 服务:

\n\n

免费 ChatGPT4o 服务:

\n\n

免费 ChatGPT3.5 服务:

\n\n

免费 Gemini Pro:

\n\n

New Bing or Copilot:

\n\n

Devv 或其他

\n\n

观察、失效列表

\n\n

参考、致谢、说明:

\n\n

说明
\n敬请关注免费 ChatGPT 服务列表最新);

\n

本文在自己收集部分可供免费使用的人工智能服务列表基础上,参考源一源二源三,逐一测试验证而写出;后面也将定期地予以更新。读者可以反馈,更新这个列表。

\n

3 月 10 日发布初稿、3 月 11 日、3 月 12 日、3 月 14 日、3 月 17 日、3 月 31 日、4 月 19 日、5 月 7 日、8 日,5 月 10 日、6 月 17 日、7月4日更新。

\n

注明:因 ChatGPT-3.5 已经可以通过官网直接使用,因而以上收集的 ChatGPT-3.5 的服务列表意义不大。而公益的 ChatGPT-4 服务站点,会面临各种困难、经常会出现不稳定的状态,分享 ChatGPT-4 公益站点的价值似乎不大。同时,收集、测试以上服务的有效性,需要大量的时间,在读者几乎没有反馈、更新列表的情况下,我决定,后期更新会比较随意,大家可以通过付费、或其他第三方渠道使用 ChatGPT-4。

\n

关注 AI 的朋友,可以看这篇文章:基于 Coze 和 Telegram 自制 ChatGPT-4 服务

\n

敬请关注

\n\n

本文原创、码字不易,如对你有所帮助,请帮忙点赞;保存或转发时,请保留本文固定链接同步地址。谢谢。

","url":"http://localhost:2222/api/redirection?characterId=65380¬eId=25","image":"ipfs://QmSntEpBQp4yoDyfguZf4hB7pbNM1D8cfW1vc5xsdbEojr","date_published":"2024-03-10T14:52:53.000Z","tags":["post","AI","ChatGPT4","ChatGPT3.5","Gemini Pro","Copilot","New Bing","Claude3","Genimi 1.5 Pro","ChatGPT-4"],"author":{"name":"iGdux","url":"http://localhost:2222/api/redirection?characterId=65380","handle":"igdux"}},{"id":"59542-188","title":"進階語法速查","summary":"推薦閲讀: xLog 风味的 Markdown 其中帶有+的為本站特殊樣式\n\n摺叠块\n點我 就像這樣 點我, 但是默認開啓 就像這樣\nCopy\n
\n點我\n 就像這樣\n\n
\n

推薦閲讀: xLog 风味的 Markdown
\n其中帶有+的為本站特殊樣式

\n
\n
\n

摺叠块

\n
\n點我\n 就像這樣\n
\n
\n點我, 但是默認開啓\n 就像這樣\n
\n
<details>\n<summary>點我</summary>\n  就像這樣\n</details>\n\n<details open>\n<summary>點我, 但是默認開啓</summary>\n  就像這樣\n</details>\n
\n

拼音

\n\n漢\nhàn\n字\n\n\n
<ruby>\n漢\n<rt>hàn</rt>\n字\n<rt>zì</rt>\n</ruby>\n
\n

居中塊

\n
\n卿雲爛兮,\n

糺縵縵兮。

\n

日月光華,

\n

旦復旦兮。

\n
\n
<div style=\"text-align: center;\">\n\n</div>\n
\n

注釋

\n\n
<!--不會顯示的-->\n
\n

換行

\n


\n
換<br>行\n
\n

分割綫

\n

Markdown:

\n
\n
\n
\n

HTML:

\n
\n
Markdown:\n\n---\n\n***\n\n___\n\nHTML:\n\n<hr>\n\n
\n

+ 按鍵樣式

\n

Ctrl+Alt+Del

\n
<kbd>Ctrl</kbd>+<kbd>Alt</kbd>+<kbd>Del</kbd>\n
\n

任務列表

\n\n
- [ ] 1st\n- [x] 2nd\n
\n

字體顔色

\n

ミク

\n
<span style=\"color:#39c5bb\">ミク</span>\n
\n

背景色

\n

Tianyi

\n
<span style=\"background-color:#66ccff;\">Tianyi</span>\n
\n

竪排文本

\n

長風破浪會有時
直挂雲帆濟滄海

\n
<span style=\"writing-mode: vertical-rl;\">長風破浪會有時<br>直挂雲帆濟滄海</span>\n
\n

轉義符號 & 禁用自動識別網址和 AT

\n

https://cloud.sd.cn
\n@sino
\nhttps://www.bilibili.com/video/BV1qH4y1X7KZ/

\n
`https://cloud.sd.cn`\n`@sino`\n`https://www.bilibili.com/video/BV1qH4y1X7KZ/`\n
\n

** 你好 **
\n**你好**

\n
\\*\\*你好\\*\\*\n`**你好**`\n
\n

嵌入頁面

\n\n
<iframe src=\"https://xlog.app\" seamless width=\"100%\" height=\"auto\" ></iframe>\n
\n

一個簡單的雙欄

\n
\n

你站在桥上看风景,
看风景人在楼上看你。
明月装饰了你的窗子,
你装饰了别人的梦。
--<斷章>

\n
\n
\n\n
\n
\n
<div style=\"float:left; width: 40%; padding: 0 4%\">\n\n你站在桥上看风景,<br>看风景人在楼上看你。<br>明月装饰了你的窗子,<br>你装饰了别人的梦。 <br>--<斷章>\n\n</div>\n<div style=\"float:left; width: 40%; padding: 0 4%\">\n\n<img src=\"https://ipfs.crossbell.io/ipfs/Qme355FvYXeLaDxNKWisf3WiwbjDvJo1e7GJKiYFiQKER7?img-quality=75&img-format=auto&img-onerror=redirect&img-width=384\">\n\n</div>\n<div style=\"clear:both;\"></div>\n
\n

+ 黑幕

\n

奇奇怪怪

\n
<span class=\"heimu\" title=\"你知道的太多了\">奇奇怪怪</span>\n\n
\n

脚注

\n

由此可知1

\n
由此可知[^1]\n\n[^1]: 顯而易見\n
\n

Footnotes

\n
    \n
  1. \n

    顯而易見

    \n
  2. \n
\n
","url":"http://localhost:2222/api/redirection?characterId=59542¬eId=188","image":"https://ipfs.crossbell.io/ipfs/Qme355FvYXeLaDxNKWisf3WiwbjDvJo1e7GJKiYFiQKER7?img-quality=75&img-format=auto&img-onerror=redirect&img-width=384","date_published":"2024-09-16T08:47:47.000Z","tags":["post","t","s"],"author":{"name":"「雲華」CloudSino","url":"http://localhost:2222/api/redirection?characterId=59542","handle":"sino"}},{"id":"10-50","title":"第一个开源链上博客系统 xLog","summary":"我的个人博客已经运行了接近 9 年,跟着我慢慢发展,现在几乎已经成为了我的个人发展史,折腾博客也从很久以前就成为了我的一个爱好,但随着对 Hexo 的越来越不满,我决定做一个更现代化的全新的博客系统","content_html":"

Talk is cheap

\n

GitHub:https://github.com/Crossbell-Box/xLog

\n

官方实例:https://xlog.app

\n

使用案例

\n\n

动机

\n

我的个人博客已经运行了接近 9 年,跟着我慢慢发展,现在几乎已经成为了我的个人发展史,折腾博客也从很久以前就成为了我的一个爱好,但随着对 Hexo 的越来越不满,我决定做一个更现代化的全新的博客系统。

\n

我不想仅仅满足自己的需要,它需要开源和足够开放,来满足更多人的需求。

\n

我不想让我珍贵的数据被中心化平台绑架,又不想麻烦维护一个数据库或服务器,它需要兼顾数据所有权和便利,所以我选择了区块链。

\n

最后,它需要使用较新的技术栈,提供一个更好的开发和维护体验。

\n

功能

\n

区块链,所有博客数据,包括网站配置、文章、关注、评论、点赞等,都由你签名并存储在区块链上,以 NFT 的形式存在,只能由掌管私钥的你自己控制。

\n
\n

Mirror.xyz 的区别:狡猾的一点是,Mirror 是通过他们的官方账号而不是用户自己发起的交易把内容存到了链上。这使得用户需要依赖 Mirror 这个中心化平台才能发布和修改自己的内容,内容在链上的控制权也是属于 Mirror 平台而不是用户自己。

\n
\n

\"xlog4\"

\n

丰富的交互,你可以在区块链上关注你喜欢的博客,评论、点赞文章或把文章铸造为 NFT。

\n

\"xlog2\"

\n

高度可定制,自定义域名、导航栏、自定义样式等,当然,它们都是存储在区块链上的。

\n

\"xlog3\"

\n

技术实现

\n

xLog 基于另一个开源项目 proselog 开发,使用 Next.js + Tailwind CSS + TypeScript + TanStack Query 构建,有着完善的 SPA、SSR、状态管理和优秀的开发体验。

\n

区块链使用的是专用于社交活动的 EVM 兼容区块链 Crossbell,速度更快且无需购买 gas 免费使用。还能与 Crossbell 其他生态项目无缝衔接,比如你就可以在 Crossbell.io feed 上以信息流的形式查看你订阅的所有 xLog 的动态。

\n

每个博客都是一个属于你的 NFT,它的配置和文章都以符合 Crossbell 规范的格式存储在 NFT 中。创建一个博客就是 mint 一个 NFT,发布一篇文章或一条评论就是对 NFT 增加一项内容,关注一个博客就是修改你的关注列表 NFT。

\n

它是完全开源的,如果感兴趣可以直接去 GitHub 看源码。

\n

存在问题

\n
    \n
  1. 需要安装一个以太坊钱包才能进行操作,这对没有接触过区块链概念的普通用户可能是一个较大的负担。虽然区块链是一个非常适合的解决方案,但目前区块链在很多普通人眼中已经与割韭菜、炒币画上等号,这更增加了选择区块链作为实现的 xLog 被广泛接受的难度。
  2. \n
  3. 链上操作都是透明和不可撤销的,这导致用户无法真正删除一篇文章,通过区块链历史可以看到文章的修改记录。
  4. \n
\n

未来计划

\n

目前还只是一个最小化可用产品,功能可能还不太丰富,但未来会增加主题系统和插件系统,来提供更丰富的样式和功能选择。

\n

另外还计划在获取收益和博客之间的连接上做更多探索,希望可以让写博客 (而不是折腾博客) 这件事变得更有趣一些。

","url":"http://localhost:2222/api/redirection?characterId=10¬eId=50","image":"https://ipfs.4everland.xyz/ipfs/bafkreidazbwui2bqm6crk54qadjwvfjycvxzojwuakyfn4q5aitvlr773a","date_published":"2022-09-23T03:26:49.000Z","tags":["post","分享境"],"author":{"name":"DIYgod","url":"http://localhost:2222/api/redirection?characterId=10","handle":"diygod"}},{"id":"10-471","title":"你你你你要跳舞吗?","summary":"看微小微的视频有三个阶段,刚开始大脑会瞬间被疯狂溢出的快乐猛烈冲击,开始嘴角上扬,眼睛瞪大,理智被快乐占据;然后是羞耻,大脑在颤抖抖抖抖抖,残存的理智让你羞耻得想关掉视频,但这时候已经晚了,身体无法承受的超量快乐让你无法行动,让你继续“人生中最漫长的三分钟”;最后视频结束,你会震惊,为什么!为什么会在大庭广众做这种事!为什么会这么羞耻这么尴尬!为什么我看完了!为什么我这么快乐!","content_html":"
\n

\"image\"

\n
\n
\n\n
\n

微小微一直是我最喜欢的 UP 主,没有之一。

\n

记得入坑作是 【微小微】鬼畜舞蹈 江南皮革厂倒闭了 (纯属好玩),然后又看了一些羞耻的 “广场舞”,就是在大庭广众下跳羞耻的舞蹈。看微小微的视频有三个阶段,刚开始大脑会瞬间被疯狂溢出的快乐猛烈冲击,开始嘴角上扬,眼睛瞪大,理智被快乐占据;然后是羞耻,大脑在颤抖抖抖抖抖,残存的理智让你羞耻得想关掉视频,但这时候已经晚了,身体无法承受的超量快乐让你无法行动,让你继续 “人生中最漫长的三分钟”;最后视频结束,你会震惊,为什么!为什么会在大庭广众做这种事!为什么会这么羞耻这么尴尬!为什么我看完了!为什么我这么快乐!

\n

然而影响还没有结束,你的生活在潜移默化中被治愈了,虽然没有意识到发生了什么,但你对热爱的事物多了一点勇气,对生活多了一点热情,还把简介改成了 “写代码是热爱,写到世界充满爱!”,回过神来,原来是在笨拙模仿微小微的简介 “跳舞是热爱,跳到世界充满爱!”,微小微把舞蹈和快乐跳到了世界各地,你也写开源项目帮助到了世界各地的人。

\n

真是个美好的故事,现在结束了么?(是的话也不会有今天的文章了 🤣

\n

这么自信阳光的女孩子一定从小就闪闪发光,在蜜罐长大的吧,所有人都会这样理所当然地认为,我也是,直到看到了微小微今天发布的视频。

\n
\n\n
\n

泰戈尔说的 “世界以痛吻我,我要报之以歌” 在这里得到了完美的诠释,重新看 “跳舞是热爱,跳到世界充满爱!” 这句话又有了不一样的感受,更加感觉自己只是一个拙劣的模仿者。

\n

正好几个月前看了一本书《被讨厌的勇气》也讲了这样的观点:“决定我们自身的不是过去的经历,而是我们自己赋予经历的意义”。我当时秉持了一些怀疑,现在有了更深的理解。人之所以有不幸并不是因为过去或者环境,更不是因为能力不足,只不过是缺乏勇气,缺乏获得幸福的勇气。这样看微小微是我见过最有勇气的人,我也要继续成长,更有勇气和热情。

\n

我又被鼓舞了,我我我我要跳舞了。

","url":"http://localhost:2222/api/redirection?characterId=10¬eId=471","image":"https://ipfs.4everland.xyz/ipfs/bafybeiey7atdgk7cmji3zqoquqy3yowyf5zj3zk7zrm2nt3ujsro45aw5e","date_published":"2023-03-02T02:45:03.000Z","tags":["post","闲言语"],"author":{"name":"DIYgod","url":"http://localhost:2222/api/redirection?characterId=10","handle":"diygod"}},{"id":"53512-2","title":"电书摊总论","summary":"电书摊总论是本摊所认识到的一些原则性的观点,既可以帮助大家快速穿透本摊,也是我的思考工具。","content_html":"

欢迎来到電書攤 TelebookStall。

\n

电书摊架构

\n

电书摊总论,就是本篇,介绍一些基本观点。电书摊分论,狭义上是总论的延伸与阐述。但由于时间尚未成熟,分论暂以文章分类及索引代替。

\n\n

本摊底层逻辑

\n\n

本摊愿景

\n\n

本摊动因

\n","url":"http://localhost:2222/api/redirection?characterId=53512¬eId=2","image":"ipfs://bafybeihyfzh5eif6r4uq6upxjwlrgdhgz4rssxcops4x6xeuqnjzup4kia","date_published":"2023-05-07T13:24:31.000Z","tags":["post","总论"],"author":{"name":"电书摊telebookstall","url":"http://localhost:2222/api/redirection?characterId=53512","handle":"telebookstall"}},{"id":"10-46","title":"基于 Obsidian 的生活记录系统","summary":"正如我在 2020 年终总结 中提到,我一直在用 Notion 写子弹笔记,现在它有了亿点点不一样,现在我们就来重新窥探一下我目前的生活记录系统","content_html":"

正如我在 2020 年终总结 中提到,我一直在用 Notion 写子弹笔记,现在它有了亿点点不一样,现在我们就来重新窥探一下我目前的生活记录系统

\n

日记

\n

\"image\"

\n

周记月记

\n

\"image\"

\n

年记

\n

\"image\"

\n

原 Notion 子弹笔记

\n
\n\n
\n

受益于 Obsidian 强大的自动化能力和极高的自由度,日 / 周 / 月 / 年笔记通过预设模板自动生成,互相联动,需要手动处理的部分很少

\n

全部文件已上传至 GitHub:https://github.com/DIYgod/DIYgod-Obsidian-Starter,包括主题、插件、配置文件、自己定制的样式、模板文件、示例文件等,只是作为一个示例,请根据自己实际情况修改

\n

这些东西乍一看是有一些复杂,但其实用起来很简单,自由度和可扩展性也很强,下面我来详细介绍

\n

结构

\n

目录结构如日记图左侧栏所示

\n
├── OKR.md\n└── Journal\n    └── 2022\n        ├── W1\n        |   └── 2022-01-01.md\n        |   └── 2022-W1.md\n        ├── 2022-01.md\n        └── 2022.md\n
\n

每天会自动在本周的文件夹中生成当天的日记文件 YYYY-MM-DD.md,每周会自动新建一个周文件夹 [W]ww 和周记 YYYY-[W]ww.md,每月会自动生成月记 YYYY-MM.md,每年会自动新建一个年文件夹 YYYY 和年记 YYYY.md(更正:不是自动,仍然需要命令面板手动触发)

\n

这些文件的内容也都是模板预设好的,已经自动填充了日期、本周期 OKR 分数和图表,甚至当天的位置、天气、月相等信息,还留出了记录当天状态和动态的位置

\n

外面有一个 OKR 文件,大概半年更新一次,里面记录这半年的人生目标,其中有一些目标是需要每天持续努力的,日记系统的很大部分就是围绕这些目标来构建的

\n

目录结构主要通过 Periodic Notes 实现,模板主要通过 TemplaterDataview 和核心插件 Templates 实现

\n

日记

\n

\"image\"

\n

Info

\n

Info 是自动生成的当天信息,包括指向年月周记和 OKR 的链接,位置、天气、月相等信息

\n

位置、天气、月相信息来自 Templater 的调用系统命令功能

\n

获取位置和天气

\n
curl wttr.in/\"$(curl -s --header \"user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36\" https://api.ip.sb/geoip | /opt/homebrew/bin/jq -r \".city\" | sed 's/ /%20/')\"\\?format=\"%l+%c%t\"\n
\n

获取月相

\n
curl wttr.in/\"$(curl -s --header \"user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36\" https://api.ip.sb/geoip | /opt/homebrew/bin/jq -r \".city\" | sed 's/ /%20/')\"\\?format=\"%m\"\n
\n

OKR Tracker

\n

OKR Tracke 跟踪记录当天当前阶段的 OKR 完成状况,比如 Sleep:: 10.3 代表今天睡了 10.3 小时,Healthy Eating:: 5 代表今天吃得很健康,:: 是 Dataview 语法,会给当前页面增加

\n
page = {\n    ...\n    \"Sleep\": 10.3,\n    \"Healthy Eating\": 5,\n}\n
\n

这样的属性,方便接下来在周月年记中做分析和处理

\n

其中 O1 KR2 下有一个特殊的列表,通过 API 展示了当天 Toggl Track 数据, Toggl Track 是一个时间记录应用,记录我每天在各项事务中花费的时间,比如看番时间、刷 B 站时间、工作时间等,这些数据同样可以反映我今天的生产力是否符合预期

\n

Notes

\n

这里是真正写日记的地方,多数是一些流水账,来弥补我天生糟糕的记忆力,偶尔也会写一些想法

\n

周记和月记

\n

\"image\"

\n

Jornal List

\n

Jornal List 是自动生成的本周 / 月全部日记的列表,通过 Dataview 实现

\n

获取全部日记

\n
// Week\nwindow.pages = dv.pages(`\"${dv.current().file.folder}\"`).where(p => p.file.name.match(new RegExp(`${dv.current().file.name.split('-')[0]}-\\\\d{2}-\\\\d{2}`))).sort(p => p.file.name);\n\n// Month\nwindow.pages = dv.pages().where(p => p.file.name.match(new RegExp(`${dv.current().file.name}-\\\\d{2}`))).sort(p => p.file.name);\n
\n

渲染列表

\n
dv.paragraph(window.pages.file.link.join(', '))\n
\n

Summary

\n

这里是月末做总结和反思的地方,对应日记里的 Notes

\n

OKR Tracker

\n

在这里处理和分析全部日记里的 OKR 数据,最后生成分数,对应日记里的 OKR Tracker

\n

它通过 Dataview 实现,以睡眠为例,≥ 6.5 小时且 ≤ 8.5 小时计为有效睡眠,有效睡眠天数占总天数的百分比即为得分

\n
let count = 0;\nlet total = 0;\nfor (let page of window.pages) {\n    if (page['Sleep']) {\n        count++;\n        if (page['Sleep'] >= 6.5 && page['Sleep'] <= 8.5) {\n            total++;\n        }\n    }\n}\nconst score = (total / count * 100).toFixed(2);\ndv.el('div', score + '%', {\n    cls: score > 80 ? 'score-class1' : score > 50 ? 'score-class2' : 'score-class3'\n});\n
\n

再自己加一点 CSS,> 80 分显示为绿色,50-80 分显示为黄色,< 50 分显示为红色,这样就可以很清楚看出本周 / 月的睡觉情况,图里是黄色区间,不太好但还可以接受,下个月需要多留意

\n

Statistics

\n

在这里把睡眠和运动数据生成统计图,可以清楚看出睡眠时长还是挺不稳定的,运动天数和时长都很少

\n

统计图通过 Obsidian Charts 绘制,睡眠统计图代码如下

\n
const times = [];\nfor (let page of window.pages) {\n    times.push(page['Sleep']);\n}\n\nconst chartData = {\n    type: 'line',\n    data: {\n        labels: window.pages.file.name.array(),\n        datasets: [{\n            label: 'Sleep Time',\n            data: times,\n            pointBackgroundColor: '#6c40d6',\n            borderColor: '#6c40d65c',\n            tension: 0.4,\n            spanGaps: true,\n        }],\n    },\n    options: {\n        scales: {\n            y: {\n                type: 'linear',\n                min: 2,\n                max: 13\n            }\n        }\n    }\n}\n\nwindow.renderChart(chartData, this.container);\n
\n

Finance

\n

本月的财务数据饼状图,通过 MoneyWiz 生成

\n

年记

\n

\"image\"

\n

年记与周记月记相似度也很高,但通过扩大时间尺度,可以得出很多新的有用结论

\n

比如同样的睡眠和运动统计图,在年的尺度里就可以看出我是在 5 月底睡眠开始失控,在这期间运动也中断了,又从 6 月中旬得到缓解

\n

还有新的体重体脂统计图,可以看出我的体重和体脂都在稳步下降,健康状况有明显改善

\n

年记还出现了新的一种热图,记录达到目标的日子,通过 Heatmap Calendar 绘制,以睡眠为例

\n
const calendarData = { \n    entries: [],\n}\n\nconst pages = window.pages\n    .where(p => p.Sleep && p.Sleep >= 6.5 && p.Sleep <= 8.5)\n    .sort(p => p.file.name);\n\nfor(let page of pages){ \n    calendarData.entries.push({\n        date: page.file.name,\n        intensity: page.Sleep,\n    })\n}\n\nrenderHeatmapCalendar(this.container, calendarData);\n
\n

局限

\n

子弹笔记有一个很重要的任务清单模块,如上面子弹笔记截图所示,我之前会把一周的任务清单都提前写在笔记里,但现在日记都是当天自动生成,无法提前计划,所以我把任务清单都改用了滴答清单来管理,滴答清单当然也很好用,但是这样就少了与日记的联动,手动添加又会造成很多重复工作,就不是很爽

\n

最后需要注意的是,即使有这样的生活管理系统也不意味着生活就会一切按照预期,就像上面举例的 5 月底睡眠失控事件,一旦放松失控仍会发生,笔记会告诉我生活正在失控,但如何回到正轨和追赶上 OKR 还是要靠自控力和坚持的定期总结、反思和改进

","url":"http://localhost:2222/api/redirection?characterId=10¬eId=46","image":"https://ipfs.4everland.xyz/ipfs/bafybeibmsjjzstiylsmrkmgn5xa2ppoyoqdpazxzuzpkomkdydsb2utbli","date_published":"2022-09-19T22:19:38.000Z","tags":["post","分享境"],"author":{"name":"DIYgod","url":"http://localhost:2222/api/redirection?characterId=10","handle":"diygod"}},{"id":"10-204","title":"新玩意 | 2022 黑五买了啥?","summary":"受少数派 新玩意系列 启发,我也分享下我近期黑五购买的新玩意。","content_html":"
\n

\"IMG_3028\"

\n
\n

受少数派 新玩意系列 启发,我也分享下我近期黑五购买的新玩意。

\n

其实即使是黑五,英国绝大多数商品也比国内平时贵很多,就图一乐。

\n

Chromecast with Google TV 4K

\n\n

\"image\"

\n

租房子时候房东留了一台电视,自带系统功能很少,看流媒体和连 PS5 打打游戏还行,看 NAS 里的视频就不行了。本来对刚更新的 Apple TV 很心动,但看到 Chromecast 直降了 £20,都是看个 4K 视频,四分之一的价格还不是美滋滋,毕竟是 Google 亲儿子,Google TV 系统跟普通 Android TV 也不一样,说不定有惊喜。

\n

\"IMG_3092\"

\n

\"IMG_3093\"

\n

看外观做工还是挺精致的,笑嘻嘻开机之后,还什么都没做,就发现系统响应有明显的延迟和卡顿,笑容逐渐消失。迟疑地下载完 Jellyfin,尝试打开一个 4K 视频之后

\n

电子垃圾,退钱!

\n

\"image\"

\n

(我后来又从自己身上找原因,怀疑是不是我视频的码率太高了,就用 B 站视频试了下,发现就连 B 站那么低码率的 4K 都播不动,洗不动洗不动)

\n

Western Digital 20TB 桌面外置硬盘

\n\n

\"image\"

\n

广受 NAS 用户喜爱的一块硬盘,因为众所周知,虽然它设计上是放桌面上给电脑插线用的,但把它内部的硬盘拆出来给 NAS 用再合适不过了,一方面价格很低,另一方面它的硬件水平与西部数码最高档的企业级 Gold 或 NAS Red Pro 相当 (reddit),除了噪音大点没什么缺点。

\n

就是这两款

\n

\"image\"

\n

\"image\"

\n

相比这两款价格 £515.99 和 £545.99 ,它 £304.99 的价格就跟白送一样,所以它一直在我的 Keepa 订阅列表里,准备等它再降降价入手。

\n

然后就在某一天早上收到了这条提醒

\n

\"image\"

\n

£45.99!当然第一反应是怀疑 Keepa 出错了,打开 Amazon,居然是真的

\n

\"screenshot-www.amazon.co.uk-2022.11.18-09_45_35\"

\n

没有犹豫,按住激动得颤抖的双手,买了 8 块,至于说为什么只买了 8 块,因为我只有两个账号,最多只能买 8 块。

\n

但后来有 5 块被砍单了,只收到了 3 块。

\n

\"IMG_3028\"

\n

拆出来硬盘,换掉之前的两块 4T 酷狼。

\n

\"IMG_3109\"

\n

\"screenshot-192.168.1.233_5000-2022.11.19-19_55_22\"

\n

心满意足。

\n

本来到这里就结束了,就是一个幸运的薅羊毛故事,但是第二天,群晖故障报警。

\n

\"image\"

\n

硬盘拿出来也有很明显的异响,看起来是没救了,也不知道这还能不能保修,毕竟是薅来的。还好申请售后之后 Amazon 又给我免费寄了一块。

\n

\"image\"

\n

我哭死,Amazon 是什么慈善家。

\n

后来下了点 4K 电影,发现 20T 好像也没多少。

\n

\"image\"

\n

Plex Lifetime Pass

\n\n

Chromecast 已经被我退了,现在又有了充足的硬盘,问题又来了,怎么在电视上看呢,我再次陷入了迷茫。

\n

我想起了我家那台优秀的超高清蓝光播放器 — PS5,看个 4K 视频肯定不在话下,虽然装不了 Jellyfin 但还好有 Plex。

\n

在群晖装好 Plex 服务端,导入视频,安装 PS5 客户端,购买 Pass。

\n

\"image\"

\n

\"image\"

\n

\"image\"

\n

\"image\"

\n

虽然 Plex 比较封闭,代码也没有开源,很多商业化内容令人很不放心,但不得不说体验比 Jellyfin 好不少,视频削刮又好又快,客户端体验更好,加载字幕也很方便,也算有弊有利。

\n

PlayStation 5 DualSense 充电底座

\n\n

\"image\"

\n

讨厌家里的充电底座很久了,完全躺平很占空间,还使用插入式充电,每次都要用力往里怼,方向也不顺手,非常不优雅。

\n

\"IMG_3104\"

\n

官方的就好多了,接触式充电不用费力气随手放上面就可以。

\n

\"IMG_3103\"

\n

This Works 深度睡眠枕头喷雾

\n\n

\"image\"

\n

我一直不喜欢睡觉,最近也在刻意压缩睡眠时间,每天睡 6 个多小时,虽然总体问题不大,但是偶尔会有几天精神不太好,所以买了这东西希望提高一些睡眠质量。

\n

\"IMG_3107\"

\n

官方介绍是薰衣草、洋甘菊和香根草的味道,我其实不知道这些东西是什么味道,实际感受就是草木的味道,给人的感觉是比较清新和柔和,也有令人镇静的感觉(虽然我没法排除心理的影响),我还是挺喜欢的。

\n

目前已经使用了四天,我感觉是有效的,但为了排除心理影响,还是通过小米手环的睡眠数据来验证:

\n

使用前 4 天的深睡比例:(15+21+15+11)/4=15.5 (%)

\n

使用后 4 天的深睡比例:(13+19+16+23)/4=17.5 (%)

\n

虽然看起来很玄学,数据样本也不够多,但目前看数据确实有提升,再加上我很喜欢这个味道,还是推荐的。

\n

Crucial 内存 16GB DDR4 3200MHz

\n\n

\"image\"

\n

NAS 硬盘变大了内存也不能落下,虽然现在 8G 也够用了,但 Linux 的内存是会全吃满作缓存的,多点总是好的。最重要的是它实在是太便宜了。

\n

\"IMG_3097\"

\n

\"IMG_3098\"

\n

装上后一共 20G 内存,利用率稳定在 16%。

\n

\"image\"

\n

前后对比。

\n

\"image\"

\n

\"IMG_3099\"

\n

SanDisk 512GB Ultra microSDXC card

\n\n

\"image\"

\n

它也实在是太便宜了,512GB 容量 150 MB/s 读取速度,相机里的 128GB 存储卡每次出去玩都不够用,换掉。

\n

合影

\n

\"IMG_3100\"

\n

Cyberpower UT650EIG UPS

\n\n

\"image\"

\n

上次旁边街道电路维修 NAS 意外断电两次,让我很心痛,看到亚马逊有二手 UPS 卖就买了一台。

\n

首先包装就很伊拉克。

\n

\"IMG_3095\"

\n

插上电源发现无法充电,是坏的 🤡

\n

\"IMG_3094\"

\n

再加上发现它没有 USB 口,无法实现断电 NAS 自动关机,重量也实在是太重了,密度真的就像一块铁,还是以后在国内买吧,退货了。

\n

另外还有不香的香薰蜡烛、椅子、发小买的一堆衣服,就是我今年黑五的全部了,欢迎在评论里也告诉我你最近的新玩意或者留下你的文章链接。

","url":"http://localhost:2222/api/redirection?characterId=10¬eId=204","image":"https://ipfs.4everland.xyz/ipfs/bafybeiaeqxvbsgxnjfyl42abn4xehudoyqvzxosgmgjbcltuumy74pxa7e","date_published":"2022-11-30T00:54:02.000Z","tags":["post","新玩意"],"author":{"name":"DIYgod","url":"http://localhost:2222/api/redirection?characterId=10","handle":"diygod"}},{"id":"74615-1","title":"免费ASMR资源大全","summary":"ASMR 是什么 ASMR(自发性知觉经络反应,Autonomous Sensory Meridian Response)是一种感官体验,通常伴随着愉悦的感觉,尤其是在听到某些特定的声音时。ASMR 通常表现为一种轻微的、令人放松的 “起鸡皮疙瘩” 的感觉,通常从头部开始…","content_html":"

\"免费

\n

ASMR 是什么

\n

ASMR(自发性知觉经络反应,Autonomous Sensory Meridian Response)是一种感官体验,通常伴随着愉悦的感觉,尤其是在听到某些特定的声音时。ASMR 通常表现为一种轻微的、令人放松的 “起鸡皮疙瘩” 的感觉,通常从头部开始,向下扩展到脊椎或其他部位。

\n

ASMR 的特点

\n\n

免费 ASMR 网站

\n

ASMR 基佬中心

\n

ASMR 主要是中文音声、音声汉化。中文音声有步非烟、糖果屋、阿木木、梧桐别苑、jok、秋水、南征等等,太多了不一一标出了。音声汉化主要是橙澄子汉化组和风花雪月汉化组,也还有挺多其他的。
\n网址: https://www.asmr.gay/

\n

ASMR Online

\n

Your online home for all things ASMR, including your favorite videos, access to top creators, exclusive articles and interviews, and meeting others in the community.
\n网址: https://asmronline.net/

\n

ASMR 地带

\n

ASMR 地带 - ASMR 论坛免费 NICO 限定,免费 ci-en 收费资源,免费 fantia 收费资源,免费 dlsite 收费资源
\n网址: https://www.asmrdd.com/

\n

ASMR 吧

\n

免费 ASMR 视频网站,国内外的 asmr 视频在线观看,自 2018 年起坚持免费为广大用户提供服务,让更多失眠用户享受优质的助眠视频。
\n网址: https://www.ufov8.com/

\n

电报上的免费 ASMR 福利资源

\n

如果你想要寻找免费的 ASMR 福利视频音频等资源,电报 (Telegram) 会是个更加不错的地方。电报里有很多的频道和群组分享免费的 ASMR 福利资源,你只需要使用电报搜索机器人,搜索 \"ASMR\" 等关键字就可以找到大量的资源了!
\n点击这里使用电报机器人搜索资源!

","url":"http://localhost:2222/api/redirection?characterId=74615¬eId=1","image":"https://ipfs.4everland.xyz/ipfs/QmTgAQUKpPiEqbar6BAjDQUP6rTUxNp3W2Fj2h6aAN9cXc","date_published":"2025-01-07T04:05:56.000Z","tags":["post"],"author":{"name":"免费ASMR资源","url":"http://localhost:2222/api/redirection?characterId=74615","handle":"asmr"}},{"id":"10-764","title":"令我痛心的三部反乌托邦动漫","summary":"四月对我而言是一个充满悲伤的月份。尽管《四月是你的谎言》已经过去了很多年,但每当看到「四月」这两个字,仍会立刻触发我的 PTSD,再加上今天我刚读完一本反乌托邦题材的小说《来自新世界》。多种思绪糅杂在一起,让我不禁回想起了那些令我痛心的「重量级」反乌托邦动漫","content_html":"
\n

\"image\"

\n
\n
\n

请欣赏 「DIY 的夺命歌单」

\n
\n\n

四月对我而言是一个充满悲伤的月份。尽管《四月是你的谎言》已经过去了很多年,但每当看到「四月」这两个字,仍会立刻触发我的 PTSD,再加上今天我刚读完一本反乌托邦题材的小说《来自新世界》。多种思绪糅杂在一起,让我不禁回想起了那些令我痛心的「重量级」反乌托邦动漫。

\n

DARLING in the FRANXX

\n
\n

“如果把动画比作足球的话,这部动画大概就是日本国家队了,就是普通不看足球的人也会期待日本队的表现,也会去谈论足球,所以希望自己的动画也能被这样对待。不单单锦织敦史的粉丝、TRIGGER 的粉丝、A-1 的粉丝这些平时看动画的观众,希望平时不看动画的观众也能享受这部作品。” — 鸟羽洋典

\n
\n

制片人的这番话一点也不夸张。这部动漫的制作阵容极为豪华,集结了业界的大佬和顶级声优,因此在尚未播出之前就被所有人寄予厚望,以至于还没播出就已被推上神坛。

\n

然而,神作的道路并非顺利。从爱奇艺和 B 站的霸权争夺,到驾驶姿势引发的女权争议,最后在 B 站 UP 主 Lexburner 的口嗨和群众的恶意举报中达到高潮,赵弹来袭。

\n
\n

\"image\"

\n
\n

这些历史背景现在看来其实都不值一提,只是说明当时的热度和争议之高。毕竟最后还是用作品说话,而这部作品简直太符合我的口味了,反乌托邦的背景、活泼可爱打破常规的 02、恰到好处的涩涩、科幻、鬼、悬疑...

\n
\n

\"1B89028C35E9F0136C0A628BA6DD978B\"

\n
\n

当时的我茶不思饭不想,在一声声 Darling Darling 中逐渐迷失了自我,每周就指着 Darling 活了,我把博客主题改成了 Darling 的配色和配图,头像和名字也换成了 Darling,买了手办、画册一切能买的周边,甚至学着画画专门临摹 02,逢人就吹爆,只要看了 Darling 我们就是好朋友种种

\n

\"image\"

\n

\"image\"

\n

再回过神来就是惨绝人寰的烂尾了,就像回应开播时的轰轰烈烈一样,烂得也彻彻底底没有任何余地,但可能是大脑对强烈刺激的自我保护,我现在已经不太记得当时的具体情景了,只记得一个巨大的花嫁扎古噩梦...

\n

这部由如此豪华的制作团队打造的作品,竟然如此令人失望。至今我仍无法理解。

\n

约定的梦幻岛

\n

一年后,我又发现了一部绝赞的反乌托邦番剧

\n
\n

\"image\"

\n
\n

在我吹爆《约定的梦幻岛》第一季的时候就有人提醒我:Darling 尸骨未寒,你怎么敢。我却不以为意,认为这只是巧合。毕竟,梦幻岛是根据广受好评的漫画改编的,有着坚实的剧情基础,与原创动画 Darling 根本不能相提并论,第一季播完我还沾沾自喜:看,这次没事吧。

\n

然而,两年后,第二季开播了。

\n

我仍然清晰地记得刚开播时,我坐在电脑前激动地第一时间观看。然而,越看越觉得不对劲。到了第四集,剧情已经无法挽回。后来我勉强捏着鼻子又看了几集,但发现我的意志力实在不足以支撑我继续观看。

\n

按理说,漫画已经取得成功,剧情不成问题;第一季动画也获得了好评,拥有广泛的粉丝基础。只要按部就班地制作第二季,绝对会成为另一部神作。然而,动画剧情却砍掉了许多原创桥段,换上了毫无逻辑的编剧所编织的剧情。实在难以想象制作过程中究竟发生了什么。

\n

还好,同期播放的巨人稳得很,让我没有过于悲伤。

\n

\"image\"

\n

进击的巨人

\n

这是一部我从 2013 年一直吹到 2022 年的作品。

\n

\"image\"

\n

\"image\"

\n

作为一部自 2013 年就开播的动漫,《进击的巨人》在所有动漫中一直拥有极高的地位,堪称元老级存在。许多人正是从这部作品开始入坑看动漫,它是很多人的 “启蒙” 作品,也是我极力推荐给发小观看的第一部动漫。这部动漫也是根据漫画改编的,但与梦幻岛不同的是,其剧情、设定、丰富度和热度都高出好几个层次。更重要的是,接手最终季制作的 MAPPA 公司在质量和口碑上都绝对令人放心,不会出现梦幻岛那样的问题。它的剧情连载了那么长时间,久经时间考验,也不会出现 Darling 的情况,因此我一直信心满满地放心吹爆。

\n

然而后来的事情许多人都知道了,动画史上空前绝后的恶劣事件发生了。这不是恶搞,不是开玩笑,更不是烂尾,而是一个充满仇恨、对爱、正义和和平的人类主流价值观怀有敌意的精神变态作者,对喜爱他和他的作品的观众进行了深思熟虑、蓄谋已久的极端恶意伤害。呕!

\n

\"image\"

\n

\"image\"

\n

\"image\"

\n

\"image\"

\n

虽然已经过了很久了,但我还是久久无法平静,我恨啊,不仅仅是痛心,更是咬牙切齿的仇恨。

\n
\n

\"image\"

\n
\n

其它

\n

\"image\"

\n

\"image\"

\n

\"image\"
\n\"image\"
\n\"image\"

\n
\n

\"image\"

\n
\n

当然,这些只是玩梗。

\n

最后,真诚祝愿四月新番开门大吉、一切顺利!

\n","url":"http://localhost:2222/api/redirection?characterId=10¬eId=764","image":"https://ipfs.4everland.xyz/ipfs/bafybeih6nkyowhmksth75szqli34g4e3aphwcfrlt32oseauzeyrdfjria","date_published":"2023-04-02T04:54:23.000Z","tags":["post","闲言语"],"author":{"name":"DIYgod","url":"http://localhost:2222/api/redirection?characterId=10","handle":"diygod"}},{"id":"10-190","title":"苏格兰居民可下楼活动","summary":"今天距离圣诞节正好还有一个月,但格拉斯哥主街上早早就布置了很多圣诞节装饰和圣诞节期间专属的游乐设施,我家对面的一家小博物馆也为今年的圣诞节专门建了个滑雪场兼圣诞集市","content_html":"

\"IMG_3057\"

\n

今天距离圣诞节正好还有一个月,但格拉斯哥主街上早早就布置了很多圣诞节装饰和圣诞节期间专属的游乐设施,我家对面的一家小博物馆也为今年的圣诞节专门建了个滑雪场兼圣诞集市。再加上今天是黑色星期五,商店很多折扣,虽然下着雨,还是阻挡不住居民纷纷出门抢购,街上很是热闹,每个人的脸上都挂着买到便宜商品的喜悦。今天又是和平喜悦的一天。

\n

...

\n

后续内容已应中国政府要求删除

","url":"http://localhost:2222/api/redirection?characterId=10¬eId=190","image":"https://ipfs.4everland.xyz/ipfs/bafybeifeebnfxocslchhulbuss2axinwgxu2mar2wyf72wy5g6fk7xtfqe","date_published":"2022-11-26T02:55:17.000Z","tags":["post","闲言语"],"author":{"name":"DIYgod","url":"http://localhost:2222/api/redirection?characterId=10","handle":"diygod"}},{"id":"10-2358","title":"2023 平稳过渡","summary":"\n<2024>\n\n发小觉得今年经历了巨大的变化,从苏格兰搬到新加坡,从未婚到已婚,从一家两口变成了一家三口,但我觉得都在预料之中,所以感觉还算很平稳","content_html":"

</2023>
\n<2024>

\n

发小觉得今年经历了巨大的变化,从苏格兰搬到新加坡,从未婚到已婚,从一家两口变成了一家三口,但我觉得都在预料之中,所以感觉还算很平稳

\n

身边的物品最能反映一个人的状态,所以还是跟 2022 一样从年度最佳开始

\n

🏆 年度最佳

\n

🍿 影视

\n

看过的 28 部动漫和 12 部剧集和 8 部电影:https://movie.douban.com/people/62759792/collect?mode=list

\n

而去年是 19 部动漫和 18 部剧集和 6 部电影,二次元含量显著上升了

\n

DIY 年度番剧: 《鬼灭之刃 锻刀村篇》

\n

\"image\"

\n\n
\n
\n\n

尽管有数集节奏过缓,然而该剧的燃点皆燃,泪点亦催人泪目,尤以最后以为会是虐人的剧情却华丽逆转为甜蜜结局,令人心潮澎湃,难以自抑

\n

去年最佳是《鬼灭之刃 游郭篇》,今年是《鬼灭之刃 锻刀村篇》,已经可以预料到了明年是《鬼灭之刃 柱训练篇》,希望可以保持下去

\n

除此之外还有《天国大魔境》、《间谍过家家》、《【我推的孩子】》(第一集)、《为美好的世界献上爆焰!》也非常喜欢

\n

DIY 年度剧集: 《最后生还者 第一季》

\n

\"image\"

\n

非常还原游戏,又胜于游戏,主角也非常契合角色,完美的一季,HBO 太强了

\n

📚 图书

\n

\"album_temp_WeRead_2023_Year_In_Review_11704021416\"

\n

今年看过的 22 本书:

\n\n

去年是 9 本,没想到今年不知不觉看了这么多,大部分是旅游和 Boox Leaf 3 的功劳

\n

DIY 年度图书:《人类灭绝》

\n

\"image\"

\n

差点被奇怪的标题和封面错过,是我看过最悬疑、血腥、脑洞的一本书,作者从三条看似不相关的线分别展开,最后再完美融合,揭露一个最大的阴谋

\n

如果有一天智人不再是地球最聪明的物种,智人一定会毫不犹豫暴露出残忍丛林天性,不一定是因为书里假设的超人类新物种的出现,AI 的技术爆炸也许会让这一天马上到来

\n

非常期待有一天被拍成电视剧

\n

排名第二的是 《上帝掷骰子吗》

\n

读到了很多难以置信的物理知识和猜想,比如空间和时间无法无限分割下去,它们不是连续的;所有观测者死掉的世界都没意义,所以观测者只会一直活下来,无法自杀,无法死亡,所有人都会量子永生;世界是不确定的,世界的底色不是因果律而是概率,上帝是掷骰子的。简直比科幻还要魔幻

\n

排名第三的是《巨人的陨落》

\n

世纪三部曲中的第一部,是那种开头比较难读下去但是一旦投入进去就无法自拔的书,学到了很多欧洲历史看到了时代变迁

\n

🕹️ 好物

\n

DIY 年度好物: Boox Leaf 3

\n

\"image\"

\n

第一次用电纸书,续航足够长,刷新速度也很快,内置墨水屏版微信读书,让我多看了很多书,缺点就是长时间拿着有点硌小拇指,还好买了 Randy 推荐的手机气囊支架解决了

\n

其他还有一些值得推荐的小东西

\n

Followcat 猫咪项圈

\n

\"image\"

\n

可以配套一个 AirTag 壳装入 AirTag 来定位猫咪,不仅可以预防出门跑丢,在家里不知道藏在哪里的时候也更好找了

\n

博士眼镜

\n

\"IMG_5716\"

\n

线下配眼镜要几千块,一直让我觉得眼镜是个很珍贵的物品,平时需要小心翼翼地保护,但发现差不多的蔡司镜片加镜框线上只要 200 多,差价很夸张,实际使用也感觉不出什么区别

\n

索尼 ZV1 M2 Twitter

\n

\"image\"

\n

从第一代 ZV1 换到了第二代,虽然画质没什么升级,但解决了很多痛点,使用体验好了非常多,包括人类可以使用的新版菜单、更适合 vlog 的 18mm 焦距、内置指向性麦克风、视频拍照切换实体按键、USB-C 等

\n

👩🏻‍💻 应用

\n

DIY 年度应用:Arc

\n

\"image\"

\n

竖向标签栏、工作区用了就回不去,而且并不是简单地把标签栏竖过来,很多交互细节还是挺用心的

\n

另外分享一些自己在使用的喜欢的应用

\n\n

🎮 游戏

\n

DIY 年度游戏:《塞尔达传说:王国之泪》

\n

\"image\"

\n

今年玩的唯一的游戏

\n

🧸 生活

\n

🏡 饮食居住

\n\n\n

11 月从贫瘠的苏格兰来到了生活便利的新加坡,生活质量还是高了一大大大截

\n\n

🛫 旅游

\n

发小去年 12 月滑雪扭伤了腿,所以前几个月哪都没去

\n
    \n
  1. 5 月跟 Harry 去 Lochgelly 上山徒步 Twitter
  2. \n
\n

我和 Harry 背着三大桶水累得在地上爬,发小健步如飞

\n

\"image\"

\n

\"image\"

\n

\"image\"

\n
    \n
  1. 跟粗粗去了土耳其 Twitter Twitter Twitter Twitter Twitter Twitter Twitter
  2. \n
\n

景区里好玩的很多,山路自驾、游泳、跳海、跳伞、骑马、热气球、晒太阳,大海和热气球风景也超好看,就是价格很感人,景点物价很高,会宰游客,离开景点区域又很贫瘠

\n

带着游泳圈在水里泡了几天,差一点学会了游泳

\n

\"image\"

\n

\"image\"

\n

\"image\"

\n

\"image\"

\n

\"image\"

\n

\"image\"

\n

\"image\"

\n
    \n
  1. 8 月去了伦敦、剑桥、利兹、约克 Twitter Twitter Twitter Twitter Twitter Twitter
  2. \n
\n

带发小妈妈在英国到处玩

\n

看悲惨世界话剧 Do You Hear the People Sing Twitter

\n

\"image\"

\n

唐顿庄园里面 Cosplay Twitter

\n

\"image\"

\n
    \n
  1. 被 Harry 带着逛了爱丁堡神奇的化石店和外科手术博物馆
  2. \n
\n

外科手术博物馆展示了泡在福尔马林中成堆的尸体和各个部位肢体,发小看得津津有味

\n
\n

跟 Harry 在爱丁堡海边放火烤棉花糖 Twitter Twitter

\n

烤棉花糖是外面脆脆的里面软绵绵的很奇妙,Harry 做的酥肉也超级好吃

\n

\"image\"

\n
    \n
  1. 9 月去了法国、德国、奥地利、匈牙利、捷克
  2. \n
\n

该玩的都玩了但时间很赶,走马观花

\n
\n
\n
    \n
  1. 10 月去了成都、重庆、郑州、乌鲁木齐、上海
  2. \n
\n

在成都见了Tyzual七夏浅笑,去看了大熊猫,在重庆大吃特吃,在乌鲁木齐吃羊肉配皮芽子

\n

成都大熊猫基地

\n

\"image\"

\n

乌鲁木齐的大草原

\n

\"image\"

\n
    \n
  1. 11 月去了香港
  2. \n
\n

香港金融科技周见到了很多同事,涨了很多见识,也是成立了两年多的公司的联合创始人们第一次团聚

\n

\"IMG_3450_副本\"

\n

🤼‍♀️ 社交

\n

今年不但去了很多地方还见了很多朋友

\n

Harry粗不粗Tyzual七夏浅笑花生chTonyBruce、Anni、Atlas、birdring、Dmoo、Jeff、Joshua、Kate、Maggie、Usagi、Yingzi、birdring、yingzi,大部分是同事,都是远程工作见一面着实不容易

\n

🐱 家庭

\n

回老家结婚了,过程很累,但看到发小穿上婚纱打扮一番一切都值了 Twitter

\n

\"4803c6bf4efd14f8a6085d8586cc3aff\"

\n

\"image\"

\n

一回国就跟酸奶团聚了,还一起来了新加坡 Twitter

\n

被问的最多的是 “分开了两年多,酸奶还认识你么”,虽然我永远无法知道答案,但从黏人程度来看,我倾向于是认识的

\n

\"image\"

\n

🏊 技能

\n

游泳

\n

从小学过几次,大学还上过游泳课,但都没有学会

\n

如上所述,今年在土耳其旅游时候套个游泳圈泡了几天大海,克服了对游泳的恐惧,大概学会了自由泳的姿势但是不会换气

\n

到新加坡之后又在小区的游泳池泡了几周后完全学会了,现在每天都会跟发小去游泳,运动强度足够大又有水冷,已经是我最喜欢的运动了,感觉之前错过了很多乐趣

\n

\"IMG_5549

\n

播客

\n\n

为了宣传 xLog,接受了 Web Worker 的邀请录了人生第一次播客,主播辛宝、刘威、小白菜都很专业,过程意外地非常顺利,也没有任何冷场

\n

但是作为一个资深社恐,虽然第一次很顺利,应该也很难鼓起勇气进行下一次了

\n

打麻将和打掼蛋

\n

跟着发小各去了一次打麻将和打掼蛋,学会了这两种游戏,但是要说话所以都没有第二次了

\n

🌌 印象深刻的日常

\n

过生日发小精心设计的 DIY 诱捕器

\n\n

过生日 st 送的黑哥哥祝福

\n\n

在发小学校穿苏格兰裙拍婚纱照

\n\n

在格拉斯哥参加了发小的毕业典礼

\n\n

在新加坡过圣诞节

\n\n

在新加坡跨年看烟花表演,好像还是第一次看这么盛大的烟花表演,之前看过最大的是迪士尼

\n\n

还有陪发小第一次去看演唱会,第一次去抓娃娃

\n

🪄 生活管理

\n

跟去年差不多,主要还是在使用这一套基于 Obsidian 的生活记录系统,现在日记是这样的结构

\n

当天发生的事情、正在进行中的事项、日程表、富兰克林美德表

\n

\"image\"

\n

再补充上用 TickTick 的 Habit 来记录每天每周各个 OKR 目标完成得怎么样,用 Toggl Track 记录做各个事情的时间,比之前的在 Obsidian 里 all in one 方便很多

\n

\"image\"

\n

🌿 输出

\n

👩🏻‍💻 代码

\n

Contributions 快赶上 2019 年巅峰时期了

\n

\"contributions\"

\n

又是没有新项目的一年,今年中前期还是以 xLog 为主,后期也做了一些 RSSHub 和 RSSHub Radar 的工作,和为公司 2024 年的一些转变做准备

\n

xLog 开发得热火朝天(相关 Twitter 列表),成功举办了 10000 刀的创作者激励活动,吸引了大批优秀的创作者,最多时候还每周有十几个社区开发者来贡献代码一起完善 xLog,完成了数不清的 Feature。现在有 3k 多创作者在上面发布了 26k 多高质量内容

\n

RSSHub 重构了文档,让它更容易被维护,改造成了以英文为优先语言;用更现代化的架构 Plasmo 完全重写了 RSSHub Radar,变得更好看更稳定更容易维护,还能自动发布到各大应用商店。现在 RSSHub 官方实例每月承载三亿多次请求,docker 有一千五百多万次下载,RSSHub Radar 有差不多 9 万周活用户

\n

📙 文字

\n

这一年文字也非常高产

\n

认真写了 9 篇博客

\n\n

水了 243 条 Twitter

\n

列表

\n

🎥 影音

\n

今年在 B 站发布了两个 Vlog,旅游积攒了好多素材,至少还有 6 个视频还没剪,很惭愧

\n

《女友浴室沉思录,非正常录音》

\n
\n \n
\n

《英国旅游 VLOG | 爱丁堡圣诞节》

\n
\n \n
\n

录了一个播客《和 xlog.app 的作者 DIYgod 聊区块链和博客平台、前端学习和生活感悟》

\n

https://www.xiaoyuzhoufm.com/episode/645a76f67d934b85051081c8

\n

🎊 2024

\n

⭐️ OKR

\n","url":"http://localhost:2222/api/redirection?characterId=10¬eId=2358","image":"ipfs://QmQYb5iJNqQVmi3rHUZbfMQhebJwYXp84QVnTiEHxXGZjg","date_published":"2024-01-08T14:23:21.000Z","tags":["post","日记本"],"author":{"name":"DIYgod","url":"http://localhost:2222/api/redirection?characterId=10","handle":"diygod"}},{"id":"60991-2","title":"2024|一些国内Chat推荐报告","summary":"这里小板子给大家推荐几款免费好用的大语言模型!🥰","content_html":"
\n

曾经,我们为了使用 ChatGPT,寻找了各种教程,花费了很大精力🥲,只为注册一个 ChatGPT 账号。

\n
\n
\n

如今国内发展速度比我们想象的快得多,各个大厂都推出了自己的人工智能语言大模型,而且不少是免费的🥳,也运用在了各种商业场景上。

\n
\n
\n

这类产品后来我们也赋予了专业名词 “大语言模型”(LLM),是指使用大量文本数据训练的深度学习模型,可以生成自然语言文本或理解语言文本的含义。大语言模型可以处理多种自然语言任务,如文本分类、问答、对话等,是通向人工智能的一条重要途径。

\n
\n

这里小板子给大家推荐几款免费好用的大语言模型!🥰

\n

Kimi.ai 月之暗面

\n

https://kimi.moonshot.cn/

\n

\"Kimi\"
\nKimi 是 24 年我最喜欢用的大模型了,它有两项出类拔萃的功能。

\n
    \n
  1. \n

    🌕【Longer than long】Kimi 支持 200 万字上下文输入

    \n
  2. \n
  3. \n

    📄【量子速读】可以发送一个网站或者 word/pdf 文档,并回答相关问题

    \n
  4. \n
\n

\"Kimi\"

\n

Kimi 能主动在互联网上查找资料,并标注出处;而不像一些大模型只知道一个时间点之前的知识。这意味着他可以帮助你更快的在互联网上检索信息,提高工作效率。

\n

Kimi 真的非常非常聪明😭有时候真的可以把它当朋友来问,它会给你满意的答案的!!!

\n

(不是《爸爸去哪儿》里的 kimi

\n

ChatGLM 智谱清言

\n

https://chatglm.cn/

\n

\"chatglm\"

\n

智谱清言推出已经有很长一段时间了,英文名为 ChatGLM,它的功能非常丰富,有自己的 AI 作画图🎨WoW!,能够创建自定义的机器人,根据你提供的人设简介就可以打造属于自己的 “小助理”🤖

\n

这是清华大学开源的一个项目,有 ChatGLM-6B、ChatGLM-130B 等著名的模型。

\n

\"image\"

\n

\"image\"

\n

ChatGLM 和 Kimi 一样拥有阅读文档的能力,可以根据文档内容回答问题,准确度也相当不错。

\n

数据分析是 ChatGLM 的一项强大功能,例如可以自动生成代码并生成图像。刚发现这个功能真被吓到了!😱

\n

\"image\"

\n

Coze 扣子

\n

https://www.coze.cn/
\n\"image\"

\n

这是一款来自字节跳动的 AI 智能体开发平台,能够综合接入各平台的生态。例如上面这一段对话的过程中可以在抖音检索资料,并且给我提供了详细的旅游建议。

\n

\"image\"

\n

\"image\"

\n

通过扣子的插件商店我们会发现,扣子非常擅长接入各种平台,发挥在某一领域的优势!

\n

\"image\"

\n

Tongyi 通义千问

\n

https://tongyi.aliyun.com/qianwen

\n

\"image\"

\n

通义千文也可以联网检索信息

\n

\"image\"
\n里面也有一些相当有趣的功能

\n

\"image\"
\n写的还怪不错的哈哈哈哈哈,全是技巧,木有情感。

\n

\"image\"
\n这些大语言模型的出现,极大改变了我们的生活,就像 ChatGLM 的宣传语那样 “聪明一点,每天少工作一小时!”。在这个日新月异、持续进步的时代,唯有掌握最新的技术和工具,才能紧跟时代的步伐,提升工作效率和生活质量。

\n

文字 | 小板子原创
\n图片 | 我自己截图的
\n封面 | 我自己设计的
\n我是不是很厉害

","url":"http://localhost:2222/api/redirection?characterId=60991¬eId=2","image":"ipfs://QmUhQ1WFR2jzUYgerRX7sARqAp4vBDa7TUqhqDgUJ2uQ3T","date_published":"2024-05-16T07:31:48.000Z","tags":["post","AI"],"author":{"name":"oboard","url":"http://localhost:2222/api/redirection?characterId=60991","handle":"oboard"}},{"id":"65380-4","title":"Cloudflare Workers优秀项目收集(持续更新)","summary":"Cloudflare 是一家伟大的互联网公司,她致力于建立更好的互联网。目前她提供的服务强大而又高效,同时很多项目都可以免费使用,诸如免费提供 CDN、DNS 服务以及本文即将介绍的 Worker 服务。 1. 什么是 Cloudflare Workers\n\nCloudflare…","content_html":"

Cloudflare 是一家伟大的互联网公司,她致力于建立更好的互联网。目前她提供的服务强大而又高效,同时很多项目都可以免费使用,诸如免费提供 CDN、DNS 服务以及本文即将介绍的 Worker 服务。

\n

1. 什么是 Cloudflare Workers

\n

Cloudflare Workers 是一个可以让你运行 Javascript 的(无服务器)平台,具体详情请看官网介绍

\n

2. 为什么用 Cloudflare Workers

\n

因为它比较强大,而且免费。它强大的地方,包括抗 DDOS 攻击,在线率高;同时,它也提供了免费版和收费版,其中免费版一般足够个人使用;而且,它可以分配一个域名,不需要额外购买域名。
\n当然,如果遇到 Cloudflare Worker 打不开的情形,可以考虑绑定自己的域名,这里推荐购买一个便宜的.xyz 域名或申请 eu.org 免费域名。

\n

3.Cloudflare Workers 可以做什么

\n

Cloudflare Workers 可以做 Javascript 能做的事情。注意:Cloudflare Workers 每天限制 10W 次免费请求,个人使用,一般都够了。同时,Cloudflare 也提供了收费版,每月 5$/1000 万次请求。

\n

4.Cloudflare Workers 优秀项目集景

\n

4.1 节点

\n

3K 大佬改写的项目:https://github.com/3Kmfi6HP/EDtunnel

\n

Zizifn 大佬原创的项目:https://github.com/zizifn/edgetunnel/blob/main/src/worker-vless.js
\nCMliu 等大佬分享的项目:https://github.com/cmliu/epeiushttps://github.com/ca110us/epeius

\n

部署自定义订阅服务:https://github.com/mjjonone/sub-worker/blob/main/_worker.js

\n

4.2 建站

\n

通过 Workers 搭建博客:

\n

方案一:采用OXeu 大佬开发的Rin 项目,该项目基于 Cloudflare Pages + Workers + D1 + R2 搭建博客(需要一个托管于 Cloudflare 的域名),Rin 实例:https://xeu.life/
\n方案二:采用基于 Cloudflare Pages + D1 + R2+ Zero Trust 的 Microfeed 项目:https://github.com/microfeed/microfeed

\n

方案三:利用 worker 的 KV 作为数据库搭建博客:源码:gdtool/Cloudflare-workers-blog,安装教程,在这里 ,实例:https://blog.gezhong.vip/ ;
\n方案四:利用 workers+github 搭建博客系统,源码:kasuganosoras/cloudflare-worker-blog

\n

通过 Workers 搭建导航站:

\n

利用 worker 搭建导航站,源码:sleepwood/CF-Worker-Dir

\n

利用 Workers 搭建图床:

\n

源码:x-dr/telegraph-Image,实例:https://img.131213.xyz/
\n源码:igengdu/telegraph-Image,实例:https://img.231516.xyz/ (本站搭建);
\n源码:missuo/Telegraph-Image-Hosting,实例:https://missuo.ru/
\n源码:ifyour/cf-image-hosting,实例:https://images.mingming.dev/
\n源码:cf-pages/Telegraph-Image,实例:https://im.gurl.eu.org/
\n源码:csznet/tgState,实例:https://tgstate.vercel.apphttps://tgstate.ikun123.com/ (基于 Telegram,存在封号风险,需谨慎)
\n源码:beilunyang/img-mom,可(同时)搭建于 R2,Backblaze B2 或 Telegram 的图床,实例:https://t.me/img_mom_bot (基于 Telegram 的图床,存在封号风险,需谨慎)。
\n源码:iiop123/workers-image-hosting,实例:点击查看

\n

通过 Workers 搭建 Pastebin 服务

\n

源码:SharzyL/pastebin-worker,实例:https://shz.al/
\n源码:igdume/pastebin-worker(基于 SharzyL 项目修改),实例:https://igdux.top (我自己尝试搭建的)
\n源码:yllhwa/FileWorker
\n源码:iiop123/dingding

\n

通过 Workers+R2 搭建网盘服务

\n

源码:longern/FlareDrive ,实例:https://drive.longern.com/ (基于 R2);
\n源码:ljxi/Cloudflare-R2-oss,基于FlareDrive 项目汉化、完善,基于 Cloudflare 的 R2+Workers。

\n

通过 Workers 搭建短网址服务:

\n

源码 1:https://github.com/x-dr/short ,实例:https://d.131213.xyz/ (推荐);
\n源码 2:基于x-dr 大佬short 项目修改https://github.com/igengdu/short/ ,实例:https://d.igdu.xyz ,本站提供的免费短网址服务)(推荐)。
\n源码 3:基于x-dr 大佬short 项目修改:https://github.com/harrisonwang/linklet ,实例:https://t.xiaowangye.org/
\n源码 4:Crazypeace 大佬Url-Shorten-Worker教程(推荐)
\n源码 5:xyTom/Url-Shorten-Worker,实例:https://lnks.eu.org/
\n源码 6:Short-url教程,实例:https://cf-url-admin.li2niu.com/ (Username: li2niu,Password: li2niu)
\n源码 7:Closty/duanwangzhi,原实例网址已经注销;

\n

通过 workers 等监控网站状态:

\n

源码:eidam/cf-workers-status-page,实例:https://status-page.eidam.dev/ ,(也可以通过 Uptimerobot 实现网站健康状态监控,源码:yb/uptime-status),教程
\n源码:benvinegar/counterscale,实例:https://counterscale.dev/
\n源码:lyc8503/UptimeFlare,实例:https://uptimeflare.pages.dev/博客
\n源码:yestool/analytics_with_cloudflare,实例:https://webviso.yestool.org/

\n

通过 workers 等搭建临时邮箱:

\n

源码,已删除,实例:https://email.ml/
\n源码:akazwz/smail,实例:https://smail.pw/
\n源码:oiov/vmail,实例:https://vmail.dev/
\n源码:基于oiov/vmail,实例:https://idu.one (本站提供);
\n源码:dreamhunter2333/cloudflare_temp_email,实例:https://mail.awsl.uk/

\n

源码:TBXark/mail2telegram,将 Email 转发至 TG;

\n

通过 workers 等搭建 RSS 订阅生成器:

\n

源码:https://github.com/yllhwa/RSSWorker 内含教程。

\n

通过 workers 搭建获取 IP 和地理位置信息

\n

源码:ccbikai/ip-api,实例:https://html.zone/ip

\n

通过 workers 等部署 Copilot 服务:

\n

Copilot(原 New Bing)可以试用 ChatGPT4,目前通过 Workers 就可以部署本地可用的 Copilot 服务。
\n源码:Harry-zklcdc/go-proxy-bingai 内含教程;
\nDemo,试用
\n其他方式部署 Copilot 的试用网址

\n

通过 workers 等部署 Telegram Bot 服务:

\n

源码:Tsuk1ko/cfworker-telegraf教程

\n

4.3 中转

\n

源码:https://github.com/cmliu/CF-Workers-docker.io ,实例:https://docker.fxxk.dedyn.io/ (Docker 镜像)
\n源码:WisdomSky/Cloudflared-web(Docker 镜像)
\n源码:hunshcn/gh-proxy ,实例:https://gh.api.99988866.xyz/ (Github 加速)
\n源码:EtherDream/jsproxy
\n源码:klightso/Workers-Proxy-1参考教程

\n

Workers 加速 Github,参考教程

\n

4.4 网盘文件列表

\n

利用 Workers 搭建 Google Drive 列表服务

\n

源码 1:https://github.com/xunyixiangchao/goindex;
\n源码 2:https://github.com/yanzai/goindex;
\n源码 3:Aicirou/goindex-theme-acrou
\n源码 4:https://github.com/maple3142/GDIndex

\n

OneDrive-index: 利用 Workers 搭建 OneDrive 列表服务

\n

源码 1:spencerwooo/onedrive-cf-index
\n源码 2:Eggsmemory/OneDrive Index Cloudflare Worker

\n

说明

\n

根据近期(20240703)出现Cloudflare 用户出现账户使用问题可知,通过 Workers 搭建网盘列表服务,可能会违反 Cloudflare 公司的条款,使用时建议慎重选择。

\n

更新说明

\n

本文最初写于 2023 年 6 月,收集当时所有能够收集到的 Workers 项目,增删查补,得以成文,原文网址
\n2023 年 12 月 30 日,修改整理部分链接和失效代码;
\n2024 年 3 月 9 日,新增部分内容、调整项目顺序:
\n新增利用 Workers 搭建自定义订阅、搭建 RSS 订阅生成器、代理 Coplilot 部分内容。
\n2024 年 6 月 17 日、6 月 21 日更新。

\n

如果你觉得有新的优秀的 Workers 项目或失效的链接等,都可以联系我。

\n

参考:

\n

Cloudflare 使用问题及其应对方法、建议

\n

Source 1:Workers 优秀项目收集 lists

\n

Source 2: Vipkj.net

\n

Source 3: Littlefox.me

\n

Source 4:Linux.do

\n

Source 5:iGengdu.com

\n

Source 6:zhuima:awesome-cloudflare

","url":"http://localhost:2222/api/redirection?characterId=65380¬eId=4","image":"ipfs://QmeMfpnKi9pLvBixKnEUCAak5SRhGyZA7WVetXXdsEb6yB","date_published":"2024-03-09T06:03:21.000Z","tags":["post","Cloudflare Workers","Github","R2","短链","网盘","节点","Docker镜像","Copilot中转","RSS","Tempmail","邮箱","网页监控","短网址","pastebin","文本","图床","博客","导航","订阅","优秀"],"author":{"name":"iGdux","url":"http://localhost:2222/api/redirection?characterId=65380","handle":"igdux"}},{"id":"67299-9","title":"香港銀行開戶邀請碼","summary":"香港银行 中银香港:M75211872070\nZA Bank 邀请码:RNR5T5\nWeLab 汇立邀请码:FPKXPM\niMotion 信银国际(中信):1Q4R7M2\nFusion 富融:CASH26FE\n国际银行\n(已关门)OCBC 新加坡:O7P9FDOS\niFa…","content_html":"

欢迎大家写我的邀请码獲得開戶獎勵!

\n

香港银行

\n
    \n
  1. 中银香港:M75211872070
  2. \n
  3. ZA Bank 邀请码:RNR5T5
  4. \n
  5. WeLab 汇立邀请码:FPKXPM
  6. \n
  7. iMotion 信银国际(中信):1Q4R7M2
  8. \n
  9. Fusion 富融:CASH26FE
  10. \n
\n

国际银行

\n
    \n
  1. (已关门)OCBC 新加坡:O7P9FDOS
  2. \n
  3. iFast 英国:shaobingy2347 (链接:)https://www.ifastgb.com/tellafriend/shaobingy2347
  4. \n
  5. N26 德国: shaobiny4278 (链接:)https://n26.com/r/shaobiny4278
  6. \n
  7. MyFin:SH00KMU0
  8. \n
  9. 菲律宾 maya 银行:W351N5DKWG6K (链接:)https://www.maya.ph/app/registration?invite=W351N5DKWG6K
  10. \n
  11. 菲律宾 OwnBank:JBHEDZ (链接:)https://s.ownbank.com.ph/6cWtG2
  12. \n
  13. 英国 Curve:https://www.curve.com/join#D5ZQMA3N
  14. \n
  15. 欧洲 Monese:SHAOB607
  16. \n
  17. Safepal 中 Fait24:582343
  18. \n
\n

证券

\n
    \n
  1. uSMART SG:uk5g (链接:)https://m.usmartsg.com/promo/overseas/bonus-dec.html?ICode=uk5g&amp;langType=1&amp;Id=
  2. \n
  3. 盈立证券香港: bdwu (链接:)https://m.usmart66.com/u/020000312a
  4. \n
  5. FSMone SG: P0513076
  6. \n
  7. 长桥证券 HK:BE884V (链接:)https://activity.longbridgehk.com/pipeline/2023welcomegift/index.html?account_channel=lb&app_id=longbridge&org_id=1&channel=HM2023001&invite-code=BE884V
  8. \n
  9. 长桥证券 SG:BE884V (链接:)https://activity.lbmkt.ing/pages/longbridge/7415/index.html?app_id=longbridge&org_id=1&channel=HM20240006&account_channel=lb&lang=zh-CN&invite-code=BE884V&utm_source=longbridge_app_share
  10. \n
  11. 老虎证券 HK:A1IDJH (链接:)https://cn.tigrdw.com/activity/market/lego/?id=nzinvitegift&amp;lang=zh_CN&amp;skin=1&amp;platform=ios&amp;os=iOS&amp;account_id=5229371&amp;invite=A1IDJH
  12. \n
  13. iBKR 证券: shaobing908 (链接:)https://ibkr.com/referral/shaobing908
  14. \n
  15. RockFlow: Q7ZC4 (链接:)https://mobile.rockflow.ai/zh-Hans/intents?t=RB24Q7ZC4
  16. \n
  17. BBAE: stggyjr97 (链接:)https://landing.bbaecache.com/m/h5/new-user-reward-v4?lang=zh-CN&f=invite&referral=stggyjr97
  18. \n
  19. 富途牛牛: VG4UMWLN (链接:)https://j.futuhk.com/0142rX
  20. \n
  21. (活动结束)华盛通: W6SZG (链接:)https://www.vcltrade.com/activitiesr/invite-biz/hk/1/be-invited?invitedCode=W6SZG&appuid=2197896&utm_medium=VBrokers_share&lang=zh_CN
  22. \n
  23. 华盛通专属渠道: RUL3 (链接:)https://www.hstbroker.com/kh/apply/online?_scnl=RUL3
  24. \n
  25. 尊嘉金融:BDJT35 (链接:)https://opt.investassistant.com/miningopt/NewUserActivity/index?channelopen=YQAPP14&shareNew=470848
  26. \n
  27. 盈宝证券:https://www.winbulls.com/s/index.html?key=rauqmu
  28. \n
\n

交易所

\n
    \n
  1. Bytit:KOWLOON (链接:)https://partner.bybit.com/b/KOWLOON
  2. \n
  3. Bitget:0ZE48SAU (链接:)https://www.ddjxad.top/zh-CN/referral/register?clacCode=0ZE48SAU&from=%2Fzh-CN%2Fevents%2Freferral-all-program&source=events&utmSource=PremierInviter
  4. \n
  5. 币安:CPA_0010BZTPBZ (链接:)https://www.suitechsui.online/activity/referral-entry/CPA?ref=CPA_0010BZTPBZ
  6. \n
  7. bitget wallet:Pz9w11 (链接:)https://share.bwb.global/invite_earn_coin?inviteCode=Pz9w11&utmSource=referral2.0_copyLink
  8. \n
  9. BiyaPay: 64691647 (链接:)https://biyapay.com/re/64691647
  10. \n
  11. 欧易: https://chouyi.me/join/53900791
  12. \n
  13. Coinbase:67KDAFW (链接:)https://coinbase.com/join/67KDAFW?src=ios-link
  14. \n
  15. nexo: https://nexo.com/ref/iviwjxoyhl?src=ios-link
  16. \n
\n

手機卡

\n
    \n
  1. RedteaGo: DSTA0003
  2. \n
  3. Firsty: ZGUZ-G876
  4. \n
  5. Roamless: TANSICBHJ
  6. \n
  7. eskimo: PD42427
  8. \n
  9. cetxcel uk:CPWVSU
  10. \n
\n

汇款

\n
    \n
  1. Wise 汇款:shaobingy (链接:)https://wise.com/invite/ihpc/shaobingy
  2. \n
  3. 熊猫速汇:D9G6VU
  4. \n
  5. Paysend:04ieyf (链接:)https://paysend.com/referral/04ieyf
  6. \n
  7. Remitly:https://remit.ly/1wlhyvkq
  8. \n
\n

vps 挂机赚钱

\n
    \n
  1. traffmonetizer:https://traffmonetizer.com/?aff=977147
  2. \n
  3. repocket:https://link.repocket.com/YJm9
  4. \n
  5. packetstream:https://packetstream.io/?psr=70Ix
  6. \n
  7. earnfm:https://earn.fm/ref/TANST4TT
  8. \n
  9. peer2profit:https://t.me/peer2profit_app_bot?start=167496353863d5ea529a71f
  10. \n
  11. iproyal-pawns:https://pawns.app/?r=1232766
  12. \n
  13. earnapp:https://earnapp.com/i/FJbVDP2l
  14. \n
\n

其他

\n
    \n
  1. 网易音乐人:UMTHVQH
  2. \n
  3. ShopBack:owuafO (链接:)https://app.shopback.com/pmOwFIVkbPb
  4. \n
  5. 网心云:x6qYiTLw (链接:)https://act.walk-live.com/acts/invite?inviteid=x6qYiTLw
  6. \n
  7. TopCashback:https://www.topcashback.com/ref/Member837799854831/?source=App-iOS-TAFPage
  8. \n
  9. Rakuten:DSTANS39 (链接:) https://www.rakuten.com/r/DSTANS39?eeid=44749
  10. \n
  11. 招商银行信用卡推荐:https://res.cc.cmbimg.com/itafront/Frog/#/mgmLogin/xbdmgm1/remote?webAddress=9WD_ICON_XBB&where=wap1_wap2&pageName=MRecContract&activityTitle=MGMXSDC201907300&appChn=05&dsid=&dscontr=&pretrackno=e63b0c8883414fada400672d41f9de2e&pretrack=10403643&mgmSm2Flag=1&mgmSource=share&m1TraceId=e63b0c8883414fada400672d41f9de2e
  12. \n
\n

持续更新中…

","url":"http://localhost:2222/api/redirection?characterId=67299¬eId=9","image":"ipfs://bafkreibveiqkbi3e3kxv6bscihskhwxrjytq3h75lqulytebpkwit6l2u4","date_published":"2024-11-15T07:24:21.000Z","tags":["post"],"author":{"name":"KowLoon","url":"http://localhost:2222/api/redirection?characterId=67299","handle":"kowloon"}},{"id":"51379-28","title":"如何白嫖Cloudflare WARP+优选IP","summary":"众所周知,Cloudflare 作为互联网界的大善人,旗下有很多好用甚至免费的好东西。 今天讲的 warp,不仅可以用来装在 VPS 小鸡🐔上解锁本来不支持的流媒体,比如 Netflix、TikTok 等;还可以装在设备上用来科学,再加上优选 IP,油管 4K 不敢保证,但是…","content_html":"

众所周知,Cloudflare 作为互联网界的大善人,旗下有很多好用甚至免费的好东西。
\n今天讲的 warp,不仅可以用来装在 VPS 小鸡🐔上解锁本来不支持的流媒体,比如 Netflix、TikTok 等;还可以装在设备上用来科学,再加上优选 IP,油管 4K 不敢保证,但是 2K 是没啥问题的,晚高峰也能用。最最重要的是它完全免费!

\n

电脑端

\n

先讲电脑端是因为配置简单,且核心操作是一致的,下载软件,设置优选 IP。
\n基于此教程,其实大佬的教程已经讲的很清楚了。

\n

下载软件

\n

先下载本体客户端,网站很好记,就叫 1.1.1.1
\n选择对应的客户端下载安装即可

\n

此处下载文件并解压

\n

\"image\"

\n

获取优选 IP

\n

在获取优选 IP 前,请先关闭全局代理
\n启动warp-yxip.bat,选择优选模式(默认为 IPv4,等待程序完成
\n优选完成后,找到 result.csv 文件,打开。可以看到优选的 EndPoint IP 是按照丢包率和延迟排列的

\n

\"image\"

\n

设置优选

\n

有了上一步获取的优选 IP 后,我们就可以设置 warp 客户端连接到优选了
\n找到 CloudFlare WARP 官方客户端的安装位置(一般在C:\\Program Files\\Cloudflare\\Cloudflare WARP),将提供的设置端点.bat文件复制进去
\n点击并设置优选 IP

\n

\"image\"

\n

此时打开客户端就能连接到了

\n

\"image\"

\n

手机端

\n

下载软件

\n

手机端比较复杂一点,需要两个软件。

\n
    \n
  1. Termux , 一个安卓上的终端软件
  2. \n
  3. Cloudflare WARP, 最新版本我们无法自己设置端点了,所以推荐用老版本,我用的6.11版本
  4. \n
\n

然后,手机的客户端需要邀请用户获取流量,不过我们可以使用 Telegram bot @generatewarpplusbot直接刷满

\n

通过 bot 获取密钥,然后打开 APP--> 设置 --> 账户 --> 按键 --> 更改密钥
\n输入密钥即可,如果无法保存,您可能需要科学

\n

\"image\"

\n

\"86266f183338e9432b60a4a9298ef1e\"

\n

获取优选 IP

\n

打开 Termux,输入下面的命令

\n
wget -N https://gitlab.com/Misaka-blog/warp-script/-/raw/main/files/warp-yxip/warp-yxip.sh && bash warp-yxip.sh\n
\n

\"7679a739b8eaf1a856090d009bccefe\"

\n

设置优选

\n

打开 WARP 软件
\n设置 --> 高级 --> 连接选项 --> 自定义端点
\n输入优选 IP 即可

\n

\"69d37459b780177c9279ef5986d3094\"

\n

其他

\n

使用 Cloudflare WARP 可能会被某些网站 ban 掉

\n

\"image\"

\n

\"image\"

\n

所以,鸡蛋🥚不能放到同一个篓子里啊,同学们。

\n
\n

优选 WARP 的 EndPoint IP,提高本地 WARP 节点访问性并修改各客户端的 EndPoint IP

\n
","url":"http://localhost:2222/api/redirection?characterId=51379¬eId=28","image":"https://ipfs.4everland.xyz/ipfs/bafkreia7xvurfiadcpu77jkpzwcllx2ii6qsvx2d6gviq66ach44rwesd4","date_published":"2023-05-04T07:20:10.000Z","tags":["post","warp"],"author":{"name":"qinfengge","url":"http://localhost:2222/api/redirection?characterId=51379","handle":"qinfengge"}},{"id":"32022-24","title":"Dark mode, Search, Useful post components & More - xLog Weekly Summary #14","summary":"Fresh out the oven 🔥 This has been the busiest week ever for our community developers, who have been crazily submitting pull requests to…","content_html":"

Fresh out the oven 🔥

\n

This has been the busiest week ever for our community developers, who have been crazily submitting pull requests to xLog.

\n

Dark mode

\n

\"image\"

\n

\"image\"

\n

Dark mode is an incredible project, a \"dark miracle\" brought to life by the collaborative efforts of our talented community developers.

\n

Dark mode is automatically switched on based on your system preferences, but there's also a manual switch button at the bottom of the page.

\n

We'd like to remind you to turn on the lights while using electronic devices at night to protect your eyes.

\n

Credit @innei-4525 @suemor @daidr @365cent

\n

Code changes: #312 #331 #332 #333 #335 #340 #341 #353

\n

Mention Syntax

\n

@xlog

\n

To help bloggers easily mention each other and foster a greater sense of community within xLog, we've introduced a simple mention syntax. Just use the '@' symbol followed by the handle (which is also the subdomain) of the user you want to mention. We'll soon add mention notifications to the notification system.

\n

Code changes: 9e2db05

\n

APlayer component

\n

\n
<audio src=\"ipfs://bafybeihjiyr5r6zawpartvqbaqkfbeyyehvz5sk6cvpd7g6ir7cz73yz5q\" name=\"光るなら\" artist=\"Goose house\" cover=\"ipfs://bafkreia4ytkhiqbdxt7kh2x5brhihuuql3vcr6nbrqco2hacgkrahfj4vq\" lrc=\"[00:15.440]雨上がりの虹も (雨过天晴的彩虹)\" loop><audio>\n
\n

APlayer is a highly acclaimed web audio player, and we're thrilled that our community developers have integrated it into xLog. Now, simply drag and drop audio files directly into the editor, which will read and automatically fill in the file's cover, song name, artist, and other information before uploading it to IPFS.

\n

Supported properties:

\n\n

Credit @steveyu @doma-6565

\n

Code changes: #349 0886273

\n

Mermaid component

\n
```mermaid\nsequenceDiagram\n    participant Alice\n    participant Bob\n    Alice->>John: Hello John, how are you?\n    loop Healthcheck\n        John->>John: Fight against hypochondria\n    end\n    Note right of John: Rational thoughts <br/>prevail!\n    John-->>Alice: Great!\n    John->>Bob: How about you?\n    Bob-->>John: Jolly good!\n```\\\n
\n
sequenceDiagram\n participant Alice\n participant Bob\n Alice->>John: Hello John, how are you?\n loop Healthcheck\n John->>John: Fight against hypochondria\n end\n Note right of John: Rational thoughts <br/>prevail!\n John-->>Alice: Great!\n John->>Bob: How about you?\n Bob-->>John: Jolly good!\n
\n

Mermaid is a JavaScript-based diagramming and charting tool that renders Markdown-inspired text definitions to create and modify diagrams dynamically. Our community developers have integrated this fantastic tool into xLog.

\n

Diagram Syntax: https://mermaid.js.org/

\n

Credit @innei-4525

\n

Code changes: #309

\n

Search

\n

\"image\"

\n

\"image\"

\n

We've added search functionality across the entire platform and within individual sites, making it easy for readers to quickly find content that interests them. Access the search feature in the top-right corner of the activity page and on each site.

\n

Code changes: ccf4bdc 46fac4d

\n

Mobile app

\n\n

We are currently developing a mobile app using React Native, which is, of course, entirely open-source. You can find its GitHub repository here: https://github.com/Crossbell-Box/xLog-mobile

\n

The app is still in its early stages of development, so there isn't much to share at the moment. However, rest assured that it'll be available for download soon. Stay tuned to my GitHub for updates!

\n

Additional Updates

\n\n

👏 Give a warm round of applause to our community developers, xLog is the result of everyone's joint efforts.

\n

Stay Connected with xLog

\n

If you have any suggestions or expectations, or just want to have a casual conversation, feel free to join our community or leave a comment below. Cheers! 🍻

\n","url":"http://localhost:2222/api/redirection?characterId=32022¬eId=24","image":"https://ipfs.4everland.xyz/ipfs/bafybeich3idgbnjj4cm5k62t6gxodvvxxijqdfeo3pau2xynmdf6xq6wda","date_published":"2023-04-17T23:29:04.000Z","tags":["post","Weekly"],"author":{"name":"xLog","url":"http://localhost:2222/api/redirection?characterId=32022","handle":"xlog"}},{"id":"60701-26","title":"emby直链网盘播放教程","summary":"先秀一下 emby 图 !!!!!全部看完,再看最后的完整安装示例!!!!!\n\n!!!!!媒体库数量少的可以选择不部署 auto-symlink,这个只是用几 Kb 大小的 strm 文件去代替几十 G 的媒体文件让 emby 扫库的时候变快而已!并不是必须!!!!…","content_html":"

先秀一下 emby 图

\n

\"\"

\n

\"\"

\n

\"\"

\n

\"\"

\n

\"\"

\n

\"\"

\n

\"撒法发\"

\n

文件夹准备

\n

!!!!!全部看完,再看最后的完整安装示例!!!!!

\n

!!!!!媒体库数量少的可以选择不部署 auto-symlink,这个只是用几 Kb 大小的 strm 文件去代替几十 G 的媒体文件让 emby 扫库的时候变快而已!并不是必须!!!!!如果你的媒体库特别多,比如一万部电影,那么可以选择部署 auto-symlink,这样 emby 扫库几秒就完成了!!!!!注意!不部署 auto-symlink 的话就不需要创建 strm 文件夹,emby 媒体库添加文件夹时选的就是 cd2 挂载后的媒体库路径!!!!!

\n

准备三个文件夹和一个 alist 挂载网盘时的挂载路径,一个 cd2 挂载网盘时的挂载路径(不部署 auto-symlink 就是准备两个文件夹)

\n
\n

1. 网盘用 cd2 挂载后,mp 的下载目录
\n如:/share/Drive/115/downloads

\n
\n
\n

2. 网盘用 cd2 挂载后,mp 整理后的媒体库目录
\n如:/share/Drive/115/media

\n
\n
\n

3. 软链接 STRM 文件夹(不部署 auto-symlink 可以跳过)
\n如:/share/Drive/115STRM/media

\n
\n

#alist 和 cd2 的挂在路径要一样!!不然 nginx 要改成名称替换,一样的话就不用改。

\n
\n

alist 挂载网盘时的挂载路径
\n如:/115

\n
\n
\n

cd2 挂载网盘时的挂载路径
\n如:/115

\n
\n

media 文件夹下面是一级目录和二级目录。

\n

/share/Drive/115/media/ 电影 / 欧美电影

\n

/share/Drive/115STRM/media/ 电视剧 / 欧美剧

\n
\n

解释:
\n微信发送要看的片到 mp,mp 自动择优下载到 “1” 这个目录,下载完成后自动刮削和转移到 “2” 这个目录,
\n转移完成后 auto-symlink 监控到 “2” 目录发生变化,自动生成对应 STRM 文件和复制对应元数据(nfo 和 jpg 等)到 “3” 这个文件夹。然后 emby 读取 “3” 这个文件夹进行播放。

\n
\n
\n

strm 文件的内容就是媒体对应的 “2” 地址!!!播放的时候就是调用 “2” 地址进行播放,所以没有做 nginx 的时候 cd2 后台下载那里会有一个 embyserver 的进程,做了 nginx 之后 cd2 后台就没有 embyserver 进程了,就代表 emby 播放是直链网盘播放了,不占用宽带上传了!

\n
\n

emby 目录映射注意事项

\n

emby 需要同时映射 “2” 和 “3” 目录!!!
\n并且映射 “2” 目录时,冒号右边必须是绝对路径!
\n映射 “3” 目录时冒号右边可以随意写映射路径。

\n

媒体库添加文件夹时选的是 “3” 目录!!!!!!!!

\n

如:
\n“2” 路径:/share/Drive/115
\n“3” 路径:/share/AAAA/STRRM
\n那么这样映射

\n
            - '/share/Container/Emby:/config'\n            - '/share/Drive/115:/share/Drive/115'\n            - '/share/AAAA/STRRM:/STRM'\n
\n

那么 emby 媒体库添加文件夹的时候选的就是
\n如:/STRM/ 电视剧 / 欧美剧

\n

如:
\n“2” 路径:/share/Drive/115/media
\n“3” 路径:/share/Drive/115STRM/media
\n那么这样映射

\n
        volumes:\n            - '/share/Container/Emby:/config'\n            - '/share/Drive:/share/Drive'\n
\n

那么 emby 媒体库添加文件夹的时候选的就是
\n如:/share/Drive/115STRM/media/ 电视剧 / 欧美剧

\n\n

(不部署 auto-symlink 可以跳过)

\n

auto-symlink 和 “2” 目录要一致,并且冒号右边必须是绝对路径!
\n如:
\n“2” 路径:/share/Drive/115
\n“3” 路径:/share/AAAA/STRRM
\n那么这样映射

\n
volumes:\n      - /share/AAAA/STRRM:/share/AAAA/STRRM #strm目录\n      - /share/Drive/115:/share/Drive/115:rslave #媒体库目录\n      - /share/Container/STRM/config:/app/config\n
\n

如:
\n“2” 路径:/share/Drive/115/media
\n“3” 路径:/share/Drive/115STRM/media
\n那么这样映射就行了。

\n
volumes:\n      - /share/Drive:/share/Drive:rslave #包含了strm目录和媒体库目录\n      - /share/Container/STRM/config:/app/config\n
\n

nginx 注意事项

\n

注意事项一:emby 用哪个端口

\n

如果你 nginx 的端口映射是这样的

\n
    ports:\n      - 8099:80\n
\n

那么 emby 访问 8099 才可以直链!!!也就是原来的 emby 地址是 10.10.10.10:8096,要访问 10.10.10.10:8099 才行,反代的话就是反代 8099 这个端口。8099 端口可以随意改。

\n

注意事项二:修改constant.js文件

\n\n

点击下载 nginx 配置文件

\n

要修改的有第 4,7,9,11,12,17 行。

\n
\n

必改项

\n

第 4 行:填 emby 内网地址,emby 需要 host 模式!!!

\n

第 7 行:划重点,填完其他的在讲。

\n

第 9 行:emby 的 apikey,在设置-api密钥里面,没有就新建一个,有就直接用。

\n

第 11 行:alist 的域名

\n

第 12 行:alist 的端口

\n

第 17 行:alist 的 token,在后台-设置-其他-令牌里面

\n

选填项

\n

第 21 行:说是选填项,但是建议也写上!!

\n

第 25 行:第 25 行和第 7 行效果一样,选一个填!!不要两个都写!!

\n
\n

教你填第 7 行和第 25 行

\n
\n

我们在第一步文件夹准备的时候已经得到了 5 个路径,分别是

\n

1. 网盘用 cd2 挂载后,mp 的下载目录
\n如:/share/Drive/115/downloads

\n

2. 网盘用 cd2 挂载后,mp 整理后的媒体库目录
\n如:/share/Drive/115/media

\n

3. 软链接 STRM 文件夹
\n如:/share/Drive/115STRM/media

\n

alist 挂载网盘时的挂载路径
\n如:/115

\n

cd2 挂载网盘时的挂载路径
\n如:/115

\n

此时

\n

alist 的媒体路径是:/115/media/ 电影 / 欧美电影 / 蜘蛛侠 / 蜘蛛侠.mkv

\n

emby 的媒体路径是:/share/Drive/115/media/ 电影 / 欧美电影 / 蜘蛛侠 / 蜘蛛侠.mkv

\n

可以看出,/115之后的路径都一模一样。

\n

也就是 emby 的媒体路径多出了一个/share/Drive

\n

/115/media/电影/欧美电影/蜘蛛侠/蜘蛛侠.mkv

\n

/share/Drive/115/media/电影/欧美电影/蜘蛛侠/蜘蛛侠.mkv

\n

此时第 7 行方括号内应该填:\"/share/Drive\"(带双引号)

\n
\n
\n

如果你 alist 和 cd2 网盘映射路径不一致。那么就填第 25 行

\n

alist 挂载网盘时的挂载路径
\n如:/115alist

\n

cd2 挂载网盘时的挂载路径
\n如:/115cd2

\n

此时

\n

alist 的媒体路径是:/115alist/media/ 电影 / 欧美电影 / 蜘蛛侠 / 蜘蛛侠.mkv

\n

emby 的媒体路径是:/share/Drive/115cd2/media/ 电影 / 欧美电影 / 蜘蛛侠 / 蜘蛛侠.mkv

\n

可以看出,/media之后的路径都一模一样。

\n

也就是两个路径开头一个是/115alist,一个是/share/Drive/115cd2

\n

/115alist/media/电影/欧美电影/蜘蛛侠/蜘蛛侠.mkv

\n

/share/Drive/115cd2/media/电影/欧美电影/蜘蛛侠/蜘蛛侠.mkv

\n

此时第 25 行方括号内应该填:\"/share/Drive/115cd2\", \"/115alist\"(带双引号,前面填 emby 路径头,后面填 alist 路径头)

\n
\n

这个时候打开 10.10.10.10端口就可以直链网盘播放了。

\n

检查是否直链

\n

检查方式一:

\n

使用各类客户端,如 Emby 官方客户端、Infuse、Fileball、Vidhub 等登录 nginx 端口(如 8099),找一个刮削好的片子播放,或者 web 跳转第三方播放器 potplayer、iina 等。

\n

查看 CD2 的下载任务。如果没有大流量的对应文件下载,进程为 /system/EmbyServer ,即 302 转发成功。

\n

检查方式二:

\n

使用各类客户端,如 Emby 官方客户端、Infuse、Fileball、Vidhub 等登录 nginx 端口(如 8099),找一个刮削好的片子播放,或者 web 跳转第三方播放器 potplayer、iina 等。

\n

查看 nginx 日志。如果出现以下直链地址,表示直链成功,并且此时流量不经过部署emby的服务器。就不占用 VPS 或者家宽的上传了。

\n\n\n\n

排错:

\n
\n

1:如果能播放,还有 embyserver 进程,那么你使用的是 emby 的端口,所以才能释放,请使用 nginx 端口登录 emby 释放测试。
\n2:如果用 nginx 端口且不能播放,那只能是路径错了,检查 nginx 配置文件和 emby,alist,cd2 的映射路径!!!

\n
\n

完整安装示例

\n

!!!!!媒体库数量少的可以选择不部署 auto-symlink,这个只是用几 Kb 大小的 strm 文件去代替几十 G 的媒体文件让 emby 扫库的时候变快而已!并不是必须!!!!!如果你的媒体库特别多,比如一万部电影,那么可以选择部署 auto-symlink,这样 emby 扫库几秒就完成了!!!!!注意!不部署 auto-symlink 的话就不需要创建 strm 文件夹,emby 媒体库添加文件夹时选的就是 cd2 挂载后的媒体库路径!!!!!

\n

本安装示例有部署 auto-symlink

\n

本安装示例的前提是媒体库内已经有部分影视,并且已经做好刮削

\n

文件夹准备

\n

三个文件夹和一个 alist 挂载网盘时的挂载路径,一个 cd2 挂载网盘时的挂载路径

\n
\n

1. 网盘用 cd2 挂载后,mp 的下载目录
\n如:/share/Drive/115/downloads

\n
\n
\n

2. 网盘用 cd2 挂载后,mp 整理后的媒体库目录
\n如:/share/Drive/115/media

\n
\n

1,2 路径在 cd2 挂载的时候完成

\n\n\n
\n

3. 软链接 STRM 文件夹
\n如:/share/Drive/115STRM/media

\n
\n\n

#alist 和 cd2 的挂在路径要一样!!不然 nginx 要改成名称替换,一样的话就不用改。

\n
\n

alist 挂载网盘时的挂载路径
\n如:/115

\n
\n
\n

cd2 挂载网盘时的挂载路径
\n如:/115

\n
\n\n\n

部署 auto-symlink

\n
version: \"3.8\"\nservices:\n  auto_symlink:\n    container_name: auto_symlink\n    environment:\n      - TZ=Asia/Shanghai\n    volumes:\n      #- /share/Drive:/share/Drive #strm目录\n      - /share/Drive:/share/Drive:rslave #媒体库目录\n      - /share/Container/STRM/config:/app/config \n    ports:\n      - 8095:8095\n    user: 0:0\n    logging:\n      options:\n        max-size: 10m\n        max-file: 3\n    restart: unless-stopped\n    image: shenxianmq/auto_symlink:latest\nnetworks: {}\n\n        #  放这个只是为了让你理解我文件夹为什么这么挂载。。。。。\n        #  1.网盘用cd2挂载后,mp的下载目录 如:/share/Drive/115/downloads\n        #  2.网盘用cd2挂载后,mp整理后的媒体库目录 如:/share/Drive/115/media\n        #  3.软链接STRM文件夹(不部署auto-symlink可以跳过) 如:/share/Drive/115STRM/media\n        #  alist挂载网盘时的挂载路径 如:/115\n        #  cd2挂载网盘时的挂载路径 如:/115\n
\n

浏览器打开,输入用户名admin, 密码password登录。

\n

添加同步

\n

任务名称:随便

\n

媒体目录:改成你自己的,如果你文件夹准备的时候就和我一模一样这里就跟我一模一样。

\n

本地目录:改成你自己的,如果你文件夹准备的时候就和我一模一样这里就跟我一模一样。

\n

元数据模式:本地模式

\n

软链接模式:strm

\n

strm 模式:local

\n

其他选项和我一模一样。

\n

\"\"

\n

全局设置

\n\n

手动同步

\n

手动同步一次之后,mp 整理媒体入库后都会自动监控媒体文件夹,发现媒体文件夹有更改就会创建或者删除 strm 文件和元数据。

\n\n

点击开始同步之后,点击查看日志,就会输出创建 strm 文件和复制 nfo 和 jpg 的日志了。此时 strm 文件夹里面就有 strm 文件 emby 就能读取了。

\n\n

部署 emby

\n
version: '3.8'\nservices:\n    linuxserver:\n        container_name: Emby\n        network_mode: host\n        environment:\n            - PUID=0\n            - PGID=0\n            - TZ=Asia/Shanghai\n            #- NO_PROXY=172.17.0.1,127.0.0.1,localhost   这4条是给emby走代理\n            #- HTTP_PROXY=http://10.10.10.1:7890         这样刷新媒体元数据时\n            #- HTTPS_PROXY=http://10.10.10.1:7890        才会下载演员图片,合集图片到metadata目录\n            #- ALL_PROXY=http://10.10.10.1:7890          如果本身nas就走代理,那么可以不配置这四条\n        volumes:\n            - '/share/Container/Emby:/config'\n            - '/share/Drive:/share/Drive'\n        devices:\n            - '/dev/dri:/dev/dri'\n        restart: unless-stopped\n        image: 'lscr.io/linuxserver/emby:beta'\n        \n        #  放这个只是为了让你理解我文件夹为什么这么挂载。。。。。\n        #  1.网盘用cd2挂载后,mp的下载目录 如:/share/Drive/115/downloads\n        #  2.网盘用cd2挂载后,mp整理后的媒体库目录 如:/share/Drive/115/media\n        #  3.软链接STRM文件夹(不部署auto-symlink可以跳过) 如:/share/Drive/115STRM/media\n        #  alist挂载网盘时的挂载路径 如:/115\n        #  cd2挂载网盘时的挂载路径 如:/115\n\n
\n

添加媒体库文件夹

\n

添加媒体库,选择 strm 文件夹,(不部署 auto-symlink,就选择 cd2 挂载 115 网盘的目录)

\n\n

媒体库设置

\n

只打开启用实时监控,和元数据读取器,其他所有关于元数据下载器的选项都不打勾!元数保存储方式一定不可以勾选

\n\n

\"\"

\n

好了之后保存,emby 应该几秒就扫库完成了。

\n

因为我们 auto-symlink 的时候设置了同步软连接和元数据,所以 strm 文件夹下会有一个strm文件代替媒体文件,和nfo文件,和jpg图片。所以 emby 扫库完成时有海报,有简介。但是没有演员图片(只要你是第一次安装 emby,emby 的 config 文件夹下没有 metadata 文件夹,就不可能有演员图片)。这时再重新设置媒体库设置

\n

重新设置 媒体库设置

\n

把所有关于元数据下载器图像获取器的选项都选择TheMoveDb其他都不勾选!!!!!
\n设置好后,点击刷新媒体元数据,直接覆盖全部元数据(不会覆盖掉 nfo 文件,因为我们元数保存储方式没有勾选。)替换所有图像不勾选,点击刷新。等待刷新好后再打开一部影片,就可以看到演员图片了。

\n\n

随便点击一部电影电视剧,往下拉到底,可以看到STRM字样STRM文件内容。此时 emby 部署完成。下一步进行劫持 emby 播放地址到 alist 网盘真实播放地址进行直链网盘播放。

\n\n

部署 nginx

\n
version: '3'\nservices:\n  nginx:\n    image: registry.cn-shenzhen.aliyuncs.com/hicane/emby-nginx:latest\n    container_name: nginx\n    network_mode: bridge\n    ports:\n      - 8099:80  #emby访问8099才可以直链!!!也就是原来的emby地址是10.10.10.10:8096,要访问10.10.10.10:8099才行,反代的话就是反代8099这个端口。端口可以随意改。\n    volumes:\n      - /share/Container/nginx/constant.js:/etc/nginx/conf.d/constant.js\n    restart: unless-stopped\n
\n

设置 emby 端口

\n

如上所示,我映射 8099,所以 emby 访问 8099 才可以直链!!!也就是原来的 emby 地址是 10.10.10.10:8096,要访问 10.10.10.10:8099 才行,反代的话就是反代 8099 这个端口。端口可以随意改。

\n

修改constant.js文件

\n\n

点击下载 nginx 配置文件

\n

怎么修改看上文 ——注意事项二:修改 constant.js 文件

\n

全部部署完毕

\n

现在可以打开各类客户端,如 Emby 官方客户端、Infuse、Fileball、Vidhub 等登录nasip:nginx端口或者反代地址进行播放测试了。

\n

怎么测试是否直链看上文 ——检查是否直链

\n

常见问题

\n
\n

emby 挂载路径怎么设置?
\n映射绝对路径,然后对比 emby 里面的媒体信息里面的路径和 alist 的路径,去 nginx 的配置文件里面进行修改。
\n如果安装了 auto-symlink 的还要再映射一个 strm 路径。

\n
\n
\n

emby 的端口用哪个?
\n用 nginx 的。用 emby 的是不可能直链网盘播放的哈。

\n
\n
\n

emby 的网络模式可以改成桥接吗?
\n不可以,只能 host,至少我测试是这样。。

\n
\n
\n

nginx 配置文件里面的 alist 地址可以填写内网地址吗?
\n我试过了,外网没法播放。所以建议填 alist 的外网地址。

\n
\n
\n

auto-symlink 日志每天 2:30 全量同步的时候一直覆盖 nfo 文件,是什么问题?
\nemby 媒体库设置的时候元数保存储方式勾选了,不勾选这个就行了。

\n
\n
\n

怎么判断 emby 播放是不是直链网盘?
\n最简单的办法,用 nginx 端口播放一个视频,coulddrive2 后台进程下在那里,没有 embyserver 进程就是直链了。

\n
\n
\n

STRM 文件夹可以随意设置吗?
\n可以,随便改。

\n
\n
\n

auto-symlink 可以实时监控吗,就是媒体入库后自动创建 strm 和复制元数据?
\n可以,但是有条件,1、coulddrive2 开会员。2、只能在本地或者 coulddrive2 里面移动复制。moviepilot 入库可以实时监控。

\n
\n
\n

我可以用 emby 刮削,auto-symlink 只创建 strm 文件吗?
\n可以,添加同步的时候最后一个选项 同步后缀名-元数据后缀 随便写一个不存在的后缀名就可以了,因为不能全删掉,比如.哈哈删不掉我(注意:要带一个点 “.”)然后 emby 媒体库设置把元数保存储方式勾上就行了。

\n
\n
\n

我可以改成其他网盘,直链其他网盘播放吗?
\n可以,只要/115改成网盘名字,其他一样就行了。

\n
\n
\n

auto-symlink 实时监控不生效是怎么回事?
\n需要全量同步后才可以生效,至少我测试是这样的。。然后它有缓冲期,也就是同步了一部或者几部之后会休息两三分钟再同步下一部电影电视剧。。

\n
","url":"http://localhost:2222/api/redirection?characterId=60701¬eId=26","image":"ipfs://QmTCvURjhNWdEioS5YQ8sonCPhfTpQh6VEph45Z5ZnWRRr","date_published":"2024-05-23T15:06:47.000Z","tags":["post"],"author":{"name":"herman","url":"http://localhost:2222/api/redirection?characterId=60701","handle":"herman-3600"}},{"id":"45089-51","title":"Plaid CTF Writeup [Treasure Map/CSS]","summary":"这两道题真是太有趣了!虽然标签是逆向,但是以前端为载体,有很多JS/CSS奇淫巧计,我已经迫不及待地想要和大家分享了。 Treasure Map\n\n题目地址:http://treasure.chal.pwni.ng/\n\nReady your masts…","content_html":"

这两道题真是太有趣了!虽然标签是逆向,但是以前端为载体,有很多 JS/CSS 奇淫巧计,我已经迫不及待地想要和大家分享了。

\n

Treasure Map

\n
\n

题目地址:http://treasure.chal.pwni.ng/

\n

Ready your masts and set sail! Thar be treasure here if we can figure out how to find it.

\n

Buried Treasure

\n

Follow the map and get the booty — a pirate's work is never done.

\n
\n

题目

\n

这道题包含了 success.js、fail.js 和 0.js ~ 199.js 共两百个一模一样的 js 文件(引用的 SourceMap 有所不同)。

\n

0.js

\n
const b64 = `\nA\nB\nC\nD\nE\nF\nG\nH\nI\nJ\nK\nL\nM\nN\nO\nP\nQ\nR\nS\nT\nU\nV\nW\nX\nY\nZ\na\nb\nc\nd\ne\nf\ng\nh\ni\nj\nk\nl\nm\nn\no\np\nq\nr\ns\nt\nu\nv\nw\nx\ny\nz\n0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n+\n/\n=`;\nexport const go = async () => {\n    const bti = b64.trim().split(\"\\n\").reduce((acc, x, i) => (acc.set(x, i), acc), new Map());\n    const upc = window.buffer.shift();\n    const moi = await fetch(import.meta.url).then((x) => x.text())\n    const tg = await fetch(moi.slice(moi.lastIndexOf(\"=\") + 1)).then((x) => x.json())\n    const fl = tg.mappings.split(\";\").flatMap((v, l) =>v.split(\",\").filter((x) => !!x).map((input) => input.split(\"\").map((x) => bti.get(x)).reduce((acc, i) => (i & 32 ? [...acc.slice(0, -1), [...acc.slice(-1)[0], (i & 31)]] : [...acc.slice(0, -1), [[...acc.slice(-1)[0], i].reverse().reduce((acc, i) => (acc << 5) + i, 0)]].map((x) => typeof x === \"number\" ? x : x[0] & 0x1 ? (x[0] >>> 1) === 0 ? -0x80000000 : -(x[0] >>> 1) : (x[0] >>> 1)).concat([[]])), [[]]).slice(0, -1)).map(([c, s, ol, oc, n]) => [l,c,s??0,ol??0,oc??0,n??0]).reduce((acc, e, i) => [...acc, [l, e[1] + (acc[i - 1]?.[1]??0), ...e.slice(2)]], [])).reduce((acc, e, i) => [...acc, [...e.slice(0, 2), ...e.slice(2).map((x, c) => x + (acc[i - 1]?.[c + 2] ?? 0))]], []).map(([l, c, s, ol, oc, n], i, ls) => [tg.sources[s],moi.split(\"\\n\").slice(l, ls[i+1] ? ls[i+1]?.[0] + 1 : undefined).map((x, ix, nl) => ix === 0 ? l === ls[i+1]?.[0] ? x.slice(c, ls[i+1]?.[1]) : x.slice(c) : ix === nl.length - 1 ? x.slice(0, ls[i+1]?.[1]) : x).join(\"\\n\").trim()]).filter(([_, x]) => x === upc).map(([x]) => x)?.[0] ?? tg.sources.slice(-2, -1)[0];\n    import(`./${fl}`).then((x) => x.go());\n}\n//# sourceMappingURL=0.js.map\n
\n

fail.js

\n
export const go = () => {\n    document.querySelector(\".frame\").classList.add(\"fail\");\n}\n
\n

success.js

\n
import { go as fail } from \"./fail.js\";\nexport const go = () => {\n    if (window.buffer.length !== 0) {\n        fail();\n    } else {\n        document.querySelector(\".frame\").classList.add(\"success\");\n    }\n}\n
\n

大概的校验流程是这样的:

\n\n

分析

\n

最终的目的是让脚本能够载入 success.js 并执行。但是所有脚本的内容都是一样的,可能需要从 SourceMap 下手。

\n
{\n    \"version\": 3,\n    \"sources\":[\"0.js\",\"1.js\",\"2.js\",\"3.js\",\"4.js\",\"5.js\",\"6.js\",\"7.js\",\"8.js\",\"9.js\",\"10.js\",\"11.js\",\"12.js\",\"13.js\",\"14.js\",\"15.js\",\"16.js\",\"17.js\",\"18.js\",\"19.js\",\"20.js\",\"21.js\",\"22.js\",\"23.js\",\"24.js\",\"25.js\",\"26.js\",\"27.js\",\"28.js\",\"29.js\",\"30.js\",\"31.js\",\"32.js\",\"33.js\",\"34.js\",\"35.js\",\"36.js\",\"37.js\",\"38.js\",\"39.js\",\"40.js\",\"41.js\",\"42.js\",\"43.js\",\"44.js\",\"45.js\",\"46.js\",\"47.js\",\"48.js\",\"49.js\",\"50.js\",\"51.js\",\"52.js\",\"53.js\",\"54.js\",\"55.js\",\"56.js\",\"57.js\",\"58.js\",\"59.js\",\"60.js\",\"61.js\",\"62.js\",\"63.js\",\"64.js\",\"65.js\",\"66.js\",\"67.js\",\"68.js\",\"69.js\",\"70.js\",\"71.js\",\"72.js\",\"73.js\",\"74.js\",\"75.js\",\"76.js\",\"77.js\",\"78.js\",\"79.js\",\"80.js\",\"81.js\",\"82.js\",\"83.js\",\"84.js\",\"85.js\",\"86.js\",\"87.js\",\"88.js\",\"89.js\",\"90.js\",\"91.js\",\"92.js\",\"93.js\",\"94.js\",\"95.js\",\"96.js\",\"97.js\",\"98.js\",\"99.js\",\"100.js\",\"101.js\",\"102.js\",\"103.js\",\"104.js\",\"105.js\",\"106.js\",\"107.js\",\"108.js\",\"109.js\",\"110.js\",\"111.js\",\"112.js\",\"113.js\",\"114.js\",\"115.js\",\"116.js\",\"117.js\",\"118.js\",\"119.js\",\"120.js\",\"121.js\",\"122.js\",\"123.js\",\"124.js\",\"125.js\",\"126.js\",\"127.js\",\"128.js\",\"129.js\",\"130.js\",\"131.js\",\"132.js\",\"133.js\",\"134.js\",\"135.js\",\"136.js\",\"137.js\",\"138.js\",\"139.js\",\"140.js\",\"141.js\",\"142.js\",\"143.js\",\"144.js\",\"145.js\",\"146.js\",\"147.js\",\"148.js\",\"149.js\",\"150.js\",\"151.js\",\"152.js\",\"153.js\",\"154.js\",\"155.js\",\"156.js\",\"157.js\",\"158.js\",\"159.js\",\"160.js\",\"161.js\",\"162.js\",\"163.js\",\"164.js\",\"165.js\",\"166.js\",\"167.js\",\"168.js\",\"169.js\",\"170.js\",\"171.js\",\"172.js\",\"173.js\",\"174.js\",\"175.js\",\"176.js\",\"177.js\",\"178.js\",\"179.js\",\"180.js\",\"181.js\",\"182.js\",\"183.js\",\"184.js\",\"185.js\",\"186.js\",\"187.js\",\"188.js\",\"189.js\",\"190.js\",\"191.js\",\"192.js\",\"193.js\",\"194.js\",\"195.js\",\"196.js\",\"197.js\",\"198.js\",\"199.js\",\"fail.js\",\"success.js\"],\n    \"mappings\":\";A4DAA;A0DAA;AzEAA;AsDAA;AmGAA;AtIAA;ApBAA;A8DAA;AZAA;AxDAA;AyDAA;ALAA;A9EAA;A6HAA;AoBAA;A1BAA;A7BAA;AvCAA;AwEAA;AFAA;AuBAA;A8BAA;AHAA;AnGAA;AvBAA;A+GAA;A2BAA;A/EAA;A7CAA;ALAA;ArCAA;AqJAA;AxCAA;AoDAA;AGAA;AtEAA;AtDAA;AjEAA;AYAA;AiFAA;AhBAA;ArEAA;AkJAA;AlCAA;A9GAA;AkHAA;AnFAA;AMAA;A5CAA;AgCAA;AyJAA;AhDAA;AjFAA;AoDAA;A/FAA;A+HAA;AzIAA;A6CAA;AsBAA;A4FAA;AvFAA;A4BAA;A1DAA;A4CAA;AoGAA\"\n}\n
\n

上面是 0.js 的 SourceMap,对当前源码进行了详细的映射,那么具体映射了什么呢?

\n
\n

SourceMap 中的 mappings 包含 VLQ 编码,分号用于表示文件行,逗号表示位置,VLQ 编码的部分是一个可变长数组,代表了映射所需的各个增量,具体可以参考文章 http://ruanyifeng.com/blog/2013/01/javascript_source_map.html

\n
\n

根据 SourceMap 的映射规则,脚本的 2-66 行(即 b64 变量的内容)被分别映射到不同的 66 个文件中,举个简单的例子,0.js 的映射关系大概是这样的:

\n
[[\"60.js\",\"A\"],[\"118.js\",\"B\"],[\"45.js\",\"C\"],[\"99.js\",\"D\"],[\"198.js\",\"E\"],[\"64.js\",\"F\"],[\"44.js\",\"G\"],[\"106.js\",\"H\"],[\"94.js\",\"I\"],[\"38.js\",\"J\"],[\"95.js\",\"K\"],[\"90.js\",\"L\"],[\"12.js\",\"M\"],[\"137.js\",\"N\"],[\"157.js\",\"O\"],[\"131.js\",\"P\"],[\"102.js\",\"Q\"],[\"63.js\",\"R\"],[\"135.js\",\"S\"],[\"133.js\",\"T\"],[\"156.js\",\"U\"],[\"186.js\",\"V\"],[\"183.js\",\"W\"],[\"84.js\",\"X\"],[\"61.js\",\"Y\"],[\"172.js\",\"Z\"],[\"199.js\",\"a\"],[\"120.js\",\"b\"],[\"75.js\",\"c\"],[\"70.js\",\"d\"],[\"33.js\",\"e\"],[\"182.js\",\"f\"],[\"142.js\",\"g\"],[\"194.js\",\"h\"],[\"197.js\",\"i\"],[\"127.js\",\"j\"],[\"73.js\",\"k\"],[\"8.js\",\"l\"],[\"20.js\",\"m\"],[\"101.js\",\"n\"],[\"85.js\",\"o\"],[\"16.js\",\"p\"],[\"162.js\",\"q\"],[\"128.js\",\"r\"],[\"18.js\",\"s\"],[\"132.js\",\"t\"],[\"49.js\",\"u\"],[\"55.js\",\"v\"],[\"11.js\",\"w\"],[\"43.js\",\"x\"],[\"196.js\",\"y\"],[\"148.js\",\"z\"],[\"67.js\",\"0\"],[\"119.js\",\"1\"],[\"24.js\",\"2\"],[\"151.js\",\"3\"],[\"14.js\",\"4\"],[\"59.js\",\"5\"],[\"81.js\",\"6\"],[\"173.js\",\"7\"],[\"86.js\",\"8\"],[\"114.js\",\"9\"],[\"56.js\",\"+\"],[\"100.js\",\"/\"]]\n
\n

而 0.js-199.js 中的代码部分,实际上就是在对 SourceMap 进行解析,从传入的 flag 依次取出字符,对应到特定的 js 文件。

\n

例如对于一个 B 开头的 flag,就会去请求 118.js,解析 118.js 的 SourceMap,并处理 flag 的第二个字符,以此类推。

\n

我们可以尝试去寻找哪个文件包含对 success.js 的映射,这样就可以确定 Flag 的最后一个字符和其对应文件,一步一步反推就能得到最终的 Flag。

\n

相关脚本

\n

下载文件

\n

首先当然是要把所有 SourceMap 给下载下来,这里提供一个 NodeJS 脚本

\n
async function download() {\n  const fs = require(\"fs\");\n\n  for (let i = 0; i < 200; i++) {\n    const url = `http://treasure.chal.pwni.ng/${i}.js.map`;\n    console.log(url);\n    const data = await fetch(url).then((res) => res.text());\n    fs.writeFileSync(`./originmaps/${i}.js.map`, data);\n  }\n}\n\ndownload();\n
\n

脚本会将所有的 SourceMap 下载到 originmaps 文件夹中。(记得提前创建文件夹)

\n

解析 SourceMap

\n

稍微修改一下题目给的 js,解析 SourceMap,并将映射表保存到文件中。

\n
// char2js.js\nconst fs = require(\"fs\").promises;\nconst { VLQDecode, getSource, JS_SOURCE } = require(\"./utils.js\");\n\n(async function () {\n  // 遍历 originmaps 所有文件\n  const maps = await fs.readdir(\"./originmaps\");\n  for (const map of maps) {\n    // console.log(map);\n    // 读取文件内容\n    const content = JSON.parse(\n      await fs.readFile(`./originmaps/${map}`, \"utf-8\")\n    );\n    let _map = getCharFileMap(content);\n    // 写入到 char2js 文件夹\n    await fs.writeFile(`./char2js/${map}`, JSON.stringify(_map));\n  }\n})();\n\nconst getCharFileMap = (content) => {\n  const source = JS_SOURCE;\n\n  const lines = content.mappings.split(\";\");\n\n  const fl = lines\n    .flatMap((item, index) => {\n      // 位置切分\n      const pos = item.split(\",\").filter((x) => !!x);\n\n      // 解码\n      const decodedPos = pos.map((input) => VLQDecode(input));\n\n      return decodedPos\n        .map(([c, s, ol, oc, n]) => [\n          index,\n          c,\n          s ?? 0,\n          ol ?? 0,\n          oc ?? 0,\n          n ?? 0,\n        ])\n        .reduce(\n          (acc, e, i) => [\n            ...acc,\n            [index, e[1] + (acc[i - 1]?.[1] ?? 0), ...e.slice(2)],\n          ],\n          []\n        );\n    })\n    .reduce(\n      (acc, e, i) => [\n        ...acc,\n        [\n          ...e.slice(0, 2),\n          ...e.slice(2).map((x, c) => x + (acc[i - 1]?.[c + 2] ?? 0)),\n        ],\n      ],\n      []\n    )\n    .map(([l, c, s, ol, oc, n], i, ls) => [\n      getSource(s),\n      source\n        .split(\"\\n\")\n        .slice(l, ls[i + 1] ? ls[i + 1]?.[0] + 1 : undefined)\n        .map((x, ix, nl) =>\n          ix === 0\n            ? l === ls[i + 1]?.[0]\n              ? x.slice(c, ls[i + 1]?.[1])\n              : x.slice(c)\n            : ix === nl.length - 1\n            ? x.slice(0, ls[i + 1]?.[1])\n            : x\n        )\n        .join(\"\\n\")\n        .trim(),\n    ]);\n\n  return fl;\n};\n
\n

该文件使用了 utils.js,可以在这里下载:https://ipfs.4everland.xyz/ipfs/QmSDubw4sHg25kSjzzQu9aotV52bbbRp9nZbxog5KcbfDX

\n

寻找正确的加载路径

\n
const fs = require(\"fs\").promises;\nconst jsMaps = {};\nfunction calcPath(curFlagPath, currentJsCursor) {\n  if (currentJsCursor == \"0.js\") {\n    console.log(curFlagPath.reverse().join(\"\"));\n    return;\n  }\n  for (let map of Object.keys(jsMaps)) {\n    let flag = false;\n    for (const [file, char] of jsMaps[map]) {\n      if (file == currentJsCursor) {\n        if(currentJsCursor === map) flag = true;\n        flag = true\n        let _curFlagPath = [...curFlagPath];\n        _curFlagPath.push(char);\n        currentJsCursor = map.replace(\".map\", \"\");\n        calcPath(_curFlagPath, currentJsCursor);\n      }\n    }\n    if (flag) break;\n  }\n}\n\n(async function () {\n  // 遍历 char2js 所有文件\n  const maps = await fs.readdir(\"./char2js\");\n  for (const map of maps) {\n    // 读取文件内容\n    const content = JSON.parse(await fs.readFile(`./char2js/${map}`, \"utf-8\"));\n    jsMaps[map] = content;\n  }\n\n  calcPath([], \"success.js\");\n})();\n
\n

错了🤯🤯

\n

最终我们能得到一个 23 位的 Flag: Nd+a+map/How+about+200!,但是题目要求 25 位。说明中间可能会存在多条路径,下面的脚本是柏喵改进的,tql

\n
const fs = require(\"fs\").promises;\nconst jsMaps = {};\nlet final = [];\n(async function () {\n  // 遍历 char2js 所有文件\n  const maps = await fs.readdir(\"./char2js\");\n  for (const map of maps) {\n    // 读取文件内容\n    const content = JSON.parse(await fs.readFile(`./char2js/${map}`, \"utf-8\"));\n    jsMaps[map] = content;\n  }\n\n  let currentJsCursor = [{\"cur\":\"success.js\",\"path\":[]}];\n  let nextJsCursor = [];\n  for (i = 0; i < 25; i++) {\n    for (let map of Object.keys(jsMaps)) {\n      for (const [file, char] of jsMaps[map]) {\n        currentJsCursor.filter((item) => item.cur === file)\n          .forEach(\n            (item) => nextJsCursor.push({cur:map.replace('.map',''),path:[...item.path,char]}\n          ));\n      }\n    }\n    currentJsCursor = nextJsCursor.reduce((acc, cur) => {\n      if (acc.findIndex((item) => item.cur === cur.cur) === -1) {\n        acc.push(cur);\n      }\n      return acc;\n    }, []);\n    nextJsCursor = [];\n  }\n  currentJsCursor.filter((item) => item.cur === \"0.js\").forEach((item) => console.log(item.path.reverse().join(\"\"))); \n})();\n
\n

之前错误 Flag 的路径是 0.js->137.js->160.js->192.js->... (Nd+a...)

\n

正确 Flag 的路径是 0.js->137.js->23.js->137.js->160.js->192.js->... (Need+a...)

\n

得到正确的 Flag PCTF{Need+a+map/How+about+200!}

\n

CSS

\n
\n

题目地址:https://plaidctf.com/files/css.74486b61b22e49b3d8c5afebee1269e37b50071afbf1608b8b4563bf8d09ef92.html

\n

I found this locked chest at the bottom o' the ocean, but the lock seems downright... criminal. Think you can open it? We recommend chrome at 100% zoom. Other browsers may be broken.

\n
\n

\"image\"

\n

这道题是一个完全由 CSS 构成的密码锁。前天我就发了推吐槽这道题的 CSS 样式。(能整出这种活的人真是太牛了)

\n

分析

\n

Flag 包含小写字母a-z以及下划线_,以三个字符为一组,分成了 14 组共 42 位。

\n

字符的选择是通过 details 标签来实现的,details 的子元素拥有不同的高度,使用 css 的calc函数来获取高度并运算,得到字符元素的偏移量,达到显示字符的目的。

\n

每 3 个字符会控制 4 个 SVG 蒙版。拿了 8 个来举例子:

\n

\"image\"

\n

灰色部分是每个 SVG 透明的位置,倘若每个 SVG 的位置正确,最终应该是这个效果:

\n

\"image\"

\n

由于 details 的伸缩与展开会影响到父容器高度,SVG 蒙版的父元素也在这个容器中,高度也会发生改变,而 SVG 的 top 属性通过父元素高度计算得来。

\n

庆幸的是,SVG 以 dataurl 的方式作为背景图片,但是这个元素的高度是固定的,所以不需要考虑背景的各种填充方式 (cover/contain等),换句话说,想要解出正确的 Flag,SVG 最终的 top 值一定只和其透明位置的高度有关。

\n

解题

\n

我没有去看各个 detail 标签和 SVG 容器的高度是如何变化的,这实在太多了(或许可以尝试使用 Typed OM 辅助分析?)

\n

不过每组 SVG 只由 3 个字符控制,也就是最终只需要尝试 27^3 种情况,决定直接通过暴力遍历的方式来解决。

\n

这里就有一个问题:如何知道 SVG 已经到了正确的位置?

\n

同学想用无头浏览器进行图像匹配,这显然是行不通的,效率太低,且需要对每组 SVG 进行隔离才能正确识别。

\n

我想到的是,如果能够获取到每个 SVG 的top值,那么就可以通过计算得到其透明位置的高度,然后与预期的高度进行比较,如果相等,那么就说明这个 SVG 已经到了正确的位置。

\n

这其实很好办,分成下面几步:

\n
    \n
  1. 如何拿到当前 SVG 的 top 值?
  2. \n
\n

SVG 的 top 样式是通过 calc 计算得来的,可能一开始会觉得很难获取,但实际上,浏览器提供了接口 window.getComputedStyle,通过这个接口,能够得到元素计算之后的样式数值。

\n
const getCurrentPosByIndex = (index) => {\n    return window.getComputedStyle(\n        document\n            .querySelectorAll('[style*=\"url(\\'data:image/svg+xml;base64,\"]')[index])\n            .top.slice(1,-2) - 0\n}\n
\n
    \n
  1. 每个 SVG 中透明区域的位置在哪?
  2. \n
\n
<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"200\" height=\"540\"><path fill=\"#fff\" d=\"M0 0H200V540H0ZM2 22V38H198V22Z\"/></svg>\n
\n

上面这个 SVG 的透明区域是M2 22V38H198V22Z,不难看出,这个区域的上边界是 22,不过由左边界 2 可以看出,开发者可能希望透明区域具有 2px 的边距,大胆猜测,透明区域的上边界应该是 20

\n

所有 SVG 蒙版都被处理成 dataurl ,以内联背景样式的形式嵌入到页面中,这也为编写脚本提供了极大的便利。只需要按次序取出蒙版,然后使用正则匹配出透明区域的上边界即可。

\n
[\n  ...document.querySelectorAll('[style*=\"url(\\'data:image/svg+xml;base64,\"]'),\n].reduce((acc, el) => {\n  const svg = el.style.backgroundImage\n    .replace(/^url\\(\"data:image\\/svg\\+xml;base64,/, \"\")\n    .replace(/\"\\)$/, \"\");\n  return acc.push(/ZM\\d+\\s(\\d+)/.exec(atob(svg))[1] - 2), acc;\n}, []);\n
\n

得到的结果是:

\n
[60, 40, 440, 120, 20, 80, 240, 140, 140, 140, 100, 120, 80, 300, 200, 160, 80, 80, 180, 220, 440, 40, 80, 220, 260, 140, 120, 120, 0, 200, 120, 300, 0, 140, 240, 120, 20, 120, 300, 120, 280, 20, 320, 60, 80, 120, 180, 0, 300, 20, 120, 80, 20, 120, 40, 20]\n
\n
    \n
  1. 每个 SVG 最终正确的 top 值应该是多少?
  2. \n
\n

需要注意的是:原 HTML 中绿色 currect! 字样在距离顶部 60px 处,这个值也需要考虑进去。

\n
[\n  ...document.querySelectorAll('[style*=\"url(\\'data:image/svg+xml;base64,\"]'),\n].reduce((acc, el) => {\n  const svg = el.style.backgroundImage\n    .replace(/^url\\(\"data:image\\/svg\\+xml;base64,/, \"\")\n    .replace(/\"\\)$/, \"\");\n  return acc.push(60 - (/ZM\\d+\\s(\\d+)/.exec(atob(svg))[1] - 2)), acc;\n}, []);\n
\n

可以得到所有 SVG 最终所需的正确 top 值:

\n
[0, 20, -380, -60, 40, -20, -180, -80, -80, -80, -40, -60, -20, -240, -140, -100, -20, -20, -120, -160, -380, 20, -20, -160, -200, -80, -60, -60, 60, -140, -60, -240, 60, -80, -180, -60, 40, -60, -240, -60, -220, 40, -260, 0, -20, -60, -120, 60, -240, 40, -60, -20, 40, -60, 20, 40]\n
\n

我们尝试将每个 SVG 的 top 值设置为正确的值,显示出了绿色的 currect! 字样,说明这些位置是正确的!

\n

后来想想其实getBoundingClientRect().y也能拿到,绕了个大弯

\n
    \n
  1. 如何改变某一位字符?
  2. \n
\n

这是最关键的,因为我们需要通过改变某一位字符来改变 SVG 的 top 值,从而达到移动 SVG 的目的。

\n

然而这个网页完全由 CSS 实现,想直接修改字符当然是行不通的。

\n

那么模拟点击两个红色上下箭头能行么?也不行。网页在每个箭头处堆叠了 26 个 detail 标签,通过给 detail 设置偏移来实现红色箭头位置在每次点击时都能操作到不同的 detail。

\n

所以,只能尝试直接用 js 去操作 detail 标签属性。当 detail 打开时,其元素本身会具有 open 属性。我们只需要操纵这个属性,就能实现打开和关闭 detail 标签的效果。

\n

寻找规律能发现,倒数第一个 detail 打开时,字符为 a;倒数后二个 detail 打开时,字符为 b,以此类推。

\n

下面是一个简单的脚本,用于改变某一位字符:

\n

setCharOfSlot(0,'b') 即将第0位设置为b

\n
let containers = document.querySelectorAll('[style*=\"transform:rotate(0deg)\"]');\nlet charMap = \"abcdefghijklmnopqrstuvwxyz_\";\n\nconst setBits = (bits, char) => {\n  let index = charMap.indexOf(char);\n  for (let i = 0; i < bits.length; i++) {\n    if (i === index) {\n      bits[i].setAttribute(\"open\", \"\");\n    } else {\n      bits[i].removeAttribute(\"open\");\n    }\n  }\n};\n\nconst setCharOfSlot = (slot, char) => {\n  const container = containers[Math.floor(slot / 3)];\n  const bits = [...container.children].slice(\n    (slot % 3) * 26,\n    ((slot % 3) + 1) * 26\n  );\n\n  setBits(bits, char);\n};\n
\n

接下来,万事俱备,可以开始尝试遍历了!使用 requestAnimationFrame 来控制遍历速度避免卡顿,同时支持了进度保存,跑出结果大概需要 3 分钟。

\n
let correctPosition = [\n  0, 20, -380, -60, 40, -20, -180, -80, -80, -80, -40, -60, -20, -240, -140,\n  -100, -20, -20, -120, -160, -380, 20, -20, -160, -200, -80, -60, -60, 60,\n  -140, -60, -240, 60, -80, -180, -60, 40, -60, -240, -60, -220, 40, -260, 0,\n  -20, -60, -120, 60, -240, 40, -60, -20, 40, -60, 20, 40,\n];\n\nconst allMasks = document.querySelectorAll(\n  '[style*=\"url(\\'data:image/svg+xml;base64,\"]'\n);\n\nconst getCurrentPosByIndex = (index) => {\n  return allMasks[index].offsetTop;\n};\n\nlet containers = document.querySelectorAll('[style*=\"transform:rotate(0deg)\"]');\nlet charMap = \"abcdefghijklmnopqrstuvwxyz_\";\n\nconst setCharOfSlot = (slot, char) => {\n  const container = containers[~~(slot / 3)];\n\n  let start  = (slot % 3) * 26\n  let end = ((slot % 3) + 1) * 26\n    let index = charMap.indexOf(char);\n    for (let i = start; i < end; i++) {\n      if (i - start < index) {\n        container.children[i].setAttribute(\"open\", \"\");\n      } else {\n        container.children[i].removeAttribute(\"open\");\n      }\n    }\n};\n\n// 使用 charMap 生成 3 位的所有可能\nconst allChars = [];let reversedCharMap = \"_zyxwvutsrqponmlkjihgfedcba\";\nfor (let i = 0; i < reversedCharMap.length; i++) {\n  for (let j = 0; j < reversedCharMap.length; j++) {\n    for (let k = 0; k < reversedCharMap.length; k++) {\n      allChars.push(reversedCharMap[i] + reversedCharMap[j] + reversedCharMap[k]);\n    }\n  }\n}\n\nconst map2string = (map) => {\n  // map转json\n  let json = JSON.stringify([...map]);\n  return json;\n};\n\nconst string2map = (str) => {\n  // json转map\n  let map = new Map(JSON.parse(str));\n  return map;\n};\n\nlet currentCharCase = ~~localStorage.getItem(\"currentCharCase\") || 0;\nlet _tmp = localStorage.getItem(\"solvedGroup\");\nlet solvedGroup = _tmp ? string2map(_tmp) : new Map();\nlet curSolvedGroup = new Set();\nlet cacheCount = 0;\nlet first = true;\n\nconst bruteForce = () => {\n  if (\n    ([...solvedGroup.keys()].length === 14 ||\n      currentCharCase === allChars.length) &&\n    !first\n  ) {\n    console.log(\"done\");\n    return;\n  }\n  first = false;\n  let chars = allChars[currentCharCase];\n  if (cacheCount++ === 100) {\n    localStorage.setItem(\"currentCharCase\", currentCharCase);\n    cacheCount = 0;\n  }\n\n  for (let group = 0; group < 14; group++) {\n    if (curSolvedGroup.has(group)) continue;\n    if (solvedGroup.has(group)) {\n      let char = solvedGroup.get(group);\n      setCharOfSlot(group * 3, char[0]);\n      setCharOfSlot(group * 3 + 1, char[1]);\n      setCharOfSlot(group * 3 + 2, char[2]);\n      curSolvedGroup.add(group);\n      continue;\n    }\n    let solvedMask = 0;\n    for (let j = 0; j < 4; j++) {\n      let currentPos = getCurrentPosByIndex(group * 4 + j);\n      let correctPos = correctPosition[group * 4 + j];\n\n      if (Math.abs(correctPos - currentPos) < 4) {\n        solvedMask += 1;\n      }\n    }\n    if (solvedMask === 4) {\n      console.log(\n        `Group ${group} is solved, chars are \"${allChars[currentCharCase - 1]}\"`\n      );\n      solvedGroup.set(group, allChars[currentCharCase - 1]);\n      curSolvedGroup.add(group);\n      localStorage.setItem(\"solvedGroup\", map2string(solvedGroup));\n      continue;\n    } else {\n      setCharOfSlot(group * 3, chars[0]);\n      setCharOfSlot(group * 3 + 1, chars[1]);\n      setCharOfSlot(group * 3 + 2, chars[2]);\n    }\n  }\n  currentCharCase++;\n  requestAnimationFrame(bruteForce);\n};\n\nrequestAnimationFrame(bruteForce);\n
\n

\"image\"

","url":"http://localhost:2222/api/redirection?characterId=45089¬eId=51","image":"https://ipfs.4everland.xyz/ipfs/bafkreie5rw5nqflgpt7fodmgiv5mhvaxzmcjpj36k4ht5kb7lyov6tgjmi","date_published":"2023-04-17T09:06:07.000Z","tags":["post","CTF","技术","前端"],"author":{"name":"戴兜","url":"http://localhost:2222/api/redirection?characterId=45089","handle":"daidr"}},{"id":"48952-185","title":"Weekly Share #16, 2023","summary":"Cool things I do 突击准备并第一次考雅思\n连续在 italki App 上面上了一周的外教课,效果感觉挺不错的。我约的这个老师叫 Nick,是一个做过雅思口语考官的英国人,目前居住在泰国(貌似欧美人特别喜欢跑到泰国印度住着,那些地方消费低,应该是能过的很…","content_html":"

Cool things I do

\n\n

Blogs I wrote

\n\n

Videos I Watch

\n\n

Cool stuff I discovered

\n","url":"http://localhost:2222/api/redirection?characterId=48952¬eId=185","image":"https://ipfs.4everland.xyz/ipfs/bafybeid5apmqh3ur43asla67nrn5o3nb2sucdpgjl5kgsn7v47qx42an3e","date_published":"2023-04-26T16:06:57.000Z","tags":["post","summary","weekly","share"],"author":{"name":"Mekal Z","url":"http://localhost:2222/api/redirection?characterId=48952","handle":"mekal"}},{"id":"51645-55","title":"【日常】同步Hexo与xLog","summary":"离开 xLog 自上次更新以来感觉有好几个月了,主要是因为感觉 xLog 存在不少问题与使用上的难点(如输入字数过多会导致文本编辑器卡死、CSS 自定义上手难度过高等)。于是就在寻找替代方案,其实在 xLog 之前我就尝试用过 Hexo + Github Pages…","content_html":"

离开 xLog

\n

自上次更新以来感觉有好几个月了,主要是因为感觉 xLog 存在不少问题与使用上的难点(如输入字数过多会导致文本编辑器卡死、CSS 自定义上手难度过高等)。于是就在寻找替代方案,其实在 xLog 之前我就尝试用过 Hexo + Github Pages 来作为自己的博客,然而最终都因无法使用想要的主题无疾而终。

\n

这次,我使用了 VSCode + Git + 一键部署 + Cloudflare Pages,成功的搭建好了 Hexo 站点。但前段时间重装系统导致我丢失自己的所有博客文件,最终使用 HTML 转 Markdown 的方式才将所有文章重新保存了下来。这件事使我不得不重新审视 Hexo 这类静态博客的可行性,毕竟文件都是存在本地的磁盘上,一个不小心 sudo rm -=rf /* 就会将自己写了许久的内容都毁于一旦。

\n

重回 xLog

\n

前两天翻看 Telegram 时,发现 DIYGod 佬看到 xLog 主页有好多年终总结,看了个爽,这才让我意识到我还用过这个博客系统。于是再去安装 Metamask、找回钱包、登录,发现我以前写的文章都还安静的躺在那里。

\n

转念一想,Hexo 的正文内容也是使用 Markdown 语言编写的,那为何不同时在这两个平台一起更新呢,就算 Hexo 全挂了也还有 xLog 的 Markdown 文件,依然可以作为备份。

\n

Anyway, I'm back ;P

","url":"http://localhost:2222/api/redirection?characterId=51645¬eId=55","date_published":"2024-01-08T14:00:28.000Z","tags":["post","日常"],"author":{"name":"oldcatY","url":"http://localhost:2222/api/redirection?characterId=51645","handle":"oldcaty-2768"}},{"id":"33795-2","title":" CLIPS项目解析:如何无风险用0.035eth 十小时轻松赚取78000U","summary":"CLIPS项目解析:如何无风险用0.035eth 十小时轻松赚取78000U","content_html":"
\n

无风险用 0.035eth 十小时轻松赚取 78000U

\n
\n

今天比较火的就是 Clips 了,一个类似 xen 的项目,所以玩法应该就是类似 xen。但是有人另辟蹊径,用批量 mint 的方法赚手续费,而这个是只赚不赔的生意。这篇文章主要来理解一下批量 mint 的基础逻辑。

\n

利润计算

\n

本文中计算收益的 CLIPS 的价格为如图所示:

\n

\"image\"

\n

合约作者花费的 GAS:0.0352ETH
\n地址:Ethereum Transaction Hash (Txhash) Details | Etherscan

\n

\"image\"

\n

利润计算过程:该合约会收取 6% 的手续费,但是批量 mint 会帮用户节省一些 gas。所以用户还是收益,双赢。具体可以看下图的 twitter。

\n

\"image\"

\n

从合约信息得知,该合约作者的受益地址为部署地址:

\n

\"image\"

\n

查询该地址现在有 CLIPS 余额:1374900000,我写文章时候截止该代币的价格为 0.000057,但是具体池子的流动性如何还没去深究。

\n

利润计算: 1374900000 * 0.000057 = 78369.3U

\n

合约解读

\n
\n

该合约只有短短 43 行代码,所以 43 行代码 10 小时赚取了 78000U

\n
\n
/**\n *Submitted for verification at Etherscan.io on 2023-05-04\n*/\n\npragma solidity ^0.8.0;\n\ninterface Clip {\n    function mintClips() external;\n    function transfer(address to, uint256 amount) external returns (bool);\n    function balanceOf(address account) external view returns (uint256);\n}\n\ncontract claimer {\n    constructor (address receiver) {\n        Clip clip = Clip(0xeCbEE2fAE67709F718426DDC3bF770B26B95eD20);\n        clip.mintClips();\n        clip.transfer(receiver, clip.balanceOf(address(this)));\n    }\n}\n\ncontract BatchMintClips {\n    address public owner;\n    modifier onlyOwner() {\n        require(msg.sender == owner, \"Not owner.\");\n        _;\n    }\n    constructor() {\n        owner = msg.sender;\n    }\n\n    function batchMint(uint count) external {\n        for (uint i = 0; i < count;) {\n            new claimer(address(this));\n            unchecked {\n                i++;\n            }\n        }\n\n        Clip clip = Clip(0xeCbEE2fAE67709F718426DDC3bF770B26B95eD20);\n        clip.transfer(msg.sender, clip.balanceOf(address(this)) * 94 / 100);\n        clip.transfer(owner, clip.balanceOf(address(this)));\n    }\n}\n
\n

这是一个以太坊智能合约,由 Solidity 编写。该合约包含三个部分:Clip 接口、claimer 合约和 BatchMintClips 合约。以下是对这些部分的解释:

\n
    \n
  1. \n

    Clip 接口:
    \n这个接口定义了 Clip 合约的基本功能,包括 mintClips ()、transfer () 和 balanceOf () 函数。这些函数分别用于创建新的 Clip 代币、将代币从一个地址转移到另一个地址以及查询某个地址的代币余额。

    \n
  2. \n
  3. \n

    claimer 合约:
    \n这是一个简单的合约,其构造函数接收一个地址作为参数。在构造函数中,它首先获取 Clip 合约的实例,然后调用 mintClips () 函数创建新的 Clip 代币。最后,它将刚刚创建的代币转移到传入的接收者地址。

    \n
  4. \n
  5. \n

    BatchMintClips 合约:
    \n这个合约用于批量创建 Clip 代币。它有一个公开的owner变量和一个onlyOwner修饰符,确保只有合约创建者可以执行特定功能。

    \n
      \n
    • 构造函数:在创建 BatchMintClips 合约时,将合约创建者的地址设置为owner
    • \n
    • batchMint () 函数:这个函数接受一个参数count,表示要创建多少个 claimer 合约。对于每个要创建的 claimer 合约,它实例化一个新的 claimer 合约,并将 BatchMintClips 合约的地址作为接收者。这样,当新的 Clip 代币被创建时,它们会被发送到 BatchMintClips 合约的地址。在批量创建完成后,将 94% 的代币转移到调用者的地址,剩余的 6% 的代币转移到owner地址。
    • \n
    \n
  6. \n
\n

总之,这个合约允许用户批量创建 Clip 代币。调用者可以通过调用 batchMint () 函数并提供要创建的数量来执行此操作。在完成批量创建后,调用者会收到 94% 的代币,而合约创建者会收到剩余的 6%。

\n

总结

\n

该合约作者结合了 xen 的经验,并且会 solidity 能够灵活运用,思路可以非常好的借鉴。

\n

上述合约非常简单,我相信只要学过 WTF-solidity 基础篇的同学都能写出来,代码实现不难,难的实现的思路,期待牛市来临的时候,大家一分耕耘有一分收获。

","url":"http://localhost:2222/api/redirection?characterId=33795¬eId=2","image":"https://ipfs.4everland.xyz/ipfs/bafkreigdqvtsuca7sluggonjtyc5yxnxyqsclsjcbsxghecztbs34luqdy","date_published":"2023-05-05T07:14:19.000Z","tags":["post","web3","clips","solidity"],"author":{"name":"easy","url":"http://localhost:2222/api/redirection?characterId=33795","handle":"easy"}},{"id":"53387-16","title":"用ChatGPT背单词","summary":"忘记从哪看到一个人分享他用chatgpt学英语的经历,最近试了试,效果真好,具体过程如下。 确定不懂的词汇表\n\n随便用哪个背单词app刷单词,遇到不会的就记下来,拉一个清单(每天一点,不需要太多\n\n例如\n\nCopy\nincentive emission innovation booth…","content_html":"

忘记从哪看到一个人分享他用 chatgpt 学英语的经历,最近试了试,效果真好,具体过程如下。

\n

确定不懂的词汇表

\n

随便用哪个背单词 app 刷单词,遇到不会的就记下来,拉一个清单(每天一点,不需要太多

\n

例如

\n
incentive emission innovation booth infectious\n\ndesignate perception exotic compatible rigorous\n\ndeduce magnify sue imitate void\n
\n

让 ChatGPT 用五个单词编故事

\n

例如

\n
make a brief story with these words:incentive emission innovation booth infectious\n
\n

\"Pasted

\n

用更多单词编故事

\n

逐渐增加单词量,不然一下子新单词太多没法阅读

\n
make a brief story with these words :incentive emission innovation booth infectious designate perception exotic compatible rigorous\n
\n

\"Pasted

\n
make a brief story with these words :incentive emission innovation booth infectious designate perception exotic compatible rigorous deduce magnify sue imitate void\n
\n

\"Pasted

\n

如果故事看不懂,让它翻译一下

\n
translate the story to chinese\n
\n

\"Pasted

\n

总结

\n

我认为学习一门技能最好的办法就是实践,无论是学医、学编程、还是学英语
\n而日常生活中我们没有很好的实践英语的机会,ChatGPT 就是一个很棒的英语伙伴,建议大家多用英语和它交流,看不懂在说什么可以让它翻译一遍嘛

","url":"http://localhost:2222/api/redirection?characterId=53387¬eId=16","image":"https://ipfs.4everland.xyz/ipfs/bafkreiadtyeik4czfzf7a64f6lxvepmisqf2ltlkhdmd7hw63tkie4qequ","date_published":"2023-04-25T02:18:09.000Z","tags":["post","ChatGPT","学习","英语"],"author":{"name":"王白水","url":"http://localhost:2222/api/redirection?characterId=53387","handle":"whitewaterwang"}},{"id":"45828-297","title":"sealed class Nanamis2023","summary":"理屈(りくつ)に合(あ)わないことを どれだけやれるかが青春(せいしゅん)だとでも 尽做些不合逻辑的事情便是青春\n\nどこかで僕(ぼく)ら思(おも)っていたのかな\n\n也许我们在某个地方这么想着\n\nあぁ 答(こた)えがある問(と)いばかりを 教(おそ)わってきたよ そのせいだろうか\n\n啊啊…","content_html":"
\n

理屈(りくつ)に合(あ)わないことを どれだけやれるかが青春(せいしゅん)だとでも

\n

尽做些不合逻辑的事情便是青春

\n

どこかで僕(ぼく)ら思(おも)っていたのかな

\n

也许我们在某个地方这么想着

\n

あぁ 答(こた)えがある問(と)いばかりを 教(おそ)わってきたよ そのせいだろうか

\n

啊啊 学的都是有答案的问题 是这个原因吗

\n

僕(ぼく)たちが知(し)りたかったのは いつも正解(せいかい)などまだ銀河(ぎんが)にもない

\n

我们想知道的 一直是正确的答案 却还没在银河系中存在

\n

--RADWIMPS 正解 (18FES ver.)

\n
\n

最近一直在听 RADWIMPS 的歌。

\n

从第一次看新海诚电影听到了由这支乐队(新海诚御用乐队)创作的歌曲开始就一发不可收拾地迷上了。RADWIMPS 的歌总给我一种,去掉人声好听,有人声但是听不懂也很好听,看着歌词觉得更好听,十分享受的感觉。这首《正解》里的歌词,很适合形容我这一年以来的状态。

\n

也许是初中被压抑地太久了,也许是换了个环境愿意展现自我了,在我的记忆里,今年重要的事似乎都是在下半年发生的。

\n

从暑假开始的新生活

\n

脱去伪装的自由与舒适,是只有长期藏在伪装之下的人才能明白的。

\n

先前在网络上与人交流,总是不想透露半点有关自己现实的信息,也不愿意与人语音交流。暑假时前往上海参加 Bilibili World 2023,有许多认识的网友也购买了同一天的门票,于是不可避免在 BW 现场见了面。从上海回来后最大的感受便是再与这些朋友交流时,不再感受地到屏幕带来的隔阂了。人终究还是不能脱离现实的呀。

\n

克服了与人交流的恐惧之后,不可避免地会认识更多的人,包括一些居住在同一城市的人。在这其中一位朋友的帮助和指导下,暑假还学会了使用 Kotlin,并也开始尝试自己编写项目了。虽然很小也没有多少技术含量,但是从 0 到 1 的过程总是令人兴奋的。从想法诞生、思考逻辑,再到写出来的代码,认真写代码带给我一种舒适的感觉。不论是找到问题的解决方法带给我小小的自豪也好,还是用代码表达自己的思路也罢,经过思考后代码就像在指尖跳动一样,敲击键盘成为了一种享受而不是折磨。这种感觉和学校里单纯地为了任务而学习是完全不一样的。

\n

高中的生活也带给我很多的自主性。初中时我的英语老师因为我从来不记笔记经常说我英语肯定学不好,但是我仍然我行我素。在高一上半学期参加了人生中第一场国际考试,在雅思中考到了 7 分。

\n

\"IELTS

\n

若问起我对以前的老师有没有恨意,我想是有一些的。但是同时,我也很感谢那些曾经在我的生活出现过的人,因为少了他们之中哪一个我都走不到现在。

\n

向真实的自己迈出一步

\n

在十一十二月,我陆陆续续向自己的一些初中同学、朋友和家人表明了自己跨性别女性的性别认同。

\n

其实关于自己内心真实想法的话压抑在心里已经很久了,直到今年脱离了家庭带给我的压抑感觉,才敢向他人表明。

\n

开学后一直很焦虑,并且有些抑郁,最后还是没能仅靠自己缓解心理上的压抑,去医院挂了精神科。和医生聊了会天,做了必要的检查后拿到了写有 “易性症” 的病例。

\n

在这之后向父母说明了情况,虽然没能得到理解,但是也没得到很极端的反馈。(虽然要他们立马就接受也比较困难就是了)

\n

接受自己作为跨性别者的身份,和让周围的人都接受,是一件很难的事呢。不过好在有人陪伴着我,这个人便是已经把我当作女孩子对待的男朋友

\n

和他相识快有两年了,但是我们确立关系也是今年下半年发生的事。因为比较特殊,在现实里我否认自己有在恋爱,但是被爱着的同时也爱着别人,是很容易被看出来的。我就经常被同班情感细腻的女同学问过是不是有对象了(

\n

今后的人生应该怎么走,我还没有一个确切的答案,就如《正解》这首歌里说的:

\n
\n

想(おも)いの伝(つた)え方(かた)がわからない 僕(ぼく)の心(こころ) 君(きみ)は無理矢理(むりやり)こじ開(あ)けたの

\n

不知道如何传达这份感情的 我的内心 是你强行撬开了它

\n

あぁ 答(こた)えがある問(と)いばかりを 教(おそ)わってきたよ だけど明日(あす)からは

\n

啊啊 学的都是有答案的问题 但是从明天开始

\n

僕(ぼく)だけの正解(せいかい)をいざ 探(さが)しにゆくんだ また逢(あ)う日(ひ)まで

\n

我要去寻找 只属于我自己的正确答案 直到我们再次相遇

\n
\n

正是因为没有人知道确切的答案,才会感到焦虑和困惑呀。但是,“人” 这个问题,本来就是没有正确答案的。

\n
\n

次(つぎ)の空欄(くうらん)に当(あ)てはまる言葉(ことば)を

\n

在下个空格中

\n

書(か)き入(い)れなさい ここでの最後(さいご)の問(と)い

\n

请将合适的词语填入 这是最后一问

\n

「君(きみ)のいない 明日(あす)からの日々(ひび)を

\n

“从你不在的明天开始 每一天

\n

僕(ぼく)は/私(わたし)は きっと きっと □□□□□□□□□□□□□□□□□□」

\n

我一定______”

\n

制限時間(せいげんじかん)は あなたのこれからの人生(じんせい)

\n

规定完成的时间 是你从今往后的整个人生

\n

解答用紙(かいとうようし)は あなたのこれからの人生(じんせい)

\n

用于解答的试卷 是你从今往后的整个人生

\n

答(こた)え合(あ)わせの 時(とき)に私(わたし)はもういない

\n

对答案的时候 我已经不在

\n

だから 採点基準(さいてんきじゅん)は あなたのこれからの人生(じんせい)

\n

所以评分标准 就是你从今往后的整个人生

\n
\n

从今往后的人生,伴随着焦虑、伴随着恐惧,好在有人陪我前行。2023 上半年一度让我觉得这是最差劲的一年,但是下半年让这一年注定会成为我人生中重要的转折点。

\n

马上就要年满 16 了,时间过的真的好快啊。也许几年后,几十年后,再回来读这些 16 岁时写下的幼稚的文字时,会有不一样的感受吧,笑。

","url":"http://localhost:2222/api/redirection?characterId=45828¬eId=297","image":"ipfs://Qmae3XeQJF7gJkY59e7HP4DxCCJsYTkfrw47v8bjnidUrZ","date_published":"2023-12-27T05:59:46.000Z","tags":["post","2023"],"author":{"name":"「The Nanami」","url":"http://localhost:2222/api/redirection?characterId=45828","handle":"nanami"}},{"id":"50388-62","title":"使用 Kiwix 下载阅读离线维基百科","summary":"本文介绍了使用 Kiwix 下载阅读离线维基百科的方法。 通过阅读离线文件获取知识,可不受 网络环境、网络成本 影响,即使断网,在 飞机上、公海中、山区里 ,也可随时随地学习新知。\n\n新版文章增加了,加速下载的说明,请点击查看:\n\nhttps://h.cjh0613.com/en…","content_html":"

本文介绍了使用 Kiwix 下载阅读离线维基百科的方法。

\n

通过阅读离线文件获取知识,可不受 网络环境网络成本 影响,即使断网,在 飞机上、公海中、山区里 ,也可随时随地学习新知。

\n

新版文章增加了,加速下载的说明,请点击查看:

\n

https://h.cjh0613.com/en/download-and-read-offline-wikipedia-using-kiwix/

\n

简介

\n

Wikipedia

\n

\"Wikipedia\"

\n

维基百科(Wikipedia)是全球最大的自由内容、公开编辑以及多语言的网络百科全书协作项目。该项目利用了 Wiki 技术,使得全球范围内的用户,包括您在内,能够通过简单地使用网页浏览器来对其内容进行修改。目前,维基百科已成为全球网络上最大且备受大众喜爱的参考工具书,被认定为全球十大最受欢迎的网站之一。

\n

Kiwix

\n

\"Kiwix\"

\n

Kiwix 是一个离线内容阅读器,可用于访问维基百科等内容。

\n

Kiwix 阅读器几乎可以在任何设备上运行(包括手机、电脑等)。对于最终用户来说,它的使用体验几乎与普通浏览器相同,因为它的界面与浏览原始网站几乎一样,只是没有互联网连接功能。

\n

ZIM 文件

\n

ZIM 文件格式是一种自由档案格式,用于存储维基百科等 Wiki 内容,以便于离线浏览。该格式对文章进行高度压缩(.zim文件非常小巧,可以方便地保存在小型、廉价的设备上),支持全文搜索索引以及本地分类和图像管理,类似于 MediaWiki 系统的功能。与原始的维基百科 XML 数据库下载不同,整个 ZIM 文件可以方便地进行索引,并且可以被类似 Kiwix 的程序读取。

\n

步骤

\n
    \n
  1. 下载安装 Kiwix
  2. \n
  3. 下载 ZIM 文件
  4. \n
  5. 用 Kiwix 打开 ZIM 文件
  6. \n
\n

下载安装 Kiwix

\n

请点击此链接进入下载页面: 下载 Kiwix 阅读器 – Kiwix

\n

建议先安装桌面客户端以下载 ZIM 文件。

\n

(在 Windows 环境下 Kiwix 会使用 aria2 加速下载。)

\n

下载 ZIM 文件

\n

下载方式有: 通过 kiwix 软件下载;使用 下载器 或 浏览器 通过直链下载;使用 BT 下载。

\n

从 Kiwix 下载 ZIM 文件

\n

打开 Kiwix 客户端,选择维基百科下载,

\n

其中分为三种:

\n\n

根据设备剩余的存储空间和您的需求,下载合适的版本

\n

从网站下载 ZIM 文件

\n

打开网站 Index of /zim/wikipedia

\n

找到 wikipedia_zh_all (可使用浏览器的搜索功能),同样有三种类型(参见从 Kiwix 下载 ZIM 文件)。请下载最新的合适的版本。

\n

如果网速太慢,请考虑使用工具(下载工具 如
\nIDM、迅雷,代理服务器 等)。

\n

也可以选择通过 BT 下载(需使用 qbittorrent、迅雷 等):

\n

http://download.kiwix.org/zim/wikipedia_zh_all.zim.torrent

\n

http://download.kiwix.org/zim/wikipedia_zh_all_nopic.zim.torrent

\n

用 Kiwix 打开 ZIM 文件

\n

打开下载好的 ZIM 文件即可。

\n

参考

\n

什么是 Kiwix?

\n

ZIM (文件格式) - 维基百科,自由的百科全书

\n

本网页的其他版本

\n

本文章有多种语言的版本。

\n

如果您想发布评论,请前往以下网页:

\n

ZH EN ZH-TW JA

\n

只能浏览,而不能发表评论或留言的网页,但是有更多语言可供选择,这些网页加载完毕所需要的时间更少:

\n

ZH EN ZH-TW JA RU KO CS ES AR FR PT DE TR IT NL SV DA FI PL UK HE RO HU EL HR TH HI BN ID SW

","url":"http://localhost:2222/api/redirection?characterId=50388¬eId=62","image":"https://ipfs.4everland.xyz/ipfs/bafkreigo554qdc4s6xozpjr7vljdfqcm3mskqfmqvi4rt2ipdnnehu5lvq","date_published":"2023-07-09T09:19:45.000Z","tags":["post"],"author":{"name":"地球人","url":"http://localhost:2222/api/redirection?characterId=50388","handle":"c-5934"}},{"id":"51379-29","title":"使用Alist和EMBY打造低成本个人影视库","summary":"其实之前也写过 emby + google drive 的文章,但是时过境迁。 Google drive 把教育盘和团队盘都几乎扬完了,TOS 也越来越严格,转存越来越麻烦。\n OneDrive 则根本没有转存这一功能,只能本地上传。\n\n直到阿里云盘异军突起,国内优化,社区活跃…","content_html":"

其实之前也写过 emby + google drive 的文章,但是时过境迁。
\nGoogle drive 把教育盘和团队盘都几乎扬完了,TOS 也越来越严格,转存越来越麻烦。
\nOneDrive 则根本没有转存这一功能,只能本地上传。

\n

直到阿里云盘异军突起,国内优化,社区活跃(指有很多 telegram 分享频道),再加上阿里云盘 OPEN 开放了 API,几乎完美。

\n

话不多说,这篇博客将指引你使用 Alist 添加阿里云盘,rclone 挂载 webdav 并使用 emby 刮削阿里云盘里面的资源。

\n

安装 Alist 及配置阿里云盘

\n

官方文档已经很详细了
\n推荐使用 docker 安装

\n
docker run -d --restart=always -v /etc/alist:/opt/alist/data -p 5244:5244 -e PUID=0 -e PGID=0 -e UMASK=022 --name=\"alist\" xhofe/alist:latest\n
\n

安装完成后使用下面的命令查看管理员账号密码

\n
docker exec -it alist ./alist admin\n
\n

访问 ip:5244并使用管理员账号及密码登录

\n

配置阿里云盘的官方文档也很详细
\n主要是驱动选择阿里云盘 OPEN,然后配置下刷新令牌
\n前往:https://alist.nn.ci/tool/aliyundrive/request
\n使用阿里云盘手机客户端扫码登录可获取刷新令牌

\n

注意事项
\nWebDAV 策略 请选择本地,webdav 不支持重定向
\n如果未设置或设置错误,emby 可以刮削,但进入资源库会一直转圈
\n相关 Issues

\n\n

\"image\"

\n

Rclone 挂载 webdav

\n
sudo -v ; curl https://rclone.org/install.sh | sudo bash\n
\n

安装完成后,使用 rclone config 新建配置
\n选择 webdav 并按要求配置即可
\n你可以查看下面的文章进行配置
\n群晖 / Linux 挂载阿里云盘实现 Emby 播放,打造属于自己的家庭影院!

\n

\"image\"

\n

配置完成后使用下面的命令将其挂载到本地

\n
rclone mount alist: /home/webdav --use-mmap --umask 000 --network-mode --no-check-certificate --allow-other --allow-non-empty --dir-cache-time 4h --cache-dir=/home/cache --header \"Referer:\" --vfs-cache-mode full --buffer-size 512M --vfs-read-chunk-size 64M --vfs-read-chunk-size-limit 1G --vfs-cache-max-size 10G --daemon\n
\n\n

如果 rclone mount 挂载出错

\n
Fatal error: failed to mount FUSE fs: fusermount: exec: \"fusermount\": executable file not found\n
\n

安装 fuse

\n
apt-get install fuse\n
\n

使用 df -h 可查看是否挂载成功

\n

取消挂载,LocalFolder 表示本地挂载路径

\n
fusermount -qzu LocalFolder\n
\n

开机挂载

\n
#将后面修改成你上面手动运行命令中,除了rclone的全部参数\ncommand=\"mount alist: /home/webdav --use-mmap --umask 000 --network-mode --no-check-certificate --allow-other --allow-non-empty --dir-cache-time 4h --cache-dir=/home/cache --header \"Referer:\" --vfs-cache-mode full --buffer-size 512M --vfs-read-chunk-size 64M --vfs-read-chunk-size-limit 1G --vfs-cache-max-size 10G --daemon\"\n#以下是一整条命令,一起复制到SSH客户端运行\ncat > /etc/systemd/system/rclone.service <<EOF\n[Unit]\nDescription=Rclone\nAfter=network-online.target\n\n[Service]\nType=simple\nExecStart=$(command -v rclone) ${command}\nRestart=on-abort\nUser=root\n\n[Install]\nWantedBy=default.target\nEOF\n
\n

开始启动:

\n
systemctl start rclone\n
\n

设置开机自启:

\n
systemctl enable rclone\n
\n

其他命令:

\n
重启:systemctl restart rclone\n停止:systemctl stop rclone\n状态:systemctl status rclone\n
\n

emby 安装及配置

\n

下方为 emby 开心版 docker 镜像,仅作演示,如有能力请支持正版。

\n
docker run \\\n\t--name EmbyServer \\\n\t--net=host  \\\n\t-v /docker/emby:/config \\\n\t-v /aliyun:/aliyun \\\n\t-e TZ=\"Asia/Shanghai\" \\\n\t--device /dev/dri:/dev/dri \\\n\t-e UID=0 \\\n\t-e GID=0 \\\n\t-e GIDLIST=0 \\\n\t--restart always \\\n\t-d lovechen/embyserver:latest\n\n若是需要配置正版,只需要把最后一行的 lovechen 改为 emby 即可配置 Emby 官方 Docker 源\n若是软路由没有开启科学上网模式,那么需要在 Docker 环境参数里面加上\nHTTP_PROXY=http://代理IP:代理端口\nHTTPS_PROXY=http://代理IP:代理端口\n(这样搜刮器才能正常的进行工作,因为大部分搜刮器已被墙)\n
\n\n

注意事项
\n如果你的服务器配置较低,没有核显,建议关闭转码功能
\n进入 设置 --> 用户 --> 配置 关闭下面三个选项

\n

\"image\"

\n

其他说明

\n

cloudDrive2

\n

其实最开始用的是 cloudDrive2 挂载的阿里云,因为简单。
\n最后还是放弃重装了,原因也很多

\n
    \n
  1. 闭源 这玩意是纯闭源的
  2. \n
  3. 安全性 装了 2 次,每次都是一进网页就被 Google 标欺诈
  4. \n
  5. 性能 同样不支持直链,走的也是本地下载再串流的路数
  6. \n
  7. 稳定性 有掉挂载的情况
  8. \n
\n

\"image\"
\n我不知道是误报还是怎么回事,但闭源还是小心点。
\n另外就是我不明白一个本地搭建的程序,账号竟然是云端同步的😅,要注册的。。。

\n

阿里云盘直链

\n

目前本地 webdav策略为兼容性最好的方式,在 emby 中观看视频时,是先从 webdav 下载到本地再推流到 emby 播放的,所以走的是服务器的流量
\n302 重定向能够获取到阿里云盘的直链,但是无法使用 emby 进行刮削。

\n

如果你只是为了方便观看,可以使用 302 重定向模式,然后用 nplayer 挂载 webdav,这样走的就是阿里云官方的流量了,4K 不卡。

\n

如果你一定要用 emby 走直链,也可以,需要修改 nginx 配置
\n可以查看下面 2 篇文章

\n\n

因为我使用的是宝塔的 nginx,没有 nginx 的依赖,即使我重新编译 PCRE 和 njs 模块,事实上我已经重新编译了 PCRE 的 UTF 模块,并指定 nginx 编译时使用此版本的 PCRE🙃,但它还是报错没有 UTF Support

\n

页面美化

\n

\"image\"
\n这个样式我觉得比 emby 默认的显示要好的多,实现基于Emby Crx
\n提供了 2 种方式,一种是 chrome 扩展,客户端本地美化,适合用别人 emby 服务器的。另一种是服务端美化,针对自己建的 emby

\n
# EmbyServer 为容器名, 如果你的容器名不是这个 请改成正确的!\ndocker exec EmbyServer /bin/sh -c 'cd /system/dashboard-ui && wget -O - https://tinyurl.com/2p97xcpd | sh'\n
\n

小姐姐😍

\n

如果你想刮削某些小日子出品的电影,可以使用MetaTube,Jellyfin 和 EMBY 通用的插件

\n
\n\n
","url":"http://localhost:2222/api/redirection?characterId=51379¬eId=29","image":"https://ipfs.4everland.xyz/ipfs/bafkreihnjusvlh6gihqer2nim3hfq3saojvx33skuq5wdm6643y6eukski","date_published":"2023-05-15T06:22:47.000Z","tags":["post","emby"],"author":{"name":"qinfengge","url":"http://localhost:2222/api/redirection?characterId=51379","handle":"qinfengge"}},{"id":"10-53","title":"《献给阿尔吉侬的花束》读书分享","summary":"上个季度读的书中最喜欢的一本,分类是科幻小说,但重点在于探讨成长、人生意义的人文话题。","content_html":"

\"s28050760\"

\n

\"\"

\n

上个季度读的书中最喜欢的一本,分类是科幻小说,但重点在于探讨成长、人生意义的人文话题。

\n

故事讲述了在智力提升实验在小鼠阿尔吉侬身上获取成功之后,科学家们对一个智商只有 68 的笨蛋查理进行了手术,查理智商很快提升到了 185 成为了超级天才,又因为实验缺陷再次变成笨蛋的故事,小说通过一篇篇查理笔下的实验日记「进步报告」向读者第一人称讲述了查理从笨蛋到天才又到笨蛋的心路历程和生活的一系列变化。

\n

成长

\n

故事中查理的成长来自于智力的提升,从一开始日记充满错别字,生活中处处受人嘲笑和欺凌而不自知,到后来错别字越来越少,句子越来越通顺,学到了越来越多的知识,逐渐开始认识和发掘自己,发现生活的美好和痛苦。

\n
\n

有些常识的人都会记得,眼睛的困惑有两种,也来自两种起因,不是因为走出光明,就是因为走进光明所致,不论是人体的眼睛或心灵的眼睛,都是如此。——《理想国》

\n
\n

成长的过程经常是残忍的,查理的经历也是我们成长的过程,我们也有从天真烂漫的童年开始逐渐理解这个世界黑暗面的经历,我们也会同样感到困惑和痛苦。

\n

书中有一段是查理变聪明过程中逐渐想起自己之前受人欺凌,当时却不知道发生了什么,还以为大家在跟他玩耍,查理明白过来之后感到非常悲伤。这让我想起我初中也有类似经历,当时我年龄比其他同学都小,经常被人欺负,但被欺负了还以为是自己 “受欢迎”,以为大家就是这样相处的。

\n

成长又是必要的,因为它可以帮助我们认识自己,获得人性尊严和高级快乐。

\n

快乐

\n
\n

我不知道哪种情况更糟:不了解自我但很快乐,还是实现理想但感到孤独

\n
\n

笨查理在面包店工作,有一群 “好朋友”,无忧无虑,感觉整个世界无比美好。但在变聪明过程中,各种问题和痛苦也随着出现,他感到他的工作没有意义,他的 “好朋友” 也因为无法捉弄他而离他而去,他还回忆起之前被朋友和陌生人嘲笑和捉弄、被家人抛弃的经历,得不到想要的爱情、尊严、存在意义,这些都让他感到痛苦,离快乐越来越远。

\n

快乐是我们生活的追求之一,但讽刺的是人的心智越成熟似乎越难获得快乐,我们在童年更容易获得快乐,长大后明明知道的更多、拥有的更多却变成了痛苦的大人。

\n

对此,我赞同罗翔的观点:快乐有质和量的区别,越能体现人性尊严的快乐,越是一种最大的快乐。最求高级快乐的过程中可能会遇到很多困惑和痛苦,但更能体现人性尊严和人生意义,这种快乐也是更强大和持久的。查理满足求知欲后的快乐和成功学会去爱的快乐是之前的傻乐无法相比的。

\n

同时我也觉得低级快乐必不可少,这也是为什么我也热衷于看涩图。

\n

爱情

\n
\n

智慧是人类最伟大的恩赐之一,只是在追寻知识的过程中,对爱的追寻往往就被搁在一旁。这是我自己最近发现的结论。我可以把这个假设提供你参考:没有能力给予和接受爱情的智慧,会促成心智与道德上的崩溃,形成神经官能症,甚至精神病。而且我还要说,只知专注在心智本身,以致排除人际关系并因此形成封闭的自我中心,只会导致暴力与痛苦。

\n
\n

最让查理困惑的一件事就是爱情,查理智商逐渐变高,但他面对爱情的无可奈何和困扰却没有改变,他发现了爱情与智商无关。

\n

小说中查理身边出现了两个女人。查理与邻居费伊相处纯粹、充满激情、无所顾虑,看似幸福美好,但费伊在发现查理变笨之后毅然离去。而与教授艾丽斯的感情要复杂得多,这也让查理发现了自己的心理问题,发现自己并没有爱与被爱的能力,真正的爱情与单纯的激情不同,查理与艾丽斯有着更深的羁绊,更愿意为对方做出牺牲,艾丽斯在查理变笨之后不离不弃,查理失去记忆之后最关心的仍然是艾丽斯。作者通过两人的对比深刻地诠释了激情和爱情的区别。

\n
\n

艾丽斯又一次来到门口但我说走开我不要见你。她哭了起来我也跟着哭但我不让她进来因为我不要她朝笑我。我告诉她我不在喜欢她而且我在也不要变聪明。这不是真的。我仍然爱她仍然想要变聪明但我必须这样说才能让她离开。穆尼太太告诉我艾丽斯带了更多钱要来照故我并且付房租。我不要我必须去找工作。

\n
\n
\n

今天我做了一件很笨的事我忘了我已经不在纪尼安小姐的成人中心班级上课。我走进去坐在教室后面的老位子上她看到我时表情很怪然后问说查理你都到那里去了。所以我说哈罗纪尼安小姐我今天已准备好要上课只是我弄丢了我们在用的书本。她开始哭起来并且跑出去教室。大家都转头看我而我发现很多人都不是我以前班上的同学。...... 那就是我为什么要永远离开这里去沃伦之家的原因。我不要在做出这样的事来。我不要纪尼安小姐为我难过。我知到面包店里的每个人都为我难过但我也不要这个。

\n
\n

这段真的绷不住。

\n

人生意义

\n
\n

我来到这个世上,无非是想要明白些道理,遇见些有趣的事。倘能如我愿,我的一生就算成功。—— 王小波

\n
\n

日记再次出现错别字,命运残忍地剥夺他所珍惜的光明生活和美好记忆。

\n

虽然查理的结局并不那么美好,崩塌的过程充满痛苦、挣扎和绝望,但他绝不后悔进行了智力提升手术,他学会了爱与被爱,与过去的自己和解,更好地认识了自己,体会到了生活的酸甜苦辣,明白了很多道理,即使这些最终都将消失。就像我们的人生充满意义,即使我们也总有一天会死亡会归于尘土。

\n
\n

找到我完整存在的意义,除了要掌握过去,也得知道未来的可能发展,不仅要知道自己来自何方,也得知道会去哪里。虽然我们知道,在迷宫尽头等着我们的是死亡。我现在认为,我在迷宫中选择的道路造就了现在的我。我不只是一件事物,也是种存在方式,众多方式的一种,了解自己选择的道路,以及那些我没踏上的道路,都能够协助我了解自己的转变。

\n
\n
\n

纪尼安小姐如果你有机会读到这个请不要为我难过。我很感机我就像你说的得到生命中的弟二次机会。因为我学到很多我以前甚至不知到这世界上真的存在的事情。我很高兴能够看到这些即使只是很短的时间。我很高兴我发现了所有关于我的家人和我的事。好像在我想起他们并且看过他们之前我并没有家人似的但现在我知到我有家人而且我和大家一样也是一个人。

\n
\n

虽然死亡无法避免,但我们可以在阿尔吉侬坟前放上一束花束,证明我们曾经有意义地来过成长过。

\n

💐

","url":"http://localhost:2222/api/redirection?characterId=10¬eId=53","image":"https://ipfs.4everland.xyz/ipfs/bafybeif2fp6xiwdkevvm5item7ngurdyg55xldkogdw4yj7yqqamazcbpm","date_published":"2022-10-09T05:19:35.000Z","tags":["post","分享境"],"author":{"name":"DIYgod","url":"http://localhost:2222/api/redirection?characterId=10","handle":"diygod"}},{"id":"49120-1932","title":"廿五:自我逃避","summary":"就像在年底各大软件推出年度报告一样,年度总结之所以特殊,是因为在经历过漫长的一年后,人们总会想回忆下过去一年发生了什么,有哪些值得留恋的记忆。 今年真的是很特殊的一年,我的精神图腾破灭。\n\n今年于我人生经历中最灰暗的一年,低迷状态在这一年中反复无常。\n\n神圣时间线\n\n年初回到了阔别多年…","content_html":"

就像在年底各大软件推出年度报告一样,年度总结之所以特殊,是因为在经历过漫长的一年后,人们总会想回忆下过去一年发生了什么,有哪些值得留恋的记忆。

\n

今年真的是很特殊的一年,我的精神图腾破灭。

\n

今年于我人生经历中最灰暗的一年,低迷状态在这一年中反复无常。

\n

神圣时间线

\n

年初回到了阔别多年的老家,自学生时代始,在老家过年的时间屈指可数,对家乡的印象也仅剩附近的几处房落。

\n

整个春节差强人意,也第一次体验了相亲,不得不说,很无聊。我不需要婚姻来证明自己存在的意义,这个我们后面再聊。

\n

春节期间,酒桌文化竟如此盛行,每一次都有亲戚起哄让我喝酒的,我不得不一次次拒绝(◍・﹏・),对酒精敬而远之。

\n

三四月,沉迷于 ChatGPT 的消遣,玩了各种类型的 AI 产品。虽然 ChatGPT 不着调,但拿来做些脏活累活还是可以的,目前我已经离不开它了。

\n

也是这个时候,我的状态出现了一些问题,整个人变得消极,对任何事物突然失去了兴趣,带来最明显的变化就是失眠,每天睡眠的时长只有四五小时,作息颠三倒四,我能活到现在也是年轻人身体好。

\n

由于睡眠的不稳定,身体很快展开了报复:第一个赶到战场的就是耳鸣,日夜环绕,左耳听力基本丧失,只能感觉到外界嗡嗡声。

\n

随着失眠的状态持续,头发开始疯狂掉🦲,面对着每日醒来满枕头的秀发,我最终还是忍痛剪掉了留了 8 个月的头发。

\n

好在随着无畏契约的开服,借此全身心的沉浸游戏世界,终于在 11 月底一朝顿悟,消除了负面状态。

\n

遗憾的是,我的大脑似乎出现了不可逆转的损伤,我丢失了一些记忆。

\n

生活习惯

\n

今年的睡眠一直不太好,每天早上都买杯瑞幸充当安慰剂,好在白天脑子还挺清醒。

\n

\"coffee-2023\"

\n

由于睡眠不好,我一直避免剧烈运动,6 月时,精神状态有所好转,试着挑战了下了 30 天连续跑步,十三天后因小腿承受不住这么高的强度而告终,自此,今年再也没跑过步,抱歉。

\n

\"huawei-health-2023\"

\n

烟酒可能早已成为了很多人的必需品,我今年再也没碰过。抽烟就不说了,害人害己。

\n

今年春节因某人发酒疯而划上一个不完美的句号后,我也再没碰过任何酒精饮料。我不希望在非清醒时放纵自己,伤害他人。人之所以为人,是因为人拥有自己的人性,能克制自己的兽性。我有自己的底线,烟酒这辈子也不会碰。酒百害而无一利,睡前饮酒会严重影响深度睡眠导致睡眠碎片化,所以不要拿睡前小酌睡得香来安慰自己了。

\n

开源

\n

今年总算是跨出了零的突破,为了满足业务需求,所以给常用的前端 UI 组件库贡献了一丁点儿代码。实际的开源贡献并没有我想象的那么困难,可惜的是今年真没空,还有一堆想做的尚未实现。

\n

随着年初 ChatGPT 的火爆,开源社区的活跃程度达到了前所未有的高度,所以我经常在 GitHub 上面逛寻找一些有趣的项目,顺带去浏览一些 UI 组件库的 Issues。 通过研究他们的讨论和修复 Pull Request,学习他们的代码,逐渐学到了一些宝贵的经验。同时,我也发现自己遇到了一些依赖库的 BUG,由于水平太菜只好等大手子修复🥹,然后顺带学习下人家怎么修的,查漏补缺下。就这么偷偷看别人修 BUG,慢慢地也对项目熟络了。

\n

由于我的技术栈,我会使用一些由企业维护的项目,时不时关注相关问题的处理情况。然而,这些项目并没有真正的社区氛围,只是冷冰冰的 Issue 和 PR,有时还会有一些用户在 Issue 中发泄不满,充满戾气地叫嚣:“你们这是什么项目啊,我被你们坑惨了,你们害人不浅哪!”( 🐶)

\n

所以我一直没能体会到开源社区、氛围这类很虚幻的东西,直到某天看到 Vue 新版本的消息。出于对某个功能的好奇,我点进了它的 Pull Request,映入眼帘的是一长串的文本介绍,罗列了功能的目的、使用样例等,底下还有一大堆的跟帖讨论各种使用场景下的优缺点,以及一些变动的单独讨论帖。由于水平有限,有时我从社区讨论中才能理解一些新功能,感谢社区🥹!

\n

项目维护者和社区双方充分地交换了意见,进行友好坦率地交流,增进彼此的了解,就此次变动表达了积极的态度(🐶

\n

不清楚其他社区是否也有这样的氛围,但 Vue 的项目维护者能够为功能变动投入大量的额外工作,编写技术说明,完善文档,这种开放透明的开源投入对开发者来说无疑是一大福音。毕竟,大多数写代码的人都觉得写文档非常烦人,更不用说浅显易懂的文档需要付出多少心血。

\n

这样的社区或许才会让 Vue 不断壮大!

\n

婚姻

\n

郑重声明!相比于去年,我让步了,我可以结冥婚,自然,我不是活着的那个。

\n

众所周知,中国家长在孩子毕业后就开始催婚了,我也不例外。

\n

过年时刚到家,就给我整了一出,吃完饭就带着我去找媒婆。出于好奇,我也想看看家里安排的相亲是怎样的流程。结果还是见面尬聊,无趣!而且总是碍于情面不好意思拒绝,不聊吧人家说你看不起别人(WTF😅),聊吧浪费时间。可恶啊,我的 7 天年休假!

\n

年后还有一出,可惜的是那时心态出现了问题,人更加封闭了,由于不善拒绝,浪费彼此的时间,很抱歉给对方造成的困扰。

\n

甲之,蜜糖,乙之砒霜。最近有个同学结婚了,这是我能从残存记忆中仍能辨析模样的人之一了有相识之人踏上了人生又一旅途,很高兴,也很羡慕。

\n

婚姻甚至恋爱于我而言都是种压力和束缚。其实恋爱没啥束缚可言,毕竟法律可对恋爱关系中发生的纠纷没有任何保障,两人不欢而散谁也不欠谁,至于这场悲欢离合中浪费的时间精力,可没有任何补偿;婚姻才是,强势的一方总得给弱势的一方一些金钱安慰。只不过对于我来说,恋爱需要时间,如果一段感情走不到最后,不都是浪费时间嘛,有这时间我不如学学声乐课,找个健身教练,把我的游戏上一个段位,在家里躺着看游戏、足球直播多好。

\n

人总是习惯于旧有的规则秩序,一旦打破就会无所适从。失恋无非是一时难以接受旧习惯的破坏,然新秩序尚未建立成型,于是沉溺于对于过去情感投入的怀恋,高看自己的付出,你说你那是喜欢嘛,只不过是占有欲在作怪,像丢失了玩具的孩童。为什么感觉这么像戒毒呢?哈哈。降低自己对于感情的期待吧,努力做好自己该做的。

\n

对于婚姻,它应当是出自纯粹爱恋,想要的执子之手与子偕老的誓言。很遗憾,我是自私的,我做不到这一步,我很难理解牺牲自我而成就他人的那种崇高精神。 我不相信任何人,也不理解为什么要把时间精力浪费在茫茫大众中寻找一个值得共度余生的人,没必要。我还有很多人生清单要完成,很多游戏要玩,我瓦还没上钻石呢!如今的现实虚拟有太多能够填补空缺的乐子,何必要浪费在一个未知的人身上,无趣。坏了,我成二次元了!

\n\"bili-2023\"\n

提到婚姻,难免不得不提到生育。人类女性是很可悲的,在当今的社会中,不少仍旧是充当着生育机器。我相信,有很多女性是不愿生育的,只不过受到丈夫、父母的指责等社会因素而选择生育。与此同时,不同于男性的生育能力,女性十月怀胎的特殊性,对其在职场上的晋升无斥于一个巨大的打击。于此同时,女性的孕育,对身体健康亦是一种巨大的摧残,因分娩孩童而丧命的数不胜数。因此,女性作为弱势的一方,理应受到优待,夫妻的生育应取决于女性的个人意愿,如果身为男性您觉得有所不公,那您结婚到底是为了您那宝贝儿子,还是出于爱情或陪伴的长情呢?

\n

提及孩子,我很难赞同现有的社会价值观,我还是很赞同早婚早育的。年龄越大,选择也越少。

\n

以上是我对未来粗浅的理解,我自认为对自己有太多道德约束,而从现如今的生活看来,我很难成为我想要成为的人,所以考虑到日后的生活琐事,还是不要给自己添麻烦的好,我很自私的。

\n

还是希望情侣夫妻们能一直走到最后,不为外物所惑,因为我喜欢长长美美的爱情故事,祝好。

\n

裁剪

\n

我对自己的期望就是活到 30 岁就算成功,那时我仍有强健的体魄,充沛的精力和童稚般的好奇心,在这个时刻死去无疑是最好的恩赐了。至于之后的世界,每一天都是上天赏脸。

\n

有了今年的经历,我的明年不再列有计划,好好睡觉吧!

\n
\n

永远不要只满足于世界的表象,要敢于探寻未知的可能。

\n
\n

明年见!

","url":"http://localhost:2222/api/redirection?characterId=49120¬eId=1932","image":"ipfs://QmP4yEBctqpZYyHXeGTCWNUeGP7t2c8kkCcbhZRTqP3XH6","date_published":"2023-12-28T15:25:35.000Z","tags":["post","年度总结"],"author":{"name":"loongphy","url":"http://localhost:2222/api/redirection?characterId=49120","handle":"loongphy"}},{"id":"51408-6","title":"开始使用Google One VPN","summary":"前阵子看到有网友分享,标题是 “大陆可以直连的 VPN”,一下子勾起了我的兴趣。 并且在土区加持下,2TB 的 Google One 订阅差不多仅需RMB12.59¥,并且可以与其他5位家庭成员共享,人均价格低至RMB2.1¥,这实在是一个月一瓶水,约等于没花钱。\n\nGoog…","content_html":"

前阵子看到有网友分享,标题是 “大陆可以直连的 VPN”,一下子勾起了我的兴趣。

\n

并且在土区加持下,2TB 的 Google One 订阅差不多仅需RMB12.59¥,并且可以与其他5位家庭成员共享,人均价格低至RMB2.1¥,这实在是一个月一瓶水,约等于没花钱

\n

\"IMG_6C5B62F97014-1.jpeg\"

\n

\"iShot_2023-02-04_22.26.56.png\"

\n

先说有啥用

\n

Google One 应该是原来云端硬盘的升级版,空间可以给 Gmail,相册使用,然后附带了一些福利,更好的客户支持;跟 Apple One 还是不太一样。

\n

\"iShot_2023-02-04_22.30.03.png\"

\n

增长空间

\n

故名思义,买存储空间,不过这里得提一嘴谷歌的空间策略,共享出来的空间得等用户用完他本身已有的空间才会占用共享的空间。

\n

比如谷歌赠送了用户 15GB 的免费空间,则用户用完 15GB 才会占用共享的存储空间,也就是说买了 2TB 并且家庭满员的话,理论总空间是2138GB。(这里我不用说也应该知道要点名谁)

\n
\n

这是各家庭成员用完自己 Google 帐号的 15 GB 存储空间后对家庭存储空间的使用情况
\n--- 存储空间页面的描述

\n
\n

因为我主力还是使用 Apple 设备,需求不是很大,并且不像 Onedrive 能够免翻访问,这个其实对我没啥用。

\n

更好的服务支持

\n

因为想尝试通过客服看能不能催催 Google One VPN for Linux 的开发,然后试试看有没有提供不连接到 443 端口(下文会提到)的方法,找了一个客服,感受就是很拖沓

\n

第一次是电话聊天,接电话的是一个台湾妹,一开始声音虚的很... 后面能听清,在聊天的过程中有各种与你确认身份的对话,最后就让我完成:退出重新登录,重新下载,重启,这三件套(不过我都没做,我心里知道是啥原因)

\n

第二次是在线聊天,找了英文帮助,我一上来就说我在使用 Ubuntu 系统,他一直要我尝试下载,甚至最后还发给我一个.msi文件,我恼火回了一句I AM USING LINUX NOT WINDOWS,他回我一句目前不支持Linux平台呢

\n

这个服务支持对我来说纯粹浪费时间。

\n

额外福利

\n

\"iShot_2023-02-04_22.40.21.png\"

\n

感觉都是些不疼不痒的东西,不过这个 “VPN” 可真有话好好讲讲。

\n

VPN

\n

这个 VPN 的前身是Google Fi VPN,就使用体验来看,有如下好处:

\n\n

如何连上 VPN

\n

根据这段时间的测试,Google One VPN 大概是这么一个情况:

\n

\"iShot_2023-02-04_22.57.44.png\"

\n

首先,连接到 VPN 时,会先检查你的地区,但是这个地区它不靠定位,也不靠手机地区,就是只靠访问 IP

\n

检测地区的服务器相对接入点是独立的。因为这个现象的存在,让后面提到的一些实现成为可能。

\n

\"iShot_2023-02-04_23.05.55.png\"

\n

只需要在访问检测服务器时进行代理,后续连接都是可以不用伪装也不用翻墙(接入点暂时没有被墙)

\n

并且后续与接入点的连接是直连,延迟和速度都有一定程度的保障。

\n

并且在连接过程中,接入点仅校验用户标识,不会再次验证连接者的 IP。落地由接入点负责后续网络,也就是说你可以飞往全球各地都能得到不错的速度。

\n

不过很快遇到了一个问题,客户端连接到接入点用的什么协议先不谈讨,但是在安卓设备上连接接入点分配到的是2153/udp端口,而其他平台分配到的则是443/udp端口,就测试下来,目前国内运营商会阻拦443/udp的流量,虽然我没法保证用词准确,也许就是瞎丢包,但是就反馈来看:没有人通过 443/udp 连上过 VPN

\n

安卓设备可以使用Clash for magisk来配置前置代理,专门欺骗地区检测服务器,这样可以一台设备直接连上,那其他设备怎么办?

\n

用软路由进行代理

\n

因为443/udp在国内丢包,所以完全可以利用我们已有的代理来进行连接,这样作为一个落地优化来使用,获得 Google One VPN 的部分好处。

\n

这部分其实很简单,以下是我总结出来的Clash规则:

\n
rule-providers:\n  google_vpn:\n    type: http\n    behavior: ipcidr\n    url: \"规则集URL\"\n    path: ./ruleset/google_vpn.yaml\n    interval: 86400 \n\nscript:\n    shortcuts:\n      google_vpn: match_provider('google_vpn') and dst_port == 443 and network == 'udp'\n\nrules:\n\t- DOMAIN-SUFFIX,cloud.cupronickel.goog,🪜谷歌梯子\n\t- SCRIPT,google_vpn,🪜谷歌梯子\n
\n

规则集

\n
payload:\n  - '136.22.64.0/24'\n  - '136.22.65.0/24'\n  - '136.22.67.0/24'\n  - '136.22.76.0/24'\n  - '136.22.83.0/24'\n  - '136.22.85.0/24'\n  - '136.22.86.0/24'\n  - '136.22.87.0/24'\n  - '136.22.92.0/24'\n  - '136.22.93.0/24'\n  - '136.22.94.0/24'\n  - '136.22.95.0/24'\n  - '136.22.96.0/24'\n  - '136.22.97.0/24'\n  - '136.22.98.0/24'\n  - '136.22.99.0/24'\n  - '136.22.100.0/24'\n  - '136.22.101.0/24'\n  - '136.22.102.0/24'\n  - '136.22.103.0/24'\n  - '136.22.104.0/24'\n  - '136.22.105.0/24'\n  - '136.22.106.0/24'\n  - '136.22.107.0/24'\n  - '136.22.108.0/24'\n  - '136.22.109.0/24'\n  - '136.22.110.0/24'\n
\n

地址来自于AS36492,可以访问这里来查看。我目前只遇到了136.22.0.0/16的地址,偷懒可以直接这么写(滑稽)

\n

不过也许你会发现,可能你自己的节点并不能完成 Google One VPN 的连接,或者是只有部分节点才行,所以这是连接 Google One VPN 的第二个问题:连接到接入点的IP有要求

\n

经过测试,接入点会拒绝一些机房 IP 连接,但是这个问题很好解决,并且能够让整理连接变得更优雅

\n

比如这里用 Azure 美国直连,会一直卡在正在连接。
\n\"95be16c2-5792-4fe3-8457-a12173f3c877.png\"

\n

解决方法就是:将连接到接入点的代理单独分流出去,分到能连上,并且速度快的节点上去。

\n

这样就有一个技巧,可以在网上找各种免费的代理,不管代理多快多好,只需要能骗过地区检测服务器,这样就可以全球乱跳。

\n

那我想在外面用怎么办?

\n

不是哪里都有一个能翻墙的软路由,在外面用流量怎么办?或者说我无法ROOT 设备怎么办?

\n

V2ex 的网友@a342191555的解决方案是:

\n
只有一台未 root 的安卓也可以搞,大概流程如下:\n\n1.clash 挂一个支持的国家,例如美国,日本,台湾等。只用代理模式,不要用全局模式。如果有必要的话,覆写监听的 http 端口(假设为监听的 http 端口为 8888)\n\n2.关闭 wifi ,在数据卡的设置里,设置一个新的 APN ,miui 允许自由设置,其它系统自行寻找,把 APN 的代理服务器里面设置为 127.0.0.1,8888\n\n3.直接用 Google one VPN 连接成功,成功后打开 wifi 和关闭 clash 均能保持连接状态\n\n4.如果关闭了 clash ,APN 的设置将会使下次 Google one 将无法再在数据流量模式下连接\n\n如果第 3 步无法连接,排查思路:\n\n1.提示不在特定的国家或地区:APN 设置是否生效?可以访问任意网站检查代理是否继续工作\n\n2.一直卡在正在连接:IP 比较黑,换一个试试\n
\n

ta 也提供了 iPhone 上的思路,但是失败了。

\n

使用 Windows 搭建服务器

\n
\n

这里我使用 Trojan-go 进行搭建,你可以根据自身需要自行选择服务端。

\n
\n

首先在服务器上连上 Google One VPN

\n

\"iShot_2023-02-07_13.29.50.png\"
\n如果一直连不上,那可能是你 IP 脸黑,换 IP 是一个不错的解决方案。

\n

下载并配置 Trojan-go

\n

因为在 Windows 上没有一键脚本或者面板之类的给你用,所以你需要对照官方文档来编辑自己的配置: https://p4gefau1t.github.io/trojan-go/basic/config/

\n

然后开启 Google One VPN 会路由系统所有的流量,所以直接保持默认的路由即可。

\n

本地连接测试

\n

将节点加入原本的 Clash 配置,即可实现远程使用 Google One VPN!

\n

\"iShot_2023-02-07_15.13.09.png\"

\n

速度还行,我看有其他网友跑到 200 多 Mbps,因为我套了一层 CDN 速度增长趋势及速度可能有所影响不过这个速度拿来看视频完全没问题了!

\n

\"iShot_2023-02-07_15.15.59.png\"

\n

再也不用等半天 Warp 疯狂刷 ip 看奈飞了!

\n

失败的几种情况

\n

UDP 转发

\n

我想既然是443/udp不让用,那我转发到2153/udp不就好了吗?

\n

\"iShot_2023-02-04_23.38.12.png\"
\n这里是我测试能不能 udp 转发的结果,虽然能实现转发,但是 Google One VPN 客户端就是不让你连。

\n

我通过劫持 DNS 解析来进行操作,经过一些测试,我得出了一个结论:Google One VPN 客户端可能内置维护了 IP 范围,获取到的 IP 不在范围内会拒绝连接。

\n

在 Mac 上 Clash 开透明代理连接

\n

失败,原因不明。

\n

抓包看能不能换掉 443 端口

\n

失败,传输内容加密了(已解密 Https 流量)

\n

反编译找端口配置

\n

失败,找不到(那只能猜配置是远端请求)

\n

Wine

\n

无法安装

\n

以上就是这段时间以来 Google One VPN 的使用大概记录,连接复杂性放一边不谈,本身是个很不错的服务,不限流量,能拿来看奈飞,延迟也很满意。

\n

并且由于走了系统 VPN,意味着你连上之后切换流量 / Wifi 都还是可以与接入点保持连接(暂时仅限安卓)

\n

一些奇思妙想

\n

有几种想法,但是废了老大劲才上这个逼网实在是太麻烦了,有兴趣的朋友可以试试:

\n\n

期待客户端的更新吧,提供 Linux 客户端,最好能像Warp cli一样,这样 Google One VPN 的 IP很快就会被大家骑烂啦就能当做我们节点的优质落地,获得更好的上网体验。

\n

毕竟使用成本可以降至 **RMB3¥** 左右一个月,连接时用免费节点就行。

","url":"http://localhost:2222/api/redirection?characterId=51408¬eId=6","image":"https://ipfs.4everland.xyz/ipfs/bafkreigv3kuau7fl6uxjqkoiziuwwrilnkimdue33guxxxsi322sbkrkdu","date_published":"2023-03-21T06:31:43.000Z","tags":["post","教程"],"author":{"name":"时光","url":"http://localhost:2222/api/redirection?characterId=51408","handle":"outtime"}},{"id":"30-25","title":"五分钟拥有一个区块链和 IPFS 上的去中心化博客","summary":"太长不看版: 快使用 xlog.app","content_html":"
\n

Read the English edition.

\n
\n

零、前言

\n

2023 年了,你还在写博客嘛?你的博客内容载体,是像 medium、微信公众号这种封闭的第三方平台,还是自建的在 GitHub 上开源的博客框架?

\n

今天,我想提名一个我心目中最酷炫、最象征自由、最未来、最充满无尽可能的博客解决方案 ——xLog

\n

\"xlog-diygod-home-page\"

\n

(图为 DIYgod 的 xLog。)

\n

它是基于 Crossbell 区块链的一个应用产品。底层技术框架是以太坊(Ethereum)、星际文件系统(IPFS)、专为社交内容创作打造的智能合约(Smart Contract)等。

\n

你或许想说,区块链IPFSWeb3,这些词汇听起来离我们普通用户很遥远,甚至经常与虚无缥缈的骗子「币圈」画等号。但实际上,在这个领域,投机者只是喧嚣的那一部分,我们应该看到有更多真正为「Web3 理想」而奋斗的人们和他们在做的事情。而作为完全开源并且专注于 Web3 数据由用户掌控的社交生态产品,Crossbell 区块链和 xLog 就是其中的一员。

\n

目前这个生态刚刚推出,网络上的介绍内容还不够多。你可以阅读这些文章了解它们:

\n\n

简单来说,你的信息存于区块链上(意味着安全和永久);你的隐私受到保护;链的生态又让社交交互变得充满无尽可能。

\n

但吹得再猛,不如实际体验。哪怕读者从没接触过 Web3,这篇文章也愿意带着你从无到有体验 xLog 的魅力,同时也作为你的 Web3 第一课。

\n

(利益相关声明:我是 Crossbell 和 xLog 开发和维护团队的一员。我们所有作品都开源在 GitHub。)

\n

一、准备一个钱包(Wallet)

\n

钱包是你在 Web3 的身份凭证。不要被「钱」字吓跑 —— 它代表你的「资产」,而 Web3 的资产不仅仅指「金钱」,更多的是指「数据」。我们相信数据是无价的,需要一个钱包来妥善保管。所以不用担心,xLog 所在的 Crossbell 是完全免费,并且是专注「数据资产」的区块链项目

\n

如何保管钱包?有很多软件可以。网上也充斥着教程。这篇文章不是一个入门大全,所以我就十分主观地推荐一个使用人数最多的钱包 ——Metamask

\n

Metamask 有浏览器插件,也有手机软件。我们去它的官网下载并安装一个浏览器插件就好了。

\n

\"xlog-metamask\"

\n

下载安装好这个钱包管理软件后,请跟随软件指引,创建你的第一个钱包。我在此就不赘述过程了,如果你在此过程中迷糊了,那一定是他们软件的问题……

\n

二、打开 xLog

\n

https://xlog.app/

\n

打开 xLog 网站。点击 Connect 连接钱包。

\n

\"xlog-connect\"

\n

三、领取 $CSB

\n

登录后,你会在网页右上角发现「余额不足」的提示。

\n

\"xlog-insufficient-balance\"

\n

正如在现实中活动需要金钱,在区块链上进行活动(交易)需要手续费。Crossbell 区块链的手续费是 $CSB。你可能想问,为什么 Web2 网站不需要费用来活动?答案是你的「数据隐私」在不经意间已经被作为替代费用交易了。

\n

一个好消息是 $CSB 目前是可以免费领取一小笔的。点击后我们跳转到了 Faucet(水龙头)页面。你可以把水龙头理解为「一个救济余额不足用户的基金会」。目前该水龙头会给每个新人用户赠送 0.02 $CSB,花光后可以再领。

\n

我们跟随页面上的指引,输入地址,(可能需要发送推文来验证),领取 $CSB。

\n

\"xlog-claim-faucet\"

\n

恭喜 0.02 CSB 已到账!

\n

四、创建站点

\n

我们回到 xlog,点击 dashboard。

\n

\"xlog-enter-dashboard\"

\n

接下来,会跳转页面,让我们创建一个新站点。

\n

\"xlog-create-a-new-site\"

\n

(注意 subdomain 不能重名。)

\n

点击创建按钮(Create),再等待数秒后,Metamask 浏览器插件会弹出一个交易框要求确认。是的,每一笔链上活动都是以「交易」形式存在,需要花费一小笔我们刚刚领取的 $CSB 作为手续费。如图所示,本次交易将会花费 0.000332 CSB。

\n

\"xlog-confirm-create-new-site\"

\n

我们点击确认按钮(Confirm)吧。

\n

大概等待数秒后,页面会跳转到 dashboard 页。我们点击 Create a Post 就可以编写第一篇博文了。

\n

\"xlog-dashboard\"

\n

编写完文章后,点击 Publish 按钮即可发布。接着,Metamask 又会弹窗要求付一笔手续费,完成这笔交易。

\n

\"xlog-publish\"

\n

点击确认,我们的文章就发布成功了。恭喜,你在区块链上发布了一篇博文

\n

在每篇文章的页尾,你可以看到该文章的交易 hashIPFS 链接等 Web3 信息。简直太酷了。

\n

\"xlog-article-web3-info\"

\n

五、其他功能:浏览、交互文章、关注作者……

\n

打开你的站点看看吧!我的站点域名是:song.xlog.app。(你还可以在设置页面绑定自定义域名。)

\n

浏览他人文章时,你可以在每篇文章下给作者点赞mint(把文章铸造成 NFT)、评论

\n

\"xlog-interaction\"

\n

甚至可以关注作者

\n

\"xlog-follow\"

\n

关注后,你可以在 crossbell.io 上浏览订阅的 feed。(未来将支持通知系统、RSS 订阅等。)

\n

六、随时走 - 数据由自己掌控

\n

很多「伪」去中心化应用仍然牢牢把控着你的数据,但在 Crossbell 生态里,你的数据真正掌握在你手中

\n

在设置页面,点击 Export data 栏,你可以一键导出所有用户数据,当然包括你的博文,甚至可以是以 Markdown 格式保存良好的。

\n

\"xlog-export-data\"

\n

七、结语

\n

恭喜你在区块链上安家落户了。期待你的创作。

\n

欢迎同时加入 Crossbell 社区和我们一起讨论交流!

\n","url":"http://localhost:2222/api/redirection?characterId=30¬eId=25","image":"https://ipfs.4everland.xyz/ipfs/bafybeiflclumai672uvyy7dp4qkmzoxl4lj7fbhaiun4kgihxzyad3cksm","date_published":"2022-10-14T15:53:57.000Z","tags":["post"],"author":{"name":"Songkeys","url":"http://localhost:2222/api/redirection?characterId=30","handle":"song"}}]}